diff --git a/go.mod b/go.mod index 09db96e7..cb1660f7 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/ukeeper/ukeeper-readability -go 1.25.0 +go 1.26.0 require ( github.com/PuerkitoBio/goquery v1.13.0 - github.com/go-pkgz/lgr v0.12.4 + github.com/go-pkgz/lgr v0.13.0 github.com/go-pkgz/rest v1.24.0 github.com/go-pkgz/routegroup v1.6.1 github.com/go-pkgz/testutils v0.6.0 @@ -12,9 +12,9 @@ require ( github.com/kennygrant/sanitize v1.2.4 github.com/mauidude/go-readability v0.0.0-20220221173116-a9b3620098b7 github.com/sashabaranov/go-openai v1.43.0 - github.com/stretchr/testify v1.12.0 - go.mongodb.org/mongo-driver/v2 v2.8.2 - golang.org/x/net v0.58.0 + github.com/stretchr/testify v1.12.1 + go.mongodb.org/mongo-driver/v2 v2.9.2 + golang.org/x/net v0.61.0 ) require ( @@ -60,7 +60,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/jlaffaye/ftp v0.2.0 // indirect - github.com/klauspost/compress v1.18.7 // indirect + github.com/klauspost/compress v1.19.2 // indirect github.com/kr/fs v0.1.0 // indirect github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e // indirect github.com/magiconair/properties v1.8.10 // indirect @@ -94,9 +94,9 @@ require ( go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - golang.org/x/crypto v0.55.0 // indirect - golang.org/x/sync v0.22.0 // indirect - golang.org/x/sys v0.47.0 // indirect - golang.org/x/text v0.41.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect + go.yaml.in/yaml/v3 v3.0.5 // indirect + golang.org/x/crypto v0.58.0 // indirect + golang.org/x/sync v0.24.0 // indirect + golang.org/x/sys v0.49.0 // indirect + golang.org/x/text v0.43.0 // indirect ) diff --git a/go.sum b/go.sum index d0f7474e..6157096b 100644 --- a/go.sum +++ b/go.sum @@ -130,8 +130,8 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-pkgz/lgr v0.12.4 h1:lDeQ4BR28ldXrKau6BOjq7A8nHzcXz+MF4xUfV4l1Ok= -github.com/go-pkgz/lgr v0.12.4/go.mod h1:Lw6DkNRnCPyX07mqkiUK/p+eA1opq4GKkWfWia64RA8= +github.com/go-pkgz/lgr v0.13.0 h1:u/MrY56fl8OFpd+7vobrK5OLtiE9ijzL3O1zZOWLJJI= +github.com/go-pkgz/lgr v0.13.0/go.mod h1:Lw6DkNRnCPyX07mqkiUK/p+eA1opq4GKkWfWia64RA8= github.com/go-pkgz/rest v1.24.0 h1:GAUCgx7U8xCOC2OynLjhCRMhtnMQH4d1mTdKpQyX2yI= github.com/go-pkgz/rest v1.24.0/go.mod h1:dl3EWiuFB4hRTo2Sknj6UrQGFRAYvANK6/NyW8qQPxc= github.com/go-pkgz/routegroup v1.6.1 h1:6I/0LabazpZsHAI+jYPeyH/KU2cvZF0bFylUScMNi+Q= @@ -210,19 +210,15 @@ github.com/kennygrant/sanitize v1.2.4 h1:gN25/otpP5vAsO2djbMhF/LQX6R7+O1TB4yv8Nz github.com/kennygrant/sanitize v1.2.4/go.mod h1:LGsjYYtgxbetdg5owWB2mpgUL6e2nfw2eObZ0u0qvak= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.18.7 h1:aUyZsS4kH3QTKurYhAOwAHxllVPnOthb3vPfnF1Ehjw= -github.com/klauspost/compress v1.18.7/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8= +github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= 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/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lufia/plan9stats v0.0.0-20260330125221-c963978e514e h1:Q6MvJtQK/iRcRtzAscm/zF23XxJlbECiGPyRicsX+Ak= @@ -293,8 +289,6 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sashabaranov/go-openai v1.43.0 h1:HNRpO8TAQ01ssO7aPXO/68QRlcCCYQQ5GfHbFceRZcY= @@ -323,8 +317,8 @@ github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.12.0 h1:K6Mr6jO9JICuend/5xzTM03ydSV3vdNRYAdPSukj8uI= -github.com/stretchr/testify v1.12.0/go.mod h1:bOYBZb5qJ00vPzWfIqBUZPaxK8jWiXc6d3ErP4Ca9Gw= +github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= +github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/testcontainers/testcontainers-go v0.42.0 h1:He3IhTzTZOygSXLJPMX7n44XtK+qhjat1nI9cneBbUY= github.com/testcontainers/testcontainers-go v0.42.0/go.mod h1:vZjdY1YmUA1qEForxOIOazfsrdyORJAbhi0bp8plN30= @@ -348,8 +342,8 @@ github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQ go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mongodb.org/mongo-driver v1.17.9 h1:IexDdCuuNJ3BHrELgBlyaH9p60JXAvdzWR128q+U5tU= go.mongodb.org/mongo-driver v1.17.9/go.mod h1:LlOhpH5NUEfhxcAwG0UEkMqwYcc4JU18gtCdGudk/tQ= -go.mongodb.org/mongo-driver/v2 v2.8.2 h1:b6o2m7zL8g2URuO8urBedAylxojybKXNZTxgkOcl+2w= -go.mongodb.org/mongo-driver/v2 v2.8.2/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= +go.mongodb.org/mongo-driver/v2 v2.9.2 h1:OCAdjI37pC/SVxucz/9CM8zD4jCdegtsY5QcKzYFCgE= +go.mongodb.org/mongo-driver/v2 v2.9.2/go.mod h1:SHKN0IWkKmEVGHLjXnni6s4wPKX4v86FTgOeJJFuXcA= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= @@ -369,6 +363,8 @@ go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLh go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= +go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -376,8 +372,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M= -golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis= +golang.org/x/crypto v0.58.0 h1:COkYLr4k7nDI4r6QtMML2AfzeIswWHAJthLS6K/M/54= +golang.org/x/crypto v0.58.0/go.mod h1:Xh+kl5A+M0gMiWDytH2Hhr5Z7WbNCpv/eB/EFgfSk+w= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -416,8 +412,8 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To= -golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU= +golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= +golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -427,8 +423,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= -golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.24.0 h1:iqiDrGoDgyuvAKrhLQthUEzU/R378N78gXbBjxed7oA= +golang.org/x/sync v0.24.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -451,20 +447,20 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= +golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= 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/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= -golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= +golang.org/x/term v0.47.0 h1:cpyOwQkr2Nzxe2p6KnrTG7Ei2wtzjsuSjhpXXepZ/BM= +golang.org/x/term v0.47.0/go.mod h1:efAfAuG6RKABvg1ArGebRkvX6LXul14SM67o2e4mUCY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= -golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= +golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc= +golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -511,8 +507,6 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -520,8 +514,6 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/go-pkgz/lgr/README.md b/vendor/github.com/go-pkgz/lgr/README.md index 87494b8e..e637c449 100644 --- a/vendor/github.com/go-pkgz/lgr/README.md +++ b/vendor/github.com/go-pkgz/lgr/README.md @@ -43,7 +43,7 @@ _Without `lgr.Caller*` it will drop `{caller}` part_ - `lgr.LevelBraces` - wraps levels with "[" and "]" - `lgr.Msec` - adds milliseconds to timestamp - `lgr.Format` - sets a custom template, overwrite all other formatting modifiers. -- `lgr.Secret(secret ...)` - sets list of the secrets to hide from the logging outputs. +- `lgr.Secret(secret ...)` - sets list of the secrets to hide from the logging outputs, see "secrets". - `lgr.Map(mapper)` - sets mapper functions to change elements of the logging output based on levels. - `lgr.StackTraceOnError` - turns on stack trace for ERROR level. - `lgr.SlogHandler(h slog.Handler)` - delegates logging to the provided slog handler. @@ -72,6 +72,28 @@ User can make a custom template and pass it directly to `lgr.Format`. For exampl _Note: formatter (predefined or custom) adds measurable overhead - the cost will depend on the version of Go, but is between 30 and 50% in recent tests with 1.12. You can validate this in your environment via benchmarks: `go test -bench=. -run=Bench`_ +### secrets + +`lgr.Secret(secret ...)` sets the values to replace with `******` when the logger is created. The list can be changed later, while the logger is in use and other goroutines log: + +- `l.AddSecrets(secret ...)` and `l.RemoveSecrets(secret ...)` change the list of a logger made by `lgr.New`. +- `lgr.AddSecrets(secret ...)` and `lgr.RemoveSecrets(secret ...)` change the package-level list. It is hidden by the global logger and by the std logger set with `lgr.SetupStdLogger`, in addition to the secrets each of them got with `lgr.Secret`, and it stays in effect after `lgr.Setup`, `lgr.SetupStdLogger` and `lgr.SetupWithSlog` calls. Loggers made by `lgr.New` don't use the package-level list. + +```go +lgr.Setup(lgr.Secret(dbPassword)) +lgr.SetupStdLogger(lgr.Secret(dbPassword)) +// later, for example on config reload +lgr.AddSecrets(newToken, newPassword) // hidden in both lgr.Printf and std log.Printf output +``` + +Things to know: + +- Empty and whitespace-only values are ignored. Adding a value twice is the same as adding it once, and a single remove drops it. +- The list of a logger and the package-level list are independent. A value present in both stays hidden until removed from both. +- A line being logged at the moment of the change may still be written with the previous list. +- Longer values are replaced first, so a secret containing another secret is hidden as a whole. Secrets that only partially overlap are replaced one after another, and a part of one of them may stay visible. +- Secrets are hidden in the message passed to the logger. `lgr.FromSlogHandler` adds no masking of its own, the output is masked only if the wrapped handler passes it to a masking logger. Attributes added by a slog handler set with `lgr.SlogHandler` are not processed. + ### levels `lgr.Logf` recognize prefixes like `INFO` or `[INFO]` as levels. The full list of supported levels - `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `PANIC` and `FATAL`. diff --git a/vendor/github.com/go-pkgz/lgr/adaptor.go b/vendor/github.com/go-pkgz/lgr/adaptor.go index 03e80eb9..c5b2bace 100644 --- a/vendor/github.com/go-pkgz/lgr/adaptor.go +++ b/vendor/github.com/go-pkgz/lgr/adaptor.go @@ -33,7 +33,7 @@ func ToStdLogger(l L, level string) *log.Logger { // SetupStdLogger makes the default std logger with lgr.L func SetupStdLogger(opts ...Option) { logOpts := append([]Option{CallerDepth(3)}, opts...) // skip 3 more frames to compensate stdlog calls - l := New(logOpts...) + l := newShared(logOpts...) l.reTrace = reTraceStd // std logger split on log/ path log.SetOutput(ToWriter(l, "")) log.SetPrefix("") diff --git a/vendor/github.com/go-pkgz/lgr/interface.go b/vendor/github.com/go-pkgz/lgr/interface.go index 11ecd014..a3a84889 100644 --- a/vendor/github.com/go-pkgz/lgr/interface.go +++ b/vendor/github.com/go-pkgz/lgr/interface.go @@ -4,7 +4,10 @@ import ( stdlog "log" ) -var def = New() // default logger doesn't allow DEBUG and doesn't add caller info +var def = newShared() // default logger doesn't allow DEBUG and doesn't add caller info + +// sharedSecrets are hidden by the default logger and by the logger made by SetupStdLogger +var sharedSecrets secretSet // L defines minimal interface used to log things type L interface { @@ -41,7 +44,27 @@ func Fatalf(format string, args ...interface{}) { // Setup default logger with options func Setup(opts ...Option) { - def = New(opts...) + def = newShared(opts...) +} + +// AddSecrets adds values to hide in the output of the default logger and the std logger made by +// SetupStdLogger. They stay in effect after Setup calls. Loggers made by New are not affected. +func AddSecrets(vals ...string) { + sharedSecrets.add(vals...) +} + +// RemoveSecrets stops hiding values added by AddSecrets. A value a logger got with Secret option +// stays hidden by that logger. +func RemoveSecrets(vals ...string) { + sharedSecrets.remove(vals...) +} + +// newShared makes a logger hiding the package-level secrets in addition to its own. +// The link is set here, before the logger is in use, so logging reads it without a lock. +func newShared(opts ...Option) *Logger { + l := New(opts...) + l.shared = &sharedSecrets + return l } // Default returns pre-constructed def logger (debug off, callers disabled) diff --git a/vendor/github.com/go-pkgz/lgr/logger.go b/vendor/github.com/go-pkgz/lgr/logger.go index 20ab5097..733836f6 100644 --- a/vendor/github.com/go-pkgz/lgr/logger.go +++ b/vendor/github.com/go-pkgz/lgr/logger.go @@ -46,7 +46,8 @@ const ( var secretReplacement = []byte("******") var ( - reTraceDefault = regexp.MustCompile(`.*/lgr/logger\.go.*\n`) + // match function names because source directories vary between builds + reTraceDefault = regexp.MustCompile(`(?m)^.*github\.com/go-pkgz/lgr\.\(\*Logger\)\.(?:logf|Logf)\([^\n]*\n[^\n]*\n`) reTraceStd = regexp.MustCompile(`.*/log/log\.go.*\n`) ) @@ -63,7 +64,8 @@ type Logger struct { levelBraces bool // encloses level with [], i.e. [INFO] callerDepth int // how many stack frames to skip, relative to the real (reported) frame format string // layout template - secrets [][]byte // sub-strings to secrets by matching + secrets secretSet // sub-strings to hide in this logger's output + shared *secretSet // package-level secrets hidden in addition to own ones, nil for loggers made by New mapper Mapper // map (alter) output based on levels slogHandler slog.Handler // optional slog handler to delegate logging @@ -165,9 +167,11 @@ func (l *Logger) logf(format string, args ...interface{}) { } // hide secrets in the message itself, covers slog handler and panic dump paths - // as well as the formatted line redacted later in this function - if len(l.secrets) > 0 { - msg = string(l.hideSecrets([]byte(msg))) + // as well as the formatted line redacted later in this function. + // reuse both snapshots so the message and the final line use the same secrets + own, shared := l.secrets.list(), l.shared.list() + if len(own)+len(shared) > 0 { + msg = string(own.hide([]byte(msg), shared)) } // if slog handler is set, use it @@ -222,7 +226,7 @@ func (l *Logger) logf(format string, args ...interface{}) { data = bytes.Replace(data, []byte("[WARN ]"), []byte("[WARN] "), 1) data = bytes.Replace(data, []byte("[INFO ]"), []byte("[INFO] "), 1) } - data = l.hideSecrets(data) + data = own.hide(data, shared) l.lock.Lock() _, _ = l.stdout.Write(data) @@ -258,11 +262,16 @@ func (l *Logger) logf(format string, args ...interface{}) { l.lock.Unlock() } -func (l *Logger) hideSecrets(data []byte) []byte { - for _, h := range l.secrets { - data = bytes.ReplaceAll(data, h, secretReplacement) - } - return data +// AddSecrets adds values to hide in this logger's output. Safe to call while other goroutines log. +// Empty and whitespace-only values are ignored. +func (l *Logger) AddSecrets(vals ...string) { + l.secrets.add(vals...) +} + +// RemoveSecrets stops hiding values in this logger's output, the ones set by Secret option too. +// Package-level secrets are not affected. +func (l *Logger) RemoveSecrets(vals ...string) { + l.secrets.remove(vals...) } type callerInfo struct { @@ -333,12 +342,17 @@ func (l *Logger) formatWithOptions(elems layout) (res string) { parts := make([]string, 0, 4) + dt := orElse(l.msec, + func() string { return elems.DT.Format("2006/01/02 15:04:05.000") }, + func() string { return elems.DT.Format("2006/01/02 15:04:05") }, + ) + if l.mapper.TimeFunc != nil { + dt = l.mapper.TimeFunc(dt) + } + parts = append( parts, - l.mapper.TimeFunc(orElse(l.msec, - func() string { return elems.DT.Format("2006/01/02 15:04:05.000") }, - func() string { return elems.DT.Format("2006/01/02 15:04:05") }, - )), + dt, l.levelMapper(elems.Level)(orElse(l.levelBraces, func() string { return `[` + elems.Level + `]` }, func() string { return elems.Level }, diff --git a/vendor/github.com/go-pkgz/lgr/options.go b/vendor/github.com/go-pkgz/lgr/options.go index 5225d91b..95059624 100644 --- a/vendor/github.com/go-pkgz/lgr/options.go +++ b/vendor/github.com/go-pkgz/lgr/options.go @@ -3,7 +3,6 @@ package lgr import ( "io" "log/slog" - "strings" ) // Option func type @@ -77,15 +76,11 @@ func Msec(l *Logger) { } // Secret sets list of substring to be hidden, i.e. replaced by "******" -// Useful to prevent passwords or other sensitive tokens to be logged. +// Useful to prevent passwords or other sensitive tokens to be logged. Empty values are ignored. +// Longer values are replaced first, so a secret containing another one is hidden as a whole. func Secret(vals ...string) Option { return func(l *Logger) { - for _, v := range vals { - if strings.TrimSpace(v) == "" { - continue // skip empty secrets - } - l.secrets = append(l.secrets, []byte(v)) - } + l.secrets.add(vals...) } } diff --git a/vendor/github.com/go-pkgz/lgr/secrets.go b/vendor/github.com/go-pkgz/lgr/secrets.go new file mode 100644 index 00000000..6197f7e6 --- /dev/null +++ b/vendor/github.com/go-pkgz/lgr/secrets.go @@ -0,0 +1,78 @@ +package lgr + +import ( + "bytes" + "slices" + "strings" + "sync" + "sync/atomic" +) + +// secretList is an immutable list of values to mask, sorted longest first +type secretList [][]byte + +// hide masks the values of both lists in data. Values are taken longest first across the two lists, +// so a value containing a shorter one is replaced as a whole, whichever list holds it. +func (sl secretList) hide(data []byte, other secretList) []byte { + for len(sl) > 0 || len(other) > 0 { + var v []byte + if len(other) == 0 || (len(sl) > 0 && secretOrder(sl[0], other[0]) <= 0) { + v, sl = sl[0], sl[1:] + } else { + v, other = other[0], other[1:] + } + data = bytes.ReplaceAll(data, v, secretReplacement) + } + return data +} + +// secretSet is a set of values to mask, changeable while other goroutines read it. +// Writers replace the published list and never modify it, so readers need no lock. +type secretSet struct { + lock sync.Mutex + vals atomic.Pointer[secretList] +} + +// list returns the published values, safe to call on a nil set +func (s *secretSet) list() secretList { + if s == nil { + return nil + } + if p := s.vals.Load(); p != nil { + return *p + } + return nil +} + +func (s *secretSet) add(vals ...string) { + s.lock.Lock() + defer s.lock.Unlock() + + res := slices.Clone(s.list()) + for _, v := range vals { + if strings.TrimSpace(v) == "" { + continue + } + if slices.ContainsFunc(res, func(b []byte) bool { return string(b) == v }) { + continue + } + res = append(res, []byte(v)) + } + slices.SortFunc(res, secretOrder) + s.vals.Store(&res) +} + +func (s *secretSet) remove(vals ...string) { + s.lock.Lock() + defer s.lock.Unlock() + + res := slices.DeleteFunc(slices.Clone(s.list()), func(b []byte) bool { return slices.Contains(vals, string(b)) }) + s.vals.Store(&res) +} + +func secretOrder(a, b []byte) int { + if len(a) != len(b) { + return len(b) - len(a) + } + return bytes.Compare(a, b) +} diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index fb023f2c..0e9f170d 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -27,6 +27,18 @@ Use the links above for more information on each. # changelog +* Jul 1st, 2026 [1.19.0](https://github.com/klauspost/compress/releases/tag/v1.19.0) + * zstd: Add true concurrent stream encodingin https://github.com/klauspost/compress/pull/1136 + * zstd: arm64 decoder asm by @lizthegrey in https://github.com/klauspost/compress/pull/1160 + * flate: Add inflate checkpoints in https://github.com/klauspost/compress/pull/1154 + * zstd: avoid unused BuildDict encoder allocation by @snissn in https://github.com/klauspost/compress/pull/1147 + * snappy/s2: Limit length of varint in `decodedLen` by @eustas in https://github.com/klauspost/compress/pull/1148 + * gzhttp: match qvalue parameter case-insensitively (RFC 7231) by @z9z in https://github.com/klauspost/compress/pull/1149 + * zip: add NameDecoder callback for legacy encoding rewrite by @SAY-5 in https://github.com/klauspost/compress/pull/1150 + * huff0: Allow building tables from histogram in https://github.com/klauspost/compress/pull/1155 + * huff0: Allow building table from oversized histogram in https://github.com/klauspost/compress/pull/1156 + * s2sx: Clean symlink targets in https://github.com/klauspost/compress/pull/1163 + * Feb 9th, 2026 [1.18.4](https://github.com/klauspost/compress/releases/tag/v1.18.4) * gzhttp: Add zstandard to server handler wrapper https://github.com/klauspost/compress/pull/1121 * zstd: Add ResetWithOptions to encoder/decoder https://github.com/klauspost/compress/pull/1122 diff --git a/vendor/github.com/klauspost/compress/huff0/build_table.go b/vendor/github.com/klauspost/compress/huff0/build_table.go new file mode 100644 index 00000000..e3757c87 --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/build_table.go @@ -0,0 +1,168 @@ +package huff0 + +import "errors" + +// BuildCTable builds a Huffman compression table from a precomputed symbol +// histogram and installs it as the previous (reuse) table on s. +// +// After this call: +// - EstimateSize/CanUseTable can probe the table against other histograms. +// - Compress1X/Compress4X with Reuse = ReusePolicyMust will encode without +// emitting a new table header. +// - TransferCTable can hand the table to a sibling Scratch. +// +// count[i] is the number of occurrences of symbol i. The histogram must have +// at least 2 distinct non-zero symbols; ErrUseRLE is returned for a single +// symbol and an error is returned for an empty histogram. +func (s *Scratch) BuildCTable(count *[256]uint32) error { + if s == nil { + return errors.New("huff0: BuildCTable on nil Scratch") + } + if count == nil { + return errors.New("huff0: nil count passed to BuildCTable") + } + var err error + s, err = s.prepare(nil) + if err != nil { + return err + } + s.count = *count + var total, maxCount int + var symLen uint16 + for i, v := range s.count { + total += int(v) + if int(v) > maxCount { + maxCount = int(v) + } + if v != 0 { + symLen = uint16(i) + 1 + } + } + if total == 0 { + return errors.New("huff0: empty histogram") + } + if symLen < 2 || maxCount == total { + return ErrUseRLE + } + // huff0's internal rank table assumes total ≤ BlockSizeMax (it uses + // highBit32(count+1) + 1 as a rank index into a fixed-size array). + // Histograms summed across multiple blocks can exceed that; scale the + // counts down preserving the distribution. Non-zero entries round up so + // rare symbols stay representable. + if total > BlockSizeMax { + shift := uint(0) + for total>>shift > BlockSizeMax { + shift++ + } + round := uint32(1<> shift + if scaled == 0 { + scaled = 1 + } + s.count[i] = scaled + newTotal += int(scaled) + if int(scaled) > newMax { + newMax = int(scaled) + } + } + total = newTotal + maxCount = newMax + if maxCount == total { + return ErrUseRLE + } + } + s.symbolLen = symLen + s.maxCount = maxCount + s.srcLen = total + if err := s.buildCTable(); err != nil { + return err + } + if cap(s.prevTable) < len(s.cTable) { + s.prevTable = make(cTable, 0, maxSymbolValue+1) + } + s.prevTable = s.prevTable[:len(s.cTable)] + copy(s.prevTable, s.cTable) + s.prevTableLog = s.actualTableLog + // Force the next Compress* to recount from real input. + s.clearCount = true + s.maxCount = 0 + return nil +} + +// EstimateSize returns an estimated compressed payload size in bytes for the +// supplied histogram using the table currently stored in prevTable. It returns +// -1 when the table cannot encode every non-zero symbol of hist (i.e. when +// CanUseTable would return false). The estimate excludes the table header. +func (s *Scratch) EstimateSize(hist *[256]uint32) int { + if s == nil || hist == nil || len(s.prevTable) == 0 { + return -1 + } + pt := s.prevTable + nbBits := uint32(7) + for i, v := range hist { + if v == 0 { + continue + } + if i >= len(pt) || pt[i].nBits == 0 { + return -1 + } + nbBits += uint32(pt[i].nBits) * v + } + return int(nbBits >> 3) +} + +// CanUseTable reports whether the table in prevTable can encode every +// non-zero symbol present in hist. +func (s *Scratch) CanUseTable(hist *[256]uint32) bool { + if s == nil || hist == nil || len(s.prevTable) == 0 { + return false + } + pt := s.prevTable + for i, v := range hist { + if v == 0 { + continue + } + if i >= len(pt) || pt[i].nBits == 0 { + return false + } + } + return true +} + +// AppendTable serializes the table currently stored in prevTable (e.g. as +// installed by BuildCTable or carried over from a previous Compress call) +// into a self-delimiting zstd-style header and appends it to dst. The +// returned slice can be parsed back by ReadTable. +func (s *Scratch) AppendTable(dst []byte) ([]byte, error) { + if s == nil || len(s.prevTable) == 0 { + return dst, errors.New("huff0: AppendTable with empty table") + } + // cTable.write reads s.actualTableLog, s.symbolLen, s.huffWeight, s.fse + // and writes into s.Out. Save/restore Out so we don't disturb in-flight + // compression buffers. + saveOut := s.Out + saveTL := s.actualTableLog + saveSL := s.symbolLen + if s.fse == nil { + // Lazily init in case AppendTable is called on a fresh Scratch. + if _, err := s.prepare(nil); err != nil { + return dst, err + } + saveOut = s.Out + } + s.Out = s.Out[:0] + s.actualTableLog = s.prevTableLog + s.symbolLen = uint16(len(s.prevTable)) + if err := s.prevTable.write(s); err != nil { + s.Out, s.actualTableLog, s.symbolLen = saveOut, saveTL, saveSL + return dst, err + } + dst = append(dst, s.Out...) + s.Out, s.actualTableLog, s.symbolLen = saveOut, saveTL, saveSL + return dst, nil +} diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go index 2d6ef64b..7035d656 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go @@ -1,222 +1,49 @@ //go:build amd64 && !appengine && !noasm && gc -// This file contains the specialisation of Decoder.Decompress4X -// and Decoder.Decompress1X that use an asm implementation of thir main loops. +// amd64 stubs and dispatch for the asm loops used by decompress_asm.go. package huff0 import ( - "errors" - "fmt" - "github.com/klauspost/compress/internal/cpuinfo" ) -// decompress4x_main_loop_x86 is an x86 assembler implementation +// decompress4x_main_loop_amd64 is an x86 assembler implementation // of Decompress4X when tablelog > 8. // //go:noescape func decompress4x_main_loop_amd64(ctx *decompress4xContext) -// decompress4x_8b_loop_x86 is an x86 assembler implementation +// decompress4x_8b_main_loop_amd64 is an x86 assembler implementation // of Decompress4X when tablelog <= 8 which decodes 4 entries // per loop. // //go:noescape func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext) -// fallback8BitSize is the size where using Go version is faster. -const fallback8BitSize = 800 - -type decompress4xContext struct { - pbr *[4]bitReaderShifted - peekBits uint8 - out *byte - dstEvery int - tbl *dEntrySingle - decoded int - limit *byte -} - -// Decompress4X will decompress a 4X encoded stream. -// The length of the supplied input must match the end of a block exactly. -// The *capacity* of the dst slice must match the destination size of -// the uncompressed data exactly. -func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { - if len(d.dt.single) == 0 { - return nil, errors.New("no table loaded") - } - if len(src) < 6+(4*1) { - return nil, errors.New("input too small") - } - - use8BitTables := d.actualTableLog <= 8 - if cap(dst) < fallback8BitSize && use8BitTables { - return d.decompress4X8bit(dst, src) - } - - var br [4]bitReaderShifted - // Decode "jump table" - start := 6 - for i := range 3 { - length := int(src[i*2]) | (int(src[i*2+1]) << 8) - if start+length >= len(src) { - return nil, errors.New("truncated input (or invalid offset)") - } - err := br[i].init(src[start : start+length]) - if err != nil { - return nil, err - } - start += length - } - err := br[3].init(src[start:]) - if err != nil { - return nil, err - } - - // destination, offset to match first output - dstSize := cap(dst) - dst = dst[:dstSize] - out := dst - dstEvery := (dstSize + 3) / 4 - - const tlSize = 1 << tableLogMax - const tlMask = tlSize - 1 - single := d.dt.single[:tlSize] - - var decoded int - - if len(out) > 4*4 && !(br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4) { - ctx := decompress4xContext{ - pbr: &br, - peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() - out: &out[0], - dstEvery: dstEvery, - tbl: &single[0], - limit: &out[dstEvery-4], // Always stop decoding when first buffer gets here to avoid writing OOB on last. - } - if use8BitTables { - decompress4x_8b_main_loop_amd64(&ctx) - } else { - decompress4x_main_loop_amd64(&ctx) - } - - decoded = ctx.decoded - out = out[decoded/4:] - } - - // Decode remaining. - remainBytes := dstEvery - (decoded / 4) - for i := range br { - offset := dstEvery * i - endsAt := min(offset+remainBytes, len(out)) - br := &br[i] - bitsLeft := br.remaining() - for bitsLeft > 0 { - br.fill() - if offset >= endsAt { - return nil, errors.New("corruption detected: stream overrun 4") - } - - // Read value and increment offset. - val := br.peekBitsFast(d.actualTableLog) - v := single[val&tlMask].entry - nBits := uint8(v) - br.advance(nBits) - bitsLeft -= uint(nBits) - out[offset] = uint8(v >> 8) - offset++ - } - if offset != endsAt { - return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) - } - decoded += offset - dstEvery*i - err = br.close() - if err != nil { - return nil, err - } - } - if dstSize != decoded { - return nil, errors.New("corruption detected: short output block") - } - return dst, nil -} - -// decompress4x_main_loop_x86 is an x86 assembler implementation +// decompress1x_main_loop_amd64 is an x86 assembler implementation // of Decompress1X when tablelog > 8. // //go:noescape func decompress1x_main_loop_amd64(ctx *decompress1xContext) -// decompress4x_main_loop_x86 is an x86 with BMI2 assembler implementation +// decompress1x_main_loop_bmi2 is an x86 with BMI2 assembler implementation // of Decompress1X when tablelog > 8. // //go:noescape func decompress1x_main_loop_bmi2(ctx *decompress1xContext) -type decompress1xContext struct { - pbr *bitReaderShifted - peekBits uint8 - out *byte - outCap int - tbl *dEntrySingle - decoded int +func decompress4x_main_loop_asm(ctx *decompress4xContext) { + decompress4x_main_loop_amd64(ctx) } -// Error reported by asm implementations -const error_max_decoded_size_exeeded = -1 - -// Decompress1X will decompress a 1X encoded stream. -// The cap of the output buffer will be the maximum decompressed size. -// The length of the supplied input must match the end of a block exactly. -func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) { - if len(d.dt.single) == 0 { - return nil, errors.New("no table loaded") - } - var br bitReaderShifted - err := br.init(src) - if err != nil { - return dst, err - } - maxDecodedSize := cap(dst) - dst = dst[:maxDecodedSize] - - const tlSize = 1 << tableLogMax - const tlMask = tlSize - 1 - - if maxDecodedSize >= 4 { - ctx := decompress1xContext{ - pbr: &br, - out: &dst[0], - outCap: maxDecodedSize, - peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() - tbl: &d.dt.single[0], - } - - if cpuinfo.HasBMI2() { - decompress1x_main_loop_bmi2(&ctx) - } else { - decompress1x_main_loop_amd64(&ctx) - } - if ctx.decoded == error_max_decoded_size_exeeded { - return nil, ErrMaxDecodedSizeExceeded - } - - dst = dst[:ctx.decoded] - } +func decompress4x_8b_main_loop_asm(ctx *decompress4xContext) { + decompress4x_8b_main_loop_amd64(ctx) +} - // br < 8, so uint8 is fine - bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead - for bitsLeft > 0 { - br.fill() - if len(dst) >= maxDecodedSize { - br.close() - return nil, ErrMaxDecodedSizeExceeded - } - v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask] - nBits := uint8(v.entry) - br.advance(nBits) - bitsLeft -= nBits - dst = append(dst, uint8(v.entry>>8)) +func decompress1x_main_loop_asm(ctx *decompress1xContext) { + if cpuinfo.HasBMI2() { + decompress1x_main_loop_bmi2(ctx) + } else { + decompress1x_main_loop_amd64(ctx) } - return dst, br.close() } diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s index c4c7ab2d..c5d4a710 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s @@ -1,6 +1,6 @@ -// Code generated by command: go run gen.go -out ../decompress_amd64.s -pkg=huff0. DO NOT EDIT. +// Code generated by command: go run gen.go -out ../decompress.s -arch amd64,arm64 -pkg=huff0. DO NOT EDIT. -//go:build amd64 && !appengine && !noasm && gc +//go:build !appengine && !noasm && gc // func decompress4x_main_loop_amd64(ctx *decompress4xContext) TEXT ·decompress4x_main_loop_amd64(SB), $0-8 diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go new file mode 100644 index 00000000..8ba3c810 --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.go @@ -0,0 +1,37 @@ +//go:build arm64 && !appengine && !noasm && gc + +// arm64 stubs and dispatch for the asm loops used by decompress_asm.go. +// The asm (decompress_arm64.s) is generated by the avo arm64 lowering +// printer from the same source as the amd64 asm; see _generate/gen.go. +package huff0 + +// decompress4x_main_loop_arm64 is an arm64 assembler implementation +// of Decompress4X when tablelog > 8. +// +//go:noescape +func decompress4x_main_loop_arm64(ctx *decompress4xContext) + +// decompress4x_8b_main_loop_arm64 is an arm64 assembler implementation +// of Decompress4X when tablelog <= 8 which decodes 4 entries +// per loop. +// +//go:noescape +func decompress4x_8b_main_loop_arm64(ctx *decompress4xContext) + +// decompress1x_main_loop_arm64 is an arm64 assembler implementation +// of Decompress1X when tablelog > 8. +// +//go:noescape +func decompress1x_main_loop_arm64(ctx *decompress1xContext) + +func decompress4x_main_loop_asm(ctx *decompress4xContext) { + decompress4x_main_loop_arm64(ctx) +} + +func decompress4x_8b_main_loop_asm(ctx *decompress4xContext) { + decompress4x_8b_main_loop_arm64(ctx) +} + +func decompress1x_main_loop_asm(ctx *decompress1xContext) { + decompress1x_main_loop_arm64(ctx) +} diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s new file mode 100644 index 00000000..e1601272 --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/decompress_arm64.s @@ -0,0 +1,851 @@ +// Code generated by command: go run gen.go -out ../decompress.s -arch amd64,arm64 -pkg=huff0. DO NOT EDIT. +// EXPERIMENTAL arm64 output lowered from an amd64 avo program. + +//go:build arm64 && !appengine && !noasm && gc + +// func decompress4x_main_loop_amd64(ctx *decompress4xContext) +TEXT ·decompress4x_main_loop_arm64(SB), $0-8 + // Preload values + MOVD ctx+0(FP), R0 + MOVBU 8(R0), R6 + MOVD 16(R0), R3 + MOVD 48(R0), R5 + MOVD 24(R0), R7 + MOVD 32(R0), R8 + MOVD (R0), R9 + + // Main loop +main_loop: + MOVD $0, R2 + CMP R5, R3 + CSET GE, R16 + BFI $0, R16, $8, R2 + + // br0.fillFast32() + MOVD 32(R9), R10 + MOVBU 40(R9), R11 + CMP $0x20, R11 + BLS skip_fill0 + MOVD 24(R9), R0 + SUB $0x20, R11, R11 + SUB $0x04, R0, R0 + MOVD (R9), R12 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R12, R0, R15 + MOVWU (R15), R12 + MOVD R11, R1 + LSL R1, R12, R12 + MOVD R0, 24(R9) + ORR R12, R10, R10 + + // exhausted += (br0.off < 4) + CMP $0x04, R0 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill0: + // val0 := br0.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br0.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br0.peekTopBits(peekBits) + MOVD R6, R1 + MOVD R10, R12 + LSR R1, R12, R12 + + // v1 := table[val1&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br0.advance(uint8(v1.entry)) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVH R0, (R3) + + // update the bitreader structure + MOVD R10, 32(R9) + MOVB R11, 40(R9) + + // br1.fillFast32() + MOVD 80(R9), R10 + MOVBU 88(R9), R11 + CMP $0x20, R11 + BLS skip_fill1 + MOVD 72(R9), R0 + SUB $0x20, R11, R11 + SUB $0x04, R0, R0 + MOVD 48(R9), R12 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R12, R0, R15 + MOVWU (R15), R12 + MOVD R11, R1 + LSL R1, R12, R12 + MOVD R0, 72(R9) + ORR R12, R10, R10 + + // exhausted += (br1.off < 4) + CMP $0x04, R0 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill1: + // val0 := br1.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br1.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br1.peekTopBits(peekBits) + MOVD R6, R1 + MOVD R10, R12 + LSR R1, R12, R12 + + // v1 := table[val1&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br1.advance(uint8(v1.entry)) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + ADD R7, R3, R15 + MOVH R0, (R15) + + // update the bitreader structure + MOVD R10, 80(R9) + MOVB R11, 88(R9) + + // br2.fillFast32() + MOVD 128(R9), R10 + MOVBU 136(R9), R11 + CMP $0x20, R11 + BLS skip_fill2 + MOVD 120(R9), R0 + SUB $0x20, R11, R11 + SUB $0x04, R0, R0 + MOVD 96(R9), R12 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R12, R0, R15 + MOVWU (R15), R12 + MOVD R11, R1 + LSL R1, R12, R12 + MOVD R0, 120(R9) + ORR R12, R10, R10 + + // exhausted += (br2.off < 4) + CMP $0x04, R0 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill2: + // val0 := br2.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br2.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br2.peekTopBits(peekBits) + MOVD R6, R1 + MOVD R10, R12 + LSR R1, R12, R12 + + // v1 := table[val1&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br2.advance(uint8(v1.entry)) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + ADD R7<<1, R3, R15 + MOVH R0, (R15) + + // update the bitreader structure + MOVD R10, 128(R9) + MOVB R11, 136(R9) + + // br3.fillFast32() + MOVD 176(R9), R10 + MOVBU 184(R9), R11 + CMP $0x20, R11 + BLS skip_fill3 + MOVD 168(R9), R0 + SUB $0x20, R11, R11 + SUB $0x04, R0, R0 + MOVD 144(R9), R12 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R12, R0, R15 + MOVWU (R15), R12 + MOVD R11, R1 + LSL R1, R12, R12 + MOVD R0, 168(R9) + ORR R12, R10, R10 + + // exhausted += (br3.off < 4) + CMP $0x04, R0 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill3: + // val0 := br3.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br3.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br3.peekTopBits(peekBits) + MOVD R6, R1 + MOVD R10, R12 + LSR R1, R12, R12 + + // v1 := table[val1&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br3.advance(uint8(v1.entry)) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + ADD R7<<1, R7, R1 + ADD R1, R3, R15 + MOVH R0, (R15) + + // update the bitreader structure + MOVD R10, 176(R9) + MOVB R11, 184(R9) + ADD $0x02, R3, R3 + AND $0xff, R2, R15 + AND $0xff, R2, R16 + TST R16, R15 + BEQ main_loop + MOVD ctx+0(FP), R0 + MOVD 16(R0), R16 + SUB R16, R3, R3 + LSL $0x02, R3, R3 + MOVD R3, 40(R0) + RET + +// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext) +TEXT ·decompress4x_8b_main_loop_arm64(SB), $0-8 + // Preload values + MOVD ctx+0(FP), R1 + MOVBU 8(R1), R6 + MOVD 16(R1), R3 + MOVD 48(R1), R5 + MOVD 24(R1), R7 + MOVD 32(R1), R8 + MOVD (R1), R9 + + // Main loop +main_loop: + MOVD $0, R2 + CMP R5, R3 + CSET GE, R16 + BFI $0, R16, $8, R2 + + // br0.fillFast32() + MOVD 32(R9), R10 + MOVBU 40(R9), R11 + CMP $0x20, R11 + BLS skip_fill0 + MOVD 24(R9), R12 + SUB $0x20, R11, R11 + SUB $0x04, R12, R12 + MOVD (R9), R13 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R13, R12, R15 + MOVWU (R15), R13 + MOVD R11, R1 + LSL R1, R13, R13 + MOVD R12, 24(R9) + ORR R13, R10, R10 + + // exhausted += (br0.off < 4) + CMP $0x04, R12 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill0: + // val0 := br0.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br0.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br0.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v1 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br0.advance(uint8(v1.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // val2 := br0.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v2 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br0.advance(uint8(v2.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val3 := br0.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v3 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br0.advance(uint8(v3.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVW R0, (R3) + + // update the bitreader structure + MOVD R10, 32(R9) + MOVB R11, 40(R9) + + // br1.fillFast32() + MOVD 80(R9), R10 + MOVBU 88(R9), R11 + CMP $0x20, R11 + BLS skip_fill1 + MOVD 72(R9), R12 + SUB $0x20, R11, R11 + SUB $0x04, R12, R12 + MOVD 48(R9), R13 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R13, R12, R15 + MOVWU (R15), R13 + MOVD R11, R1 + LSL R1, R13, R13 + MOVD R12, 72(R9) + ORR R13, R10, R10 + + // exhausted += (br1.off < 4) + CMP $0x04, R12 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill1: + // val0 := br1.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br1.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br1.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v1 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br1.advance(uint8(v1.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // val2 := br1.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v2 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br1.advance(uint8(v2.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val3 := br1.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v3 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br1.advance(uint8(v3.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + ADD R7, R3, R15 + MOVW R0, (R15) + + // update the bitreader structure + MOVD R10, 80(R9) + MOVB R11, 88(R9) + + // br2.fillFast32() + MOVD 128(R9), R10 + MOVBU 136(R9), R11 + CMP $0x20, R11 + BLS skip_fill2 + MOVD 120(R9), R12 + SUB $0x20, R11, R11 + SUB $0x04, R12, R12 + MOVD 96(R9), R13 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R13, R12, R15 + MOVWU (R15), R13 + MOVD R11, R1 + LSL R1, R13, R13 + MOVD R12, 120(R9) + ORR R13, R10, R10 + + // exhausted += (br2.off < 4) + CMP $0x04, R12 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill2: + // val0 := br2.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br2.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br2.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v1 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br2.advance(uint8(v1.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // val2 := br2.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v2 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br2.advance(uint8(v2.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val3 := br2.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v3 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br2.advance(uint8(v3.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + ADD R7<<1, R3, R15 + MOVW R0, (R15) + + // update the bitreader structure + MOVD R10, 128(R9) + MOVB R11, 136(R9) + + // br3.fillFast32() + MOVD 176(R9), R10 + MOVBU 184(R9), R11 + CMP $0x20, R11 + BLS skip_fill3 + MOVD 168(R9), R12 + SUB $0x20, R11, R11 + SUB $0x04, R12, R12 + MOVD 144(R9), R13 + + // b.value |= uint64(low) << (b.bitsRead & 63) + ADD R13, R12, R15 + MOVWU (R15), R13 + MOVD R11, R1 + LSL R1, R13, R13 + MOVD R12, 168(R9) + ORR R13, R10, R10 + + // exhausted += (br3.off < 4) + CMP $0x04, R12 + CSINC HS, R2, R2, R16 + BFI $0, R16, $8, R2 + +skip_fill3: + // val0 := br3.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v0 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br3.advance(uint8(v0.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val1 := br3.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v1 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br3.advance(uint8(v1.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // val2 := br3.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v2 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br3.advance(uint8(v2.entry) + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + + // val3 := br3.peekTopBits(peekBits) + MOVD R10, R12 + MOVD R6, R1 + LSR R1, R12, R12 + + // v3 := table[val0&mask] + ADD R12<<1, R8, R15 + MOVHU (R15), R1 + + // br3.advance(uint8(v3.entry) + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + LSL R1, R10, R10 + ADD R1, R11, R15 + BFI $0, R15, $8, R11 + REVW R0, R0 + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + ADD R7<<1, R7, R1 + ADD R1, R3, R15 + MOVW R0, (R15) + + // update the bitreader structure + MOVD R10, 176(R9) + MOVB R11, 184(R9) + ADD $0x04, R3, R3 + AND $0xff, R2, R15 + AND $0xff, R2, R16 + TST R16, R15 + BEQ main_loop + MOVD ctx+0(FP), R0 + MOVD 16(R0), R16 + SUB R16, R3, R3 + LSL $0x02, R3, R3 + MOVD R3, 40(R0) + RET + +// func decompress1x_main_loop_amd64(ctx *decompress1xContext) +TEXT ·decompress1x_main_loop_arm64(SB), $0-8 + MOVD ctx+0(FP), R1 + MOVD 16(R1), R2 + MOVD 24(R1), R3 + CMP $0x04, R3 + BLO error_max_decoded_size_exceeded + ADD R3, R2, R3 + MOVD (R1), R5 + MOVD (R5), R7 + MOVD 24(R5), R8 + MOVD 32(R5), R9 + MOVBU 40(R5), R10 + MOVD 32(R1), R5 + MOVBU 8(R1), R6 + JMP loop_condition + +main_loop: + // Check if we have room for 4 bytes in the output buffer + ADD $4, R2, R1 + CMP R3, R1 + BGE error_max_decoded_size_exceeded + + // Decode 4 values + CMP $0x20, R10 + BLT bitReader_fillFast_1_end + SUB $0x20, R10, R10 + SUB $0x04, R8, R8 + ADD R8, R7, R15 + MOVWU (R15), R11 + MOVD R10, R1 + LSL R1, R11, R11 + ORR R11, R9, R9 + +bitReader_fillFast_1_end: + MOVD R6, R1 + MOVD R9, R11 + LSR R1, R11, R11 + ADD R11<<1, R5, R15 + MOVHU (R15), R1 + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + MOVBU R1, R1 + ADD R1, R10, R10 + LSL R1, R9, R9 + MOVD R6, R1 + MOVD R9, R11 + LSR R1, R11, R11 + ADD R11<<1, R5, R15 + MOVHU (R15), R1 + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + MOVBU R1, R1 + ADD R1, R10, R10 + LSL R1, R9, R9 + REVW R0, R0 + CMP $0x20, R10 + BLT bitReader_fillFast_2_end + SUB $0x20, R10, R10 + SUB $0x04, R8, R8 + ADD R8, R7, R15 + MOVWU (R15), R11 + MOVD R10, R1 + LSL R1, R11, R11 + ORR R11, R9, R9 + +bitReader_fillFast_2_end: + MOVD R6, R1 + MOVD R9, R11 + LSR R1, R11, R11 + ADD R11<<1, R5, R15 + MOVHU (R15), R1 + UBFX $8, R1, $8, R16 + BFI $8, R16, $8, R0 + MOVBU R1, R1 + ADD R1, R10, R10 + LSL R1, R9, R9 + MOVD R6, R1 + MOVD R9, R11 + LSR R1, R11, R11 + ADD R11<<1, R5, R15 + MOVHU (R15), R1 + UBFX $8, R1, $8, R16 + BFI $0, R16, $8, R0 + MOVBU R1, R1 + ADD R1, R10, R10 + LSL R1, R9, R9 + REVW R0, R0 + + // Store the decoded values + MOVW R0, (R2) + ADD $0x04, R2, R2 + +loop_condition: + CMP $0x08, R8 + BGE main_loop + + // Update ctx structure + MOVD ctx+0(FP), R0 + MOVD 16(R0), R16 + SUB R16, R2, R2 + MOVD R2, 40(R0) + MOVD (R0), R0 + MOVD R8, 24(R0) + MOVD R9, 32(R0) + MOVB R10, 40(R0) + RET + + // Report error +error_max_decoded_size_exceeded: + MOVD ctx+0(FP), R0 + MOVD $-1, R1 + MOVD R1, 40(R0) + RET + +// skipped decompress1x_main_loop_bmi2 (generic twin preferred on arm64) diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_asm.go b/vendor/github.com/klauspost/compress/huff0/decompress_asm.go new file mode 100644 index 00000000..4854dd43 --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/decompress_asm.go @@ -0,0 +1,193 @@ +//go:build (amd64 || arm64) && !appengine && !noasm && gc + +// This file contains the specialisation of Decoder.Decompress4X +// and Decoder.Decompress1X that use an asm implementation of their main loops. +// The asm function stubs and any per-arch dispatch live in decompress_amd64.go +// and decompress_arm64.go. +package huff0 + +import ( + "errors" + "fmt" +) + +// fallback8BitSize is the size where using Go version is faster. +const fallback8BitSize = 800 + +type decompress4xContext struct { + pbr *[4]bitReaderShifted + peekBits uint8 + out *byte + dstEvery int + tbl *dEntrySingle + decoded int + limit *byte +} + +// Decompress4X will decompress a 4X encoded stream. +// The length of the supplied input must match the end of a block exactly. +// The *capacity* of the dst slice must match the destination size of +// the uncompressed data exactly. +func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { + if len(d.dt.single) == 0 { + return nil, errors.New("no table loaded") + } + if len(src) < 6+(4*1) { + return nil, errors.New("input too small") + } + + use8BitTables := d.actualTableLog <= 8 + if cap(dst) < fallback8BitSize && use8BitTables { + return d.decompress4X8bit(dst, src) + } + + var br [4]bitReaderShifted + // Decode "jump table" + start := 6 + for i := range 3 { + length := int(src[i*2]) | (int(src[i*2+1]) << 8) + if start+length >= len(src) { + return nil, errors.New("truncated input (or invalid offset)") + } + err := br[i].init(src[start : start+length]) + if err != nil { + return nil, err + } + start += length + } + err := br[3].init(src[start:]) + if err != nil { + return nil, err + } + + // destination, offset to match first output + dstSize := cap(dst) + dst = dst[:dstSize] + out := dst + dstEvery := (dstSize + 3) / 4 + + const tlSize = 1 << tableLogMax + const tlMask = tlSize - 1 + single := d.dt.single[:tlSize] + + var decoded int + + if len(out) > 4*4 && !(br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4) { + ctx := decompress4xContext{ + pbr: &br, + peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() + out: &out[0], + dstEvery: dstEvery, + tbl: &single[0], + limit: &out[dstEvery-4], // Always stop decoding when first buffer gets here to avoid writing OOB on last. + } + if use8BitTables { + decompress4x_8b_main_loop_asm(&ctx) + } else { + decompress4x_main_loop_asm(&ctx) + } + + decoded = ctx.decoded + out = out[decoded/4:] + } + + // Decode remaining. + remainBytes := dstEvery - (decoded / 4) + for i := range br { + offset := dstEvery * i + endsAt := min(offset+remainBytes, len(out)) + br := &br[i] + bitsLeft := br.remaining() + for bitsLeft > 0 { + br.fill() + if offset >= endsAt { + return nil, errors.New("corruption detected: stream overrun 4") + } + + // Read value and increment offset. + val := br.peekBitsFast(d.actualTableLog) + v := single[val&tlMask].entry + nBits := uint8(v) + br.advance(nBits) + bitsLeft -= uint(nBits) + out[offset] = uint8(v >> 8) + offset++ + } + if offset != endsAt { + return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) + } + decoded += offset - dstEvery*i + err = br.close() + if err != nil { + return nil, err + } + } + if dstSize != decoded { + return nil, errors.New("corruption detected: short output block") + } + return dst, nil +} + +type decompress1xContext struct { + pbr *bitReaderShifted + peekBits uint8 + out *byte + outCap int + tbl *dEntrySingle + decoded int +} + +// Error reported by asm implementations +const error_max_decoded_size_exeeded = -1 + +// Decompress1X will decompress a 1X encoded stream. +// The cap of the output buffer will be the maximum decompressed size. +// The length of the supplied input must match the end of a block exactly. +func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) { + if len(d.dt.single) == 0 { + return nil, errors.New("no table loaded") + } + var br bitReaderShifted + err := br.init(src) + if err != nil { + return dst, err + } + maxDecodedSize := cap(dst) + dst = dst[:maxDecodedSize] + + const tlSize = 1 << tableLogMax + const tlMask = tlSize - 1 + + if maxDecodedSize >= 4 { + ctx := decompress1xContext{ + pbr: &br, + out: &dst[0], + outCap: maxDecodedSize, + peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() + tbl: &d.dt.single[0], + } + + decompress1x_main_loop_asm(&ctx) + if ctx.decoded == error_max_decoded_size_exeeded { + return nil, ErrMaxDecodedSizeExceeded + } + + dst = dst[:ctx.decoded] + } + + // br < 8, so uint8 is fine + bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead + for bitsLeft > 0 { + br.fill() + if len(dst) >= maxDecodedSize { + br.close() + return nil, ErrMaxDecodedSizeExceeded + } + v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask] + nBits := uint8(v.entry) + br.advance(nBits) + bitsLeft -= nBits + dst = append(dst, uint8(v.entry>>8)) + } + return dst, br.close() +} diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_generic.go b/vendor/github.com/klauspost/compress/huff0/decompress_generic.go index 61039232..e1bca5c6 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress_generic.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress_generic.go @@ -1,4 +1,4 @@ -//go:build !amd64 || appengine || !gc || noasm +//go:build (!amd64 && !arm64) || appengine || !gc || noasm // This file contains a generic implementation of Decoder.Decompress4X. package huff0 diff --git a/vendor/github.com/klauspost/compress/internal/snapref/decode.go b/vendor/github.com/klauspost/compress/internal/snapref/decode.go index a2c82fcd..584b7574 100644 --- a/vendor/github.com/klauspost/compress/internal/snapref/decode.go +++ b/vendor/github.com/klauspost/compress/internal/snapref/decode.go @@ -31,7 +31,7 @@ func DecodedLen(src []byte) (int, error) { // that the length header occupied. func decodedLen(src []byte) (blockLen, headerLen int, err error) { v, n := binary.Uvarint(src) - if n <= 0 || v > 0xffffffff { + if n <= 0 || n > 5 || v > 0xffffffff { return 0, 0, ErrCorrupt } diff --git a/vendor/github.com/klauspost/compress/s2/decode.go b/vendor/github.com/klauspost/compress/s2/decode.go index 264ffd0a..17abb515 100644 --- a/vendor/github.com/klauspost/compress/s2/decode.go +++ b/vendor/github.com/klauspost/compress/s2/decode.go @@ -35,7 +35,7 @@ func DecodedLen(src []byte) (int, error) { // that the length header occupied. func decodedLen(src []byte) (blockLen, headerLen int, err error) { v, n := binary.Uvarint(src) - if n <= 0 || v > 0xffffffff { + if n <= 0 || n > 5 || v > 0xffffffff { return 0, 0, ErrCorrupt } diff --git a/vendor/github.com/klauspost/compress/s2/encode_all.go b/vendor/github.com/klauspost/compress/s2/encode_all.go index 9d12c44f..794ec8a6 100644 --- a/vendor/github.com/klauspost/compress/s2/encode_all.go +++ b/vendor/github.com/klauspost/compress/s2/encode_all.go @@ -981,7 +981,7 @@ searchDict: cv = load64(src, s) continue } - } else if uint32(cv>>(checkRep*8)) == load32(src, s-repeat+checkRep) { + } else if repeat > 0 && uint32(cv>>(checkRep*8)) == load32(src, s-repeat+checkRep) { base := s + checkRep // Extend back for i := base - repeat; base > nextEmit && i > 0 && src[i-1] == src[base-1]; { diff --git a/vendor/github.com/klauspost/compress/s2/hashtable_pool.go b/vendor/github.com/klauspost/compress/s2/hashtable_pool.go index bc7cabd5..ec972132 100644 --- a/vendor/github.com/klauspost/compress/s2/hashtable_pool.go +++ b/vendor/github.com/klauspost/compress/s2/hashtable_pool.go @@ -25,7 +25,7 @@ type betterTables struct { sTable [betterShortTableSize]uint32 } -var betterTablePool = sync.Pool{New: func() interface{} { return &betterTables{} }} +var betterTablePool = sync.Pool{New: func() any { return &betterTables{} }} // betterSnappyTables holds better-snappy compression hash tables. type betterSnappyTables struct { @@ -33,7 +33,7 @@ type betterSnappyTables struct { sTable [betterShortTableSize]uint32 } -var betterSnappyTablePool = sync.Pool{New: func() interface{} { return &betterSnappyTables{} }} +var betterSnappyTablePool = sync.Pool{New: func() any { return &betterSnappyTables{} }} // bestTables holds best compression hash tables. type bestTables struct { @@ -41,7 +41,7 @@ type bestTables struct { sTable [bestShortTableSize]uint64 } -var bestTablePool = sync.Pool{New: func() interface{} { return &bestTables{} }} +var bestTablePool = sync.Pool{New: func() any { return &bestTables{} }} // getBetterTables gets a zeroed betterTables from the pool. func getBetterTables() *betterTables { diff --git a/vendor/github.com/klauspost/compress/s2/reader.go b/vendor/github.com/klauspost/compress/s2/reader.go index 4d01c419..17443e2c 100644 --- a/vendor/github.com/klauspost/compress/s2/reader.go +++ b/vendor/github.com/klauspost/compress/s2/reader.go @@ -216,13 +216,18 @@ func (r *Reader) skippable(tmp []byte, n int, allowEOF bool, id uint8) (ok bool) return r.err == nil } if rs, ok := r.r.(io.ReadSeeker); ok { - _, err := rs.Seek(int64(n), io.SeekCurrent) - if err == nil { - return true - } - if err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) { - r.err = ErrCorrupt - return false + if cur, err := rs.Seek(0, io.SeekCurrent); err == nil { + if end, err := rs.Seek(0, io.SeekEnd); err == nil { + if cur+int64(n) <= end { + if _, err := rs.Seek(cur+int64(n), io.SeekStart); err == nil { + return true + } + } + if _, err := rs.Seek(cur, io.SeekStart); err != nil { + r.err = ErrCorrupt + return false + } + } } } for n > 0 { diff --git a/vendor/github.com/klauspost/compress/snappy/decode_strict.go b/vendor/github.com/klauspost/compress/snappy/decode_strict.go new file mode 100644 index 00000000..6c28bcbb --- /dev/null +++ b/vendor/github.com/klauspost/compress/snappy/decode_strict.go @@ -0,0 +1,130 @@ +// Copyright 2011 The Snappy-Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package snappy + +import "encoding/binary" + +// DecodeStrict returns the decoded form of src, like Decode. +// +// Unlike Decode, which delegates to the s2 decoder and accepts the s2 +// "repeat last offset" extension (a copy whose encoded offset is 0), +// DecodeStrict uses a strict standard-Snappy block decoder. Offset 0 is not +// valid in the standard Snappy block format, so such a copy is rejected with +// ErrCorrupt. This makes DecodeStrict match github.com/golang/snappy and the +// C++ reference decoder, at the cost of being slower than Decode. +// +// The returned slice may be a sub-slice of dst if dst was large enough to +// hold the entire decoded block. Otherwise, a newly allocated slice will be +// returned. +// +// The dst and src must not overlap. It is valid to pass a nil dst. +// +// DecodeStrict handles the Snappy block format, not the Snappy stream format. +func DecodeStrict(dst, src []byte) ([]byte, error) { + v, n := binary.Uvarint(src) + if n <= 0 || n > 5 || v > 0xffffffff { + return nil, ErrCorrupt + } + const wordSize = 32 << (^uint(0) >> 32 & 1) + if wordSize == 32 && v > 0x7fffffff { + return nil, ErrTooLarge + } + dLen := int(v) + if dLen <= cap(dst) { + dst = dst[:dLen] + } else { + dst = make([]byte, dLen) + } + if decodeStrict(dst, src[n:]) != 0 { + return nil, ErrCorrupt + } + return dst, nil +} + +func decodeStrict(dst, src []byte) int { + var d, s, offset, length int + for s < len(src) { + switch src[s] & 0x03 { + case 0x00: + x := uint32(src[s] >> 2) + switch { + case x < 60: + s++ + case x == 60: + s += 2 + if uint(s) > uint(len(src)) { + return 1 + } + x = uint32(src[s-1]) + case x == 61: + s += 3 + if uint(s) > uint(len(src)) { + return 1 + } + x = uint32(src[s-2]) | uint32(src[s-1])<<8 + case x == 62: + s += 4 + if uint(s) > uint(len(src)) { + return 1 + } + x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16 + case x == 63: + s += 5 + if uint(s) > uint(len(src)) { + return 1 + } + x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24 + } + length = int(x) + 1 + if length <= 0 || length > len(dst)-d || length > len(src)-s { + return 1 + } + copy(dst[d:], src[s:s+length]) + d += length + s += length + continue + case 0x01: + s += 2 + if uint(s) > uint(len(src)) { + return 1 + } + length = 4 + int(src[s-2])>>2&0x7 + offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])) + case 0x02: + s += 3 + if uint(s) > uint(len(src)) { + return 1 + } + length = 1 + int(src[s-3])>>2 + offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8) + case 0x03: + s += 5 + if uint(s) > uint(len(src)) { + return 1 + } + length = 1 + int(src[s-5])>>2 + offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24) + } + if offset <= 0 || d < offset || length > len(dst)-d { + return 1 + } + if offset >= length { + copy(dst[d:d+length], dst[d-offset:]) + d += length + continue + } + a := dst[d : d+length] + b := dst[d-offset:] + b = b[:len(a)] + for i := range a { + a[i] = b[i] + } + d += length + } + if d != len(dst) { + return 1 + } + return 0 +} diff --git a/vendor/github.com/klauspost/compress/zstd/README.md b/vendor/github.com/klauspost/compress/zstd/README.md index c11d7fa2..a5aeeaed 100644 --- a/vendor/github.com/klauspost/compress/zstd/README.md +++ b/vendor/github.com/klauspost/compress/zstd/README.md @@ -75,14 +75,47 @@ The above is fine for big encodes. However, whenever possible try to *reuse* the To reuse the encoder, you can use the `Reset(io.Writer)` function to change to another output. This will allow the encoder to reuse all resources and avoid wasteful allocations. -Currently stream encoding has 'light' concurrency, meaning up to 2 goroutines can be working on part -of a stream. This is independent of the `WithEncoderConcurrency(n)`, but that is likely to change +By default, stream encoding has 'light' concurrency, meaning up to 2 goroutines can be working on part +of a stream. This is independent of the `WithEncoderConcurrency(n)`, but that is likely to change in the future. So if you want to limit concurrency for future updates, specify the concurrency you would like. If you would like stream encoding to be done without spawning async goroutines, use `WithEncoderConcurrency(1)` which will compress input as each block is completed, blocking on writes until each has completed. +#### Parallel Stream Compression + +For maximum throughput on large streams, use `WithConcurrentBlocks(true)` together with +`WithEncoderConcurrency(n)` where n is the number of CPU cores you want to use. +This splits the input into large sections (jobs) that are compressed simultaneously by multiple goroutines, +similar to how the C zstd library does multithreaded compression. + +```Go +enc, err := zstd.NewWriter(out, + zstd.WithEncoderLevel(zstd.SpeedDefault), + zstd.WithEncoderConcurrency(runtime.GOMAXPROCS(0)), + zstd.WithConcurrentBlocks(true), +) +``` + +Each non-first job receives an overlap prefix from the previous job for match context, +so compression ratio is only marginally affected. Output is flushed in order, +producing a valid single-frame zstd stream. + +Benchmark on 1.8GB GOB stream (AMD Ryzen 9 9950X): + +| Level | 1 thread | 4 threads | 16 threads | 1T ratio | 16T ratio | +|---------|:----------:|:------------------:|:-------------------:|:--------:|:---------:| +| fastest | 783 MB/s | 2950 MB/s (3.8×) | 6939 MB/s (8.9×) | 12.24% | 12.26% | +| default | 728 MB/s | 2533 MB/s (3.5×) | 5340 MB/s (7.3×) | 10.67% | 10.68% | +| better | 434 MB/s | 1105 MB/s (2.5×) | 2206 MB/s (5.1×) | 9.14% | 9.21% | +| best | 129 MB/s | 367 MB/s (2.8×) | 884 MB/s (6.8×) | 8.48% | 8.63% | + +Notes: +* Not compatible with dictionary encoding. +* `Flush()` dispatches the current partial job, so latency-sensitive callers can force output. +* `EncodeAll` is unaffected — it uses its own concurrency via the encoder pool. + You can specify your desired compression level using `WithEncoderLevel()` option. Currently only pre-defined compression settings can be specified. diff --git a/vendor/github.com/klauspost/compress/zstd/blockdec.go b/vendor/github.com/klauspost/compress/zstd/blockdec.go index 2329e996..51f9da03 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -400,8 +400,9 @@ func (b *blockDec) decodeLiterals(in []byte, hist *history) (remain []byte, err } } var err error - // Use our out buffer. - huff.MaxDecodedSize = litRegenSize + // Decoder.Decompress* uses cap(dst) for the size limit. Do not write + // MaxDecodedSize on hist.huffTree: with a trained dictionary that + // pointer aliases the shared dict.litEnc and concurrent DecodeAll races. if fourStreams { literals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals) } else { @@ -673,10 +674,6 @@ func (b *blockDec) executeSequences(hist *history) error { hbytes := hist.b if len(hbytes) > hist.windowSize { hbytes = hbytes[len(hbytes)-hist.windowSize:] - // We do not need history anymore. - if hist.dict != nil { - hist.dict.content = nil - } } hist.decoders.windowSize = hist.windowSize hist.decoders.out = b.dst[:0] diff --git a/vendor/github.com/klauspost/compress/zstd/dict.go b/vendor/github.com/klauspost/compress/zstd/dict.go index 2ffbfdf3..67f40e79 100644 --- a/vendor/github.com/klauspost/compress/zstd/dict.go +++ b/vendor/github.com/klauspost/compress/zstd/dict.go @@ -230,7 +230,7 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { } block := blockEnc{lowMem: false} block.init() - enc := encoder(&bestFastEncoder{fastBase: fastBase{maxMatchOff: int32(maxMatchLen), bufferReset: math.MaxInt32 - int32(maxMatchLen*2), lowMem: false}}) + var enc encoder if o.Level != 0 { eOpts := encoderOptions{ level: o.Level, @@ -242,6 +242,7 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { enc = eOpts.encoder() } else { o.Level = SpeedBestCompression + enc = encoder(&bestFastEncoder{fastBase: fastBase{maxMatchOff: int32(maxMatchLen), bufferReset: math.MaxInt32 - int32(maxMatchLen*2), lowMem: false}}) } var ( remain [256]int @@ -295,40 +296,81 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if offset > 3 { newOffsets[offset-3]++ } else { - newOffsets[uint32(o.Offsets[offset-1])]++ + // Repeat codes reference the training Offsets. Skip unset + // (zero) entries so they are not ranked as real offsets. + prev := o.Offsets[offset-1] + if prev > 0 { + newOffsets[uint32(prev)]++ + } } } } // Find most used offsets. var sortedOffsets []uint32 for k := range newOffsets { + if k == 0 { + continue + } sortedOffsets = append(sortedOffsets, k) } sort.Slice(sortedOffsets, func(i, j int) bool { a, b := sortedOffsets[i], sortedOffsets[j] - if a == b { + ca, cb := newOffsets[a], newOffsets[b] + if ca == cb { // Prefer the longer offset - return sortedOffsets[i] > sortedOffsets[j] + return a > b } - return newOffsets[sortedOffsets[i]] > newOffsets[sortedOffsets[j]] + return ca > cb }) - if len(sortedOffsets) > 3 { - if debug { - print("Offsets:") - for i, v := range sortedOffsets { - if i > 20 { - break - } - printf("[%d: %d],", v, newOffsets[v]) + if debug { + print("Offsets:") + for i, v := range sortedOffsets { + if i > 20 { + break } - println("") + printf("[%d: %d],", v, newOffsets[v]) + } + println("") + } + // Dictionary recent-offsets must be three positive values within the + // history. Ranked matches may be fewer (or empty when only unset + // repeat codes were seen), so fill remaining slots with defaults. + used := make(map[int]bool, 3) + var finalOffsets [3]int + nOff := 0 + for _, v := range sortedOffsets { + iv := int(v) + if iv <= 0 || iv > len(hist) || used[iv] { + continue + } + finalOffsets[nOff] = iv + used[iv] = true + nOff++ + if nOff == 3 { + break } - - sortedOffsets = sortedOffsets[:3] } - for i, v := range sortedOffsets { - o.Offsets[i] = int(v) + for _, def := range []int{1, 4, 8} { + if nOff == 3 { + break + } + if def <= len(hist) && !used[def] { + finalOffsets[nOff] = def + used[def] = true + nOff++ + } + } + for def := 1; nOff < 3 && def <= len(hist); def++ { + if !used[def] { + finalOffsets[nOff] = def + used[def] = true + nOff++ + } + } + if nOff < 3 { + return nil, fmt.Errorf("could not determine 3 valid dictionary offsets (history size %d)", len(hist)) } + o.Offsets = finalOffsets if debug { println("New repeat offsets", o.Offsets) } @@ -336,6 +378,9 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { if nUsed == 0 || seqs == 0 { return nil, fmt.Errorf("%d blocks, %d sequences found", nUsed, seqs) } + if litTotal == 0 { + return nil, errors.New("0 literals found") + } if debug { println("Sequences:", seqs, "Blocks:", nUsed, "Literals:", litTotal) } @@ -516,11 +561,10 @@ func BuildDict(o BuildDictOptions) ([]byte, error) { out.Write(binary.LittleEndian.AppendUint32(nil, uint32(o.Offsets[1]))) out.Write(binary.LittleEndian.AppendUint32(nil, uint32(o.Offsets[2]))) out.Write(hist) + if _, err := loadDict(out.Bytes()); err != nil { + return nil, fmt.Errorf("built dictionary failed validation: %w", err) + } if debug { - _, err := loadDict(out.Bytes()) - if err != nil { - panic(err) - } i, err := InspectDictionary(out.Bytes()) if err != nil { panic(err) diff --git a/vendor/github.com/klauspost/compress/zstd/enc_base.go b/vendor/github.com/klauspost/compress/zstd/enc_base.go index c4de134a..c4fea575 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_base.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_base.go @@ -128,6 +128,34 @@ func (e *fastBase) matchlen(s, t int32, src []byte) int32 { return int32(matchLen(src[s:], src[t:])) } +// resetBasePrefix resets the encoder state and loads prefix as initial history. +// This is used for parallel job encoding where non-first jobs need overlap context. +// Rep offsets are set to defaults [1,4,8] (invalidated, matching C behavior). +func (e *fastBase) resetBasePrefix(prefix []byte) { + if e.blk == nil { + e.blk = &blockEnc{lowMem: e.lowMem} + e.blk.init() + } else { + e.blk.reset(nil) + } + e.blk.initNewEncode() + if e.crc == nil { + e.crc = xxhash.New() + } else { + e.crc.Reset() + } + e.blk.dictLitEnc = nil + e.ensureHist(len(prefix) + maxCompressedBlockSize) + // Bump cur so old table entries fall outside the window. + // When cur >= bufferReset, leave it; the first Encode call + // will shift/clear tables, preserving valid prefix entries. + if e.cur < e.bufferReset { + e.cur += e.maxMatchOff + int32(len(e.hist)) + } + e.hist = e.hist[:0] + e.hist = append(e.hist, prefix...) +} + // Reset the encoding table. func (e *fastBase) resetBase(d *dict, singleBlock bool) { if e.blk == nil { diff --git a/vendor/github.com/klauspost/compress/zstd/enc_best.go b/vendor/github.com/klauspost/compress/zstd/enc_best.go index 85179932..c71382dd 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_best.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_best.go @@ -551,3 +551,18 @@ func (e *bestFastEncoder) Reset(d *dict, singleBlock bool) { // Reset table to initial state copy(e.table[:], e.dictTable) } + +func (e *bestFastEncoder) ResetPrefix(prefix []byte) { + e.resetBasePrefix(prefix) + if len(prefix) < 8 { + return + } + end := e.cur + int32(len(prefix)) - 8 + for i := e.cur; i < end; i++ { + cv := load6432(prefix, i-e.cur) + h := hashLen(cv, bestLongTableBits, bestLongLen) + e.longTable[h] = prevEntry{offset: i, prev: e.longTable[h].offset} + h0 := hashLen(cv, bestShortTableBits, bestShortLen) + e.table[h0] = prevEntry{offset: i, prev: e.table[h0].offset} + } +} diff --git a/vendor/github.com/klauspost/compress/zstd/enc_better.go b/vendor/github.com/klauspost/compress/zstd/enc_better.go index 3305f092..523d57f3 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_better.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_better.go @@ -1096,6 +1096,20 @@ func (e *betterFastEncoder) Reset(d *dict, singleBlock bool) { } } +func (e *betterFastEncoder) ResetPrefix(prefix []byte) { + e.resetBasePrefix(prefix) + if len(prefix) < 8 { + return + } + end := e.cur + int32(len(prefix)) - 8 + for i := e.cur; i < end; i += 2 { + cv := load6432(prefix, i-e.cur) + h := hashLen(cv, betterLongTableBits, betterLongLen) + e.longTable[h] = prevEntry{offset: i, prev: e.longTable[h].offset} + e.table[hashLen(cv>>8, betterShortTableBits, betterShortLen)] = tableEntry{val: uint32(cv >> 8), offset: i + 1} + } +} + // ResetDict will reset and set a dictionary if not nil func (e *betterFastEncoderDict) Reset(d *dict, singleBlock bool) { e.resetBase(d, singleBlock) @@ -1229,6 +1243,10 @@ func (e *betterFastEncoderDict) Reset(d *dict, singleBlock bool) { e.allDirty = false } +func (e *betterFastEncoderDict) ResetPrefix([]byte) { + panic("ResetPrefix not supported for dict encoders") +} + func (e *betterFastEncoderDict) markLongShardDirty(entryNum uint32) { e.longTableShardDirty[entryNum/betterLongTableShardSize] = true } diff --git a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go index 2fb6da11..712ba7ab 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_dfast.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_dfast.go @@ -1037,6 +1037,18 @@ func (e *doubleFastEncoder) Reset(d *dict, singleBlock bool) { } } +func (e *doubleFastEncoder) ResetPrefix(prefix []byte) { + e.fastEncoder.ResetPrefix(prefix) + if len(prefix) < 8 { + return + } + end := e.cur + int32(len(prefix)) - 8 + for i := e.cur + 1; i < end; i += 2 { + cv := load6432(prefix, i-e.cur) + e.longTable[hashLen(cv, dFastLongTableBits, dFastLongLen)] = tableEntry{val: uint32(cv), offset: i} + } +} + // ResetDict will reset and set a dictionary if not nil func (e *doubleFastEncoderDict) Reset(d *dict, singleBlock bool) { allDirty := e.allDirty @@ -1102,6 +1114,10 @@ func (e *doubleFastEncoderDict) Reset(d *dict, singleBlock bool) { } } +func (e *doubleFastEncoderDict) ResetPrefix([]byte) { + panic("ResetPrefix not supported for dict encoders") +} + func (e *doubleFastEncoderDict) markLongShardDirty(entryNum uint32) { e.longTableShardDirty[entryNum/dLongTableShardSize] = true } diff --git a/vendor/github.com/klauspost/compress/zstd/enc_fast.go b/vendor/github.com/klauspost/compress/zstd/enc_fast.go index 5e104f1a..06045e24 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_fast.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_fast.go @@ -797,6 +797,19 @@ func (e *fastEncoder) Reset(d *dict, singleBlock bool) { } } +func (e *fastEncoder) ResetPrefix(prefix []byte) { + e.resetBasePrefix(prefix) + if len(prefix) < 8 { + return + } + end := e.cur + int32(len(prefix)) - 8 + // Index every 4th + for i := e.cur + 1; i < end; i += 4 { + cv := load6432(prefix, i-e.cur) + e.table[hashLen(cv, tableBits, tableFastHashLen)] = tableEntry{val: uint32(cv), offset: i} + } +} + // ResetDict will reset and set a dictionary if not nil func (e *fastEncoderDict) Reset(d *dict, singleBlock bool) { e.resetBase(d, singleBlock) @@ -866,6 +879,10 @@ func (e *fastEncoderDict) Reset(d *dict, singleBlock bool) { e.allDirty = false } +func (e *fastEncoderDict) ResetPrefix([]byte) { + panic("ResetPrefix not supported for dict encoders") +} + func (e *fastEncoderDict) markAllShardsDirty() { e.allDirty = true } diff --git a/vendor/github.com/klauspost/compress/zstd/enc_jobs.go b/vendor/github.com/klauspost/compress/zstd/enc_jobs.go new file mode 100644 index 00000000..95ce67ac --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/enc_jobs.go @@ -0,0 +1,352 @@ +// Copyright 2019+ Klaus Post. All rights reserved. +// License information can be found in the LICENSE file. +// Based on work by Yann Collet, released under BSD License. + +package zstd + +import ( + "fmt" + rdebug "runtime/debug" + "sync" +) + +type encJob struct { + prefix []byte // overlap from previous job (nil for first) + input []byte // job's own input data (swapped from filling) + last bool // last block of last job gets last=true + output []byte // compressed blocks (filled by worker) + err error // encoding error + done chan struct{} // closed when complete +} + +type jobState struct { + jobSize int + overlapSize int + filling []byte // accumulates input up to jobSize + nextPrefix []byte // overlap prefix prepared for the next dispatched job + + jobSeq int // next job sequence number + + jobCh chan *encJob // dispatch to workers + resultCh chan *encJob // ordered results to flusher + + workerWg sync.WaitGroup + flusherWg sync.WaitGroup + + mu sync.Mutex + flushedSeq int // last flushed sequence number + cond *sync.Cond + + flusherErr error + started bool + + inputPool sync.Pool // *[]byte buffers of jobSize cap + outputPool sync.Pool // *[]byte buffers for compressed output + overlapPool sync.Pool // *[]byte buffers for overlap prefixes +} + +func (e *Encoder) startJobWorkers() { + js := &e.state.jobs + n := e.o.concurrent + js.jobCh = make(chan *encJob, n) + js.resultCh = make(chan *encJob, n) + js.flushedSeq = 0 + js.cond = sync.NewCond(&js.mu) + + // Workers borrow encoders from the shared e.encoders pool per-job. + // Ensure the pool is initialized before any worker tries to borrow. + e.init.Do(e.initialize) + + for range n { + js.workerWg.Add(1) + go e.jobWorker() + } + js.flusherWg.Add(1) + go e.jobFlusher() + js.started = true +} + +func (e *Encoder) jobWorker() { + js := &e.state.jobs + defer js.workerWg.Done() + for job := range js.jobCh { + enc := <-e.encoders + e.compressJob(enc, job) + e.encoders <- enc + close(job.done) + } +} + +func (e *Encoder) compressJob(enc encoder, job *encJob) { + defer func() { + if r := recover(); r != nil { + job.err = fmt.Errorf("panic in parallel job: %v", r) + rdebug.PrintStack() + } + }() + + if len(job.prefix) > 0 { + enc.ResetPrefix(job.prefix) + } else { + enc.Reset(nil, false) + } + + data := job.input + if len(data) == 0 && job.last { + blk := enc.Block() + blk.reset(nil) + blk.last = true + blk.encodeRaw(nil) + job.output = append(job.output, blk.output...) + return + } + + blk := enc.Block() + for len(data) > 0 { + todo := data + if len(todo) > e.o.blockSize { + todo = todo[:e.o.blockSize] + } + data = data[len(todo):] + + blk.pushOffsets() + enc.Encode(blk, todo) + blk.last = len(data) == 0 && job.last + + err := blk.encode(todo, e.o.noEntropy, !e.o.allLitEntropy) + if err != nil { + job.err = err + return + } + job.output = append(job.output, blk.output...) + blk.reset(nil) + } +} + +func (js *jobState) getInputBuf(size int) []byte { + if v := js.inputPool.Get(); v != nil { + bp := v.(*[]byte) + b := *bp + if cap(b) >= size { + return b[:0] + } + } + return make([]byte, 0, size) +} + +func (js *jobState) putInputBuf(b []byte) { + if cap(b) > 0 { + b = b[:0] + js.inputPool.Put(&b) + } +} + +func (js *jobState) getOutputBuf(size int) []byte { + if v := js.outputPool.Get(); v != nil { + bp := v.(*[]byte) + b := *bp + if cap(b) >= size { + return b[:0] + } + } + return make([]byte, 0, size) +} + +func (js *jobState) putOutputBuf(b []byte) { + if cap(b) > 0 { + b = b[:0] + js.outputPool.Put(&b) + } +} + +func (js *jobState) getOverlapBuf(size int) []byte { + if v := js.overlapPool.Get(); v != nil { + bp := v.(*[]byte) + b := *bp + if cap(b) >= size { + return b[:size] + } + } + return make([]byte, size) +} + +func (js *jobState) putOverlapBuf(b []byte) { + if cap(b) > 0 { + b = b[:0] + js.overlapPool.Put(&b) + } +} + +func (e *Encoder) jobFlusher() { + js := &e.state.jobs + defer js.flusherWg.Done() + for job := range js.resultCh { + <-job.done + // Worker has fully exited compressJob, so the prefix is no longer + // in use. Return it to the pool regardless of outcome. + if job.prefix != nil { + js.putOverlapBuf(job.prefix) + job.prefix = nil + } + if job.err != nil { + js.mu.Lock() + js.flusherErr = job.err + js.cond.Broadcast() + js.mu.Unlock() + for range js.resultCh { + } + return + } + if len(job.output) > 0 { + _, err := e.state.w.Write(job.output) + if err != nil { + js.mu.Lock() + js.flusherErr = err + js.cond.Broadcast() + js.mu.Unlock() + for range js.resultCh { + } + return + } + e.state.nWritten += int64(len(job.output)) + } + // Return buffers to pools. + js.putInputBuf(job.input) + js.putOutputBuf(job.output) + job.input = nil + job.output = nil + + js.mu.Lock() + js.flushedSeq++ + js.cond.Broadcast() + js.mu.Unlock() + } +} + +func (e *Encoder) shutdownJobWorkers() { + js := &e.state.jobs + if !js.started { + return + } + close(js.jobCh) + js.workerWg.Wait() + close(js.resultCh) + js.flusherWg.Wait() + js.started = false +} + +// waitAllJobs blocks until all dispatched jobs have been flushed. +func (e *Encoder) waitAllJobs() { + js := &e.state.jobs + if !js.started { + return + } + js.mu.Lock() + for js.flushedSeq < js.jobSeq && js.flusherErr == nil { + js.cond.Wait() + } + js.mu.Unlock() +} + +func (e *Encoder) dispatchJob(final bool) error { + s := &e.state + js := &s.jobs + + js.mu.Lock() + fErr := js.flusherErr + js.mu.Unlock() + if fErr != nil { + return fErr + } + + if !s.headerWritten { + // Single-block optimization: fall through to encodeAll path. + if final && len(js.filling) > 0 && len(js.filling) <= e.o.blockSize { + s.current = e.encodeAll(s.encoder, js.filling, s.current[:0]) + var n2 int + n2, s.err = s.w.Write(s.current) + if s.err != nil { + return s.err + } + s.nWritten += int64(n2) + s.nInput += int64(len(js.filling)) + s.current = s.current[:0] + js.filling = js.filling[:0] + s.headerWritten = true + s.fullFrameWritten = true + s.eofWritten = true + return nil + } + if final && len(js.filling) == 0 && !e.o.fullZero { + s.headerWritten = true + s.fullFrameWritten = true + s.eofWritten = true + return nil + } + + var tmp [maxHeaderSize]byte + fh := frameHeader{ + ContentSize: uint64(s.frameContentSize), + WindowSize: uint32(s.encoder.WindowSize(s.frameContentSize)), + SingleSegment: false, + Checksum: e.o.crc, + DictID: 0, + } + dst := fh.appendTo(tmp[:0]) + var n2 int + n2, s.err = s.w.Write(dst) + if s.err != nil { + return s.err + } + s.nWritten += int64(n2) + s.headerWritten = true + } + + if len(js.filling) == 0 && !final { + return nil + } + + if !js.started { + e.startJobWorkers() + } + + // Estimate output size for pooled buffer. + outputEst := max(len(js.filling)/2, 512) + + job := &encJob{ + last: final, + done: make(chan struct{}), + output: js.getOutputBuf(outputEst), + } + + // Each job owns its prefix slice; the flusher returns it to the pool + // after <-job.done, so workers and dispatch never share a buffer. + if js.nextPrefix != nil { + job.prefix = js.nextPrefix + js.nextPrefix = nil + } + + // Build the next job's prefix from the tail of this job's input. + if !final && len(js.filling) > 0 { + overlapLen := min(js.overlapSize, len(js.filling)) + np := js.getOverlapBuf(overlapLen) + copy(np, js.filling[len(js.filling)-overlapLen:]) + js.nextPrefix = np + } + + // Swap filling buffer into job — zero-copy for the input data. + job.input = js.filling + js.filling = js.getInputBuf(js.jobSize) + + s.nInput += int64(len(job.input)) + js.jobSeq++ + + if final { + s.eofWritten = true + } + + js.resultCh <- job + js.jobCh <- job + + return nil +} diff --git a/vendor/github.com/klauspost/compress/zstd/encoder.go b/vendor/github.com/klauspost/compress/zstd/encoder.go index 0f2a00a0..6ee96d87 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder.go @@ -38,6 +38,7 @@ type encoder interface { WindowSize(size int64) int32 UseBlock(*blockEnc) Reset(d *dict, singleBlock bool) + ResetPrefix(prefix []byte) } type encoderState struct { @@ -60,6 +61,9 @@ type encoderState struct { wg sync.WaitGroup // This waitgroup indicates we have a block encoding/writing. wWg sync.WaitGroup + + // Parallel job state (used when concurrentBlocks is enabled). + jobs jobState } // NewWriter will create a new Zstandard encoder. @@ -74,6 +78,9 @@ func NewWriter(w io.Writer, opts ...EOption) (*Encoder, error) { return nil, err } } + if e.o.concurrentBlocks && (e.o.dict != nil || e.o.concurrent <= 1) { + e.o.concurrentBlocks = false + } if w != nil { e.Reset(w) } @@ -95,12 +102,31 @@ func (e *Encoder) initialize() { // as a new, independent stream. func (e *Encoder) Reset(w io.Writer) { s := &e.state + + if e.o.concurrentBlocks { + e.shutdownJobWorkers() + js := &s.jobs + js.jobSize = e.o.jobSize() + js.overlapSize = e.o.overlapSize() + // js.filling is allocated lazily on first Write/ReadFrom so callers + // that only use EncodeAll don't pay the (up to ~32 MB) jobSize cost. + js.filling = js.filling[:0] + if js.nextPrefix != nil { + js.putOverlapBuf(js.nextPrefix) + js.nextPrefix = nil + } + js.jobSeq = 0 + js.flushedSeq = 0 + js.flusherErr = nil + js.started = false + } + s.wg.Wait() s.wWg.Wait() if cap(s.filling) == 0 { s.filling = make([]byte, 0, e.o.blockSize) } - if e.o.concurrent > 1 { + if e.o.concurrent > 1 && !e.o.concurrentBlocks { if cap(s.current) == 0 { s.current = make([]byte, 0, e.o.blockSize) } @@ -145,6 +171,9 @@ func (e *Encoder) ResetWithOptions(w io.Writer, opts ...EOption) error { } } hasDict := e.o.dict != nil + if e.o.concurrentBlocks && hasDict { + e.o.concurrentBlocks = false + } if hadDict != hasDict { // Dict presence changed — encoder type must be recreated. e.state.encoder = nil @@ -176,6 +205,49 @@ func (e *Encoder) Write(p []byte) (n int, err error) { if s.eofWritten { return 0, ErrEncoderClosed } + if e.o.concurrentBlocks { + return e.writeJobs(p) + } + return e.writeBlocks(p) +} + +func (e *Encoder) writeJobs(p []byte) (n int, err error) { + s := &e.state + js := &s.jobs + jobSize := js.jobSize + if cap(js.filling) == 0 && len(p) > 0 { + js.filling = make([]byte, 0, jobSize) + } + for len(p) > 0 { + if len(p)+len(js.filling) < jobSize { + if e.o.crc { + _, _ = s.encoder.CRC().Write(p) + } + js.filling = append(js.filling, p...) + return n + len(p), nil + } + add := p + if len(p)+len(js.filling) > jobSize { + add = add[:jobSize-len(js.filling)] + } + if e.o.crc { + _, _ = s.encoder.CRC().Write(add) + } + js.filling = append(js.filling, add...) + p = p[len(add):] + n += len(add) + if len(js.filling) < jobSize { + return n, nil + } + if err := e.dispatchJob(false); err != nil { + return n, err + } + } + return n, nil +} + +func (e *Encoder) writeBlocks(p []byte) (n int, err error) { + s := &e.state for len(p) > 0 { if len(p)+len(s.filling) < e.o.blockSize { if e.o.crc { @@ -374,6 +446,10 @@ func (e *Encoder) ReadFrom(r io.Reader) (n int64, err error) { println("Using ReadFrom") } + if e.o.concurrentBlocks { + return e.readFromJobs(r) + } + // Flush any current writes. if len(e.state.filling) > 0 { if err := e.nextBlock(false); err != nil { @@ -387,7 +463,6 @@ func (e *Encoder) ReadFrom(r io.Reader) (n int64, err error) { if e.o.crc { _, _ = e.state.encoder.CRC().Write(src[:n2]) } - // src is now the unfilled part... src = src[n2:] n += int64(n2) switch err { @@ -420,15 +495,63 @@ func (e *Encoder) ReadFrom(r io.Reader) (n int64, err error) { } } +func (e *Encoder) readFromJobs(r io.Reader) (n int64, err error) { + js := &e.state.jobs + jobSize := js.jobSize + + // Flush any current filling. + if len(js.filling) > 0 { + if err := e.dispatchJob(false); err != nil { + return 0, err + } + } + + if cap(js.filling) < jobSize { + js.filling = make([]byte, 0, jobSize) + } + js.filling = js.filling[:jobSize] + src := js.filling + for { + n2, err := r.Read(src) + if e.o.crc { + _, _ = e.state.encoder.CRC().Write(src[:n2]) + } + src = src[n2:] + n += int64(n2) + switch err { + case io.EOF: + js.filling = js.filling[:len(js.filling)-len(src)] + return n, nil + case nil: + default: + e.state.err = err + return n, err + } + if len(src) > 0 { + continue + } + if err = e.dispatchJob(false); err != nil { + return n, err + } + if cap(js.filling) < jobSize { + js.filling = make([]byte, 0, jobSize) + } + js.filling = js.filling[:jobSize] + src = js.filling + } +} + // Flush will send the currently written data to output // and block until everything has been written. // This should only be used on rare occasions where pushing the currently queued data is critical. func (e *Encoder) Flush() error { s := &e.state + if e.o.concurrentBlocks { + return e.flushJobs() + } if len(s.filling) > 0 { err := e.nextBlock(false) if err != nil { - // Ignore Flush after Close. if errors.Is(s.err, ErrEncoderClosed) { return nil } @@ -438,7 +561,6 @@ func (e *Encoder) Flush() error { s.wg.Wait() s.wWg.Wait() if s.err != nil { - // Ignore Flush after Close. if errors.Is(s.err, ErrEncoderClosed) { return nil } @@ -447,6 +569,20 @@ func (e *Encoder) Flush() error { return s.writeErr } +func (e *Encoder) flushJobs() error { + js := &e.state.jobs + if len(js.filling) > 0 { + if err := e.dispatchJob(false); err != nil { + return err + } + } + e.waitAllJobs() + js.mu.Lock() + fErr := js.flusherErr + js.mu.Unlock() + return fErr +} + // Close will flush the final output and close the stream. // The function will block until everything has been written. // The Encoder can still be re-used after calling this. @@ -455,12 +591,16 @@ func (e *Encoder) Close() error { if s.encoder == nil { return nil } + if e.o.concurrentBlocks { + return e.closeJobs() + } if s.w == nil { if len(s.filling) == 0 && !s.headerWritten && !s.eofWritten && s.nInput == 0 { return nil } return errors.New("zstd: encoder has no writer") } + err := e.nextBlock(true) if err != nil { if errors.Is(s.err, ErrEncoderClosed) { @@ -511,6 +651,68 @@ func (e *Encoder) Close() error { return s.err } +func (e *Encoder) closeJobs() error { + s := &e.state + js := &s.jobs + + if errors.Is(s.err, ErrEncoderClosed) { + return nil + } + + if s.w == nil { + if len(js.filling) == 0 && !s.headerWritten && !s.eofWritten && s.nInput == 0 { + return nil + } + return errors.New("zstd: encoder has no writer") + } + + if err := e.dispatchJob(true); err != nil { + e.shutdownJobWorkers() + if errors.Is(s.err, ErrEncoderClosed) { + return nil + } + return err + } + + if s.frameContentSize > 0 && s.nInput != s.frameContentSize { + e.shutdownJobWorkers() + return fmt.Errorf("frame content size %d given, but %d bytes was written", s.frameContentSize, s.nInput) + } + + if s.fullFrameWritten { + e.shutdownJobWorkers() + s.err = ErrEncoderClosed + return nil + } + + e.shutdownJobWorkers() + if js.flusherErr != nil { + return js.flusherErr + } + + // Write CRC + if e.o.crc { + var tmp [4]byte + _, s.err = s.w.Write(s.encoder.AppendCRC(tmp[:0])) + s.nWritten += 4 + } + + // Add padding + if s.err == nil && e.o.pad > 0 { + add := calcSkippableFrame(s.nWritten, int64(e.o.pad)) + frame, err := skippableFrame(js.filling[:0], add, rand.Reader) + if err != nil { + return err + } + _, s.err = s.w.Write(frame) + } + if s.err == nil { + s.err = ErrEncoderClosed + return nil + } + return s.err +} + // EncodeAll will encode all input in src and append it to dst. // This function can be called concurrently, but each call will only run on a single goroutine. // If empty input is given, nothing is returned, unless WithZeroFrames is specified. diff --git a/vendor/github.com/klauspost/compress/zstd/encoder_options.go b/vendor/github.com/klauspost/compress/zstd/encoder_options.go index e217be0a..a8081496 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder_options.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder_options.go @@ -14,22 +14,23 @@ type EOption func(*encoderOptions) error // options retains accumulated state of multiple options. type encoderOptions struct { - resetOpt bool - concurrent int - level EncoderLevel - single *bool - pad int - blockSize int - windowSize int - crc bool - fullZero bool - noEntropy bool - allLitEntropy bool - customWindow bool - customALEntropy bool - customBlockSize bool - lowMem bool - dict *dict + resetOpt bool + concurrent int + level EncoderLevel + single *bool + pad int + blockSize int + windowSize int + crc bool + fullZero bool + noEntropy bool + allLitEntropy bool + customWindow bool + customALEntropy bool + customBlockSize bool + lowMem bool + dict *dict + concurrentBlocks bool } func (o *encoderOptions) setDefault() { @@ -333,6 +334,42 @@ func WithLowerEncoderMem(b bool) EOption { } } +// WithConcurrentBlocks enables job-based parallel compression for streams. +// When enabled and concurrent > 1, input is split into large sections (jobs) +// that are compressed simultaneously by multiple goroutines. +// Each non-first job receives an overlap prefix from the previous job for match context. +// Output is flushed in order, producing a valid single-frame zstd stream. +// +// Currently disabled when used with dictionary encoding. +// Cannot be changed with ResetWithOptions. +func WithConcurrentBlocks(b bool) EOption { + return func(o *encoderOptions) error { + if o.resetOpt && b != o.concurrentBlocks { + return errors.New("WithConcurrentBlocks cannot be changed on Reset") + } + o.concurrentBlocks = b + return nil + } +} + +// jobSize returns the input section size per parallel job. +func (o *encoderOptions) jobSize() int { + s := max(o.windowSize*4, 512<<10) + return s +} + +// overlapSize returns the overlap prefix size for parallel jobs. +func (o *encoderOptions) overlapSize() int { + switch o.level { + case SpeedBestCompression: + return o.windowSize / 2 + case SpeedBetterCompression: + return o.windowSize / 4 + default: + return o.windowSize / 8 + } +} + // WithEncoderDict allows to register a dictionary that will be used for the encode. // // The slice dict must be in the [dictionary format] produced by diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s b/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s index bcde3986..deeadc49 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s @@ -1,4 +1,4 @@ -// Code generated by command: go run gen_fse.go -out ../fse_decoder_amd64.s -pkg=zstd. DO NOT EDIT. +// Code generated by command: go run gen_fse.go -out ../fse_decoder.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. //go:build !appengine && !noasm && gc && !noasm diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s b/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s new file mode 100644 index 00000000..77ee3913 --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_arm64.s @@ -0,0 +1,153 @@ +// Code generated by command: go run gen_fse.go -out ../fse_decoder.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. +// EXPERIMENTAL arm64 output lowered from an amd64 avo program. + +//go:build arm64 && !appengine && !noasm && gc && !noasm + +// func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int +TEXT ·buildDtable_asm(SB), $0-24 + MOVD ctx+8(FP), R1 + MOVD s+0(FP), R6 + + // Load values + MOVBU 4098(R6), R2 + MOVD $0, R0 + MOVD $1, R16 + LSL R2, R16, R16 + ORR R16, R0, R0 + MOVD (R1), R3 + MOVD 16(R1), R5 + SUB $1, R0, R7 + MOVD 8(R1), R1 + MOVHU 4096(R6), R6 + + // End load values + // Init, lay down lowprob symbols + MOVD $0, R8 + JMP init_main_loop_condition + +init_main_loop: + ADD R8<<1, R1, R15 + MOVH (R15), R9 + AND $0xffff, R9, R15 + MOVD $-1, R16 + AND $0xffff, R16, R16 + CMP R16, R15 + BNE do_not_update_high_threshold + ADD R7<<3, R5, R15 + MOVB R8, 1(R15) + SUB $1, R7, R7 + MOVD $0x0000000000000001, R9 + +do_not_update_high_threshold: + ADD R8<<1, R3, R15 + MOVH R9, (R15) + ADD $1, R8, R8 + +init_main_loop_condition: + CMP R6, R8 + BLT init_main_loop + + // Spread symbols + // Calculate table step + MOVD R0, R8 + LSR $0x01, R8, R8 + MOVD R0, R9 + LSR $0x03, R9, R9 + ADD R9, R8, R8 + ADD $3, R8, R8 + + // Fill add bits values + SUB $1, R0, R9 + MOVD $0, R10 + MOVD $0, R11 + JMP spread_main_loop_condition + +spread_main_loop: + MOVD $0, R12 + ADD R11<<1, R1, R15 + MOVH (R15), R13 + JMP spread_inner_loop_condition + +spread_inner_loop: + ADD R10<<3, R5, R15 + MOVB R11, 1(R15) + +adjust_position: + ADD R8, R10, R10 + AND R9, R10, R10 + CMP R7, R10 + BGT adjust_position + ADD $1, R12, R12 + +spread_inner_loop_condition: + CMP R13, R12 + BLT spread_inner_loop + ADD $1, R11, R11 + +spread_main_loop_condition: + CMP R6, R11 + BLT spread_main_loop + TST R10, R10 + BEQ spread_check_ok + MOVD ctx+8(FP), R0 + MOVD R10, 24(R0) + MOVD $+1, R16 + MOVD R16, ret+16(FP) + RET + +spread_check_ok: + // Build Decoding table + MOVD $0, R6 + +build_table_main_table: + ADD R6<<3, R5, R15 + MOVBU 1(R15), R1 + ADD R1<<1, R3, R15 + MOVHU (R15), R7 + ADD $1, R7, R8 + ADD R1<<1, R3, R15 + MOVH R8, (R15) + MOVD R7, R8 + CLZ R8, R16 + MOVD $63, R8 + SUB R16, R8, R8 + MOVD R2, R1 + SUB R8, R1, R1 + LSL R1, R7, R7 + SUB R0, R7, R7 + ADD R6<<3, R5, R15 + MOVB R1, (R15) + ADD R6<<3, R5, R15 + MOVH R7, 2(R15) + CMP R0, R7 + BLE build_table_check1_ok + MOVD ctx+8(FP), R1 + MOVD R7, 24(R1) + MOVD R0, 32(R1) + MOVD $+2, R16 + MOVD R16, ret+16(FP) + RET + +build_table_check1_ok: + AND $0xff, R1, R15 + AND $0xff, R1, R16 + TST R16, R15 + BNE build_table_check2_ok + AND $0xffff, R7, R15 + AND $0xffff, R6, R16 + CMP R16, R15 + BNE build_table_check2_ok + MOVD ctx+8(FP), R0 + MOVD R7, 24(R0) + MOVD R6, 32(R0) + MOVD $+3, R16 + MOVD R16, ret+16(FP) + RET + +build_table_check2_ok: + ADD $1, R6, R6 + CMP R0, R6 + BLT build_table_main_table + MOVD $+0, R16 + MOVD R16, ret+16(FP) + RET diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go similarity index 81% rename from vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go rename to vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go index b8c8607b..4ffc7e3c 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_asm.go @@ -1,4 +1,4 @@ -//go:build amd64 && !appengine && !noasm && gc +//go:build (amd64 || arm64) && !appengine && !noasm && gc package zstd @@ -6,6 +6,10 @@ import ( "fmt" ) +// buildDtable_asm is generated by _generate/gen_fse.go and lowered to each +// architecture (amd64 by goasm, arm64 by the avo arm64 lowering printer). The +// Go side is identical across architectures, so it lives here. + type buildDtableAsmContext struct { // inputs stateTable *uint16 @@ -18,7 +22,7 @@ type buildDtableAsmContext struct { errParam2 uint64 } -// buildDtable_asm is an x86 assembly implementation of fseDecoder.buildDtable. +// buildDtable_asm is an assembly implementation of fseDecoder.buildDtable. // Function returns non-zero exit code on error. // //go:noescape diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go index 2138f809..38fd2ccb 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go @@ -1,4 +1,4 @@ -//go:build !amd64 || appengine || !gc || noasm +//go:build (!amd64 && !arm64) || appengine || !gc || noasm package zstd diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go index 18c3703d..1281da88 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go @@ -3,321 +3,83 @@ package zstd import ( - "fmt" - "io" - "github.com/klauspost/compress/internal/cpuinfo" ) -type decodeSyncAsmContext struct { - llTable []decSymbol - mlTable []decSymbol - ofTable []decSymbol - llState uint64 - mlState uint64 - ofState uint64 - iteration int - litRemain int - out []byte - outPosition int - literals []byte - litPosition int - history []byte - windowSize int - ll int // set on error (not for all errors, please refer to _generate/gen.go) - ml int // set on error (not for all errors, please refer to _generate/gen.go) - mo int // set on error (not for all errors, please refer to _generate/gen.go) -} +// The shared decode/decodeSync/executeSimple wrappers and context structs live +// in seqdec_asm.go; this file only declares the amd64 asm routines and the +// dispatch helpers that pick the BMI2 / non-BMI2 (and 56-bit / safe) variant. -// sequenceDecs_decodeSync_amd64 implements the main loop of sequenceDecs.decodeSync in x86 asm. +// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm. // // Please refer to seqdec_generic.go for the reference implementation. // //go:noescape -func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int -// sequenceDecs_decodeSync_bmi2 implements the main loop of sequenceDecs.decodeSync in x86 asm with BMI2 extensions. +// sequenceDecs_decode_56_amd64 implements the main loop of sequenceDecs in x86 asm. // //go:noescape -func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int -// sequenceDecs_decodeSync_safe_amd64 does the same as above, but does not write more than output buffer. +// sequenceDecs_decode_bmi2 implements the main loop of sequenceDecs in x86 asm with BMI2 extensions. // //go:noescape -func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int -// sequenceDecs_decodeSync_safe_bmi2 does the same as above, but does not write more than output buffer. +// sequenceDecs_decode_56_bmi2 implements the main loop of sequenceDecs in x86 asm with BMI2 extensions. // //go:noescape -func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int - -// decode sequences from the stream with the provided history but without a dictionary. -func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { - if len(s.dict) > 0 { - return false, nil - } - if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize { - return false, nil - } - - // FIXME: Using unsafe memory copies leads to rare, random crashes - // with fuzz testing. It is therefore disabled for now. - const useSafe = true - /* - useSafe := false - if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc { - useSafe = true - } - if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) { - useSafe = true - } - if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { - useSafe = true - } - */ - - br := s.br - - maxBlockSize := min(s.windowSize, maxCompressedBlockSize) - - ctx := decodeSyncAsmContext{ - llTable: s.litLengths.fse.dt[:maxTablesize], - mlTable: s.matchLengths.fse.dt[:maxTablesize], - ofTable: s.offsets.fse.dt[:maxTablesize], - llState: uint64(s.litLengths.state.state), - mlState: uint64(s.matchLengths.state.state), - ofState: uint64(s.offsets.state.state), - iteration: s.nSeqs - 1, - litRemain: len(s.literals), - out: s.out, - outPosition: len(s.out), - literals: s.literals, - windowSize: s.windowSize, - history: hist, - } - - s.seqSize = 0 - startSize := len(s.out) +func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int - var errCode int +// decodeAsm runs the sequenceDecs decode loop, choosing the BMI2 / 56-bit variant. +func decodeAsm(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext, lte56bits bool) int { if cpuinfo.HasBMI2() { - if useSafe { - errCode = sequenceDecs_decodeSync_safe_bmi2(s, br, &ctx) - } else { - errCode = sequenceDecs_decodeSync_bmi2(s, br, &ctx) - } - } else { - if useSafe { - errCode = sequenceDecs_decodeSync_safe_amd64(s, br, &ctx) - } else { - errCode = sequenceDecs_decodeSync_amd64(s, br, &ctx) - } - } - switch errCode { - case noError: - break - - case errorMatchLenOfsMismatch: - return true, fmt.Errorf("zero matchoff and matchlen (%d) > 0", ctx.ml) - - case errorMatchLenTooBig: - return true, fmt.Errorf("match len (%d) bigger than max allowed length", ctx.ml) - - case errorMatchOffTooBig: - return true, fmt.Errorf("match offset (%d) bigger than current history (%d)", - ctx.mo, ctx.outPosition+len(hist)-startSize) - - case errorNotEnoughLiterals: - return true, fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", - ctx.ll, ctx.litRemain+ctx.ll) - - case errorOverread: - return true, io.ErrUnexpectedEOF - - case errorNotEnoughSpace: - size := ctx.outPosition + ctx.ll + ctx.ml - if debugDecoder { - println("msl:", s.maxSyncLen, "cap", cap(s.out), "bef:", startSize, "sz:", size-startSize, "mbs:", maxBlockSize, "outsz:", cap(s.out)-startSize) + if lte56bits { + return sequenceDecs_decode_56_bmi2(s, br, ctx) } - return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) - - default: - return true, fmt.Errorf("sequenceDecs_decode returned erroneous code %d", errCode) - } - - s.seqSize += ctx.litRemain - if s.seqSize > maxBlockSize { - return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) + return sequenceDecs_decode_bmi2(s, br, ctx) } - err := br.close() - if err != nil { - printf("Closing sequences: %v, %+v\n", err, *br) - return true, err + if lte56bits { + return sequenceDecs_decode_56_amd64(s, br, ctx) } - - s.literals = s.literals[ctx.litPosition:] - t := ctx.outPosition - s.out = s.out[:t] - - // Add final literals - s.out = append(s.out, s.literals...) - if debugDecoder { - t += len(s.literals) - if t != len(s.out) { - panic(fmt.Errorf("length mismatch, want %d, got %d", len(s.out), t)) - } - } - - return true, nil + return sequenceDecs_decode_amd64(s, br, ctx) } -// -------------------------------------------------------------------------------- - -type decodeAsmContext struct { - llTable []decSymbol - mlTable []decSymbol - ofTable []decSymbol - llState uint64 - mlState uint64 - ofState uint64 - iteration int - seqs []seqVals - litRemain int -} - -const noError = 0 - -// error reported when mo == 0 && ml > 0 -const errorMatchLenOfsMismatch = 1 - -// error reported when ml > maxMatchLen -const errorMatchLenTooBig = 2 - -// error reported when mo > available history or mo > s.windowSize -const errorMatchOffTooBig = 3 - -// error reported when the sum of literal lengths exeeceds the literal buffer size -const errorNotEnoughLiterals = 4 - -// error reported when capacity of `out` is too small -const errorNotEnoughSpace = 5 - -// error reported when bits are overread. -const errorOverread = 6 - -// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm. +// sequenceDecs_decodeSync_amd64 implements the main loop of sequenceDecs.decodeSync in x86 asm. // // Please refer to seqdec_generic.go for the reference implementation. // //go:noescape -func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int -// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm. -// -// Please refer to seqdec_generic.go for the reference implementation. +// sequenceDecs_decodeSync_bmi2 implements the main loop of sequenceDecs.decodeSync in x86 asm with BMI2 extensions. // //go:noescape -func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int -// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions. +// sequenceDecs_decodeSync_safe_amd64 does the same as above, but does not write more than output buffer. // //go:noescape -func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int -// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions. +// sequenceDecs_decodeSync_safe_bmi2 does the same as above, but does not write more than output buffer. // //go:noescape -func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int - -// decode sequences from the stream without the provided history. -func (s *sequenceDecs) decode(seqs []seqVals) error { - br := s.br - - maxBlockSize := min(s.windowSize, maxCompressedBlockSize) - - ctx := decodeAsmContext{ - llTable: s.litLengths.fse.dt[:maxTablesize], - mlTable: s.matchLengths.fse.dt[:maxTablesize], - ofTable: s.offsets.fse.dt[:maxTablesize], - llState: uint64(s.litLengths.state.state), - mlState: uint64(s.matchLengths.state.state), - ofState: uint64(s.offsets.state.state), - seqs: seqs, - iteration: len(seqs) - 1, - litRemain: len(s.literals), - } - - if debugDecoder { - println("decode: decoding", len(seqs), "sequences", br.remain(), "bits remain on stream") - } +func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int - s.seqSize = 0 - lte56bits := s.maxBits+s.offsets.fse.actualTableLog+s.matchLengths.fse.actualTableLog+s.litLengths.fse.actualTableLog <= 56 - var errCode int +// decodeSyncAsm runs the decodeSync loop, choosing the BMI2 / safe variant. +func decodeSyncAsm(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext, safe bool) int { if cpuinfo.HasBMI2() { - if lte56bits { - errCode = sequenceDecs_decode_56_bmi2(s, br, &ctx) - } else { - errCode = sequenceDecs_decode_bmi2(s, br, &ctx) - } - } else { - if lte56bits { - errCode = sequenceDecs_decode_56_amd64(s, br, &ctx) - } else { - errCode = sequenceDecs_decode_amd64(s, br, &ctx) + if safe { + return sequenceDecs_decodeSync_safe_bmi2(s, br, ctx) } + return sequenceDecs_decodeSync_bmi2(s, br, ctx) } - if errCode != 0 { - i := len(seqs) - ctx.iteration - 1 - switch errCode { - case errorMatchLenOfsMismatch: - ml := ctx.seqs[i].ml - return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml) - - case errorMatchLenTooBig: - ml := ctx.seqs[i].ml - return fmt.Errorf("match len (%d) bigger than max allowed length", ml) - - case errorNotEnoughLiterals: - ll := ctx.seqs[i].ll - return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, ctx.litRemain+ll) - case errorOverread: - return io.ErrUnexpectedEOF - } - - return fmt.Errorf("sequenceDecs_decode_amd64 returned erroneous code %d", errCode) + if safe { + return sequenceDecs_decodeSync_safe_amd64(s, br, ctx) } - - if ctx.litRemain < 0 { - return fmt.Errorf("literal count is too big: total available %d, total requested %d", - len(s.literals), len(s.literals)-ctx.litRemain) - } - - s.seqSize += ctx.litRemain - if s.seqSize > maxBlockSize { - return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) - } - if debugDecoder { - println("decode: ", br.remain(), "bits remain on stream. code:", errCode) - } - err := br.close() - if err != nil { - printf("Closing sequences: %v, %+v\n", err, *br) - } - return err -} - -// -------------------------------------------------------------------------------- - -type executeAsmContext struct { - seqs []seqVals - seqIndex int - out []byte - history []byte - literals []byte - outPosition int - litPosition int - windowSize int + return sequenceDecs_decodeSync_amd64(s, br, ctx) } // sequenceDecs_executeSimple_amd64 implements the main loop of sequenceDecs.executeSimple in x86 asm. @@ -334,54 +96,10 @@ func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool //go:noescape func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool -// executeSimple handles cases when dictionary is not used. -func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error { - // Ensure we have enough output size... - if len(s.out)+s.seqSize+compressedBlockOverAlloc > cap(s.out) { - addBytes := s.seqSize + len(s.out) + compressedBlockOverAlloc - s.out = append(s.out, make([]byte, addBytes)...) - s.out = s.out[:len(s.out)-addBytes] - } - - if debugDecoder { - printf("Execute %d seqs with literals: %d into %d bytes\n", len(seqs), len(s.literals), s.seqSize) - } - - var t = len(s.out) - out := s.out[:t+s.seqSize] - - ctx := executeAsmContext{ - seqs: seqs, - seqIndex: 0, - out: out, - history: hist, - outPosition: t, - litPosition: 0, - literals: s.literals, - windowSize: s.windowSize, +// executeSimpleAsm runs the executeSimple loop, choosing the safe variant. +func executeSimpleAsm(ctx *executeAsmContext, safe bool) bool { + if safe { + return sequenceDecs_executeSimple_safe_amd64(ctx) } - var ok bool - if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { - ok = sequenceDecs_executeSimple_safe_amd64(&ctx) - } else { - ok = sequenceDecs_executeSimple_amd64(&ctx) - } - if !ok { - return fmt.Errorf("match offset (%d) bigger than current history (%d)", - seqs[ctx.seqIndex].mo, ctx.outPosition+len(hist)) - } - s.literals = s.literals[ctx.litPosition:] - t = ctx.outPosition - - // Add final literals - copy(out[t:], s.literals) - if debugDecoder { - t += len(s.literals) - if t != len(out) { - panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize)) - } - } - s.out = out - - return nil + return sequenceDecs_executeSimple_amd64(ctx) } diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s index a708ca6d..4d3188ff 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -1,4 +1,4 @@ -// Code generated by command: go run gen.go -out ../seqdec_amd64.s -pkg=zstd. DO NOT EDIT. +// Code generated by command: go run gen.go -out ../seqdec.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. //go:build !appengine && !noasm && gc && !noasm @@ -2081,7 +2081,7 @@ sequenceDecs_decodeSync_amd64_match_len_ofs_ok: MOVQ 16(SP), R13 // Check if we have enough space in s.out - LEAQ (AX)(R13*1), R14 + LEAQ 16(AX)(R13*1), R14 ADDQ R10, R14 CMPQ R14, 32(SP) JA error_not_enough_space @@ -2601,7 +2601,7 @@ sequenceDecs_decodeSync_bmi2_match_len_ofs_ok: MOVQ 16(SP), R13 // Check if we have enough space in s.out - LEAQ (CX)(R13*1), R14 + LEAQ 16(CX)(R13*1), R14 ADDQ R9, R14 CMPQ R14, 32(SP) JA error_not_enough_space diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go new file mode 100644 index 00000000..5ad262ac --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.go @@ -0,0 +1,70 @@ +//go:build arm64 && !appengine && !noasm && gc + +package zstd + +// The shared decode/decodeSync/executeSimple wrappers and context structs live +// in seqdec_asm.go; this file only declares the arm64 asm routines (generated +// by the avo arm64 lowering printer) and the dispatch helpers. arm64 has no +// BMI2, so each helper selects only between the 56-bit / safe variants. + +// sequenceDecs_decode_arm64 implements the main loop of sequenceDecs in arm64 asm. +// +// Please refer to seqdec_generic.go for the reference implementation. +// +//go:noescape +func sequenceDecs_decode_arm64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int + +// sequenceDecs_decode_56_arm64 implements the main loop of sequenceDecs in arm64 asm. +// +//go:noescape +func sequenceDecs_decode_56_arm64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int + +// decodeAsm runs the sequenceDecs decode loop, choosing the 56-bit variant. +func decodeAsm(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext, lte56bits bool) int { + if lte56bits { + return sequenceDecs_decode_56_arm64(s, br, ctx) + } + return sequenceDecs_decode_arm64(s, br, ctx) +} + +// sequenceDecs_decodeSync_arm64 implements the main loop of sequenceDecs.decodeSync in arm64 asm. +// +// Please refer to seqdec_generic.go for the reference implementation. +// +//go:noescape +func sequenceDecs_decodeSync_arm64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int + +// sequenceDecs_decodeSync_safe_arm64 does the same as above, but does not write more than output buffer. +// +//go:noescape +func sequenceDecs_decodeSync_safe_arm64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int + +// decodeSyncAsm runs the decodeSync loop, choosing the safe variant. +func decodeSyncAsm(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext, safe bool) int { + if safe { + return sequenceDecs_decodeSync_safe_arm64(s, br, ctx) + } + return sequenceDecs_decodeSync_arm64(s, br, ctx) +} + +// sequenceDecs_executeSimple_arm64 implements the main loop of sequenceDecs.executeSimple in arm64 asm. +// +// Returns false if a match offset is too big. +// +// Please refer to seqdec_generic.go for the reference implementation. +// +//go:noescape +func sequenceDecs_executeSimple_arm64(ctx *executeAsmContext) bool + +// Same as above, but with safe memcopies +// +//go:noescape +func sequenceDecs_executeSimple_safe_arm64(ctx *executeAsmContext) bool + +// executeSimpleAsm runs the executeSimple loop, choosing the safe variant. +func executeSimpleAsm(ctx *executeAsmContext, safe bool) bool { + if safe { + return sequenceDecs_executeSimple_safe_arm64(ctx) + } + return sequenceDecs_executeSimple_arm64(ctx) +} diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s new file mode 100644 index 00000000..6f54ef21 --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_arm64.s @@ -0,0 +1,2750 @@ +// Code generated by command: go run gen.go -out ../seqdec.s -arch amd64,arm64 -pkg=zstd. DO NOT EDIT. +// EXPERIMENTAL arm64 output lowered from an amd64 avo program. + +//go:build arm64 && !appengine && !noasm && gc && !noasm + +// func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +// Requires: CMOV +TEXT ·sequenceDecs_decode_arm64(SB), $8-32 + MOVD br+8(FP), R1 + MOVD 24(R1), R2 + MOVBU 40(R1), R3 + MOVD (R1), R0 + MOVD 32(R1), R5 + ADD R5, R0, R0 + MOVD R0, 8(RSP) + MOVD ctx+16(FP), R0 + MOVD 72(R0), R6 + MOVD 80(R0), R7 + MOVD 88(R0), R8 + MOVD 104(R0), R9 + MOVD s+0(FP), R0 + MOVD 144(R0), R10 + MOVD 152(R0), R11 + MOVD 160(R0), R12 + +sequenceDecs_decode_amd64_main_loop: + MOVD 8(RSP), R13 + + // Fill bitreader to have enough for the offset and match length. + CMP $0x08, R5 + BLT sequenceDecs_decode_amd64_fill_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R13, R13 + MOVD (R13), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decode_amd64_fill_end + +sequenceDecs_decode_amd64_fill_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decode_amd64_fill_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decode_amd64_fill_end + LSL $0x08, R2, R2 + SUB $0x01, R13, R13 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R13), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decode_amd64_fill_byte_by_byte + +sequenceDecs_decode_amd64_fill_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decode_amd64_fill_end: + // Update offset + MOVD R8, R0 + MOVD R3, R1 + MOVD R2, R14 + LSL R1, R14, R14 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decode_amd64_of_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decode_amd64_of_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decode_amd64_of_update_zero + NEG R1, R1 + LSR R1, R14, R14 + ADD R14, R0, R0 + +sequenceDecs_decode_amd64_of_update_zero: + MOVD R0, 16(R9) + + // Update match length + MOVD R7, R0 + MOVD R3, R1 + MOVD R2, R14 + LSL R1, R14, R14 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decode_amd64_ml_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decode_amd64_ml_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decode_amd64_ml_update_zero + NEG R1, R1 + LSR R1, R14, R14 + ADD R14, R0, R0 + +sequenceDecs_decode_amd64_ml_update_zero: + MOVD R0, 8(R9) + + // Fill bitreader to have enough for the remaining + CMP $0x08, R5 + BLT sequenceDecs_decode_amd64_fill_2_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R13, R13 + MOVD (R13), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decode_amd64_fill_2_end + +sequenceDecs_decode_amd64_fill_2_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decode_amd64_fill_2_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decode_amd64_fill_2_end + LSL $0x08, R2, R2 + SUB $0x01, R13, R13 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R13), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decode_amd64_fill_2_byte_by_byte + +sequenceDecs_decode_amd64_fill_2_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decode_amd64_fill_2_end: + // Update literal length + MOVD R6, R0 + MOVD R3, R1 + MOVD R2, R14 + LSL R1, R14, R14 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decode_amd64_ll_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decode_amd64_ll_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decode_amd64_ll_update_zero + NEG R1, R1 + LSR R1, R14, R14 + ADD R14, R0, R0 + +sequenceDecs_decode_amd64_ll_update_zero: + MOVD R0, (R9) + + // Fill bitreader for state updates + MOVD R13, 8(RSP) + MOVD R8, R0 + LSR $0x08, R0, R0 + MOVBU R0, R0 + MOVD ctx+16(FP), R1 + MOVD 96(R1), R16 + CMP $0x00, R16 + BEQ sequenceDecs_decode_amd64_skip_update + + // Update Literal Length State + MOVBU R6, R13 + LSRW $0x10, R6, R6 + ADD R13, R3, R1 + MOVD R2, R14 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R14, R14 + MOVD $0x00000001, R4 + BFI $0, R13, $8, R1 + LSLW R1, R4, R4 + SUBW $1, R4, R4 + AND R4, R14, R14 + ADD R14, R6, R6 + + // Load ctx.llTable + MOVD ctx+16(FP), R1 + MOVD (R1), R1 + ADD R6<<3, R1, R15 + MOVD (R15), R6 + + // Update Match Length State + MOVBU R7, R13 + LSRW $0x10, R7, R7 + ADD R13, R3, R1 + MOVD R2, R14 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R14, R14 + MOVD $0x00000001, R4 + BFI $0, R13, $8, R1 + LSLW R1, R4, R4 + SUBW $1, R4, R4 + AND R4, R14, R14 + ADD R14, R7, R7 + + // Load ctx.mlTable + MOVD ctx+16(FP), R1 + MOVD 24(R1), R1 + ADD R7<<3, R1, R15 + MOVD (R15), R7 + + // Update Offset State + MOVBU R8, R13 + LSRW $0x10, R8, R8 + ADD R13, R3, R1 + MOVD R2, R14 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R14, R14 + MOVD $0x00000001, R4 + BFI $0, R13, $8, R1 + LSLW R1, R4, R4 + SUBW $1, R4, R4 + AND R4, R14, R14 + ADD R14, R8, R8 + + // Load ctx.ofTable + MOVD ctx+16(FP), R1 + MOVD 48(R1), R1 + ADD R8<<3, R1, R15 + MOVD (R15), R8 + +sequenceDecs_decode_amd64_skip_update: + // Adjust offset + MOVD 16(R9), R1 + CMP $0x01, R0 + BLS sequenceDecs_decode_amd64_adjust_offsetB_1_or_0 + MOVD R11, R12 + MOVD R10, R11 + MOVD R1, R10 + JMP sequenceDecs_decode_amd64_after_adjust + +sequenceDecs_decode_amd64_adjust_offsetB_1_or_0: + MOVD (R9), R16 + CMP $0x00000000, R16 + BNE sequenceDecs_decode_amd64_adjust_offset_maybezero + ADD $1, R1, R1 + JMP sequenceDecs_decode_amd64_adjust_offset_nonzero + +sequenceDecs_decode_amd64_adjust_offset_maybezero: + TST R1, R1 + BNE sequenceDecs_decode_amd64_adjust_offset_nonzero + MOVD R10, R1 + JMP sequenceDecs_decode_amd64_after_adjust + +sequenceDecs_decode_amd64_adjust_offset_nonzero: + CMP $0x01, R1 + BLO sequenceDecs_decode_amd64_adjust_zero + BEQ sequenceDecs_decode_amd64_adjust_one + CMP $0x02, R1 + BHI sequenceDecs_decode_amd64_adjust_three + JMP sequenceDecs_decode_amd64_adjust_two + +sequenceDecs_decode_amd64_adjust_zero: + MOVD R10, R0 + JMP sequenceDecs_decode_amd64_adjust_test_temp_valid + +sequenceDecs_decode_amd64_adjust_one: + MOVD R11, R0 + JMP sequenceDecs_decode_amd64_adjust_test_temp_valid + +sequenceDecs_decode_amd64_adjust_two: + MOVD R12, R0 + JMP sequenceDecs_decode_amd64_adjust_test_temp_valid + +sequenceDecs_decode_amd64_adjust_three: + SUB $1, R10, R0 + +sequenceDecs_decode_amd64_adjust_test_temp_valid: + TST R0, R0 + BNE sequenceDecs_decode_amd64_adjust_temp_valid + MOVD $0x00000001, R0 + +sequenceDecs_decode_amd64_adjust_temp_valid: + CMP $0x01, R1 + CSEL NE, R11, R12, R12 + MOVD R10, R11 + MOVD R0, R10 + MOVD R0, R1 + +sequenceDecs_decode_amd64_after_adjust: + MOVD R1, 16(R9) + + // Check values + MOVD 8(R9), R0 + MOVD (R9), R13 + ADD R13, R0, R14 + MOVD s+0(FP), R4 + MOVD 256(R4), R16 + ADD R14, R16, R16 + MOVD R16, 256(R4) + MOVD ctx+16(FP), R14 + MOVD 128(R14), R16 + SUBS R13, R16, R16 + MOVD R16, 128(R14) + BMI error_not_enough_literals + CMP $0x00020002, R0 + BHI sequenceDecs_decode_amd64_error_match_len_too_big + TST R1, R1 + BNE sequenceDecs_decode_amd64_match_len_ofs_ok + TST R0, R0 + BNE sequenceDecs_decode_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decode_amd64_match_len_ofs_ok: + ADD $0x18, R9, R9 + MOVD ctx+16(FP), R0 + MOVD 96(R0), R16 + SUBS $1, R16, R16 + MOVD R16, 96(R0) + BPL sequenceDecs_decode_amd64_main_loop + MOVD s+0(FP), R0 + MOVD R10, 144(R0) + MOVD R11, 152(R0) + MOVD R12, 160(R0) + MOVD br+8(FP), R0 + MOVD R2, 24(R0) + MOVB R3, 40(R0) + MOVD R5, 32(R0) + + // Return success + MOVD $0x00000000, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decode_amd64_error_match_len_ofs_mismatch: + MOVD $0x00000001, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decode_amd64_error_match_len_too_big: + MOVD $0x00000002, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match offset too long error + MOVD $0x00000003, R16 + MOVD R16, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVD $0x00000004, R16 + MOVD R16, ret+24(FP) + RET + + // Return with overread error +error_overread: + MOVD $0x00000006, R16 + MOVD R16, ret+24(FP) + RET + +// func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +// Requires: CMOV +TEXT ·sequenceDecs_decode_56_arm64(SB), $8-32 + MOVD br+8(FP), R1 + MOVD 24(R1), R2 + MOVBU 40(R1), R3 + MOVD (R1), R0 + MOVD 32(R1), R5 + ADD R5, R0, R0 + MOVD R0, 8(RSP) + MOVD ctx+16(FP), R0 + MOVD 72(R0), R6 + MOVD 80(R0), R7 + MOVD 88(R0), R8 + MOVD 104(R0), R9 + MOVD s+0(FP), R0 + MOVD 144(R0), R10 + MOVD 152(R0), R11 + MOVD 160(R0), R12 + +sequenceDecs_decode_56_amd64_main_loop: + MOVD 8(RSP), R13 + + // Fill bitreader to have enough for the offset and match length. + CMP $0x08, R5 + BLT sequenceDecs_decode_56_amd64_fill_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R13, R13 + MOVD (R13), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decode_56_amd64_fill_end + +sequenceDecs_decode_56_amd64_fill_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decode_56_amd64_fill_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decode_56_amd64_fill_end + LSL $0x08, R2, R2 + SUB $0x01, R13, R13 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R13), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decode_56_amd64_fill_byte_by_byte + +sequenceDecs_decode_56_amd64_fill_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decode_56_amd64_fill_end: + // Update offset + MOVD R8, R0 + MOVD R3, R1 + MOVD R2, R14 + LSL R1, R14, R14 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decode_56_amd64_of_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decode_56_amd64_of_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decode_56_amd64_of_update_zero + NEG R1, R1 + LSR R1, R14, R14 + ADD R14, R0, R0 + +sequenceDecs_decode_56_amd64_of_update_zero: + MOVD R0, 16(R9) + + // Update match length + MOVD R7, R0 + MOVD R3, R1 + MOVD R2, R14 + LSL R1, R14, R14 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decode_56_amd64_ml_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decode_56_amd64_ml_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decode_56_amd64_ml_update_zero + NEG R1, R1 + LSR R1, R14, R14 + ADD R14, R0, R0 + +sequenceDecs_decode_56_amd64_ml_update_zero: + MOVD R0, 8(R9) + + // Update literal length + MOVD R6, R0 + MOVD R3, R1 + MOVD R2, R14 + LSL R1, R14, R14 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decode_56_amd64_ll_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decode_56_amd64_ll_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decode_56_amd64_ll_update_zero + NEG R1, R1 + LSR R1, R14, R14 + ADD R14, R0, R0 + +sequenceDecs_decode_56_amd64_ll_update_zero: + MOVD R0, (R9) + + // Fill bitreader for state updates + MOVD R13, 8(RSP) + MOVD R8, R0 + LSR $0x08, R0, R0 + MOVBU R0, R0 + MOVD ctx+16(FP), R1 + MOVD 96(R1), R16 + CMP $0x00, R16 + BEQ sequenceDecs_decode_56_amd64_skip_update + + // Update Literal Length State + MOVBU R6, R13 + LSRW $0x10, R6, R6 + ADD R13, R3, R1 + MOVD R2, R14 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R14, R14 + MOVD $0x00000001, R4 + BFI $0, R13, $8, R1 + LSLW R1, R4, R4 + SUBW $1, R4, R4 + AND R4, R14, R14 + ADD R14, R6, R6 + + // Load ctx.llTable + MOVD ctx+16(FP), R1 + MOVD (R1), R1 + ADD R6<<3, R1, R15 + MOVD (R15), R6 + + // Update Match Length State + MOVBU R7, R13 + LSRW $0x10, R7, R7 + ADD R13, R3, R1 + MOVD R2, R14 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R14, R14 + MOVD $0x00000001, R4 + BFI $0, R13, $8, R1 + LSLW R1, R4, R4 + SUBW $1, R4, R4 + AND R4, R14, R14 + ADD R14, R7, R7 + + // Load ctx.mlTable + MOVD ctx+16(FP), R1 + MOVD 24(R1), R1 + ADD R7<<3, R1, R15 + MOVD (R15), R7 + + // Update Offset State + MOVBU R8, R13 + LSRW $0x10, R8, R8 + ADD R13, R3, R1 + MOVD R2, R14 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R14, R14 + MOVD $0x00000001, R4 + BFI $0, R13, $8, R1 + LSLW R1, R4, R4 + SUBW $1, R4, R4 + AND R4, R14, R14 + ADD R14, R8, R8 + + // Load ctx.ofTable + MOVD ctx+16(FP), R1 + MOVD 48(R1), R1 + ADD R8<<3, R1, R15 + MOVD (R15), R8 + +sequenceDecs_decode_56_amd64_skip_update: + // Adjust offset + MOVD 16(R9), R1 + CMP $0x01, R0 + BLS sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0 + MOVD R11, R12 + MOVD R10, R11 + MOVD R1, R10 + JMP sequenceDecs_decode_56_amd64_after_adjust + +sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0: + MOVD (R9), R16 + CMP $0x00000000, R16 + BNE sequenceDecs_decode_56_amd64_adjust_offset_maybezero + ADD $1, R1, R1 + JMP sequenceDecs_decode_56_amd64_adjust_offset_nonzero + +sequenceDecs_decode_56_amd64_adjust_offset_maybezero: + TST R1, R1 + BNE sequenceDecs_decode_56_amd64_adjust_offset_nonzero + MOVD R10, R1 + JMP sequenceDecs_decode_56_amd64_after_adjust + +sequenceDecs_decode_56_amd64_adjust_offset_nonzero: + CMP $0x01, R1 + BLO sequenceDecs_decode_56_amd64_adjust_zero + BEQ sequenceDecs_decode_56_amd64_adjust_one + CMP $0x02, R1 + BHI sequenceDecs_decode_56_amd64_adjust_three + JMP sequenceDecs_decode_56_amd64_adjust_two + +sequenceDecs_decode_56_amd64_adjust_zero: + MOVD R10, R0 + JMP sequenceDecs_decode_56_amd64_adjust_test_temp_valid + +sequenceDecs_decode_56_amd64_adjust_one: + MOVD R11, R0 + JMP sequenceDecs_decode_56_amd64_adjust_test_temp_valid + +sequenceDecs_decode_56_amd64_adjust_two: + MOVD R12, R0 + JMP sequenceDecs_decode_56_amd64_adjust_test_temp_valid + +sequenceDecs_decode_56_amd64_adjust_three: + SUB $1, R10, R0 + +sequenceDecs_decode_56_amd64_adjust_test_temp_valid: + TST R0, R0 + BNE sequenceDecs_decode_56_amd64_adjust_temp_valid + MOVD $0x00000001, R0 + +sequenceDecs_decode_56_amd64_adjust_temp_valid: + CMP $0x01, R1 + CSEL NE, R11, R12, R12 + MOVD R10, R11 + MOVD R0, R10 + MOVD R0, R1 + +sequenceDecs_decode_56_amd64_after_adjust: + MOVD R1, 16(R9) + + // Check values + MOVD 8(R9), R0 + MOVD (R9), R13 + ADD R13, R0, R14 + MOVD s+0(FP), R4 + MOVD 256(R4), R16 + ADD R14, R16, R16 + MOVD R16, 256(R4) + MOVD ctx+16(FP), R14 + MOVD 128(R14), R16 + SUBS R13, R16, R16 + MOVD R16, 128(R14) + BMI error_not_enough_literals + CMP $0x00020002, R0 + BHI sequenceDecs_decode_56_amd64_error_match_len_too_big + TST R1, R1 + BNE sequenceDecs_decode_56_amd64_match_len_ofs_ok + TST R0, R0 + BNE sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decode_56_amd64_match_len_ofs_ok: + ADD $0x18, R9, R9 + MOVD ctx+16(FP), R0 + MOVD 96(R0), R16 + SUBS $1, R16, R16 + MOVD R16, 96(R0) + BPL sequenceDecs_decode_56_amd64_main_loop + MOVD s+0(FP), R0 + MOVD R10, 144(R0) + MOVD R11, 152(R0) + MOVD R12, 160(R0) + MOVD br+8(FP), R0 + MOVD R2, 24(R0) + MOVB R3, 40(R0) + MOVD R5, 32(R0) + + // Return success + MOVD $0x00000000, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch: + MOVD $0x00000001, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decode_56_amd64_error_match_len_too_big: + MOVD $0x00000002, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match offset too long error + MOVD $0x00000003, R16 + MOVD R16, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVD $0x00000004, R16 + MOVD R16, ret+24(FP) + RET + + // Return with overread error +error_overread: + MOVD $0x00000006, R16 + MOVD R16, ret+24(FP) + RET + +// skipped sequenceDecs_decode_bmi2 (generic twin preferred on arm64) + +// skipped sequenceDecs_decode_56_bmi2 (generic twin preferred on arm64) + +// func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool +// Requires: SSE +TEXT ·sequenceDecs_executeSimple_arm64(SB), $8-9 + MOVD ctx+0(FP), R9 + MOVD 8(R9), R1 + TST R1, R1 + BEQ empty_seqs + MOVD (R9), R0 + MOVD 24(R9), R2 + MOVD 32(R9), R3 + MOVD 80(R9), R5 + MOVD 104(R9), R6 + MOVD 120(R9), R7 + MOVD 56(R9), R8 + MOVD 64(R9), R9 + ADD R9, R8, R8 + + // seqsBase += 24 * seqIndex + ADD R2<<1, R2, R10 + LSL $0x03, R10, R10 + ADD R10, R0, R0 + + // outBase += outPosition + ADD R6, R3, R3 + +main_loop: + MOVD (R0), R10 + MOVD 16(R0), R11 + MOVD 8(R0), R12 + + // Copy literals + TST R10, R10 + BEQ check_offset + MOVD $0, R13 + +copy_1: + ADD R13, R5, R15 + VLD1 (R15), [V0.B16] + ADD R13, R3, R15 + VST1 [V0.B16], (R15) + ADD $0x10, R13, R13 + CMP R10, R13 + BLO copy_1 + ADD R10, R5, R5 + ADD R10, R3, R3 + ADD R10, R6, R6 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + ADD R9, R6, R10 + CMP R10, R11 + BGT error_match_off_too_big + CMP R7, R11 + BGT error_match_off_too_big + + // Copy match from history + MOVD R11, R10 + SUBS R6, R10, R10 + BLS copy_match + MOVD R8, R13 + SUB R10, R13, R13 + CMP R10, R12 + BGT copy_all_from_history + MOVD R12, R10 + SUBS $0x10, R10, R10 + BLO copy_4_small + +copy_4_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R3) + ADD $0x10, R13, R13 + ADD $0x10, R3, R3 + SUBS $0x10, R10, R10 + BHS copy_4_loop + ADD R10, R13, R13 + ADD $16, R13, R13 + ADD R10, R3, R3 + ADD $16, R3, R3 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R3, R15 + VST1 [V0.B16], (R15) + JMP copy_4_end + +copy_4_small: + CMP $0x03, R12 + BEQ copy_4_move_3 + CMP $0x08, R12 + BLO copy_4_move_4through7 + JMP copy_4_move_8through16 + +copy_4_move_3: + MOVHU (R13), R10 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R11 + MOVH R10, (R3) + MOVB R11, 2(R3) + ADD R12, R13, R13 + ADD R12, R3, R3 + JMP copy_4_end + +copy_4_move_4through7: + MOVWU (R13), R10 + ADD R12, R13, R15 + MOVWU -4(R15), R11 + MOVW R10, (R3) + ADD R12, R3, R15 + MOVW R11, -4(R15) + ADD R12, R13, R13 + ADD R12, R3, R3 + JMP copy_4_end + +copy_4_move_8through16: + MOVD (R13), R10 + ADD R12, R13, R15 + MOVD -8(R15), R11 + MOVD R10, (R3) + ADD R12, R3, R15 + MOVD R11, -8(R15) + ADD R12, R13, R13 + ADD R12, R3, R3 + +copy_4_end: + ADD R12, R6, R6 + ADD $0x18, R0, R0 + ADD $1, R2, R2 + CMP R1, R2 + BLO main_loop + JMP loop_finished + +copy_all_from_history: + MOVD R10, R14 + SUBS $0x10, R14, R14 + BLO copy_5_small + +copy_5_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R3) + ADD $0x10, R13, R13 + ADD $0x10, R3, R3 + SUBS $0x10, R14, R14 + BHS copy_5_loop + ADD R14, R13, R13 + ADD $16, R13, R13 + ADD R14, R3, R3 + ADD $16, R3, R3 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R3, R15 + VST1 [V0.B16], (R15) + JMP copy_5_end + +copy_5_small: + CMP $0x03, R10 + BEQ copy_5_move_3 + BLO copy_5_move_1or2 + CMP $0x08, R10 + BLO copy_5_move_4through7 + JMP copy_5_move_8through16 + +copy_5_move_1or2: + MOVBU (R13), R16 + BFI $0, R16, $8, R14 + ADD R10, R13, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R4 + MOVB R14, (R3) + ADD R10, R3, R15 + MOVB R4, -1(R15) + ADD R10, R13, R13 + ADD R10, R3, R3 + JMP copy_5_end + +copy_5_move_3: + MOVHU (R13), R14 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R4 + MOVH R14, (R3) + MOVB R4, 2(R3) + ADD R10, R13, R13 + ADD R10, R3, R3 + JMP copy_5_end + +copy_5_move_4through7: + MOVWU (R13), R14 + ADD R10, R13, R15 + MOVWU -4(R15), R4 + MOVW R14, (R3) + ADD R10, R3, R15 + MOVW R4, -4(R15) + ADD R10, R13, R13 + ADD R10, R3, R3 + JMP copy_5_end + +copy_5_move_8through16: + MOVD (R13), R14 + ADD R10, R13, R15 + MOVD -8(R15), R4 + MOVD R14, (R3) + ADD R10, R3, R15 + MOVD R4, -8(R15) + ADD R10, R13, R13 + ADD R10, R3, R3 + +copy_5_end: + ADD R10, R6, R6 + SUB R10, R12, R12 + + // Copy match from the current buffer +copy_match: + MOVD R3, R10 + SUB R11, R10, R10 + + // ml <= mo + CMP R11, R12 + BHI copy_overlapping_match + + // Copy non-overlapping match + ADD R12, R6, R6 + MOVD R3, R11 + ADD R12, R3, R3 + +copy_2: + VLD1 (R10), [V0.B16] + VST1 [V0.B16], (R11) + ADD $0x10, R10, R10 + ADD $0x10, R11, R11 + SUBS $0x10, R12, R12 + BHI copy_2 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADD R12, R6, R6 + +copy_slow_3: + MOVBU (R10), R16 + BFI $0, R16, $8, R11 + MOVB R11, (R3) + ADD $1, R10, R10 + ADD $1, R3, R3 + SUBS $1, R12, R12 + BNE copy_slow_3 + +handle_loop: + ADD $0x18, R0, R0 + ADD $1, R2, R2 + CMP R1, R2 + BLO main_loop + +loop_finished: + // Return value + MOVD $0x01, R16 + MOVB R16, ret+8(FP) + + // Update the context + MOVD ctx+0(FP), R0 + MOVD R2, 24(R0) + MOVD R6, 104(R0) + MOVD 80(R0), R16 + SUB R16, R5, R5 + MOVD R5, 112(R0) + RET + +error_match_off_too_big: + // Return value + MOVD $0x00, R16 + MOVB R16, ret+8(FP) + + // Update the context + MOVD ctx+0(FP), R0 + MOVD R2, 24(R0) + MOVD R6, 104(R0) + MOVD 80(R0), R16 + SUB R16, R5, R5 + MOVD R5, 112(R0) + RET + +empty_seqs: + // Return value + MOVD $0x01, R16 + MOVB R16, ret+8(FP) + RET + +// func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool +// Requires: SSE +TEXT ·sequenceDecs_executeSimple_safe_arm64(SB), $8-9 + MOVD ctx+0(FP), R9 + MOVD 8(R9), R1 + TST R1, R1 + BEQ empty_seqs + MOVD (R9), R0 + MOVD 24(R9), R2 + MOVD 32(R9), R3 + MOVD 80(R9), R5 + MOVD 104(R9), R6 + MOVD 120(R9), R7 + MOVD 56(R9), R8 + MOVD 64(R9), R9 + ADD R9, R8, R8 + + // seqsBase += 24 * seqIndex + ADD R2<<1, R2, R10 + LSL $0x03, R10, R10 + ADD R10, R0, R0 + + // outBase += outPosition + ADD R6, R3, R3 + +main_loop: + MOVD (R0), R10 + MOVD 16(R0), R11 + MOVD 8(R0), R12 + + // Copy literals + TST R10, R10 + BEQ check_offset + MOVD R10, R13 + SUBS $0x10, R13, R13 + BLO copy_1_small + +copy_1_loop: + VLD1 (R5), [V0.B16] + VST1 [V0.B16], (R3) + ADD $0x10, R5, R5 + ADD $0x10, R3, R3 + SUBS $0x10, R13, R13 + BHS copy_1_loop + ADD R13, R5, R5 + ADD $16, R5, R5 + ADD R13, R3, R3 + ADD $16, R3, R3 + ADD $-16, R5, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R3, R15 + VST1 [V0.B16], (R15) + JMP copy_1_end + +copy_1_small: + CMP $0x03, R10 + BEQ copy_1_move_3 + BLO copy_1_move_1or2 + CMP $0x08, R10 + BLO copy_1_move_4through7 + JMP copy_1_move_8through16 + +copy_1_move_1or2: + MOVBU (R5), R16 + BFI $0, R16, $8, R13 + ADD R10, R5, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R14 + MOVB R13, (R3) + ADD R10, R3, R15 + MOVB R14, -1(R15) + ADD R10, R5, R5 + ADD R10, R3, R3 + JMP copy_1_end + +copy_1_move_3: + MOVHU (R5), R13 + MOVBU 2(R5), R16 + BFI $0, R16, $8, R14 + MOVH R13, (R3) + MOVB R14, 2(R3) + ADD R10, R5, R5 + ADD R10, R3, R3 + JMP copy_1_end + +copy_1_move_4through7: + MOVWU (R5), R13 + ADD R10, R5, R15 + MOVWU -4(R15), R14 + MOVW R13, (R3) + ADD R10, R3, R15 + MOVW R14, -4(R15) + ADD R10, R5, R5 + ADD R10, R3, R3 + JMP copy_1_end + +copy_1_move_8through16: + MOVD (R5), R13 + ADD R10, R5, R15 + MOVD -8(R15), R14 + MOVD R13, (R3) + ADD R10, R3, R15 + MOVD R14, -8(R15) + ADD R10, R5, R5 + ADD R10, R3, R3 + +copy_1_end: + ADD R10, R6, R6 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + ADD R9, R6, R10 + CMP R10, R11 + BGT error_match_off_too_big + CMP R7, R11 + BGT error_match_off_too_big + + // Copy match from history + MOVD R11, R10 + SUBS R6, R10, R10 + BLS copy_match + MOVD R8, R13 + SUB R10, R13, R13 + CMP R10, R12 + BGT copy_all_from_history + MOVD R12, R10 + SUBS $0x10, R10, R10 + BLO copy_4_small + +copy_4_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R3) + ADD $0x10, R13, R13 + ADD $0x10, R3, R3 + SUBS $0x10, R10, R10 + BHS copy_4_loop + ADD R10, R13, R13 + ADD $16, R13, R13 + ADD R10, R3, R3 + ADD $16, R3, R3 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R3, R15 + VST1 [V0.B16], (R15) + JMP copy_4_end + +copy_4_small: + CMP $0x03, R12 + BEQ copy_4_move_3 + CMP $0x08, R12 + BLO copy_4_move_4through7 + JMP copy_4_move_8through16 + +copy_4_move_3: + MOVHU (R13), R10 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R11 + MOVH R10, (R3) + MOVB R11, 2(R3) + ADD R12, R13, R13 + ADD R12, R3, R3 + JMP copy_4_end + +copy_4_move_4through7: + MOVWU (R13), R10 + ADD R12, R13, R15 + MOVWU -4(R15), R11 + MOVW R10, (R3) + ADD R12, R3, R15 + MOVW R11, -4(R15) + ADD R12, R13, R13 + ADD R12, R3, R3 + JMP copy_4_end + +copy_4_move_8through16: + MOVD (R13), R10 + ADD R12, R13, R15 + MOVD -8(R15), R11 + MOVD R10, (R3) + ADD R12, R3, R15 + MOVD R11, -8(R15) + ADD R12, R13, R13 + ADD R12, R3, R3 + +copy_4_end: + ADD R12, R6, R6 + ADD $0x18, R0, R0 + ADD $1, R2, R2 + CMP R1, R2 + BLO main_loop + JMP loop_finished + +copy_all_from_history: + MOVD R10, R14 + SUBS $0x10, R14, R14 + BLO copy_5_small + +copy_5_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R3) + ADD $0x10, R13, R13 + ADD $0x10, R3, R3 + SUBS $0x10, R14, R14 + BHS copy_5_loop + ADD R14, R13, R13 + ADD $16, R13, R13 + ADD R14, R3, R3 + ADD $16, R3, R3 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R3, R15 + VST1 [V0.B16], (R15) + JMP copy_5_end + +copy_5_small: + CMP $0x03, R10 + BEQ copy_5_move_3 + BLO copy_5_move_1or2 + CMP $0x08, R10 + BLO copy_5_move_4through7 + JMP copy_5_move_8through16 + +copy_5_move_1or2: + MOVBU (R13), R16 + BFI $0, R16, $8, R14 + ADD R10, R13, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R4 + MOVB R14, (R3) + ADD R10, R3, R15 + MOVB R4, -1(R15) + ADD R10, R13, R13 + ADD R10, R3, R3 + JMP copy_5_end + +copy_5_move_3: + MOVHU (R13), R14 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R4 + MOVH R14, (R3) + MOVB R4, 2(R3) + ADD R10, R13, R13 + ADD R10, R3, R3 + JMP copy_5_end + +copy_5_move_4through7: + MOVWU (R13), R14 + ADD R10, R13, R15 + MOVWU -4(R15), R4 + MOVW R14, (R3) + ADD R10, R3, R15 + MOVW R4, -4(R15) + ADD R10, R13, R13 + ADD R10, R3, R3 + JMP copy_5_end + +copy_5_move_8through16: + MOVD (R13), R14 + ADD R10, R13, R15 + MOVD -8(R15), R4 + MOVD R14, (R3) + ADD R10, R3, R15 + MOVD R4, -8(R15) + ADD R10, R13, R13 + ADD R10, R3, R3 + +copy_5_end: + ADD R10, R6, R6 + SUB R10, R12, R12 + + // Copy match from the current buffer +copy_match: + MOVD R3, R10 + SUB R11, R10, R10 + + // ml <= mo + CMP R11, R12 + BHI copy_overlapping_match + + // Copy non-overlapping match + ADD R12, R6, R6 + MOVD R12, R11 + SUBS $0x10, R11, R11 + BLO copy_2_small + +copy_2_loop: + VLD1 (R10), [V0.B16] + VST1 [V0.B16], (R3) + ADD $0x10, R10, R10 + ADD $0x10, R3, R3 + SUBS $0x10, R11, R11 + BHS copy_2_loop + ADD R11, R10, R10 + ADD $16, R10, R10 + ADD R11, R3, R3 + ADD $16, R3, R3 + ADD $-16, R10, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R3, R15 + VST1 [V0.B16], (R15) + JMP copy_2_end + +copy_2_small: + CMP $0x03, R12 + BEQ copy_2_move_3 + BLO copy_2_move_1or2 + CMP $0x08, R12 + BLO copy_2_move_4through7 + JMP copy_2_move_8through16 + +copy_2_move_1or2: + MOVBU (R10), R16 + BFI $0, R16, $8, R11 + ADD R12, R10, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R13 + MOVB R11, (R3) + ADD R12, R3, R15 + MOVB R13, -1(R15) + ADD R12, R10, R10 + ADD R12, R3, R3 + JMP copy_2_end + +copy_2_move_3: + MOVHU (R10), R11 + MOVBU 2(R10), R16 + BFI $0, R16, $8, R13 + MOVH R11, (R3) + MOVB R13, 2(R3) + ADD R12, R10, R10 + ADD R12, R3, R3 + JMP copy_2_end + +copy_2_move_4through7: + MOVWU (R10), R11 + ADD R12, R10, R15 + MOVWU -4(R15), R13 + MOVW R11, (R3) + ADD R12, R3, R15 + MOVW R13, -4(R15) + ADD R12, R10, R10 + ADD R12, R3, R3 + JMP copy_2_end + +copy_2_move_8through16: + MOVD (R10), R11 + ADD R12, R10, R15 + MOVD -8(R15), R13 + MOVD R11, (R3) + ADD R12, R3, R15 + MOVD R13, -8(R15) + ADD R12, R10, R10 + ADD R12, R3, R3 + +copy_2_end: + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADD R12, R6, R6 + +copy_slow_3: + MOVBU (R10), R16 + BFI $0, R16, $8, R11 + MOVB R11, (R3) + ADD $1, R10, R10 + ADD $1, R3, R3 + SUBS $1, R12, R12 + BNE copy_slow_3 + +handle_loop: + ADD $0x18, R0, R0 + ADD $1, R2, R2 + CMP R1, R2 + BLO main_loop + +loop_finished: + // Return value + MOVD $0x01, R16 + MOVB R16, ret+8(FP) + + // Update the context + MOVD ctx+0(FP), R0 + MOVD R2, 24(R0) + MOVD R6, 104(R0) + MOVD 80(R0), R16 + SUB R16, R5, R5 + MOVD R5, 112(R0) + RET + +error_match_off_too_big: + // Return value + MOVD $0x00, R16 + MOVB R16, ret+8(FP) + + // Update the context + MOVD ctx+0(FP), R0 + MOVD R2, 24(R0) + MOVD R6, 104(R0) + MOVD 80(R0), R16 + SUB R16, R5, R5 + MOVD R5, 112(R0) + RET + +empty_seqs: + // Return value + MOVD $0x01, R16 + MOVB R16, ret+8(FP) + RET + +// func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +// Requires: CMOV, SSE +TEXT ·sequenceDecs_decodeSync_arm64(SB), $64-32 + MOVD br+8(FP), R1 + MOVD 24(R1), R2 + MOVBU 40(R1), R3 + MOVD (R1), R0 + MOVD 32(R1), R5 + ADD R5, R0, R0 + MOVD R0, 8(RSP) + MOVD ctx+16(FP), R0 + MOVD 72(R0), R6 + MOVD 80(R0), R7 + MOVD 88(R0), R8 + MOVD $0, R1 + MOVD R1, 16(RSP) + MOVD R1, 24(RSP) + MOVD R1, 32(RSP) + MOVD 112(R0), R9 + MOVD 128(R0), R1 + MOVD R1, 40(RSP) + MOVD 144(R0), R10 + MOVD 136(R0), R11 + MOVD 200(R0), R1 + MOVD R1, 64(RSP) + MOVD 176(R0), R1 + MOVD R1, 56(RSP) + MOVD 184(R0), R0 + MOVD R0, 48(RSP) + MOVD 48(RSP), R0 + MOVD 56(RSP), R16 + ADD R0, R16, R16 + MOVD R16, 56(RSP) + + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) + MOVD 40(RSP), R16 + ADD R9, R16, R16 + MOVD R16, 40(RSP) + + // outBase += outPosition + ADD R11, R9, R9 + +sequenceDecs_decodeSync_amd64_main_loop: + MOVD 8(RSP), R12 + + // Fill bitreader to have enough for the offset and match length. + CMP $0x08, R5 + BLT sequenceDecs_decodeSync_amd64_fill_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R12, R12 + MOVD (R12), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decodeSync_amd64_fill_end + +sequenceDecs_decodeSync_amd64_fill_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decodeSync_amd64_fill_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decodeSync_amd64_fill_end + LSL $0x08, R2, R2 + SUB $0x01, R12, R12 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R12), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decodeSync_amd64_fill_byte_by_byte + +sequenceDecs_decodeSync_amd64_fill_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decodeSync_amd64_fill_end: + // Update offset + MOVD R8, R0 + MOVD R3, R1 + MOVD R2, R13 + LSL R1, R13, R13 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decodeSync_amd64_of_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decodeSync_amd64_of_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decodeSync_amd64_of_update_zero + NEG R1, R1 + LSR R1, R13, R13 + ADD R13, R0, R0 + +sequenceDecs_decodeSync_amd64_of_update_zero: + MOVD R0, 16(RSP) + + // Update match length + MOVD R7, R0 + MOVD R3, R1 + MOVD R2, R13 + LSL R1, R13, R13 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decodeSync_amd64_ml_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decodeSync_amd64_ml_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decodeSync_amd64_ml_update_zero + NEG R1, R1 + LSR R1, R13, R13 + ADD R13, R0, R0 + +sequenceDecs_decodeSync_amd64_ml_update_zero: + MOVD R0, 24(RSP) + + // Fill bitreader to have enough for the remaining + CMP $0x08, R5 + BLT sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R12, R12 + MOVD (R12), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decodeSync_amd64_fill_2_end + +sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decodeSync_amd64_fill_2_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decodeSync_amd64_fill_2_end + LSL $0x08, R2, R2 + SUB $0x01, R12, R12 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R12), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte + +sequenceDecs_decodeSync_amd64_fill_2_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decodeSync_amd64_fill_2_end: + // Update literal length + MOVD R6, R0 + MOVD R3, R1 + MOVD R2, R13 + LSL R1, R13, R13 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decodeSync_amd64_ll_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decodeSync_amd64_ll_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decodeSync_amd64_ll_update_zero + NEG R1, R1 + LSR R1, R13, R13 + ADD R13, R0, R0 + +sequenceDecs_decodeSync_amd64_ll_update_zero: + MOVD R0, 32(RSP) + + // Fill bitreader for state updates + MOVD R12, 8(RSP) + MOVD R8, R0 + LSR $0x08, R0, R0 + MOVBU R0, R0 + MOVD ctx+16(FP), R1 + MOVD 96(R1), R16 + CMP $0x00, R16 + BEQ sequenceDecs_decodeSync_amd64_skip_update + + // Update Literal Length State + MOVBU R6, R12 + LSRW $0x10, R6, R6 + ADD R12, R3, R1 + MOVD R2, R13 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R13, R13 + MOVD $0x00000001, R14 + BFI $0, R12, $8, R1 + LSLW R1, R14, R14 + SUBW $1, R14, R14 + AND R14, R13, R13 + ADD R13, R6, R6 + + // Load ctx.llTable + MOVD ctx+16(FP), R1 + MOVD (R1), R1 + ADD R6<<3, R1, R15 + MOVD (R15), R6 + + // Update Match Length State + MOVBU R7, R12 + LSRW $0x10, R7, R7 + ADD R12, R3, R1 + MOVD R2, R13 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R13, R13 + MOVD $0x00000001, R14 + BFI $0, R12, $8, R1 + LSLW R1, R14, R14 + SUBW $1, R14, R14 + AND R14, R13, R13 + ADD R13, R7, R7 + + // Load ctx.mlTable + MOVD ctx+16(FP), R1 + MOVD 24(R1), R1 + ADD R7<<3, R1, R15 + MOVD (R15), R7 + + // Update Offset State + MOVBU R8, R12 + LSRW $0x10, R8, R8 + ADD R12, R3, R1 + MOVD R2, R13 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R13, R13 + MOVD $0x00000001, R14 + BFI $0, R12, $8, R1 + LSLW R1, R14, R14 + SUBW $1, R14, R14 + AND R14, R13, R13 + ADD R13, R8, R8 + + // Load ctx.ofTable + MOVD ctx+16(FP), R1 + MOVD 48(R1), R1 + ADD R8<<3, R1, R15 + MOVD (R15), R8 + +sequenceDecs_decodeSync_amd64_skip_update: + // Adjust offset + MOVD s+0(FP), R1 + MOVD 16(RSP), R12 + CMP $0x01, R0 + BLS sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0 + ADD $144, R1, R15 + VLD1 (R15), [V0.B16] + MOVD R12, 144(R1) + ADD $152, R1, R15 + VST1 [V0.B16], (R15) + JMP sequenceDecs_decodeSync_amd64_after_adjust + +sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0: + MOVD 32(RSP), R16 + CMP $0x00000000, R16 + BNE sequenceDecs_decodeSync_amd64_adjust_offset_maybezero + ADD $1, R12, R12 + JMP sequenceDecs_decodeSync_amd64_adjust_offset_nonzero + +sequenceDecs_decodeSync_amd64_adjust_offset_maybezero: + TST R12, R12 + BNE sequenceDecs_decodeSync_amd64_adjust_offset_nonzero + MOVD 144(R1), R12 + JMP sequenceDecs_decodeSync_amd64_after_adjust + +sequenceDecs_decodeSync_amd64_adjust_offset_nonzero: + MOVD R12, R0 + MOVD $0, R13 + MOVD $-1, R14 + CMP $0x03, R12 + CSEL EQ, R13, R0, R0 + CSEL EQ, R14, R13, R13 + ADD R0<<3, R1, R15 + MOVD 144(R15), R16 + ADDS R16, R13, R13 + BNE sequenceDecs_decodeSync_amd64_adjust_temp_valid + MOVD $0x00000001, R13 + +sequenceDecs_decodeSync_amd64_adjust_temp_valid: + CMP $0x01, R12 + BEQ sequenceDecs_decodeSync_amd64_adjust_skip + MOVD 152(R1), R0 + MOVD R0, 160(R1) + +sequenceDecs_decodeSync_amd64_adjust_skip: + MOVD 144(R1), R0 + MOVD R0, 152(R1) + MOVD R13, 144(R1) + MOVD R13, R12 + +sequenceDecs_decodeSync_amd64_after_adjust: + MOVD R12, 16(RSP) + + // Check values + MOVD 24(RSP), R0 + MOVD 32(RSP), R1 + ADD R1, R0, R13 + MOVD s+0(FP), R14 + MOVD 256(R14), R16 + ADD R13, R16, R16 + MOVD R16, 256(R14) + MOVD ctx+16(FP), R13 + MOVD 104(R13), R16 + SUBS R1, R16, R16 + MOVD R16, 104(R13) + BMI error_not_enough_literals + CMP $0x00020002, R0 + BHI sequenceDecs_decodeSync_amd64_error_match_len_too_big + TST R12, R12 + BNE sequenceDecs_decodeSync_amd64_match_len_ofs_ok + TST R0, R0 + BNE sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decodeSync_amd64_match_len_ofs_ok: + MOVD 32(RSP), R0 + MOVD 16(RSP), R1 + MOVD 24(RSP), R12 + + // Check if we have enough space in s.out + ADD R12, R0, R13 + ADD $16, R13, R13 + ADD R9, R13, R13 + MOVD 40(RSP), R16 + CMP R16, R13 + BHI error_not_enough_space + + // Copy literals + TST R0, R0 + BEQ check_offset + MOVD $0, R13 + +copy_1: + ADD R13, R10, R15 + VLD1 (R15), [V0.B16] + ADD R13, R9, R15 + VST1 [V0.B16], (R15) + ADD $0x10, R13, R13 + CMP R0, R13 + BLO copy_1 + ADD R0, R10, R10 + ADD R0, R9, R9 + ADD R0, R11, R11 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + MOVD R11, R0 + MOVD 48(RSP), R16 + ADD R16, R0, R0 + CMP R0, R1 + BGT error_match_off_too_big + MOVD 64(RSP), R16 + CMP R16, R1 + BGT error_match_off_too_big + + // Copy match from history + MOVD R1, R0 + SUBS R11, R0, R0 + BLS copy_match + MOVD 56(RSP), R13 + SUB R0, R13, R13 + CMP R0, R12 + BGT copy_all_from_history + MOVD R12, R0 + SUBS $0x10, R0, R0 + BLO copy_4_small + +copy_4_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R9) + ADD $0x10, R13, R13 + ADD $0x10, R9, R9 + SUBS $0x10, R0, R0 + BHS copy_4_loop + ADD R0, R13, R13 + ADD $16, R13, R13 + ADD R0, R9, R9 + ADD $16, R9, R9 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R9, R15 + VST1 [V0.B16], (R15) + JMP copy_4_end + +copy_4_small: + CMP $0x03, R12 + BEQ copy_4_move_3 + CMP $0x08, R12 + BLO copy_4_move_4through7 + JMP copy_4_move_8through16 + +copy_4_move_3: + MOVHU (R13), R0 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R1 + MOVH R0, (R9) + MOVB R1, 2(R9) + ADD R12, R13, R13 + ADD R12, R9, R9 + JMP copy_4_end + +copy_4_move_4through7: + MOVWU (R13), R0 + ADD R12, R13, R15 + MOVWU -4(R15), R1 + MOVW R0, (R9) + ADD R12, R9, R15 + MOVW R1, -4(R15) + ADD R12, R13, R13 + ADD R12, R9, R9 + JMP copy_4_end + +copy_4_move_8through16: + MOVD (R13), R0 + ADD R12, R13, R15 + MOVD -8(R15), R1 + MOVD R0, (R9) + ADD R12, R9, R15 + MOVD R1, -8(R15) + ADD R12, R13, R13 + ADD R12, R9, R9 + +copy_4_end: + ADD R12, R11, R11 + JMP handle_loop + JMP loop_finished + +copy_all_from_history: + MOVD R0, R14 + SUBS $0x10, R14, R14 + BLO copy_5_small + +copy_5_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R9) + ADD $0x10, R13, R13 + ADD $0x10, R9, R9 + SUBS $0x10, R14, R14 + BHS copy_5_loop + ADD R14, R13, R13 + ADD $16, R13, R13 + ADD R14, R9, R9 + ADD $16, R9, R9 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R9, R15 + VST1 [V0.B16], (R15) + JMP copy_5_end + +copy_5_small: + CMP $0x03, R0 + BEQ copy_5_move_3 + BLO copy_5_move_1or2 + CMP $0x08, R0 + BLO copy_5_move_4through7 + JMP copy_5_move_8through16 + +copy_5_move_1or2: + MOVBU (R13), R16 + BFI $0, R16, $8, R14 + ADD R0, R13, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R4 + MOVB R14, (R9) + ADD R0, R9, R15 + MOVB R4, -1(R15) + ADD R0, R13, R13 + ADD R0, R9, R9 + JMP copy_5_end + +copy_5_move_3: + MOVHU (R13), R14 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R4 + MOVH R14, (R9) + MOVB R4, 2(R9) + ADD R0, R13, R13 + ADD R0, R9, R9 + JMP copy_5_end + +copy_5_move_4through7: + MOVWU (R13), R14 + ADD R0, R13, R15 + MOVWU -4(R15), R4 + MOVW R14, (R9) + ADD R0, R9, R15 + MOVW R4, -4(R15) + ADD R0, R13, R13 + ADD R0, R9, R9 + JMP copy_5_end + +copy_5_move_8through16: + MOVD (R13), R14 + ADD R0, R13, R15 + MOVD -8(R15), R4 + MOVD R14, (R9) + ADD R0, R9, R15 + MOVD R4, -8(R15) + ADD R0, R13, R13 + ADD R0, R9, R9 + +copy_5_end: + ADD R0, R11, R11 + SUB R0, R12, R12 + + // Copy match from the current buffer +copy_match: + MOVD R9, R0 + SUB R1, R0, R0 + + // ml <= mo + CMP R1, R12 + BHI copy_overlapping_match + + // Copy non-overlapping match + ADD R12, R11, R11 + MOVD R9, R1 + ADD R12, R9, R9 + +copy_2: + VLD1 (R0), [V0.B16] + VST1 [V0.B16], (R1) + ADD $0x10, R0, R0 + ADD $0x10, R1, R1 + SUBS $0x10, R12, R12 + BHI copy_2 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADD R12, R11, R11 + +copy_slow_3: + MOVBU (R0), R16 + BFI $0, R16, $8, R1 + MOVB R1, (R9) + ADD $1, R0, R0 + ADD $1, R9, R9 + SUBS $1, R12, R12 + BNE copy_slow_3 + +handle_loop: + MOVD ctx+16(FP), R0 + MOVD 96(R0), R16 + SUBS $1, R16, R16 + MOVD R16, 96(R0) + BPL sequenceDecs_decodeSync_amd64_main_loop + +loop_finished: + MOVD br+8(FP), R0 + MOVD R2, 24(R0) + MOVB R3, 40(R0) + MOVD R5, 32(R0) + + // Update the context + MOVD ctx+16(FP), R0 + MOVD R11, 136(R0) + MOVD 144(R0), R1 + SUB R1, R10, R10 + MOVD R10, 168(R0) + + // Return success + MOVD $0x00000000, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch: + MOVD 24(RSP), R0 + MOVD ctx+16(FP), R1 + MOVD R0, 216(R1) + MOVD $0x00000001, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decodeSync_amd64_error_match_len_too_big: + MOVD ctx+16(FP), R0 + MOVD 24(RSP), R1 + MOVD R1, 216(R0) + MOVD $0x00000002, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match offset too long error +error_match_off_too_big: + MOVD ctx+16(FP), R0 + MOVD 16(RSP), R1 + MOVD R1, 224(R0) + MOVD R11, 136(R0) + MOVD $0x00000003, R16 + MOVD R16, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVD ctx+16(FP), R0 + MOVD 32(RSP), R1 + MOVD R1, 208(R0) + MOVD $0x00000004, R16 + MOVD R16, ret+24(FP) + RET + + // Return with overread error +error_overread: + MOVD $0x00000006, R16 + MOVD R16, ret+24(FP) + RET + + // Return with not enough output space error +error_not_enough_space: + MOVD ctx+16(FP), R0 + MOVD 32(RSP), R1 + MOVD R1, 208(R0) + MOVD 24(RSP), R1 + MOVD R1, 216(R0) + MOVD R11, 136(R0) + MOVD $0x00000005, R16 + MOVD R16, ret+24(FP) + RET + +// skipped sequenceDecs_decodeSync_bmi2 (generic twin preferred on arm64) + +// func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +// Requires: CMOV, SSE +TEXT ·sequenceDecs_decodeSync_safe_arm64(SB), $64-32 + MOVD br+8(FP), R1 + MOVD 24(R1), R2 + MOVBU 40(R1), R3 + MOVD (R1), R0 + MOVD 32(R1), R5 + ADD R5, R0, R0 + MOVD R0, 8(RSP) + MOVD ctx+16(FP), R0 + MOVD 72(R0), R6 + MOVD 80(R0), R7 + MOVD 88(R0), R8 + MOVD $0, R1 + MOVD R1, 16(RSP) + MOVD R1, 24(RSP) + MOVD R1, 32(RSP) + MOVD 112(R0), R9 + MOVD 128(R0), R1 + MOVD R1, 40(RSP) + MOVD 144(R0), R10 + MOVD 136(R0), R11 + MOVD 200(R0), R1 + MOVD R1, 64(RSP) + MOVD 176(R0), R1 + MOVD R1, 56(RSP) + MOVD 184(R0), R0 + MOVD R0, 48(RSP) + MOVD 48(RSP), R0 + MOVD 56(RSP), R16 + ADD R0, R16, R16 + MOVD R16, 56(RSP) + + // Calculate pointer to s.out[cap(s.out)] (a past-end pointer) + MOVD 40(RSP), R16 + ADD R9, R16, R16 + MOVD R16, 40(RSP) + + // outBase += outPosition + ADD R11, R9, R9 + +sequenceDecs_decodeSync_safe_amd64_main_loop: + MOVD 8(RSP), R12 + + // Fill bitreader to have enough for the offset and match length. + CMP $0x08, R5 + BLT sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R12, R12 + MOVD (R12), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decodeSync_safe_amd64_fill_end + +sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decodeSync_safe_amd64_fill_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decodeSync_safe_amd64_fill_end + LSL $0x08, R2, R2 + SUB $0x01, R12, R12 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R12), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte + +sequenceDecs_decodeSync_safe_amd64_fill_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decodeSync_safe_amd64_fill_end: + // Update offset + MOVD R8, R0 + MOVD R3, R1 + MOVD R2, R13 + LSL R1, R13, R13 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decodeSync_safe_amd64_of_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decodeSync_safe_amd64_of_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decodeSync_safe_amd64_of_update_zero + NEG R1, R1 + LSR R1, R13, R13 + ADD R13, R0, R0 + +sequenceDecs_decodeSync_safe_amd64_of_update_zero: + MOVD R0, 16(RSP) + + // Update match length + MOVD R7, R0 + MOVD R3, R1 + MOVD R2, R13 + LSL R1, R13, R13 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decodeSync_safe_amd64_ml_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decodeSync_safe_amd64_ml_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decodeSync_safe_amd64_ml_update_zero + NEG R1, R1 + LSR R1, R13, R13 + ADD R13, R0, R0 + +sequenceDecs_decodeSync_safe_amd64_ml_update_zero: + MOVD R0, 24(RSP) + + // Fill bitreader to have enough for the remaining + CMP $0x08, R5 + BLT sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte + MOVD R3, R0 + LSR $0x03, R0, R0 + SUB R0, R12, R12 + MOVD (R12), R2 + SUB R0, R5, R5 + AND $0x07, R3, R3 + JMP sequenceDecs_decodeSync_safe_amd64_fill_2_end + +sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte: + CMP $0x00, R5 + BLE sequenceDecs_decodeSync_safe_amd64_fill_2_check_overread + CMP $0x07, R3 + BLE sequenceDecs_decodeSync_safe_amd64_fill_2_end + LSL $0x08, R2, R2 + SUB $0x01, R12, R12 + SUB $0x01, R5, R5 + SUB $0x08, R3, R3 + MOVBU (R12), R0 + ORR R0, R2, R2 + JMP sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte + +sequenceDecs_decodeSync_safe_amd64_fill_2_check_overread: + CMP $0x40, R3 + BHI error_overread + +sequenceDecs_decodeSync_safe_amd64_fill_2_end: + // Update literal length + MOVD R6, R0 + MOVD R3, R1 + MOVD R2, R13 + LSL R1, R13, R13 + UBFX $8, R0, $8, R16 + BFI $0, R16, $8, R1 + LSR $0x20, R0, R0 + TST R1, R1 + BEQ sequenceDecs_decodeSync_safe_amd64_ll_update_zero + ADD R1, R3, R3 + CMP $0x40, R3 + BHI sequenceDecs_decodeSync_safe_amd64_ll_update_zero + CMP $0x40, R1 + BHS sequenceDecs_decodeSync_safe_amd64_ll_update_zero + NEG R1, R1 + LSR R1, R13, R13 + ADD R13, R0, R0 + +sequenceDecs_decodeSync_safe_amd64_ll_update_zero: + MOVD R0, 32(RSP) + + // Fill bitreader for state updates + MOVD R12, 8(RSP) + MOVD R8, R0 + LSR $0x08, R0, R0 + MOVBU R0, R0 + MOVD ctx+16(FP), R1 + MOVD 96(R1), R16 + CMP $0x00, R16 + BEQ sequenceDecs_decodeSync_safe_amd64_skip_update + + // Update Literal Length State + MOVBU R6, R12 + LSRW $0x10, R6, R6 + ADD R12, R3, R1 + MOVD R2, R13 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R13, R13 + MOVD $0x00000001, R14 + BFI $0, R12, $8, R1 + LSLW R1, R14, R14 + SUBW $1, R14, R14 + AND R14, R13, R13 + ADD R13, R6, R6 + + // Load ctx.llTable + MOVD ctx+16(FP), R1 + MOVD (R1), R1 + ADD R6<<3, R1, R15 + MOVD (R15), R6 + + // Update Match Length State + MOVBU R7, R12 + LSRW $0x10, R7, R7 + ADD R12, R3, R1 + MOVD R2, R13 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R13, R13 + MOVD $0x00000001, R14 + BFI $0, R12, $8, R1 + LSLW R1, R14, R14 + SUBW $1, R14, R14 + AND R14, R13, R13 + ADD R13, R7, R7 + + // Load ctx.mlTable + MOVD ctx+16(FP), R1 + MOVD 24(R1), R1 + ADD R7<<3, R1, R15 + MOVD (R15), R7 + + // Update Offset State + MOVBU R8, R12 + LSRW $0x10, R8, R8 + ADD R12, R3, R1 + MOVD R2, R13 + MOVD R1, R3 + NEG R1, R16 + ROR R16, R13, R13 + MOVD $0x00000001, R14 + BFI $0, R12, $8, R1 + LSLW R1, R14, R14 + SUBW $1, R14, R14 + AND R14, R13, R13 + ADD R13, R8, R8 + + // Load ctx.ofTable + MOVD ctx+16(FP), R1 + MOVD 48(R1), R1 + ADD R8<<3, R1, R15 + MOVD (R15), R8 + +sequenceDecs_decodeSync_safe_amd64_skip_update: + // Adjust offset + MOVD s+0(FP), R1 + MOVD 16(RSP), R12 + CMP $0x01, R0 + BLS sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0 + ADD $144, R1, R15 + VLD1 (R15), [V0.B16] + MOVD R12, 144(R1) + ADD $152, R1, R15 + VST1 [V0.B16], (R15) + JMP sequenceDecs_decodeSync_safe_amd64_after_adjust + +sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0: + MOVD 32(RSP), R16 + CMP $0x00000000, R16 + BNE sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero + ADD $1, R12, R12 + JMP sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero + +sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero: + TST R12, R12 + BNE sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero + MOVD 144(R1), R12 + JMP sequenceDecs_decodeSync_safe_amd64_after_adjust + +sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero: + MOVD R12, R0 + MOVD $0, R13 + MOVD $-1, R14 + CMP $0x03, R12 + CSEL EQ, R13, R0, R0 + CSEL EQ, R14, R13, R13 + ADD R0<<3, R1, R15 + MOVD 144(R15), R16 + ADDS R16, R13, R13 + BNE sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid + MOVD $0x00000001, R13 + +sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid: + CMP $0x01, R12 + BEQ sequenceDecs_decodeSync_safe_amd64_adjust_skip + MOVD 152(R1), R0 + MOVD R0, 160(R1) + +sequenceDecs_decodeSync_safe_amd64_adjust_skip: + MOVD 144(R1), R0 + MOVD R0, 152(R1) + MOVD R13, 144(R1) + MOVD R13, R12 + +sequenceDecs_decodeSync_safe_amd64_after_adjust: + MOVD R12, 16(RSP) + + // Check values + MOVD 24(RSP), R0 + MOVD 32(RSP), R1 + ADD R1, R0, R13 + MOVD s+0(FP), R14 + MOVD 256(R14), R16 + ADD R13, R16, R16 + MOVD R16, 256(R14) + MOVD ctx+16(FP), R13 + MOVD 104(R13), R16 + SUBS R1, R16, R16 + MOVD R16, 104(R13) + BMI error_not_enough_literals + CMP $0x00020002, R0 + BHI sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big + TST R12, R12 + BNE sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok + TST R0, R0 + BNE sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok: + MOVD 32(RSP), R0 + MOVD 16(RSP), R1 + MOVD 24(RSP), R12 + + // Check if we have enough space in s.out + ADD R12, R0, R13 + ADD R9, R13, R13 + MOVD 40(RSP), R16 + CMP R16, R13 + BHI error_not_enough_space + + // Copy literals + TST R0, R0 + BEQ check_offset + MOVD R0, R13 + SUBS $0x10, R13, R13 + BLO copy_1_small + +copy_1_loop: + VLD1 (R10), [V0.B16] + VST1 [V0.B16], (R9) + ADD $0x10, R10, R10 + ADD $0x10, R9, R9 + SUBS $0x10, R13, R13 + BHS copy_1_loop + ADD R13, R10, R10 + ADD $16, R10, R10 + ADD R13, R9, R9 + ADD $16, R9, R9 + ADD $-16, R10, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R9, R15 + VST1 [V0.B16], (R15) + JMP copy_1_end + +copy_1_small: + CMP $0x03, R0 + BEQ copy_1_move_3 + BLO copy_1_move_1or2 + CMP $0x08, R0 + BLO copy_1_move_4through7 + JMP copy_1_move_8through16 + +copy_1_move_1or2: + MOVBU (R10), R16 + BFI $0, R16, $8, R13 + ADD R0, R10, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R14 + MOVB R13, (R9) + ADD R0, R9, R15 + MOVB R14, -1(R15) + ADD R0, R10, R10 + ADD R0, R9, R9 + JMP copy_1_end + +copy_1_move_3: + MOVHU (R10), R13 + MOVBU 2(R10), R16 + BFI $0, R16, $8, R14 + MOVH R13, (R9) + MOVB R14, 2(R9) + ADD R0, R10, R10 + ADD R0, R9, R9 + JMP copy_1_end + +copy_1_move_4through7: + MOVWU (R10), R13 + ADD R0, R10, R15 + MOVWU -4(R15), R14 + MOVW R13, (R9) + ADD R0, R9, R15 + MOVW R14, -4(R15) + ADD R0, R10, R10 + ADD R0, R9, R9 + JMP copy_1_end + +copy_1_move_8through16: + MOVD (R10), R13 + ADD R0, R10, R15 + MOVD -8(R15), R14 + MOVD R13, (R9) + ADD R0, R9, R15 + MOVD R14, -8(R15) + ADD R0, R10, R10 + ADD R0, R9, R9 + +copy_1_end: + ADD R0, R11, R11 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + MOVD R11, R0 + MOVD 48(RSP), R16 + ADD R16, R0, R0 + CMP R0, R1 + BGT error_match_off_too_big + MOVD 64(RSP), R16 + CMP R16, R1 + BGT error_match_off_too_big + + // Copy match from history + MOVD R1, R0 + SUBS R11, R0, R0 + BLS copy_match + MOVD 56(RSP), R13 + SUB R0, R13, R13 + CMP R0, R12 + BGT copy_all_from_history + MOVD R12, R0 + SUBS $0x10, R0, R0 + BLO copy_4_small + +copy_4_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R9) + ADD $0x10, R13, R13 + ADD $0x10, R9, R9 + SUBS $0x10, R0, R0 + BHS copy_4_loop + ADD R0, R13, R13 + ADD $16, R13, R13 + ADD R0, R9, R9 + ADD $16, R9, R9 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R9, R15 + VST1 [V0.B16], (R15) + JMP copy_4_end + +copy_4_small: + CMP $0x03, R12 + BEQ copy_4_move_3 + CMP $0x08, R12 + BLO copy_4_move_4through7 + JMP copy_4_move_8through16 + +copy_4_move_3: + MOVHU (R13), R0 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R1 + MOVH R0, (R9) + MOVB R1, 2(R9) + ADD R12, R13, R13 + ADD R12, R9, R9 + JMP copy_4_end + +copy_4_move_4through7: + MOVWU (R13), R0 + ADD R12, R13, R15 + MOVWU -4(R15), R1 + MOVW R0, (R9) + ADD R12, R9, R15 + MOVW R1, -4(R15) + ADD R12, R13, R13 + ADD R12, R9, R9 + JMP copy_4_end + +copy_4_move_8through16: + MOVD (R13), R0 + ADD R12, R13, R15 + MOVD -8(R15), R1 + MOVD R0, (R9) + ADD R12, R9, R15 + MOVD R1, -8(R15) + ADD R12, R13, R13 + ADD R12, R9, R9 + +copy_4_end: + ADD R12, R11, R11 + JMP handle_loop + JMP loop_finished + +copy_all_from_history: + MOVD R0, R14 + SUBS $0x10, R14, R14 + BLO copy_5_small + +copy_5_loop: + VLD1 (R13), [V0.B16] + VST1 [V0.B16], (R9) + ADD $0x10, R13, R13 + ADD $0x10, R9, R9 + SUBS $0x10, R14, R14 + BHS copy_5_loop + ADD R14, R13, R13 + ADD $16, R13, R13 + ADD R14, R9, R9 + ADD $16, R9, R9 + ADD $-16, R13, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R9, R15 + VST1 [V0.B16], (R15) + JMP copy_5_end + +copy_5_small: + CMP $0x03, R0 + BEQ copy_5_move_3 + BLO copy_5_move_1or2 + CMP $0x08, R0 + BLO copy_5_move_4through7 + JMP copy_5_move_8through16 + +copy_5_move_1or2: + MOVBU (R13), R16 + BFI $0, R16, $8, R14 + ADD R0, R13, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R4 + MOVB R14, (R9) + ADD R0, R9, R15 + MOVB R4, -1(R15) + ADD R0, R13, R13 + ADD R0, R9, R9 + JMP copy_5_end + +copy_5_move_3: + MOVHU (R13), R14 + MOVBU 2(R13), R16 + BFI $0, R16, $8, R4 + MOVH R14, (R9) + MOVB R4, 2(R9) + ADD R0, R13, R13 + ADD R0, R9, R9 + JMP copy_5_end + +copy_5_move_4through7: + MOVWU (R13), R14 + ADD R0, R13, R15 + MOVWU -4(R15), R4 + MOVW R14, (R9) + ADD R0, R9, R15 + MOVW R4, -4(R15) + ADD R0, R13, R13 + ADD R0, R9, R9 + JMP copy_5_end + +copy_5_move_8through16: + MOVD (R13), R14 + ADD R0, R13, R15 + MOVD -8(R15), R4 + MOVD R14, (R9) + ADD R0, R9, R15 + MOVD R4, -8(R15) + ADD R0, R13, R13 + ADD R0, R9, R9 + +copy_5_end: + ADD R0, R11, R11 + SUB R0, R12, R12 + + // Copy match from the current buffer +copy_match: + MOVD R9, R0 + SUB R1, R0, R0 + + // ml <= mo + CMP R1, R12 + BHI copy_overlapping_match + + // Copy non-overlapping match + ADD R12, R11, R11 + MOVD R12, R1 + SUBS $0x10, R1, R1 + BLO copy_2_small + +copy_2_loop: + VLD1 (R0), [V0.B16] + VST1 [V0.B16], (R9) + ADD $0x10, R0, R0 + ADD $0x10, R9, R9 + SUBS $0x10, R1, R1 + BHS copy_2_loop + ADD R1, R0, R0 + ADD $16, R0, R0 + ADD R1, R9, R9 + ADD $16, R9, R9 + ADD $-16, R0, R15 + VLD1 (R15), [V0.B16] + ADD $-16, R9, R15 + VST1 [V0.B16], (R15) + JMP copy_2_end + +copy_2_small: + CMP $0x03, R12 + BEQ copy_2_move_3 + BLO copy_2_move_1or2 + CMP $0x08, R12 + BLO copy_2_move_4through7 + JMP copy_2_move_8through16 + +copy_2_move_1or2: + MOVBU (R0), R16 + BFI $0, R16, $8, R1 + ADD R12, R0, R15 + MOVBU -1(R15), R16 + BFI $0, R16, $8, R13 + MOVB R1, (R9) + ADD R12, R9, R15 + MOVB R13, -1(R15) + ADD R12, R0, R0 + ADD R12, R9, R9 + JMP copy_2_end + +copy_2_move_3: + MOVHU (R0), R1 + MOVBU 2(R0), R16 + BFI $0, R16, $8, R13 + MOVH R1, (R9) + MOVB R13, 2(R9) + ADD R12, R0, R0 + ADD R12, R9, R9 + JMP copy_2_end + +copy_2_move_4through7: + MOVWU (R0), R1 + ADD R12, R0, R15 + MOVWU -4(R15), R13 + MOVW R1, (R9) + ADD R12, R9, R15 + MOVW R13, -4(R15) + ADD R12, R0, R0 + ADD R12, R9, R9 + JMP copy_2_end + +copy_2_move_8through16: + MOVD (R0), R1 + ADD R12, R0, R15 + MOVD -8(R15), R13 + MOVD R1, (R9) + ADD R12, R9, R15 + MOVD R13, -8(R15) + ADD R12, R0, R0 + ADD R12, R9, R9 + +copy_2_end: + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADD R12, R11, R11 + +copy_slow_3: + MOVBU (R0), R16 + BFI $0, R16, $8, R1 + MOVB R1, (R9) + ADD $1, R0, R0 + ADD $1, R9, R9 + SUBS $1, R12, R12 + BNE copy_slow_3 + +handle_loop: + MOVD ctx+16(FP), R0 + MOVD 96(R0), R16 + SUBS $1, R16, R16 + MOVD R16, 96(R0) + BPL sequenceDecs_decodeSync_safe_amd64_main_loop + +loop_finished: + MOVD br+8(FP), R0 + MOVD R2, 24(R0) + MOVB R3, 40(R0) + MOVD R5, 32(R0) + + // Update the context + MOVD ctx+16(FP), R0 + MOVD R11, 136(R0) + MOVD 144(R0), R1 + SUB R1, R10, R10 + MOVD R10, 168(R0) + + // Return success + MOVD $0x00000000, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch: + MOVD 24(RSP), R0 + MOVD ctx+16(FP), R1 + MOVD R0, 216(R1) + MOVD $0x00000001, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big: + MOVD ctx+16(FP), R0 + MOVD 24(RSP), R1 + MOVD R1, 216(R0) + MOVD $0x00000002, R16 + MOVD R16, ret+24(FP) + RET + + // Return with match offset too long error +error_match_off_too_big: + MOVD ctx+16(FP), R0 + MOVD 16(RSP), R1 + MOVD R1, 224(R0) + MOVD R11, 136(R0) + MOVD $0x00000003, R16 + MOVD R16, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVD ctx+16(FP), R0 + MOVD 32(RSP), R1 + MOVD R1, 208(R0) + MOVD $0x00000004, R16 + MOVD R16, ret+24(FP) + RET + + // Return with overread error +error_overread: + MOVD $0x00000006, R16 + MOVD R16, ret+24(FP) + RET + + // Return with not enough output space error +error_not_enough_space: + MOVD ctx+16(FP), R0 + MOVD 32(RSP), R1 + MOVD R1, 208(R0) + MOVD 24(RSP), R1 + MOVD R1, 216(R0) + MOVD R11, 136(R0) + MOVD $0x00000005, R16 + MOVD R16, ret+24(FP) + RET + +// skipped sequenceDecs_decodeSync_safe_bmi2 (generic twin preferred on arm64) diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go b/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go new file mode 100644 index 00000000..42ce5de7 --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_asm.go @@ -0,0 +1,316 @@ +//go:build (amd64 || arm64) && !appengine && !noasm && gc + +package zstd + +import ( + "fmt" + "io" +) + +// This file holds the parts of the assembly sequence decoder that are identical +// across architectures: the context structs exchanged with the asm, the error +// codes, and the decode/decodeSync/executeSimple wrappers. Each architecture +// supplies the small dispatch helpers (decodeAsm, decodeSyncAsm, +// executeSimpleAsm) that select the concrete asm routine — amd64 also chooses a +// BMI2 variant, arm64 has a single implementation. + +type decodeSyncAsmContext struct { + llTable []decSymbol + mlTable []decSymbol + ofTable []decSymbol + llState uint64 + mlState uint64 + ofState uint64 + iteration int + litRemain int + out []byte + outPosition int + literals []byte + litPosition int + history []byte + windowSize int + ll int // set on error (not for all errors, please refer to _generate/gen.go) + ml int // set on error (not for all errors, please refer to _generate/gen.go) + mo int // set on error (not for all errors, please refer to _generate/gen.go) +} + +type decodeAsmContext struct { + llTable []decSymbol + mlTable []decSymbol + ofTable []decSymbol + llState uint64 + mlState uint64 + ofState uint64 + iteration int + seqs []seqVals + litRemain int +} + +type executeAsmContext struct { + seqs []seqVals + seqIndex int + out []byte + history []byte + literals []byte + outPosition int + litPosition int + windowSize int +} + +const noError = 0 + +// error reported when mo == 0 && ml > 0 +const errorMatchLenOfsMismatch = 1 + +// error reported when ml > maxMatchLen +const errorMatchLenTooBig = 2 + +// error reported when mo > available history or mo > s.windowSize +const errorMatchOffTooBig = 3 + +// error reported when the sum of literal lengths exeeceds the literal buffer size +const errorNotEnoughLiterals = 4 + +// error reported when capacity of `out` is too small +const errorNotEnoughSpace = 5 + +// error reported when bits are overread. +const errorOverread = 6 + +// useSafeDecodeSync reports whether decodeSyncSimple must use the bounds-exact +// ("safe") copy variants for the current buffer geometry. +// +// When the output and literal buffers have compressedBlockOverAlloc (16) +// bytes of slack past their logical use, the assembly may use extended +// memory copies that read and write in 16-byte blocks, overrunning the end +// of a literal run or match by up to 15 bytes. Otherwise it must use the +// bounds-exact ("safe") copies. This mirrors the analogous, always-dynamic +// selection in executeSimple below. +// +// The unsafe copies were disabled in #644 (2022) as a mitigation for a +// crash, but that crash's root cause — an unguarded bitReader overread that +// produced out-of-range match offsets/lengths — was fixed three days later +// in #645, which also added the fuzz corpus that has guarded this path since. +// See #1168. An asan-instrumented fuzz job (see .github/workflows/go.yml) +// covers the extended-copy path, which -race and plain fuzzing cannot. +func (s *sequenceDecs) useSafeDecodeSync() bool { + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc { + return true + } + if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) { + return true + } + if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { + return true + } + return false +} + +// decode sequences from the stream with the provided history but without a dictionary. +func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { + if len(s.dict) > 0 { + return false, nil + } + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize { + return false, nil + } + + useSafe := s.useSafeDecodeSync() + + br := s.br + + maxBlockSize := min(s.windowSize, maxCompressedBlockSize) + + ctx := decodeSyncAsmContext{ + llTable: s.litLengths.fse.dt[:maxTablesize], + mlTable: s.matchLengths.fse.dt[:maxTablesize], + ofTable: s.offsets.fse.dt[:maxTablesize], + llState: uint64(s.litLengths.state.state), + mlState: uint64(s.matchLengths.state.state), + ofState: uint64(s.offsets.state.state), + iteration: s.nSeqs - 1, + litRemain: len(s.literals), + out: s.out, + outPosition: len(s.out), + literals: s.literals, + windowSize: s.windowSize, + history: hist, + } + + s.seqSize = 0 + startSize := len(s.out) + + errCode := decodeSyncAsm(s, br, &ctx, useSafe) + switch errCode { + case noError: + break + + case errorMatchLenOfsMismatch: + return true, fmt.Errorf("zero matchoff and matchlen (%d) > 0", ctx.ml) + + case errorMatchLenTooBig: + return true, fmt.Errorf("match len (%d) bigger than max allowed length", ctx.ml) + + case errorMatchOffTooBig: + return true, fmt.Errorf("match offset (%d) bigger than current history (%d)", + ctx.mo, ctx.outPosition+len(hist)-startSize) + + case errorNotEnoughLiterals: + return true, fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", + ctx.ll, ctx.litRemain+ctx.ll) + + case errorOverread: + return true, io.ErrUnexpectedEOF + + case errorNotEnoughSpace: + size := ctx.outPosition + ctx.ll + ctx.ml + if debugDecoder { + println("msl:", s.maxSyncLen, "cap", cap(s.out), "bef:", startSize, "sz:", size-startSize, "mbs:", maxBlockSize, "outsz:", cap(s.out)-startSize) + } + return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) + + default: + return true, fmt.Errorf("sequenceDecs_decode returned erroneous code %d", errCode) + } + + s.seqSize += ctx.litRemain + if s.seqSize > maxBlockSize { + return true, fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) + } + err := br.close() + if err != nil { + printf("Closing sequences: %v, %+v\n", err, *br) + return true, err + } + + s.literals = s.literals[ctx.litPosition:] + t := ctx.outPosition + s.out = s.out[:t] + + // Add final literals + s.out = append(s.out, s.literals...) + if debugDecoder { + t += len(s.literals) + if t != len(s.out) { + panic(fmt.Errorf("length mismatch, want %d, got %d", len(s.out), t)) + } + } + + return true, nil +} + +// decode sequences from the stream without the provided history. +func (s *sequenceDecs) decode(seqs []seqVals) error { + br := s.br + + maxBlockSize := min(s.windowSize, maxCompressedBlockSize) + + ctx := decodeAsmContext{ + llTable: s.litLengths.fse.dt[:maxTablesize], + mlTable: s.matchLengths.fse.dt[:maxTablesize], + ofTable: s.offsets.fse.dt[:maxTablesize], + llState: uint64(s.litLengths.state.state), + mlState: uint64(s.matchLengths.state.state), + ofState: uint64(s.offsets.state.state), + seqs: seqs, + iteration: len(seqs) - 1, + litRemain: len(s.literals), + } + + if debugDecoder { + println("decode: decoding", len(seqs), "sequences", br.remain(), "bits remain on stream") + } + + s.seqSize = 0 + lte56bits := s.maxBits+s.offsets.fse.actualTableLog+s.matchLengths.fse.actualTableLog+s.litLengths.fse.actualTableLog <= 56 + errCode := decodeAsm(s, br, &ctx, lte56bits) + if errCode != 0 { + i := len(seqs) - ctx.iteration - 1 + switch errCode { + case errorMatchLenOfsMismatch: + ml := ctx.seqs[i].ml + return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml) + + case errorMatchLenTooBig: + ml := ctx.seqs[i].ml + return fmt.Errorf("match len (%d) bigger than max allowed length", ml) + + case errorNotEnoughLiterals: + ll := ctx.seqs[i].ll + return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, ctx.litRemain+ll) + case errorOverread: + return io.ErrUnexpectedEOF + } + + return fmt.Errorf("sequenceDecs_decode_amd64 returned erroneous code %d", errCode) + } + + if ctx.litRemain < 0 { + return fmt.Errorf("literal count is too big: total available %d, total requested %d", + len(s.literals), len(s.literals)-ctx.litRemain) + } + + s.seqSize += ctx.litRemain + if s.seqSize > maxBlockSize { + return fmt.Errorf("output bigger than max block size (%d)", maxBlockSize) + } + if debugDecoder { + println("decode: ", br.remain(), "bits remain on stream. code:", errCode) + } + err := br.close() + if err != nil { + printf("Closing sequences: %v, %+v\n", err, *br) + } + return err +} + +// executeSimple handles cases when dictionary is not used. +func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error { + // Ensure we have enough output size... + if len(s.out)+s.seqSize+compressedBlockOverAlloc > cap(s.out) { + addBytes := s.seqSize + len(s.out) + compressedBlockOverAlloc + s.out = append(s.out, make([]byte, addBytes)...) + s.out = s.out[:len(s.out)-addBytes] + } + + if debugDecoder { + printf("Execute %d seqs with literals: %d into %d bytes\n", len(seqs), len(s.literals), s.seqSize) + } + + var t = len(s.out) + out := s.out[:t+s.seqSize] + + ctx := executeAsmContext{ + seqs: seqs, + seqIndex: 0, + out: out, + history: hist, + outPosition: t, + litPosition: 0, + literals: s.literals, + windowSize: s.windowSize, + } + // useSafe avoids overwriting the output buffer when the literals slice has + // not been allocated with the required over-allocation slack. + useSafe := cap(s.literals) < len(s.literals)+compressedBlockOverAlloc + + ok := executeSimpleAsm(&ctx, useSafe) + if !ok { + return fmt.Errorf("match offset (%d) bigger than current history (%d)", + seqs[ctx.seqIndex].mo, ctx.outPosition+len(hist)) + } + s.literals = s.literals[ctx.litPosition:] + t = ctx.outPosition + + // Add final literals + copy(out[t:], s.literals) + if debugDecoder { + t += len(s.literals) + if t != len(out) { + panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize)) + } + } + s.out = out + + return nil +} diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go b/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go index 516cd9b0..8a3db6ba 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go @@ -1,4 +1,4 @@ -//go:build !amd64 || appengine || !gc || noasm +//go:build (!amd64 && !arm64) || appengine || !gc || noasm package zstd diff --git a/vendor/github.com/klauspost/compress/zstd/snappy.go b/vendor/github.com/klauspost/compress/zstd/snappy.go index 336c2889..36c56f36 100644 --- a/vendor/github.com/klauspost/compress/zstd/snappy.go +++ b/vendor/github.com/klauspost/compress/zstd/snappy.go @@ -334,9 +334,10 @@ func decodeSnappy(blk *blockEnc, src []byte) error { return errUnsupportedLiteralLength } - //if length > snappyMaxBlockSize-d || uint32(length) > len(src)-s { - // return ErrSnappyCorrupt - //} + if length > len(src)-s { + println("length > len(src)-s", length, len(src)-s) + return ErrSnappyCorrupt + } blk.literals = append(blk.literals, src[s:s+length]...) //println(length, "litLen") diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index 1419e477..166f6372 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -17,7 +17,7 @@ import ( "unicode" "unicode/utf8" - // Wrapper around gopkg.in/yaml.v3 + // Wrapper around go.yaml.in/yaml/v3 "github.com/stretchr/testify/assert/yaml" "github.com/stretchr/testify/internal/difflib" "github.com/stretchr/testify/internal/spew" diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go index 5a74c4f4..956227ca 100644 --- a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go @@ -7,7 +7,7 @@ // go test -tags testify_yaml_custom // // This implementation can be used at build time to replace the default implementation -// to avoid linking with [gopkg.in/yaml.v3]. +// to avoid linking with [go.yaml.in/yaml/v3]. // // In your test package: // diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go index 0bae80e3..dd89ac03 100644 --- a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go @@ -6,7 +6,7 @@ // indirection with an alternative implementation of this package that uses // another implementation of YAML deserialization. This allows to not either not // use YAML deserialization at all, or to use another implementation than -// [gopkg.in/yaml.v3] (for example for license compatibility reasons, see [PR #1120]). +// [go.yaml.in/yaml/v3] (for example for license compatibility reasons, see [PR #1120]). // // Alternative implementations are selected using build tags: // @@ -28,9 +28,9 @@ // [PR #1120]: https://github.com/stretchr/testify/pull/1120 package yaml -import goyaml "gopkg.in/yaml.v3" +import goyaml "go.yaml.in/yaml/v3" -// Unmarshal is just a wrapper of [gopkg.in/yaml.v3.Unmarshal]. +// Unmarshal is just a wrapper of [go.yaml.in/yaml/v3.Unmarshal]. func Unmarshal(in []byte, out interface{}) error { return goyaml.Unmarshal(in, out) } diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go index 8041803f..a51d2792 100644 --- a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go @@ -3,7 +3,7 @@ // Package yaml is an implementation of YAML functions that always fail. // // This implementation can be used at build time to replace the default implementation -// to avoid linking with [gopkg.in/yaml.v3]: +// to avoid linking with [go.yaml.in/yaml/v3]: // // go test -tags testify_yaml_fail package yaml diff --git a/vendor/go.mongodb.org/mongo-driver/v2/bson/copier.go b/vendor/go.mongodb.org/mongo-driver/v2/bson/copier.go index c9a37c75..2779a5c6 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/bson/copier.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/bson/copier.go @@ -89,6 +89,9 @@ func copyBytesToValueWriter(src []byte, wef writeElementFn) error { if !ok { return fmt.Errorf("couldn't read length from src, not enough bytes. length=%d", len(src)) } + if length < 5 { + return fmt.Errorf("length must be at least 5 bytes. length=%d: %w", length, bsoncore.ErrInvalidLength) + } if len(src) < int(length) { return fmt.Errorf("length read exceeds number of bytes available. length=%d bytes=%d", len(src), length) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/chain_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/chain_provider.go index 4f593c09..4becf8aa 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/chain_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/chain_provider.go @@ -11,25 +11,20 @@ package credentials import ( + "context" + "errors" + "go.mongodb.org/mongo-driver/v2/internal/aws/awserr" ) -// A ChainProvider will search for a provider which returns credentials -// and cache that provider until Retrieve is called again. -// // The ChainProvider provides a way of chaining multiple providers together // which will pick the first available using priority order of the Providers // in the list. // // If none of the Providers retrieve valid credentials Value, ChainProvider's -// Retrieve() will return the error ErrNoValidProvidersFoundInChain. -// -// If a Provider is found which returns valid credentials Value ChainProvider -// will cache that Provider for all calls to IsExpired(), until Retrieve is -// called again. +// Retrieve() will return an error. type ChainProvider struct { Providers []Provider - curr Provider } // NewChainCredentials returns a pointer to a new Credentials object @@ -42,31 +37,19 @@ func NewChainCredentials(providers []Provider) *Credentials { // Retrieve returns the credentials value or error if no provider returned // without error. -// -// If a provider is found it will be cached and any calls to IsExpired() -// will return the expired state of the cached provider. -func (c *ChainProvider) Retrieve() (Value, error) { +func (c *ChainProvider) Retrieve(ctx context.Context) (Value, error) { errs := make([]error, 0, len(c.Providers)) for _, p := range c.Providers { - creds, err := p.Retrieve() + creds, err := p.Retrieve(ctx) if err == nil { - c.curr = p - return creds, nil + if !creds.Expired() && creds.HasKeys() { + return creds, nil + } + err = errors.New("credentials are invalid") } errs = append(errs, err) } - c.curr = nil err := awserr.NewBatchError("NoCredentialProviders", "no valid providers in chain", errs) return Value{}, err } - -// IsExpired will returned the expired state of the currently cached provider -// if there is one. If there is no current provider, true will be returned. -func (c *ChainProvider) IsExpired() bool { - if c.curr != nil { - return c.curr.IsExpired() - } - - return true -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/credentials.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/credentials.go index 919d0819..73985415 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/credentials.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/credentials/credentials.go @@ -4,15 +4,15 @@ // not use this file except in compliance with the License. You may obtain // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 // -// Based on github.com/aws/aws-sdk-go by Amazon.com, Inc. with code from: -// - github.com/aws/aws-sdk-go/blob/v1.44.225/aws/credentials/credentials.go +// Loosely based on github.com/aws/aws-sdk-go-v2 by Amazon.com, Inc. with code from: +// - github.com/aws/aws-sdk-go-v2/blob/v1.28.0/aws/credential_cache.go // See THIRD-PARTY-NOTICES for original license terms package credentials import ( "context" - "sync" + "sync/atomic" "time" "go.mongodb.org/mongo-driver/v2/internal/aws/awserr" @@ -33,8 +33,30 @@ type Value struct { // AWS Session Token SessionToken string - // Provider used to get credentials - ProviderName string + // Source of the credentials + Source string + + // States if the credentials can expire or not. + CanExpire bool + + // The time the credentials will expire at. Should be ignored if CanExpire + // is false. + Expires time.Time + + // The ID of the account for the credentials. + AccountID string +} + +// Expired returns if the credentials have expired. +func (v Value) Expired() bool { + if v.CanExpire { + // Calling Round(0) on the current time will truncate the monotonic + // reading only. Ensures credential expiry time is always based on + // reported wall-clock time. + return !v.Expires.After(time.Now().Round(0)) + } + + return false } // HasKeys returns if the credentials Value has both AccessKeyID and @@ -44,26 +66,14 @@ func (v Value) HasKeys() bool { } // A Provider is the interface for any component which will provide credentials -// Value. A provider is required to manage its own Expired state, and what to -// be expired means. +// Value. // -// The Provider should not need to implement its own mutexes, because -// that will be managed by Credentials. +// The Provider does not need to implement its own synchronization. Concurrent +// access is managed by Credentials. type Provider interface { - // Retrieve returns nil if it successfully retrieved the value. - // Error is returned if the value were not obtainable, or empty. - Retrieve() (Value, error) - - // IsExpired returns if the credentials are no longer valid, and need - // to be retrieved. - IsExpired() bool -} - -// ProviderWithContext is a Provider that can retrieve credentials with a Context -type ProviderWithContext interface { - Provider - - RetrieveWithContext(context.Context) (Value, error) + // Retrieve returns the credentials Value, or an error if the credentials + // could not be obtained or are empty. + Retrieve(context.Context) (Value, error) } // A Credentials provides concurrency safe retrieval of AWS credentials Value. @@ -79,13 +89,12 @@ type ProviderWithContext interface { // // The first Credentials.Get() will always call Provider.Retrieve() to get the // first instance of the credentials Value. All calls to Get() after that -// will return the cached credentials Value until IsExpired() returns true. +// will return the cached credentials Value until Expired() returns true. type Credentials struct { - sf singleflight.Group - - m sync.RWMutex - creds Value provider Provider + + creds atomic.Pointer[Value] + sf singleflight.Group } // NewCredentials returns a pointer to a new Credentials with the provider set. @@ -96,34 +105,22 @@ func NewCredentials(provider Provider) *Credentials { return c } -// GetWithContext returns the credentials value, or error if the credentials +// Get returns the credentials value, or error if the credentials // Value failed to be retrieved. Will return early if the passed in context is // canceled. // // Will return the cached credentials Value if it has not expired. If the // credentials Value has expired the Provider's Retrieve() will be called // to refresh the credentials. -// -// If Credentials.Expire() was called the credentials Value will be force -// expired, and the next call to Get() will cause them to be refreshed. -func (c *Credentials) GetWithContext(ctx context.Context) (Value, error) { - // Check if credentials are cached, and not expired. - select { - case curCreds, ok := <-c.asyncIsExpired(): - // ok will only be true, of the credentials were not expired. ok will - // be false and have no value if the credentials are expired. - if ok { - return curCreds, nil - } - case <-ctx.Done(): - return Value{}, awserr.New("RequestCanceled", - "request context canceled", ctx.Err()) +func (c *Credentials) Get(ctx context.Context) (Value, error) { + if v := c.creds.Load(); v != nil && *v != (Value{}) && v.HasKeys() && !v.Expired() { + return *v, nil } // Cannot pass context down to the actual retrieve, because the first // context would cancel the whole group when there is not direct // association of items in the group. - resCh := c.sf.DoChan("", func() (interface{}, error) { + resCh := c.sf.DoChan("", func() (any, error) { return c.singleRetrieve(&suppressedContext{ctx}) }) select { @@ -135,49 +132,17 @@ func (c *Credentials) GetWithContext(ctx context.Context) (Value, error) { } } -func (c *Credentials) singleRetrieve(ctx context.Context) (interface{}, error) { - c.m.Lock() - defer c.m.Unlock() - - if curCreds := c.creds; !c.isExpiredLocked(curCreds) { - return curCreds, nil +func (c *Credentials) singleRetrieve(ctx context.Context) (any, error) { + if v := c.creds.Load(); v != nil && *v != (Value{}) && v.HasKeys() && !v.Expired() { + return *v, nil } - var creds Value - var err error - if p, ok := c.provider.(ProviderWithContext); ok { - creds, err = p.RetrieveWithContext(ctx) - } else { - creds, err = c.provider.Retrieve() - } + newCreds, err := c.provider.Retrieve(ctx) if err == nil { - c.creds = creds + c.creds.Store(&newCreds) } - return creds, err -} - -// asyncIsExpired returns a channel of credentials Value. If the channel is -// closed the credentials are expired and credentials value are not empty. -func (c *Credentials) asyncIsExpired() <-chan Value { - ch := make(chan Value, 1) - go func() { - c.m.RLock() - defer c.m.RUnlock() - - if curCreds := c.creds; !c.isExpiredLocked(curCreds) { - ch <- curCreds - } - - close(ch) - }() - - return ch -} - -// isExpiredLocked helper method wrapping the definition of expired credentials. -func (c *Credentials) isExpiredLocked(creds interface{}) bool { - return creds == nil || creds.(Value) == Value{} || c.provider.IsExpired() + return newCreds, err } type suppressedContext struct { diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/signer/v4/v4.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/signer/v4/v4.go index eaf5cca3..4bc9fa13 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/signer/v4/v4.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/aws/signer/v4/v4.go @@ -97,11 +97,10 @@ type signingCtx struct { // is not needed as the full request context will be captured by the http.Request // value. It is included for reference though. // -// Sign will set the request's Body to be the `body` parameter passed in. If -// the body is not already an io.ReadCloser, it will be wrapped within one. If -// a `nil` body parameter passed to Sign, the request's Body field will be -// also set to nil. Its important to note that this functionality will not -// change the request's ContentLength of the request. +// Sign will set the request's Body to be the `body` parameter passed in. If an +// empty body parameter passed to Sign, the request's Body field will be set to +// nil. Its important to note that this functionality will not change the +// request's ContentLength of the request. // // Sign differs from Presign in that it will sign the request using HTTP // header values. This type of signing is intended for http.Request values that @@ -135,7 +134,7 @@ func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, regi } var err error - ctx.credValues, err = v4.Credentials.GetWithContext(r.Context()) + ctx.credValues, err = v4.Credentials.Get(r.Context()) if err != nil { return http.Header{}, err } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/bsoncoreutil/bsoncoreutil.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/bsoncoreutil/bsoncoreutil.go index 7acdb2f1..7fe37a9e 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/bsoncoreutil/bsoncoreutil.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/bsoncoreutil/bsoncoreutil.go @@ -6,7 +6,11 @@ package bsoncoreutil -// Truncate truncates a given string for a certain width +import "unicode/utf8" + +// Truncate truncates a given string to at most width bytes without splitting +// a multi-byte UTF-8 character, even when width falls exactly on a character +// boundary. func Truncate(str string, width int) string { if width <= 0 { return "" @@ -16,25 +20,19 @@ func Truncate(str string, width int) string { return str } - // Truncate the byte slice of the string to the given width. - newStr := str[:width] - - // Check if the last byte is at the beginning of a multi-byte character. - // If it is, then remove the last byte. - if newStr[len(newStr)-1]&0xC0 == 0xC0 { - return newStr[:len(newStr)-1] + // If the byte immediately after the cut point starts a new rune (or is + // ASCII), the cut point does not split a multi-byte character. + if utf8.RuneStart(str[width]) { + return str[:width] } - // Check if the last byte is a multi-byte character - if newStr[len(newStr)-1]&0xC0 == 0x80 { - // If it is, step back until you we are at the start of a character - for i := len(newStr) - 1; i >= 0; i-- { - if newStr[i]&0xC0 == 0xC0 { - // Truncate at the end of the character before the character we stepped back to - return newStr[:i] - } - } + // Otherwise, the rune that the cut point falls inside of was split. Back + // up over its continuation bytes (10xxxxxx) to find where it starts and + // drop it entirely, since only part of it fits within width. + i := width + for i > 0 && !utf8.RuneStart(str[i]) { + i-- } - return newStr + return str[:i] } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/assume_role_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/assume_role_provider.go index eec2247c..19657996 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/assume_role_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/assume_role_provider.go @@ -20,9 +20,6 @@ import ( ) const ( - // assumeRoleProviderName provides a name of assume role provider - assumeRoleProviderName = "AssumeRoleProvider" - stsURI = `https://sts.amazonaws.com/?Action=AssumeRoleWithWebIdentity&RoleSessionName=%s&RoleArn=%s&WebIdentityToken=%s&Version=2011-06-15` ) @@ -33,12 +30,11 @@ type AssumeRoleProvider struct { AwsRoleSessionNameEnv EnvVar httpClient *http.Client - expiration time.Time // expiryWindow will allow the credentials to trigger refreshing prior to the credentials actually expiring. // This is beneficial so expiring credentials do not cause request to fail unexpectedly due to exceptions. // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // E.g., an ExpiryWindow of 10s would cause calls to Expired() to return true // 10 seconds before the credentials are actually expired. expiryWindow time.Duration } @@ -57,11 +53,11 @@ func NewAssumeRoleProvider(httpClient *http.Client, expiryWindow time.Duration) } } -// RetrieveWithContext retrieves the keys from the AWS service. -func (a *AssumeRoleProvider) RetrieveWithContext(ctx context.Context) (credentials.Value, error) { +// Retrieve retrieves the keys from the AWS service. +func (a *AssumeRoleProvider) Retrieve(ctx context.Context) (credentials.Value, error) { const defaultHTTPTimeout = 10 * time.Second - v := credentials.Value{ProviderName: assumeRoleProviderName} + var v credentials.Value roleArn := a.AwsRoleArnEnv.Get() tokenFile := a.AwsWebIdentityTokenFileEnv.Get() @@ -131,18 +127,9 @@ func (a *AssumeRoleProvider) RetrieveWithContext(ctx context.Context) (credentia if !v.HasKeys() { return v, errors.New("failed to retrieve web identity keys") } + v.CanExpire = true sec := int64(stsResp.Response.Result.Credentials.Expiration) - a.expiration = time.Unix(sec, 0).Add(-a.expiryWindow) + v.Expires = time.Unix(sec, 0).Add(-a.expiryWindow) return v, nil } - -// Retrieve retrieves the keys from the AWS service. -func (a *AssumeRoleProvider) Retrieve() (credentials.Value, error) { - return a.RetrieveWithContext(context.Background()) -} - -// IsExpired returns true if the credentials are expired. -func (a *AssumeRoleProvider) IsExpired() bool { - return a.expiration.Before(time.Now()) -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ec2_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ec2_provider.go index df15a7f2..2de0a285 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ec2_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ec2_provider.go @@ -19,9 +19,6 @@ import ( ) const ( - // ec2ProviderName provides a name of EC2 provider - ec2ProviderName = "EC2Provider" - awsEC2URI = "http://169.254.169.254/" awsEC2RolePath = "latest/meta-data/iam/security-credentials/" awsEC2TokenPath = "latest/api/token" @@ -32,12 +29,11 @@ const ( // An EC2Provider retrieves credentials from EC2 metadata. type EC2Provider struct { httpClient *http.Client - expiration time.Time // expiryWindow will allow the credentials to trigger refreshing prior to the credentials actually expiring. // This is beneficial so expiring credentials do not cause request to fail unexpectedly due to exceptions. // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // E.g., an ExpiryWindow of 10s would cause calls to Expired() to return true // 10 seconds before the credentials are actually expired. expiryWindow time.Duration } @@ -108,7 +104,7 @@ func (e *EC2Provider) getRoleName(ctx context.Context, token string) (string, er } func (e *EC2Provider) getCredentials(ctx context.Context, token string, role string) (credentials.Value, time.Time, error) { - v := credentials.Value{ProviderName: ec2ProviderName} + var v credentials.Value pathWithRole := awsEC2URI + awsEC2RolePath + role req, err := http.NewRequest(http.MethodGet, pathWithRole, nil) @@ -146,9 +142,9 @@ func (e *EC2Provider) getCredentials(ctx context.Context, token string, role str return v, ec2Resp.Expiration, nil } -// RetrieveWithContext retrieves the keys from the AWS service. -func (e *EC2Provider) RetrieveWithContext(ctx context.Context) (credentials.Value, error) { - v := credentials.Value{ProviderName: ec2ProviderName} +// Retrieve retrieves the keys from the AWS service. +func (e *EC2Provider) Retrieve(ctx context.Context) (credentials.Value, error) { + var v credentials.Value token, err := e.getToken(ctx) if err != nil { @@ -167,17 +163,8 @@ func (e *EC2Provider) RetrieveWithContext(ctx context.Context) (credentials.Valu if !v.HasKeys() { return v, errors.New("failed to retrieve EC2 keys") } - e.expiration = exp.Add(-e.expiryWindow) + v.CanExpire = true + v.Expires = exp.Add(-e.expiryWindow) return v, nil } - -// Retrieve retrieves the keys from the AWS service. -func (e *EC2Provider) Retrieve() (credentials.Value, error) { - return e.RetrieveWithContext(context.Background()) -} - -// IsExpired returns true if the credentials are expired. -func (e *EC2Provider) IsExpired() bool { - return e.expiration.Before(time.Now()) -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ecs_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ecs_provider.go index 6816a318..e7b7ab64 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ecs_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/ecs_provider.go @@ -18,9 +18,6 @@ import ( ) const ( - // ecsProviderName provides a name of ECS provider - ecsProviderName = "ECSProvider" - awsRelativeURI = "http://169.254.170.2/" ) @@ -29,12 +26,11 @@ type ECSProvider struct { AwsContainerCredentialsRelativeURIEnv EnvVar httpClient *http.Client - expiration time.Time // expiryWindow will allow the credentials to trigger refreshing prior to the credentials actually expiring. // This is beneficial so expiring credentials do not cause request to fail unexpectedly due to exceptions. // - // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // E.g., an ExpiryWindow of 10s would cause calls to Expired() to return true // 10 seconds before the credentials are actually expired. expiryWindow time.Duration } @@ -49,11 +45,11 @@ func NewECSProvider(httpClient *http.Client, expiryWindow time.Duration) *ECSPro } } -// RetrieveWithContext retrieves the keys from the AWS service. -func (e *ECSProvider) RetrieveWithContext(ctx context.Context) (credentials.Value, error) { +// Retrieve retrieves the keys from the AWS service. +func (e *ECSProvider) Retrieve(ctx context.Context) (credentials.Value, error) { const defaultHTTPTimeout = 10 * time.Second - v := credentials.Value{ProviderName: ecsProviderName} + var v credentials.Value relativeEcsURI := e.AwsContainerCredentialsRelativeURIEnv.Get() if len(relativeEcsURI) == 0 { @@ -96,17 +92,8 @@ func (e *ECSProvider) RetrieveWithContext(ctx context.Context) (credentials.Valu if !v.HasKeys() { return v, errors.New("failed to retrieve ECS keys") } - e.expiration = ecsResp.Expiration.Add(-e.expiryWindow) + v.CanExpire = true + v.Expires = ecsResp.Expiration.Add(-e.expiryWindow) return v, nil } - -// Retrieve retrieves the keys from the AWS service. -func (e *ECSProvider) Retrieve() (credentials.Value, error) { - return e.RetrieveWithContext(context.Background()) -} - -// IsExpired returns true if the credentials are expired. -func (e *ECSProvider) IsExpired() bool { - return e.expiration.Before(time.Now()) -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/env_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/env_provider.go index cf6bb60b..070090e4 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/env_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/env_provider.go @@ -7,14 +7,13 @@ package credproviders import ( + "context" "os" + "time" "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" ) -// envProviderName provides a name of Env provider -const envProviderName = "EnvProvider" - // EnvVar is an environment variable type EnvVar string @@ -29,8 +28,6 @@ type EnvProvider struct { AwsAccessKeyIDEnv EnvVar AwsSecretAccessKeyEnv EnvVar AwsSessionTokenEnv EnvVar - - retrieved bool } // NewEnvProvider returns a pointer to an ECS credential provider. @@ -46,24 +43,19 @@ func NewEnvProvider() *EnvProvider { } // Retrieve retrieves the keys from the environment. -func (e *EnvProvider) Retrieve() (credentials.Value, error) { - e.retrieved = false - +func (e *EnvProvider) Retrieve(_ context.Context) (credentials.Value, error) { v := credentials.Value{ AccessKeyID: e.AwsAccessKeyIDEnv.Get(), SecretAccessKey: e.AwsSecretAccessKeyEnv.Get(), SessionToken: e.AwsSessionTokenEnv.Get(), - ProviderName: envProviderName, + CanExpire: false, } err := verify(v) - if err == nil { - e.retrieved = true + if err != nil { + // Expire the credentials if invalid. + v.CanExpire = true + v.Expires = time.Time{} } return v, err } - -// IsExpired returns true if the credentials have not been retrieved. -func (e *EnvProvider) IsExpired() bool { - return !e.retrieved -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/imds_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/imds_provider.go index f3674c72..005b61da 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/imds_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/imds_provider.go @@ -19,16 +19,12 @@ import ( ) const ( - // AzureProviderName provides a name of Azure provider - AzureProviderName = "AzureProvider" - azureURI = "http://169.254.169.254/metadata/identity/oauth2/token" ) // An AzureProvider retrieves credentials from Azure IMDS. type AzureProvider struct { httpClient *http.Client - expiration time.Time expiryWindow time.Duration } @@ -36,14 +32,13 @@ type AzureProvider struct { func NewAzureProvider(httpClient *http.Client, expiryWindow time.Duration) *AzureProvider { return &AzureProvider{ httpClient: httpClient, - expiration: time.Time{}, expiryWindow: expiryWindow, } } -// RetrieveWithContext retrieves the keys from the Azure service. -func (a *AzureProvider) RetrieveWithContext(ctx context.Context) (credentials.Value, error) { - v := credentials.Value{ProviderName: AzureProviderName} +// Retrieve retrieves the keys from the Azure service. +func (a *AzureProvider) Retrieve(ctx context.Context) (credentials.Value, error) { + var v credentials.Value req, err := http.NewRequest(http.MethodGet, azureURI, nil) if err != nil { return v, fmt.Errorf("unable to retrieve Azure credentials: %w", err) @@ -85,19 +80,10 @@ func (a *AzureProvider) RetrieveWithContext(ctx context.Context) (credentials.Va if err != nil { return v, err } + v.CanExpire = true if expiration := expiresIn - a.expiryWindow; expiration > 0 { - a.expiration = time.Now().Add(expiration) + v.Expires = time.Now().Add(expiration) } return v, err } - -// Retrieve retrieves the keys from the Azure service. -func (a *AzureProvider) Retrieve() (credentials.Value, error) { - return a.RetrieveWithContext(context.Background()) -} - -// IsExpired returns if the credentials have been retrieved. -func (a *AzureProvider) IsExpired() bool { - return a.expiration.Before(time.Now()) -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/static_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/static_provider.go index c7194cd0..2484e493 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/static_provider.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credproviders/static_provider.go @@ -7,14 +7,12 @@ package credproviders import ( + "context" "errors" "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" ) -// staticProviderName provides a name of Static provider -const staticProviderName = "StaticProvider" - // A StaticProvider is a set of credentials which are set programmatically, // and will never expire. type StaticProvider struct { @@ -41,18 +39,10 @@ func verify(v credentials.Value) error { } // Retrieve returns the credentials or error if the credentials are invalid. -func (s *StaticProvider) Retrieve() (credentials.Value, error) { +func (s *StaticProvider) Retrieve(_ context.Context) (credentials.Value, error) { if !s.verified { s.err = verify(s.Value) - s.ProviderName = staticProviderName s.verified = true } return s.Value, s.err } - -// IsExpired returns if the credentials are expired. -// -// For StaticProvider, the credentials never expired. -func (s *StaticProvider) IsExpired() bool { - return false -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/credutil/aws_options_provider.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/credutil/aws_options_provider.go new file mode 100644 index 00000000..6826ca9a --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/credutil/aws_options_provider.go @@ -0,0 +1,29 @@ +// Copyright (C) MongoDB, Inc. 2017-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package credutil + +import ( + "context" + + "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" + "go.mongodb.org/mongo-driver/v2/mongo/options" +) + +// AWSOptionsProvider adapts options.AWSCredentialsProvider to the credentials.Provider +// interface used internally by the driver. +type AWSOptionsProvider struct { + Provider options.AWSCredentialsProvider +} + +// Retrieve returns the credentials from the wrapped options.AWSCredentialsProvider. +func (p AWSOptionsProvider) Retrieve(ctx context.Context) (credentials.Value, error) { + creds, err := p.Provider.Retrieve(ctx) + if err != nil { + return credentials.Value{}, err + } + return credentials.Value(creds), nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/driverutil/description.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/driverutil/description.go index 926de0bd..c3cfab3e 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/driverutil/description.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/driverutil/description.go @@ -21,8 +21,8 @@ import ( ) const ( - MinWireVersion = 8 - MaxWireVersion = 25 + MinWireVersion = 9 + MaxWireVersion = 29 ) func equalWireVersion(wv1, wv2 *description.VersionRange) bool { @@ -168,8 +168,8 @@ func NewTopologyVersion(doc bson.Raw) (*description.TopologyVersion, error) { } // NewVersionRange creates a new VersionRange given a min and a max. -func NewVersionRange(min, max int32) description.VersionRange { - return description.VersionRange{Min: min, Max: max} +func NewVersionRange(minVersion, maxVersion int32) description.VersionRange { + return description.VersionRange{Min: minVersion, Max: maxVersion} } // VersionRangeIncludes returns a bool indicating whether the supplied integer diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/hello.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/handshake/operation/hello.go similarity index 99% rename from vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/hello.go rename to vendor/go.mongodb.org/mongo-driver/v2/internal/handshake/operation/hello.go index f50a2b2c..de73e916 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/hello.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/handshake/operation/hello.go @@ -599,7 +599,7 @@ func (h *Hello) command(dst []byte, desc description.SelectedServer) ([]byte, er // loadBalanced=false per the load balancing spec. dst = bsoncore.AppendBooleanElement(dst, "loadBalanced", true) } - dst = bsoncore.AppendBooleanElement(dst, "backpressure", true) + dst = bsoncore.AppendStringElement(dst, "backpressure", "2") return dst, nil } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/internal/serverselector/server_selector.go b/vendor/go.mongodb.org/mongo-driver/v2/internal/serverselector/server_selector.go index 81f06476..0fffac2e 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/internal/serverselector/server_selector.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/internal/serverselector/server_selector.go @@ -77,25 +77,25 @@ func (selector *Latency) SelectServer( case 0, 1: return candidates, nil default: - min := time.Duration(math.MaxInt64) + minRTT := time.Duration(math.MaxInt64) for _, candidate := range candidates { if candidate.AverageRTTSet { - if candidate.AverageRTT < min { - min = candidate.AverageRTT + if candidate.AverageRTT < minRTT { + minRTT = candidate.AverageRTT } } } - if min == math.MaxInt64 { + if minRTT == math.MaxInt64 { return candidates, nil } - max := min + selector.Latency + maxRTT := minRTT + selector.Latency viableIndexes := make([]int, 0, len(candidates)) for i, candidate := range candidates { if candidate.AverageRTTSet { - if candidate.AverageRTT <= max { + if candidate.AverageRTT <= maxRTT { viableIndexes = append(viableIndexes, i) } } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/bulk_write.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/bulk_write.go index 1392806b..6aa4a4c6 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/bulk_write.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/bulk_write.go @@ -17,7 +17,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -212,7 +211,7 @@ func (bw *bulkWrite) runInsert(ctx context.Context, batch bulkWriteBatch) (inser if bw.comment != nil { comment, err := marshalValue(bw.comment, bw.collection.bsonOpts, bw.collection.registry) if err != nil { - return op.Result(), err + return op.result(), err } op.comment = comment } @@ -236,12 +235,12 @@ func (bw *bulkWrite) runInsert(ctx context.Context, batch bulkWriteBatch) (inser op.additionalCmd = bw.additionalCmd } - err := op.Execute(ctx) + err := op.execute(ctx) - return op.Result(), err + return op.result(), err } -func (bw *bulkWrite) runDelete(ctx context.Context, batch bulkWriteBatch) (operation.DeleteResult, error) { +func (bw *bulkWrite) runDelete(ctx context.Context, batch bulkWriteBatch) (deleteResult, error) { docs := make([]bsoncore.Document, len(batch.models)) var i int var hasHint bool @@ -258,7 +257,8 @@ func (bw *bulkWrite) runDelete(ctx context.Context, batch bulkWriteBatch) (opera converted.Hint, true, bw.collection.bsonOpts, - bw.collection.registry) + bw.collection.registry, + ) hasHint = hasHint || (converted.Hint != nil) case *DeleteManyModel: doc, err = createDeleteDoc( @@ -267,12 +267,13 @@ func (bw *bulkWrite) runDelete(ctx context.Context, batch bulkWriteBatch) (opera converted.Hint, false, bw.collection.bsonOpts, - bw.collection.registry) + bw.collection.registry, + ) hasHint = hasHint || (converted.Hint != nil) } if err != nil { - return operation.DeleteResult{}, err + return deleteResult{}, err } docs[i] = doc @@ -286,40 +287,51 @@ func (bw *bulkWrite) runDelete(ctx context.Context, batch bulkWriteBatch) (opera maxAdaptiveRetries := bw.collection.client.effectiveAdaptiveRetries(bw.collection.client.retryWrites) - op := operation.NewDelete(docs...). - Session(bw.session).WriteConcern(bw.writeConcern).CommandMonitor(bw.collection.client.monitor). - ServerSelector(bw.selector).ClusterClock(bw.collection.client.clock). - Database(bw.collection.db.name).Collection(bw.collection.name). - Retry(retry).MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(bw.collection.client.enableOverloadRetargeting). - Deployment(bw.collection.client.deployment).Crypt(bw.collection.client.cryptFLE).Hint(hasHint). - ServerAPI(bw.collection.client.serverAPI).Timeout(bw.collection.client.timeout). - Logger(bw.collection.client.logger).Authenticator(bw.collection.client.authenticator) + op := &deleteOp{ + deletes: docs, + session: bw.session, + writeConcern: bw.writeConcern, + monitor: bw.collection.client.monitor, + selector: bw.selector, + clock: bw.collection.client.clock, + database: bw.collection.db.name, + collection: bw.collection.name, + retry: &retry, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: bw.collection.client.enableOverloadRetargeting, + deployment: bw.collection.client.deployment, + crypt: bw.collection.client.cryptFLE, + hint: &hasHint, + serverAPI: bw.collection.client.serverAPI, + timeout: bw.collection.client.timeout, + logger: bw.collection.client.logger, + authenticator: bw.collection.client.authenticator, + } if bw.comment != nil { comment, err := marshalValue(bw.comment, bw.collection.bsonOpts, bw.collection.registry) if err != nil { - return op.Result(), err + return op.result(), err } - op.Comment(comment) + op.comment = comment } if bw.let != nil { let, err := marshal(bw.let, bw.collection.bsonOpts, bw.collection.registry) if err != nil { - return operation.DeleteResult{}, err + return deleteResult{}, err } - op = op.Let(let) + op.let = let } if bw.ordered != nil { - op = op.Ordered(*bw.ordered) + op.ordered = bw.ordered } if bw.rawData != nil { - op.RawData(*bw.rawData) + op.rawData = bw.rawData } - err := op.Execute(ctx) + err := op.execute(ctx) - return op.Result(), err + return op.result(), err } func createDeleteDoc( @@ -447,7 +459,7 @@ func (bw *bulkWrite) runUpdate(ctx context.Context, batch bulkWriteBatch) (updat if bw.comment != nil { comment, err := marshalValue(bw.comment, bw.collection.bsonOpts, bw.collection.registry) if err != nil { - return op.Result(), err + return op.result(), err } op.comment = comment } @@ -471,9 +483,9 @@ func (bw *bulkWrite) runUpdate(ctx context.Context, batch bulkWriteBatch) (updat op.additionalCmd = bw.additionalCmd } - err := op.Execute(ctx) + err := op.execute(ctx) - return op.Result(), err + return op.result(), err } type updateDoc struct { diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/change_stream.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/change_stream.go index be8b71cc..bf2c64d9 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/change_stream.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/change_stream.go @@ -24,7 +24,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -70,7 +69,7 @@ type ChangeStream struct { // TryNext. If continued access is required, a copy must be made. Current bson.Raw - aggregate *operation.Aggregate + aggregate *aggregateOp pipelineSlice []bsoncore.Document pipelineOptions map[string]bsoncore.Value cursor changeStreamCursor @@ -141,17 +140,26 @@ func newChangeStream(ctx context.Context, config changeStreamConfig, pipeline an return nil, cs.Err() } - cs.aggregate = operation.NewAggregate(nil). - ReadPreference(config.readPreference).ReadConcern(config.readConcern). - Deployment(cs.client.deployment).ClusterClock(cs.client.clock). - CommandMonitor(cs.client.monitor).Session(cs.sess).ServerSelector(cs.selector). - Retry(driver.RetryNone).MaxAdaptiveRetries(cursorOpts.MaxAdaptiveRetries). - EnableOverloadRetargeting(cursorOpts.EnableOverloadRetargeting). - ServerAPI(cs.client.serverAPI).Crypt(config.crypt).Timeout(cs.client.timeout). - Authenticator(cs.client.authenticator) + retry := driver.RetryNone + cs.aggregate = &aggregateOp{ + readPreference: config.readPreference, + readConcern: config.readConcern, + deployment: cs.client.deployment, + clock: cs.client.clock, + monitor: cs.client.monitor, + session: cs.sess, + selector: cs.selector, + retry: &retry, + maxAdaptiveRetries: cursorOpts.MaxAdaptiveRetries, + enableOverloadRetargeting: cursorOpts.EnableOverloadRetargeting, + serverAPI: cs.client.serverAPI, + crypt: config.crypt, + timeout: cs.client.timeout, + authenticator: cs.client.authenticator, + } if cs.options.Collation != nil { - cs.aggregate.Collation(bsoncore.Document(toDocument(cs.options.Collation))) + cs.aggregate.collation = bsoncore.Document(toDocument(cs.options.Collation)) } if cs.options.Comment != nil { comment, err := marshalValue(cs.options.Comment, cs.bsonOpts, cs.registry) @@ -159,11 +167,11 @@ func newChangeStream(ctx context.Context, config changeStreamConfig, pipeline an return nil, err } - cs.aggregate.Comment(comment) + cs.aggregate.comment = comment cs.cursorOptions.Comment = comment } if cs.options.BatchSize != nil { - cs.aggregate.BatchSize(*cs.options.BatchSize) + cs.aggregate.batchSize = cs.options.BatchSize cs.cursorOptions.BatchSize = *cs.options.BatchSize } if cs.options.MaxAwaitTime != nil { @@ -182,7 +190,7 @@ func newChangeStream(ctx context.Context, config changeStreamConfig, pipeline an } customOptions[optionName] = optionValueBSON } - cs.aggregate.CustomOptions(customOptions) + cs.aggregate.customOptions = customOptions } if cs.options.CustomPipeline != nil { // Marshal all custom pipeline options before building pipeline slice. Return @@ -201,11 +209,12 @@ func newChangeStream(ctx context.Context, config changeStreamConfig, pipeline an switch cs.streamType { case ClientStream: - cs.aggregate.Database("admin") + cs.aggregate.database = "admin" case DatabaseStream: - cs.aggregate.Database(config.databaseName) + cs.aggregate.database = config.databaseName case CollectionStream: - cs.aggregate.Collection(config.collectionName).Database(config.databaseName) + cs.aggregate.collection = config.collectionName + cs.aggregate.database = config.databaseName default: closeImplicitSession(cs.sess) return nil, fmt.Errorf("must supply a valid StreamType in config, instead of %v", cs.streamType) @@ -232,7 +241,7 @@ func newChangeStream(ctx context.Context, config changeStreamConfig, pipeline an } var pipelineArr bsoncore.Document pipelineArr, cs.err = cs.pipelineToBSON() - cs.aggregate.Pipeline(pipelineArr) + cs.aggregate.pipeline = pipelineArr if cs.err = cs.executeOperation(ctx, false); cs.err != nil { closeImplicitSession(cs.sess) @@ -298,7 +307,7 @@ func (cs *ChangeStream) executeOperation(ctx context.Context, resuming bool) err _ = deployment.close() }() - cs.aggregate.Deployment(deployment) + cs.aggregate.deployment = deployment if resuming { cs.replaceOptions(cs.wireVersion) @@ -318,7 +327,7 @@ func (cs *ChangeStream) executeOperation(ctx context.Context, resuming bool) err if plArr, cs.err = cs.pipelineToBSON(); cs.err != nil { return cs.Err() } - cs.aggregate.Pipeline(plArr) + cs.aggregate.pipeline = plArr } // Execute the aggregate, retrying on retryable errors once (1) if retryable reads are enabled and @@ -334,7 +343,7 @@ func (cs *ChangeStream) executeOperation(ctx context.Context, resuming bool) err var err error AggregateExecuteLoop: for { - err = cs.aggregate.Execute(ctx) + err = cs.aggregate.execute(ctx) // If no error or no retries remain, do not retry. if err == nil || retries == 0 { break AggregateExecuteLoop @@ -366,7 +375,7 @@ AggregateExecuteLoop: return cs.err } - cr := cs.aggregate.ResultCursorResponse() + cr := cs.aggregate.resultCursorResponse() cr.Server = deployment.server cs.cursor, cs.err = driver.NewBatchCursor(cr, cs.sess, cs.client.clock, cs.cursorOptions) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/client.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/client.go index f764614b..51b58184 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/client.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/client.go @@ -18,6 +18,7 @@ import ( "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/credutil" "go.mongodb.org/mongo-driver/v2/internal/httputil" "go.mongodb.org/mongo-driver/v2/internal/logger" "go.mongodb.org/mongo-driver/v2/internal/mongoutil" @@ -35,7 +36,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt" mcopts "go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/options" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology" ) @@ -506,11 +506,17 @@ func (c *Client) StartSession(opts ...options.Lister[options.SessionOptions]) (* func (c *Client) endSessions(ctx context.Context) { sessionIDs := c.sessionPool.IDSlice() - op := operation.NewEndSessions(nil).ClusterClock(c.clock).Deployment(c.deployment). - ServerSelector(&serverselector.ReadPref{ReadPref: readpref.PrimaryPreferred()}). - CommandMonitor(c.monitor).Database("admin").Crypt(c.cryptFLE).ServerAPI(c.serverAPI). - MaxAdaptiveRetries(c.effectiveAdaptiveRetries(true)). - EnableOverloadRetargeting(c.enableOverloadRetargeting) + op := endSessionsOp{ + clock: c.clock, + deployment: c.deployment, + selector: &serverselector.ReadPref{ReadPref: readpref.PrimaryPreferred()}, + monitor: c.monitor, + database: "admin", + crypt: c.cryptFLE, + serverAPI: c.serverAPI, + maxAdaptiveRetries: c.effectiveAdaptiveRetries(true), + enableOverloadRetargeting: c.enableOverloadRetargeting, + } totalNumIDs := len(sessionIDs) var currentBatch []bsoncore.Document @@ -522,7 +528,8 @@ func (c *Client) endSessions(ctx context.Context) { // Ignore all errors when ending sessions. _, marshalVal, err := bson.MarshalValue(currentBatch) if err == nil { - _ = op.SessionIDs(marshalVal).Execute(ctx) + op.sessionIDs = marshalVal + _ = op.execute(ctx) } currentBatch = currentBatch[:0] @@ -664,7 +671,7 @@ func (c *Client) newMongoCrypt(opts *options.AutoEncryptionOptions) (*mongocrypt bypassAutoEncryption := opts.BypassAutoEncryption != nil && *opts.BypassAutoEncryption bypassQueryAnalysis := opts.BypassQueryAnalysis != nil && *opts.BypassQueryAnalysis - mc, err := mongocrypt.NewMongoCrypt(&mcopts.MongoCryptOptions{ + cryptOpts := &mcopts.MongoCryptOptions{ KmsProviders: kmsProviders, LocalSchemaMap: cryptSchemaMap, BypassQueryAnalysis: bypassQueryAnalysis, @@ -673,7 +680,11 @@ func (c *Client) newMongoCrypt(opts *options.AutoEncryptionOptions) (*mongocrypt CryptSharedLibOverridePath: cryptSharedLibPath, HTTPClient: opts.HTTPClient, KeyExpiration: opts.KeyExpiration, - }) + } + if opts.AWSCredentialsProvider != nil { + cryptOpts.AWSCredentialsProvider = credutil.AWSOptionsProvider{Provider: opts.AWSCredentialsProvider} + } + mc, err := mongocrypt.NewMongoCrypt(cryptOpts) if err != nil { return nil, err } @@ -791,26 +802,37 @@ func (c *Client) ListDatabases(ctx context.Context, filter any, opts ...options. if err != nil { return ListDatabasesResult{}, err } - op := operation.NewListDatabases(filterDoc). - Session(sess).ReadPreference(c.readPreference).CommandMonitor(c.monitor). - Retry(retry).MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(c.enableOverloadRetargeting). - ServerSelector(selector).ClusterClock(c.clock).Database("admin").Deployment(c.deployment).Crypt(c.cryptFLE). - ServerAPI(c.serverAPI).Timeout(c.timeout).Authenticator(c.authenticator) + op := listDatabasesOp{ + filter: filterDoc, + session: sess, + readPreference: c.readPreference, + monitor: c.monitor, + retry: &retry, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: c.enableOverloadRetargeting, + selector: selector, + clock: c.clock, + database: "admin", + deployment: c.deployment, + crypt: c.cryptFLE, + serverAPI: c.serverAPI, + timeout: c.timeout, + authenticator: c.authenticator, + } if lda.NameOnly != nil { - op = op.NameOnly(*lda.NameOnly) + op.nameOnly = lda.NameOnly } if lda.AuthorizedDatabases != nil { - op = op.AuthorizedDatabases(*lda.AuthorizedDatabases) + op.authorizedDatabases = lda.AuthorizedDatabases } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { return ListDatabasesResult{}, wrapErrors(err) } - return newListDatabasesResultFromOperation(op.Result()), nil + return newListDatabasesResultFromOperation(op.result()), nil } // ListDatabaseNames executes a listDatabases command and returns a slice containing the names of all of the databases diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/client_encryption.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/client_encryption.go index 67b01547..e53c01e0 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/client_encryption.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/client_encryption.go @@ -14,6 +14,7 @@ import ( "strings" "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/internal/credutil" "go.mongodb.org/mongo-driver/v2/internal/mongoutil" "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" @@ -53,7 +54,7 @@ func NewClientEncryption(keyVaultClient *Client, opts ...options.Lister[options. return nil, fmt.Errorf("error creating KMS providers map: %w", err) } - mc, err := mongocrypt.NewMongoCrypt(&mcopts.MongoCryptOptions{ + cryptOpts := &mcopts.MongoCryptOptions{ KmsProviders: kmsProviders, // Explicitly disable loading the crypt_shared library for the Crypt used for // ClientEncryption because it's only needed for AutoEncryption and we don't expect users to @@ -61,7 +62,11 @@ func NewClientEncryption(keyVaultClient *Client, opts ...options.Lister[options. CryptSharedLibDisabled: true, HTTPClient: cea.HTTPClient, KeyExpiration: cea.KeyExpiration, - }) + } + if cea.AWSCredentialsProvider != nil { + cryptOpts.AWSCredentialsProvider = credutil.AWSOptionsProvider{Provider: cea.AWSCredentialsProvider} + } + mc, err := mongocrypt.NewMongoCrypt(cryptOpts) if err != nil { return nil, err } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/collection.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/collection.go index 3f1df6db..cf17ffca 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/collection.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/collection.go @@ -27,7 +27,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -362,25 +361,55 @@ func (coll *Collection) insert( } op.retry = &retry - err = op.Execute(ctx) + err = op.execute(ctx) var wce driver.WriteCommandError if !errors.As(err, &wce) { return result, err } - // remove the ids that had writeErrors from result - for i, we := range wce.WriteErrors { - // i indexes have been removed before the current error, so the index is we.Index-i - idIndex := int(we.Index) - i - // if the insert is ordered, nothing after the error was inserted - if args.Ordered == nil || *args.Ordered { - result = result[:idIndex] - break + ordered := args.Ordered == nil || *args.Ordered + result = keepInsertedIDs(result, wce.WriteErrors, ordered) + + return result, err +} + +// keepInsertedIDs returns the subset of result whose corresponding documents +// were not rejected by the server. Each WriteError.Index refers to the +// positional index of the document in the original insert request, which is +// also the index space of result. +// +// writeErrors is not required to be sorted by Index: the server does not +// guarantee that write errors for an unordered bulk write are returned in +// ascending Index order, and assuming otherwise previously caused +// out-of-range slice panics (GODRIVER-4096). Neither result nor writeErrors +// is modified. +func keepInsertedIDs(result []any, writeErrors driver.WriteErrors, ordered bool) []any { + // If there are no write errors, then every document was inserted. + if len(writeErrors) == 0 { + return result + } + + failed := make(map[int]bool, len(writeErrors)) + for _, writeError := range writeErrors { + failed[int(writeError.Index)] = true + } + + kept := result[:0:0] + for idx, id := range result { + if failed[idx] { + // The server stops an ordered insert at the first document that + // fails, so nothing at or after that index was inserted. + if ordered { + break + } + + continue } - result = append(result[:idIndex], result[idIndex+1:]...) + + kept = append(kept, id) } - return result, err + return kept } // InsertOne executes an insert command to insert a single document into the collection. @@ -563,41 +592,55 @@ func (coll *Collection) delete( } doc, _ = bsoncore.AppendDocumentEnd(doc, didx) - op := operation.NewDelete(doc). - Session(sess).WriteConcern(wc).CommandMonitor(coll.client.monitor). - Retry(retryMode).MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(coll.client.enableOverloadRetargeting). - ServerSelector(selector).ClusterClock(coll.client.clock). - Database(coll.db.name).Collection(coll.name). - Deployment(coll.client.deployment).Crypt(coll.client.cryptFLE).Ordered(true). - ServerAPI(coll.client.serverAPI).Timeout(coll.client.timeout).Logger(coll.client.logger).Authenticator(coll.client.authenticator) + ordered := true + op := &deleteOp{ + deletes: []bsoncore.Document{doc}, + session: sess, + writeConcern: wc, + monitor: coll.client.monitor, + retry: &retryMode, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: coll.client.enableOverloadRetargeting, + selector: selector, + clock: coll.client.clock, + database: coll.db.name, + collection: coll.name, + deployment: coll.client.deployment, + crypt: coll.client.cryptFLE, + ordered: &ordered, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + logger: coll.client.logger, + authenticator: coll.client.authenticator, + } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) if err != nil { return nil, err } - op = op.Comment(comment) + op.comment = comment } if args.Hint != nil { - op = op.Hint(true) + hint := true + op.hint = &hint } if args.Let != nil { let, err := marshal(args.Let, coll.bsonOpts, coll.registry) if err != nil { return nil, err } - op = op.Let(let) + op.let = let } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - rr, err := processWriteError(op.Execute(ctx)) + rr, err := processWriteError(op.execute(ctx)) if rr&expectedRr == 0 { return nil, err } return &DeleteResult{ - DeletedCount: op.Result().N, + DeletedCount: op.result().N, Acknowledged: rr.isAcknowledged(), }, err } @@ -763,14 +806,14 @@ func (coll *Collection) updateOrReplace( if additionalCmd, ok := optionsutil.Value(args.Internal, "addCommandFields").(bson.D); ok { op.additionalCmd = additionalCmd } - err = op.Execute(ctx) + err = op.execute(ctx) rr, err := processWriteError(err) if rr&expectedRr == 0 { return nil, err } - opRes := op.Result() + opRes := op.result() res := &UpdateResult{ MatchedCount: opRes.N, ModifiedCount: opRes.NModified, @@ -1044,44 +1087,46 @@ func aggregate(a aggregateParams, opts ...options.Lister[options.AggregateOption cursorOpts.MarshalValueEncoderFn = newEncoderFn(a.bsonOpts, a.registry) - op := operation.NewAggregate(pipelineArr). - Session(sess). - WriteConcern(wc). - ReadConcern(rc). - ReadPreference(a.readPreference). - CommandMonitor(a.client.monitor). - Retry(retry). - MaxAdaptiveRetries(cursorOpts.MaxAdaptiveRetries). - EnableOverloadRetargeting(cursorOpts.EnableOverloadRetargeting). - ServerSelector(selector). - ClusterClock(a.client.clock). - Database(a.db). - Collection(a.col). - Deployment(a.client.deployment). - Crypt(a.client.cryptFLE). - ServerAPI(a.client.serverAPI). - HasOutputStage(hasOutputStage). - Timeout(a.client.timeout). - Authenticator(a.client.authenticator). + op := aggregateOp{ + pipeline: pipelineArr, + session: sess, + writeConcern: wc, + readConcern: rc, + readPreference: a.readPreference, + monitor: a.client.monitor, + retry: &retry, + maxAdaptiveRetries: cursorOpts.MaxAdaptiveRetries, + enableOverloadRetargeting: cursorOpts.EnableOverloadRetargeting, + selector: selector, + clock: a.client.clock, + database: a.db, + collection: a.col, + deployment: a.client.deployment, + crypt: a.client.cryptFLE, + serverAPI: a.client.serverAPI, + hasOutputStage: hasOutputStage, + timeout: a.client.timeout, + authenticator: a.client.authenticator, // Omit "maxTimeMS" from operations that return a user-managed cursor to // prevent confusing "cursor not found" errors. // // See DRIVERS-2722 for more detail. - OmitMaxTimeMS(true) + omitMaxTimeMS: true, + } if args.AllowDiskUse != nil { - op.AllowDiskUse(*args.AllowDiskUse) + op.allowDiskUse = args.AllowDiskUse } // ignore batchSize of 0 with $out if args.BatchSize != nil && (*args.BatchSize != 0 || !hasOutputStage) { - op.BatchSize(*args.BatchSize) + op.batchSize = args.BatchSize cursorOpts.BatchSize = *args.BatchSize } if args.BypassDocumentValidation != nil && *args.BypassDocumentValidation { - op.BypassDocumentValidation(*args.BypassDocumentValidation) + op.bypassDocumentValidation = args.BypassDocumentValidation } if args.Collation != nil { - op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.MaxAwaitTime != nil { cursorOpts.SetMaxAwaitTime(*args.MaxAwaitTime) @@ -1092,7 +1137,7 @@ func aggregate(a aggregateParams, opts ...options.Lister[options.AggregateOption return nil, err } - op.Comment(comment) + op.comment = comment cursorOpts.Comment = comment } if args.Hint != nil { @@ -1103,14 +1148,14 @@ func aggregate(a aggregateParams, opts ...options.Lister[options.AggregateOption if err != nil { return nil, err } - op.Hint(hintVal) + op.hint = hintVal } if args.Let != nil { let, err := marshal(args.Let, a.bsonOpts, a.registry) if err != nil { return nil, err } - op.Let(let) + op.let = let } if args.Custom != nil { // Marshal all custom options before passing to the aggregate operation. Return @@ -1123,13 +1168,13 @@ func aggregate(a aggregateParams, opts ...options.Lister[options.AggregateOption } customOptions[optionName] = optionValueBSON } - op.CustomOptions(customOptions) + op.customOptions = customOptions } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(a.ctx) + err = op.execute(a.ctx) if err != nil { var wce driver.WriteCommandError if errors.As(err, &wce) && wce.WriteConcernError != nil { @@ -1138,7 +1183,7 @@ func aggregate(a aggregateParams, opts ...options.Lister[options.AggregateOption return nil, wrapErrors(err) } - bc, err := op.Result(cursorOpts) + bc, err := op.result(cursorOpts) if err != nil { return nil, wrapErrors(err) } @@ -1199,14 +1244,27 @@ func (coll *Collection) CountDocuments(ctx context.Context, filter any, maxAdaptiveRetries := coll.client.effectiveAdaptiveRetries(coll.client.retryReads) selector := makeReadPrefSelector(sess, coll.readSelector, coll.client.localThreshold) - op := operation.NewAggregate(pipelineArr).Session(sess).ReadConcern(rc).ReadPreference(coll.readPreference). - Retry(retry).MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(coll.client.enableOverloadRetargeting). - CommandMonitor(coll.client.monitor).ServerSelector(selector).ClusterClock(coll.client.clock).Database(coll.db.name). - Collection(coll.name).Deployment(coll.client.deployment).Crypt(coll.client.cryptFLE).ServerAPI(coll.client.serverAPI). - Timeout(coll.client.timeout).Authenticator(coll.client.authenticator) + op := aggregateOp{ + pipeline: pipelineArr, + session: sess, + readConcern: rc, + readPreference: coll.readPreference, + retry: &retry, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: coll.client.enableOverloadRetargeting, + monitor: coll.client.monitor, + selector: selector, + clock: coll.client.clock, + database: coll.db.name, + collection: coll.name, + deployment: coll.client.deployment, + crypt: coll.client.cryptFLE, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } if args.Collation != nil { - op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) @@ -1214,7 +1272,7 @@ func (coll *Collection) CountDocuments(ctx context.Context, filter any, return 0, err } - op.Comment(comment) + op.comment = comment } if args.Hint != nil { if isUnorderedMap(args.Hint) { @@ -1224,18 +1282,18 @@ func (coll *Collection) CountDocuments(ctx context.Context, filter any, if err != nil { return 0, err } - op.Hint(hintVal) + op.hint = hintVal } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { return 0, wrapErrors(err) } - batch := op.ResultCursorResponse().FirstBatch + batch := op.resultCursorResponse().FirstBatch if batch == nil { return 0, errors.New("invalid response from server, no 'firstBatch' field") } @@ -1299,27 +1357,38 @@ func (coll *Collection) EstimatedDocumentCount( maxAdaptiveRetries := coll.client.effectiveAdaptiveRetries(coll.client.retryReads) selector := makeReadPrefSelector(sess, coll.readSelector, coll.client.localThreshold) - op := operation.NewCount().Session(sess).ClusterClock(coll.client.clock). - Database(coll.db.name).Collection(coll.name).CommandMonitor(coll.client.monitor). - Deployment(coll.client.deployment).ReadConcern(rc).ReadPreference(coll.readPreference). - Retry(retry).MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(coll.client.enableOverloadRetargeting). - ServerSelector(selector).Crypt(coll.client.cryptFLE).ServerAPI(coll.client.serverAPI). - Timeout(coll.client.timeout).Authenticator(coll.client.authenticator) + op := countOp{ + session: sess, + clock: coll.client.clock, + database: coll.db.name, + collection: coll.name, + monitor: coll.client.monitor, + deployment: coll.client.deployment, + readConcern: rc, + readPreference: coll.readPreference, + retry: &retry, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: coll.client.enableOverloadRetargeting, + selector: selector, + crypt: coll.client.cryptFLE, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) if err != nil { return 0, err } - op = op.Comment(comment) + op.comment = comment } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(ctx) - return op.Result().N, wrapErrors(err) + err = op.execute(ctx) + return op.result().N, wrapErrors(err) } // Distinct executes a distinct command to find the unique values for a specified field in the collection. @@ -1380,24 +1449,36 @@ func (coll *Collection) Distinct( return &DistinctResult{err: err} } - op := operation.NewDistinct(fieldName, f). - Session(sess).ClusterClock(coll.client.clock). - Database(coll.db.name).Collection(coll.name).CommandMonitor(coll.client.monitor). - Deployment(coll.client.deployment).ReadConcern(rc).ReadPreference(coll.readPreference). - Retry(retry).MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(coll.client.enableOverloadRetargeting). - ServerSelector(selector).Crypt(coll.client.cryptFLE).ServerAPI(coll.client.serverAPI). - Timeout(coll.client.timeout).Authenticator(coll.client.authenticator) + op := distinctOp{ + key: &fieldName, + query: f, + session: sess, + clock: coll.client.clock, + database: coll.db.name, + collection: coll.name, + monitor: coll.client.monitor, + deployment: coll.client.deployment, + readConcern: rc, + readPreference: coll.readPreference, + retry: &retry, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: coll.client.enableOverloadRetargeting, + selector: selector, + crypt: coll.client.cryptFLE, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } if args.Collation != nil { - op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) if err != nil { return &DistinctResult{err: err} } - op.Comment(comment) + op.comment = comment } if args.Hint != nil { if isUnorderedMap(args.Hint) { @@ -1407,20 +1488,20 @@ func (coll *Collection) Distinct( if err != nil { return &DistinctResult{err: err} } - op.Hint(hint) + op.hint = hint } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { return &DistinctResult{err: wrapErrors(err)} } - arr, ok := op.Result().Values.ArrayOK() + arr, ok := op.result().Values.ArrayOK() if !ok { - err := fmt.Errorf("response field 'values' is type array, but received BSON type %s", op.Result().Values.Type) + err := fmt.Errorf("response field 'values' is type array, but received BSON type %s", op.result().Values.Type) return &DistinctResult{err: err} } @@ -1499,30 +1580,42 @@ func (coll *Collection) find( cursorOpts := coll.client.createBaseCursorOptions(coll.client.retryReads) selector := makeReadPrefSelector(sess, coll.readSelector, coll.client.localThreshold) - op := operation.NewFind(f). - Session(sess).ReadConcern(rc).ReadPreference(coll.readPreference). - CommandMonitor(coll.client.monitor).ServerSelector(selector). - Retry(retry).MaxAdaptiveRetries(cursorOpts.MaxAdaptiveRetries). - EnableOverloadRetargeting(cursorOpts.EnableOverloadRetargeting). - ClusterClock(coll.client.clock).Database(coll.db.name).Collection(coll.name). - Deployment(coll.client.deployment).Crypt(coll.client.cryptFLE).ServerAPI(coll.client.serverAPI). - Timeout(coll.client.timeout).Logger(coll.client.logger).Authenticator(coll.client.authenticator). - OmitMaxTimeMS(omitMaxTimeMS) + op := findOp{ + filter: f, + session: sess, + readConcern: rc, + readPreference: coll.readPreference, + monitor: coll.client.monitor, + selector: selector, + retry: &retry, + maxAdaptiveRetries: cursorOpts.MaxAdaptiveRetries, + enableOverloadRetargeting: cursorOpts.EnableOverloadRetargeting, + clock: coll.client.clock, + database: coll.db.name, + collection: coll.name, + deployment: coll.client.deployment, + crypt: coll.client.cryptFLE, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + logger: coll.client.logger, + authenticator: coll.client.authenticator, + omitMaxTimeMS: omitMaxTimeMS, + } cursorOpts.MarshalValueEncoderFn = newEncoderFn(coll.bsonOpts, coll.registry) if args.AllowDiskUse != nil { - op.AllowDiskUse(*args.AllowDiskUse) + op.allowDiskUse = args.AllowDiskUse } if args.AllowPartialResults != nil { - op.AllowPartialResults(*args.AllowPartialResults) + op.allowPartialResults = args.AllowPartialResults } if args.BatchSize != nil { cursorOpts.BatchSize = *args.BatchSize - op.BatchSize(*args.BatchSize) + op.batchSize = args.BatchSize } if args.Collation != nil { - op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) @@ -1530,16 +1623,18 @@ func (coll *Collection) find( return nil, err } - op.Comment(comment) + op.comment = comment cursorOpts.Comment = comment } if args.CursorType != nil { + tailable := true switch *args.CursorType { case options.Tailable: - op.Tailable(true) + op.tailable = &tailable case options.TailableAwait: - op.Tailable(true) - op.AwaitData(true) + awaitData := true + op.tailable = &tailable + op.awaitData = &awaitData } } if args.Hint != nil { @@ -1550,62 +1645,63 @@ func (coll *Collection) find( if err != nil { return nil, err } - op.Hint(hint) + op.hint = hint } if args.Let != nil { let, err := marshal(args.Let, coll.bsonOpts, coll.registry) if err != nil { return nil, err } - op.Let(let) + op.let = let } if args.Limit != nil { limit := *args.Limit if limit < 0 { limit = -1 * limit - op.SingleBatch(true) + singleBatch := true + op.singleBatch = &singleBatch } cursorOpts.Limit = int32(limit) - op.Limit(limit) + op.limit = &limit } if args.Max != nil { - max, err := marshal(args.Max, coll.bsonOpts, coll.registry) + maxVal, err := marshal(args.Max, coll.bsonOpts, coll.registry) if err != nil { return nil, err } - op.Max(max) + op.max = maxVal } if args.MaxAwaitTime != nil { cursorOpts.SetMaxAwaitTime(*args.MaxAwaitTime) } if args.Min != nil { - min, err := marshal(args.Min, coll.bsonOpts, coll.registry) + minVal, err := marshal(args.Min, coll.bsonOpts, coll.registry) if err != nil { return nil, err } - op.Min(min) + op.min = minVal } if args.NoCursorTimeout != nil { - op.NoCursorTimeout(*args.NoCursorTimeout) + op.noCursorTimeout = args.NoCursorTimeout } if args.OplogReplay != nil { - op.OplogReplay(*args.OplogReplay) + op.oplogReplay = args.OplogReplay } if args.Projection != nil { proj, err := marshal(args.Projection, coll.bsonOpts, coll.registry) if err != nil { return nil, err } - op.Projection(proj) + op.projection = proj } if args.ReturnKey != nil { - op.ReturnKey(*args.ReturnKey) + op.returnKey = args.ReturnKey } if args.ShowRecordID != nil { - op.ShowRecordID(*args.ShowRecordID) + op.showRecordID = args.ShowRecordID } if args.Skip != nil { - op.Skip(*args.Skip) + op.skip = args.Skip } if args.Sort != nil { if isUnorderedMap(args.Sort) { @@ -1615,17 +1711,17 @@ func (coll *Collection) find( if err != nil { return nil, err } - op.Sort(sort) + op.sort = sort } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - if err = op.Execute(ctx); err != nil { + if err = op.execute(ctx); err != nil { return nil, wrapErrors(err) } - bc, err := op.Result(cursorOpts) + bc, err := op.result(cursorOpts) if err != nil { return nil, wrapErrors(err) } @@ -1685,7 +1781,7 @@ func (coll *Collection) FindOne(ctx context.Context, filter any, } } -func (coll *Collection) findAndModify(ctx context.Context, op *operation.FindAndModify) *SingleResult { +func (coll *Collection) findAndModify(ctx context.Context, op *findAndModifyOp) *SingleResult { if ctx == nil { ctx = context.Background() } @@ -1719,27 +1815,27 @@ func (coll *Collection) findAndModify(ctx context.Context, op *operation.FindAnd maxAdaptiveRetries := coll.client.effectiveAdaptiveRetries(coll.client.retryWrites) - op = op.Session(sess). - WriteConcern(wc). - CommandMonitor(coll.client.monitor). - ServerSelector(selector). - ClusterClock(coll.client.clock). - Database(coll.db.name). - Collection(coll.name). - Deployment(coll.client.deployment). - Retry(retry). - MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(coll.client.enableOverloadRetargeting). - Crypt(coll.client.cryptFLE) - - rr, err := processWriteError(op.Execute(ctx)) + op.session = sess + op.writeConcern = wc + op.monitor = coll.client.monitor + op.selector = selector + op.clock = coll.client.clock + op.database = coll.db.name + op.collection = coll.name + op.deployment = coll.client.deployment + op.retry = &retry + op.maxAdaptiveRetries = maxAdaptiveRetries + op.enableOverloadRetargeting = coll.client.enableOverloadRetargeting + op.crypt = coll.client.cryptFLE + + rr, err := processWriteError(op.execute(ctx)) if err != nil { return &SingleResult{err: err} } return &SingleResult{ ctx: ctx, - rdr: bson.Raw(op.Result().Value), + rdr: bson.Raw(op.result().Value), bsonOpts: coll.bsonOpts, reg: coll.registry, Acknowledged: rr.isAcknowledged(), @@ -1772,23 +1868,30 @@ func (coll *Collection) FindOneAndDelete( return &SingleResult{err: fmt.Errorf("failed to construct options from builder: %w", err)} } - op := operation.NewFindAndModify(f).Remove(true).ServerAPI(coll.client.serverAPI).Timeout(coll.client.timeout).Authenticator(coll.client.authenticator) + remove := true + op := &findAndModifyOp{ + query: f, + remove: &remove, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } if args.Collation != nil { - op = op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Comment(comment) + op.comment = comment } if args.Projection != nil { proj, err := marshal(args.Projection, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Fields(proj) + op.fields = proj } if args.Sort != nil { if isUnorderedMap(args.Sort) { @@ -1798,7 +1901,7 @@ func (coll *Collection) FindOneAndDelete( if err != nil { return &SingleResult{err: err} } - op = op.Sort(sort) + op.sort = sort } if args.Hint != nil { if isUnorderedMap(args.Hint) { @@ -1808,17 +1911,17 @@ func (coll *Collection) FindOneAndDelete( if err != nil { return &SingleResult{err: err} } - op = op.Hint(hint) + op.hint = hint } if args.Let != nil { let, err := marshal(args.Let, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Let(let) + op.let = let } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } return coll.findAndModify(ctx, op) @@ -1861,30 +1964,36 @@ func (coll *Collection) FindOneAndReplace( return &SingleResult{err: fmt.Errorf("failed to construct options from builder: %w", err)} } - op := operation.NewFindAndModify(f).Update(bsoncore.Value{Type: bsoncore.TypeEmbeddedDocument, Data: r}). - ServerAPI(coll.client.serverAPI).Timeout(coll.client.timeout).Authenticator(coll.client.authenticator) + op := &findAndModifyOp{ + query: f, + update: bsoncore.Value{Type: bsoncore.TypeEmbeddedDocument, Data: r}, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } if args.BypassDocumentValidation != nil && *args.BypassDocumentValidation { - op = op.BypassDocumentValidation(*args.BypassDocumentValidation) + op.bypassDocumentValidation = args.BypassDocumentValidation } if args.Collation != nil { - op = op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Comment(comment) + op.comment = comment } if args.Projection != nil { proj, err := marshal(args.Projection, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Fields(proj) + op.fields = proj } if args.ReturnDocument != nil { - op = op.NewDocument(*args.ReturnDocument == options.After) + newDocument := *args.ReturnDocument == options.After + op.newDocument = &newDocument } if args.Sort != nil { if isUnorderedMap(args.Sort) { @@ -1894,10 +2003,10 @@ func (coll *Collection) FindOneAndReplace( if err != nil { return &SingleResult{err: err} } - op = op.Sort(sort) + op.sort = sort } if args.Upsert != nil { - op = op.Upsert(*args.Upsert) + op.upsert = args.Upsert } if args.Hint != nil { if isUnorderedMap(args.Hint) { @@ -1907,20 +2016,20 @@ func (coll *Collection) FindOneAndReplace( if err != nil { return &SingleResult{err: err} } - op = op.Hint(hint) + op.hint = hint } if args.Let != nil { let, err := marshal(args.Let, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Let(let) + op.let = let } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } if additionalCmd, ok := optionsutil.Value(args.Internal, "addCommandFields").(bson.D); ok { - op = op.AdditionalCmd(additionalCmd) + op.additionalCmd = additionalCmd } return coll.findAndModify(ctx, op) @@ -1961,13 +2070,18 @@ func (coll *Collection) FindOneAndUpdate( return &SingleResult{err: fmt.Errorf("failed to construct options from builder: %w", err)} } - op := operation.NewFindAndModify(f).ServerAPI(coll.client.serverAPI).Timeout(coll.client.timeout).Authenticator(coll.client.authenticator) + op := &findAndModifyOp{ + query: f, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } u, err := marshalUpdateValue(update, coll.bsonOpts, coll.registry, true) if err != nil { return &SingleResult{err: err} } - op = op.Update(u) + op.update = u if args.ArrayFilters != nil { af := args.ArrayFilters @@ -1976,30 +2090,31 @@ func (coll *Collection) FindOneAndUpdate( if err != nil { return &SingleResult{err: err} } - op = op.ArrayFilters(filtersDoc.Data) + op.arrayFilters = filtersDoc.Data } if args.BypassDocumentValidation != nil && *args.BypassDocumentValidation { - op = op.BypassDocumentValidation(*args.BypassDocumentValidation) + op.bypassDocumentValidation = args.BypassDocumentValidation } if args.Collation != nil { - op = op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.Comment != nil { comment, err := marshalValue(args.Comment, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Comment(comment) + op.comment = comment } if args.Projection != nil { proj, err := marshal(args.Projection, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Fields(proj) + op.fields = proj } if args.ReturnDocument != nil { - op = op.NewDocument(*args.ReturnDocument == options.After) + newDocument := *args.ReturnDocument == options.After + op.newDocument = &newDocument } if args.Sort != nil { if isUnorderedMap(args.Sort) { @@ -2009,10 +2124,10 @@ func (coll *Collection) FindOneAndUpdate( if err != nil { return &SingleResult{err: err} } - op = op.Sort(sort) + op.sort = sort } if args.Upsert != nil { - op = op.Upsert(*args.Upsert) + op.upsert = args.Upsert } if args.Hint != nil { if isUnorderedMap(args.Hint) { @@ -2022,20 +2137,20 @@ func (coll *Collection) FindOneAndUpdate( if err != nil { return &SingleResult{err: err} } - op = op.Hint(hint) + op.hint = hint } if args.Let != nil { let, err := marshal(args.Let, coll.bsonOpts, coll.registry) if err != nil { return &SingleResult{err: err} } - op = op.Let(let) + op.let = let } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } if additionalCmd, ok := optionsutil.Value(args.Internal, "addCommandFields").(bson.D); ok { - op = op.AdditionalCmd(additionalCmd) + op.additionalCmd = additionalCmd } return coll.findAndModify(ctx, op) @@ -2171,14 +2286,21 @@ func (coll *Collection) drop(ctx context.Context) error { selector := makePinnedSelector(sess, coll.writeSelector) - op := operation.NewDropCollection(). - Session(sess).WriteConcern(wc).CommandMonitor(coll.client.monitor). - ServerSelector(selector).ClusterClock(coll.client.clock). - Database(coll.db.name).Collection(coll.name). - Deployment(coll.client.deployment).Crypt(coll.client.cryptFLE). - ServerAPI(coll.client.serverAPI).Timeout(coll.client.timeout). - Authenticator(coll.client.authenticator) - err = op.Execute(ctx) + op := dropCollectionOp{ + session: sess, + writeConcern: wc, + monitor: coll.client.monitor, + selector: selector, + clock: coll.client.clock, + database: coll.db.name, + collection: coll.name, + deployment: coll.client.deployment, + crypt: coll.client.cryptFLE, + serverAPI: coll.client.serverAPI, + timeout: coll.client.timeout, + authenticator: coll.client.authenticator, + } + err = op.execute(ctx) // ignore namespace not found errors var driverErr driver.Error diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/database.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/database.go index c1d3474e..dffa1183 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/database.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/database.go @@ -25,7 +25,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -152,9 +151,8 @@ func (db *Database) Aggregate( func (db *Database) processRunCommand( ctx context.Context, cmd any, - cursorCommand bool, opts ...options.Lister[options.RunCmdOptions], -) (*operation.Command, *session.Client, error) { +) (*driver.Operation, *session.Client, error) { args, err := mongoutil.NewOptions[options.RunCmdOptions](append(defaultRunCmdOpts, opts...)...) if err != nil { return nil, nil, fmt.Errorf("failed to construct options from builder: %w", err) @@ -195,26 +193,29 @@ func (db *Database) processRunCommand( readSelect = makePinnedSelector(sess, readSelect) } - var op *operation.Command - switch retryOverload := db.client.retryReads && db.client.retryWrites; cursorCommand { - case true: - cursorOpts := db.client.createBaseCursorOptions(retryOverload) + retryOverload := db.client.retryReads && db.client.retryWrites - cursorOpts.MarshalValueEncoderFn = newEncoderFn(db.bsonOpts, db.registry) - - op = operation.NewCursorCommand(runCmdDoc, cursorOpts) - default: - op = operation.NewCommand(runCmdDoc) - maxAdaptiveRetries := db.client.effectiveAdaptiveRetries(retryOverload) - op = op.MaxAdaptiveRetries(maxAdaptiveRetries). - EnableOverloadRetargeting(db.client.enableOverloadRetargeting) - } - - return op.Session(sess).CommandMonitor(db.client.monitor). - ServerSelector(readSelect).ClusterClock(db.client.clock). - Database(db.name).Deployment(db.client.deployment). - Crypt(db.client.cryptFLE).ReadPreference(args.ReadPreference).ServerAPI(db.client.serverAPI). - Timeout(db.client.timeout).Logger(db.client.logger).Authenticator(db.client.authenticator), sess, nil + op := driver.Operation{ + CommandFn: func(dst []byte, _ description.SelectedServer) ([]byte, error) { + return append(dst, runCmdDoc[4:len(runCmdDoc)-1]...), nil + }, + Client: sess, + Clock: db.client.clock, + CommandMonitor: db.client.monitor, + Database: db.name, + Deployment: db.client.deployment, + ReadPreference: args.ReadPreference, + Selector: readSelect, + MaxAdaptiveRetries: db.client.effectiveAdaptiveRetries(retryOverload), + EnableOverloadRetargeting: db.client.enableOverloadRetargeting, + Crypt: db.client.cryptFLE, + ServerAPI: db.client.serverAPI, + Timeout: db.client.timeout, + Logger: db.client.logger, + Authenticator: db.client.authenticator, + } + + return &op, sess, nil } // RunCommand executes the given command against the database. @@ -244,19 +245,25 @@ func (db *Database) RunCommand( ctx = context.Background() } - op, sess, err := db.processRunCommand(ctx, runCommand, false, opts...) + op, sess, err := db.processRunCommand(ctx, runCommand, opts...) defer closeImplicitSession(sess) if err != nil { return &SingleResult{err: err} } + var response bsoncore.Document + op.ProcessResponseFn = func(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + response = resp + return nil + } + err = op.Execute(ctx) // RunCommand can be used to run a write, thus execute may return a write error rr, convErr := processWriteError(err) return &SingleResult{ ctx: ctx, err: convErr, - rdr: bson.Raw(op.Result()), + rdr: bson.Raw(response), bsonOpts: db.bsonOpts, reg: db.registry, Acknowledged: rr.isAcknowledged(), @@ -286,26 +293,40 @@ func (db *Database) RunCommandCursor( ctx = context.Background() } - op, sess, err := db.processRunCommand(ctx, runCommand, true, opts...) + op, sess, err := db.processRunCommand(ctx, runCommand, opts...) if err != nil { closeImplicitSession(sess) return nil, wrapErrors(err) } + retryOverload := db.client.retryReads && db.client.retryWrites + cursorOpts := db.client.createBaseCursorOptions(retryOverload) + cursorOpts.MarshalValueEncoderFn = newEncoderFn(db.bsonOpts, db.registry) + + var bc *driver.BatchCursor + op.ProcessResponseFn = func(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { + curDoc, err := driver.ExtractCursorDocument(resp) + if err != nil { + return err + } + cursorRes, err := driver.NewCursorResponse(curDoc, info) + if err != nil { + return err + } + bc, err = driver.NewBatchCursor(cursorRes, sess, db.client.clock, cursorOpts) + return err + } + if err = op.Execute(ctx); err != nil { closeImplicitSession(sess) if errors.Is(err, driver.ErrNoCursor) { return nil, errors.New( - "database response does not contain a cursor; try using RunCommand instead") + "database response does not contain a cursor; try using RunCommand instead", + ) } return nil, wrapErrors(err) } - bc, err := op.ResultCursor() - if err != nil { - closeImplicitSession(sess) - return nil, wrapErrors(err) - } cursor, err := newCursorWithSession(bc, db.bsonOpts, db.registry, sess, withCursorOptionClientTimeout(db.client.timeout)) return cursor, wrapErrors(err) @@ -339,13 +360,20 @@ func (db *Database) Drop(ctx context.Context) error { selector := makePinnedSelector(sess, db.writeSelector) - op := operation.NewDropDatabase(). - Session(sess).WriteConcern(wc).CommandMonitor(db.client.monitor). - ServerSelector(selector).ClusterClock(db.client.clock). - Database(db.name).Deployment(db.client.deployment).Crypt(db.client.cryptFLE). - ServerAPI(db.client.serverAPI).Authenticator(db.client.authenticator) + op := dropDatabaseOp{ + session: sess, + writeConcern: wc, + monitor: db.client.monitor, + selector: selector, + clock: db.client.clock, + database: db.name, + deployment: db.client.deployment, + crypt: db.client.cryptFLE, + serverAPI: db.client.serverAPI, + authenticator: db.client.authenticator, + } - err = op.Execute(ctx) + err = op.execute(ctx) var driverErr driver.Error if err != nil && (!errors.As(err, &driverErr) || !driverErr.NamespaceNotFound()) { @@ -476,37 +504,47 @@ func (db *Database) ListCollections( selector = makeReadPrefSelector(sess, selector, db.client.localThreshold) - op := operation.NewListCollections(filterDoc). - Session(sess).ReadPreference(db.readPreference).CommandMonitor(db.client.monitor). - Retry(retry).MaxAdaptiveRetries(cursorOpts.MaxAdaptiveRetries). - EnableOverloadRetargeting(cursorOpts.EnableOverloadRetargeting). - ServerSelector(selector).ClusterClock(db.client.clock). - Database(db.name).Deployment(db.client.deployment).Crypt(db.client.cryptFLE). - ServerAPI(db.client.serverAPI).Timeout(db.client.timeout).Authenticator(db.client.authenticator) + op := listCollectionsOp{ + filter: filterDoc, + session: sess, + readPreference: db.readPreference, + monitor: db.client.monitor, + retry: &retry, + maxAdaptiveRetries: cursorOpts.MaxAdaptiveRetries, + enableOverloadRetargeting: cursorOpts.EnableOverloadRetargeting, + selector: selector, + clock: db.client.clock, + database: db.name, + deployment: db.client.deployment, + crypt: db.client.cryptFLE, + serverAPI: db.client.serverAPI, + timeout: db.client.timeout, + authenticator: db.client.authenticator, + } cursorOpts.MarshalValueEncoderFn = newEncoderFn(db.bsonOpts, db.registry) if args.NameOnly != nil { - op = op.NameOnly(*args.NameOnly) + op.nameOnly = args.NameOnly } if args.BatchSize != nil { cursorOpts.BatchSize = *args.BatchSize - op = op.BatchSize(*args.BatchSize) + op.batchSize = args.BatchSize } if args.AuthorizedCollections != nil { - op = op.AuthorizedCollections(*args.AuthorizedCollections) + op.authorizedCollections = args.AuthorizedCollections } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { closeImplicitSession(sess) return nil, wrapErrors(err) } - bc, err := op.Result(cursorOpts) + bc, err := op.result(cursorOpts) if err != nil { closeImplicitSession(sess) return nil, wrapErrors(err) @@ -735,7 +773,7 @@ func (db *Database) createCollectionWithEncryptedFields( return err } - op.EncryptedFields(efBSON) + op.encryptedFields = efBSON if err := db.executeCreateOperation(ctx, op); err != nil { return err } @@ -764,26 +802,30 @@ func (db *Database) createCollection( func (db *Database) createCollectionOperation( name string, opts ...options.Lister[options.CreateCollectionOptions], -) (*operation.Create, error) { +) (*createOp, error) { args, err := mongoutil.NewOptions[options.CreateCollectionOptions](opts...) if err != nil { return nil, fmt.Errorf("failed to construct options from builder: %w", err) } - op := operation.NewCreate(name).ServerAPI(db.client.serverAPI).Authenticator(db.client.authenticator) + op := &createOp{ + collectionName: &name, + serverAPI: db.client.serverAPI, + authenticator: db.client.authenticator, + } if args.Capped != nil { - op.Capped(*args.Capped) + op.capped = args.Capped } if args.Collation != nil { - op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } if args.ChangeStreamPreAndPostImages != nil { csppi, err := marshal(args.ChangeStreamPreAndPostImages, db.bsonOpts, db.registry) if err != nil { return nil, err } - op.ChangeStreamPreAndPostImages(csppi) + op.changeStreamPreAndPostImages = csppi } if args.DefaultIndexOptions != nil { defaultIndexArgs, err := mongoutil.NewOptions[options.DefaultIndexOptions](args.DefaultIndexOptions) @@ -806,36 +848,36 @@ func (db *Database) createCollectionOperation( return nil, err } - op.IndexOptionDefaults(doc) + op.indexOptionDefaults = doc } if args.MaxDocuments != nil { - op.Max(*args.MaxDocuments) + op.max = args.MaxDocuments } if args.SizeInBytes != nil { - op.Size(*args.SizeInBytes) + op.size = args.SizeInBytes } if args.StorageEngine != nil { storageEngine, err := marshal(args.StorageEngine, db.bsonOpts, db.registry) if err != nil { return nil, err } - op.StorageEngine(storageEngine) + op.storageEngine = storageEngine } if args.ValidationAction != nil { - op.ValidationAction(*args.ValidationAction) + op.validationAction = args.ValidationAction } if args.ValidationLevel != nil { - op.ValidationLevel(*args.ValidationLevel) + op.validationLevel = args.ValidationLevel } if args.Validator != nil { validator, err := marshal(args.Validator, db.bsonOpts, db.registry) if err != nil { return nil, err } - op.Validator(validator) + op.validator = validator } if args.ExpireAfterSeconds != nil { - op.ExpireAfterSeconds(*args.ExpireAfterSeconds) + op.expireAfterSeconds = args.ExpireAfterSeconds } if args.TimeSeriesOptions != nil { timeSeriesArgs, err := mongoutil.NewOptions[options.TimeSeriesOptions](args.TimeSeriesOptions) @@ -870,14 +912,14 @@ func (db *Database) createCollectionOperation( return nil, err } - op.TimeSeries(doc) + op.timeSeries = doc } if args.ClusteredIndex != nil { clusteredIndex, err := marshal(args.ClusteredIndex, db.bsonOpts, db.registry) if err != nil { return nil, err } - op.ClusteredIndex(clusteredIndex) + op.clusteredIndex = clusteredIndex } return op, nil @@ -905,23 +947,26 @@ func (db *Database) CreateView(ctx context.Context, viewName, viewOn string, pip return err } - op := operation.NewCreate(viewName). - ViewOn(viewOn). - Pipeline(pipelineArray). - ServerAPI(db.client.serverAPI).Authenticator(db.client.authenticator) + op := &createOp{ + collectionName: &viewName, + viewOn: &viewOn, + pipeline: pipelineArray, + serverAPI: db.client.serverAPI, + authenticator: db.client.authenticator, + } args, err := mongoutil.NewOptions(opts...) if err != nil { return fmt.Errorf("failed to construct options from builder: %w", err) } if args.Collation != nil { - op.Collation(bsoncore.Document(toDocument(args.Collation))) + op.collation = bsoncore.Document(toDocument(args.Collation)) } return db.executeCreateOperation(ctx, op) } -func (db *Database) executeCreateOperation(ctx context.Context, op *operation.Create) error { +func (db *Database) executeCreateOperation(ctx context.Context, op *createOp) error { sess := sessionFromContext(ctx) if sess == nil && db.client.sessionPool != nil { sess = session.NewImplicitClientSession(db.client.sessionPool, db.client.id) @@ -942,16 +987,16 @@ func (db *Database) executeCreateOperation(ctx context.Context, op *operation.Cr } selector := makePinnedSelector(sess, db.writeSelector) - op = op.Session(sess). - WriteConcern(wc). - CommandMonitor(db.client.monitor). - ServerSelector(selector). - ClusterClock(db.client.clock). - Database(db.name). - Deployment(db.client.deployment). - Crypt(db.client.cryptFLE) - - return wrapErrors(op.Execute(ctx)) + op.session = sess + op.writeConcern = wc + op.monitor = db.client.monitor + op.selector = selector + op.clock = db.client.clock + op.database = db.name + op.deployment = db.client.deployment + op.crypt = db.client.cryptFLE + + return wrapErrors(op.execute(ctx)) } // GridFSBucket is used to construct a GridFS bucket which can be used as a diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/doc.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/doc.go index 3756d58f..cbd0412d 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/doc.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/doc.go @@ -8,6 +8,8 @@ // Package mongo provides a MongoDB Driver API for Go. // +// The Go Driver supports the last two Go minor versions. +// // Basic usage of the driver starts with creating a Client from a connection // string. To do so, call Connect: // diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_bucket.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_bucket.go index 74230770..cc953907 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_bucket.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_bucket.go @@ -58,6 +58,13 @@ type upload struct { metadata bson.D } +// idFilter returns a filter matching field exactly equal to id. The $eq +// operator is required so that a user-provided file ID containing query +// operators cannot match more than the file it addresses. +func idFilter(field string, id any) bson.D { + return bson.D{{field, bson.D{{"$eq", id}}}} +} + // OpenUploadStream creates a file ID new upload stream for a file given the // filename. // @@ -171,7 +178,7 @@ func (b *GridFSBucket) UploadFromStreamWithID( // upload stream io.Writer. If the context does set a deadline, then the // client-level timeout will be used to cap the lifetime of the stream. func (b *GridFSBucket) OpenDownloadStream(ctx context.Context, fileID any) (*GridFSDownloadStream, error) { - return b.openDownloadStream(ctx, bson.D{{"_id", fileID}}) + return b.openDownloadStream(ctx, idFilter("_id", fileID)) } // DownloadToStream downloads the file with the specified fileID and writes it @@ -258,7 +265,7 @@ func (b *GridFSBucket) Delete(ctx context.Context, fileID any) error { ctx, cancel := csot.WithTimeout(ctx, b.db.client.timeout) defer cancel() - res, err := b.filesColl.DeleteOne(ctx, bson.D{{"_id", fileID}}) + res, err := b.filesColl.DeleteOne(ctx, idFilter("_id", fileID)) if err == nil && res.DeletedCount == 0 { err = ErrFileNotFound } @@ -308,7 +315,7 @@ func (b *GridFSBucket) Find( // Rename renames the stored file with the specified file ID. func (b *GridFSBucket) Rename(ctx context.Context, fileID any, newFilename string) error { res, err := b.filesColl.UpdateOne(ctx, - bson.D{{"_id", fileID}}, + idFilter("_id", fileID), bson.D{{"$set", bson.D{{"filename", newFilename}}}}, ) if err != nil { @@ -399,13 +406,13 @@ func (b *GridFSBucket) downloadToStream(ds *GridFSDownloadStream, stream io.Writ } func (b *GridFSBucket) deleteChunks(ctx context.Context, fileID any) error { - _, err := b.chunksColl.DeleteMany(ctx, bson.D{{"files_id", fileID}}) + _, err := b.chunksColl.DeleteMany(ctx, idFilter("files_id", fileID)) return err } func (b *GridFSBucket) findChunks(ctx context.Context, fileID any) (*Cursor, error) { chunksCursor, err := b.chunksColl.Find(ctx, - bson.D{{"files_id", fileID}}, + idFilter("files_id", fileID), options.Find().SetSort(bson.D{{"n", 1}})) // sort by chunk index if err != nil { return nil, err diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_upload_stream.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_upload_stream.go index 89022709..3f2080ec 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_upload_stream.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/gridfs_upload_stream.go @@ -125,7 +125,7 @@ func (us *GridFSUploadStream) Abort() error { return ErrStreamClosed } - _, err := us.chunksColl.DeleteMany(us.ctx, bson.D{{"files_id", us.FileID}}) + _, err := us.chunksColl.DeleteMany(us.ctx, idFilter("files_id", us.FileID)) if err != nil { return err } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/index_view.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/index_view.go index 92163585..7a9963f7 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/index_view.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/index_view.go @@ -21,7 +21,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -89,14 +88,22 @@ func (iv IndexView) List(ctx context.Context, opts ...options.Lister[options.Lis } selector = makeReadPrefSelector(sess, selector, iv.coll.client.localThreshold) - op := operation.NewListIndexes(). - Session(sess).CommandMonitor(iv.coll.client.monitor). - ServerSelector(selector).ClusterClock(iv.coll.client.clock). - Retry(retry).MaxAdaptiveRetries(cursorOpts.MaxAdaptiveRetries). - EnableOverloadRetargeting(cursorOpts.EnableOverloadRetargeting). - Database(iv.coll.db.name).Collection(iv.coll.name). - Deployment(iv.coll.client.deployment).ServerAPI(iv.coll.client.serverAPI). - Timeout(iv.coll.client.timeout).Crypt(iv.coll.client.cryptFLE).Authenticator(iv.coll.client.authenticator) + op := listIndexesOp{ + session: sess, + monitor: iv.coll.client.monitor, + selector: selector, + clock: iv.coll.client.clock, + retry: &retry, + maxAdaptiveRetries: cursorOpts.MaxAdaptiveRetries, + enableOverloadRetargeting: cursorOpts.EnableOverloadRetargeting, + database: iv.coll.db.name, + collection: iv.coll.name, + deployment: iv.coll.client.deployment, + serverAPI: iv.coll.client.serverAPI, + timeout: iv.coll.client.timeout, + crypt: iv.coll.client.cryptFLE, + authenticator: iv.coll.client.authenticator, + } cursorOpts.MarshalValueEncoderFn = newEncoderFn(iv.coll.bsonOpts, iv.coll.registry) @@ -106,14 +113,14 @@ func (iv IndexView) List(ctx context.Context, opts ...options.Lister[options.Lis } if args.BatchSize != nil { - op = op.BatchSize(*args.BatchSize) + op.batchSize = args.BatchSize cursorOpts.BatchSize = *args.BatchSize } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { // for namespaceNotFound errors, return an empty cursor and do not throw an error closeImplicitSession(sess) @@ -125,7 +132,7 @@ func (iv IndexView) List(ctx context.Context, opts ...options.Lister[options.Lis return nil, wrapErrors(err) } - bc, err := op.Result(cursorOpts) + bc, err := op.result(cursorOpts) if err != nil { closeImplicitSession(sess) return nil, wrapErrors(err) @@ -278,25 +285,36 @@ func (iv IndexView) CreateMany( return nil, fmt.Errorf("failed to construct options from builder: %w", err) } - op := operation.NewCreateIndexes(indexes). - Session(sess).WriteConcern(wc).ClusterClock(iv.coll.client.clock). - MaxAdaptiveRetries(maxAdaptiveRetries).EnableOverloadRetargeting(iv.coll.client.enableOverloadRetargeting). - Database(iv.coll.db.name).Collection(iv.coll.name).CommandMonitor(iv.coll.client.monitor). - Deployment(iv.coll.client.deployment).ServerSelector(selector).ServerAPI(iv.coll.client.serverAPI). - Timeout(iv.coll.client.timeout).Crypt(iv.coll.client.cryptFLE).Authenticator(iv.coll.client.authenticator) + op := &createIndexesOp{ + indexes: indexes, + session: sess, + writeConcern: wc, + clock: iv.coll.client.clock, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: iv.coll.client.enableOverloadRetargeting, + database: iv.coll.db.name, + collection: iv.coll.name, + monitor: iv.coll.client.monitor, + deployment: iv.coll.client.deployment, + selector: selector, + serverAPI: iv.coll.client.serverAPI, + timeout: iv.coll.client.timeout, + crypt: iv.coll.client.cryptFLE, + authenticator: iv.coll.client.authenticator, + } if args.CommitQuorum != nil { commitQuorum, err := marshalValue(args.CommitQuorum, iv.coll.bsonOpts, iv.coll.registry) if err != nil { return nil, err } - op.CommitQuorum(commitQuorum) + op.commitQuorum = commitQuorum } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - _, err = processWriteError(op.Execute(ctx)) + _, err = processWriteError(op.execute(ctx)) if err != nil { return nil, err } @@ -425,18 +443,29 @@ func (iv IndexView) drop(ctx context.Context, index any, opts ...options.Lister[ selector := makePinnedSelector(sess, iv.coll.writeSelector) - op := operation.NewDropIndexes(index).Session(sess).WriteConcern(wc).CommandMonitor(iv.coll.client.monitor). - MaxAdaptiveRetries(maxAdaptiveRetries).EnableOverloadRetargeting(iv.coll.client.enableOverloadRetargeting). - ServerSelector(selector).ClusterClock(iv.coll.client.clock). - Database(iv.coll.db.name).Collection(iv.coll.name). - Deployment(iv.coll.client.deployment).ServerAPI(iv.coll.client.serverAPI). - Timeout(iv.coll.client.timeout).Crypt(iv.coll.client.cryptFLE).Authenticator(iv.coll.client.authenticator) + op := dropIndexesOp{ + index: index, + session: sess, + writeConcern: wc, + monitor: iv.coll.client.monitor, + maxAdaptiveRetries: maxAdaptiveRetries, + enableOverloadRetargeting: iv.coll.client.enableOverloadRetargeting, + selector: selector, + clock: iv.coll.client.clock, + database: iv.coll.db.name, + collection: iv.coll.name, + deployment: iv.coll.client.deployment, + serverAPI: iv.coll.client.serverAPI, + timeout: iv.coll.client.timeout, + crypt: iv.coll.client.cryptFLE, + authenticator: iv.coll.client.authenticator, + } if rawData, ok := optionsutil.Value(args.Internal, "rawData").(bool); ok { - op = op.RawData(rawData) + op.rawData = &rawData } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { return wrapErrors(err) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_abort_transaction.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_abort_transaction.go new file mode 100644 index 00000000..06966142 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_abort_transaction.go @@ -0,0 +1,78 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/internal/logger" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// abortTransactionOp performs an abortTransaction operation. +type abortTransactionOp struct { + authenticator driver.Authenticator + recoveryToken bsoncore.Document + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + serverAPI *driver.ServerAPIOptions + logger *logger.Logger +} + +func (at *abortTransactionOp) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { + return nil +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (at *abortTransactionOp) execute(ctx context.Context) error { + if at.deployment == nil { + return errors.New("the abortTransaction operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: at.command, + ProcessResponseFn: at.processResponse, + RetryMode: at.retry, + Type: driver.Write, + Client: at.session, + Clock: at.clock, + CommandMonitor: at.monitor, + MaxAdaptiveRetries: at.maxAdaptiveRetries, + EnableOverloadRetargeting: at.enableOverloadRetargeting, + Database: at.database, + Deployment: at.deployment, + Selector: at.selector, + WriteConcern: at.writeConcern, + ServerAPI: at.serverAPI, + Name: driverutil.AbortTransactionOp, + Authenticator: at.authenticator, + Logger: at.logger, + }.Execute(ctx) +} + +func (at *abortTransactionOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendInt32Element(dst, "abortTransaction", 1) + if at.recoveryToken != nil { + dst = bsoncore.AppendDocumentElement(dst, "recoveryToken", at.recoveryToken) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_aggregate.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_aggregate.go new file mode 100644 index 00000000..3bcb6eb6 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_aggregate.go @@ -0,0 +1,164 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/readconcern" + "go.mongodb.org/mongo-driver/v2/mongo/readpref" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// aggregateOp represents an aggregate operation. +type aggregateOp struct { + authenticator driver.Authenticator + allowDiskUse *bool + batchSize *int32 + bypassDocumentValidation *bool + collation bsoncore.Document + comment bsoncore.Value + hint bsoncore.Value + pipeline bsoncore.Document + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + database string + deployment driver.Deployment + readConcern *readconcern.ReadConcern + readPreference *readpref.ReadPref + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + crypt driver.Crypt + serverAPI *driver.ServerAPIOptions + let bsoncore.Document + hasOutputStage bool + customOptions map[string]bsoncore.Value + timeout *time.Duration + omitMaxTimeMS bool + rawData *bool + + cursorRes driver.CursorResponse +} + +// result returns the result of executing this operation. +func (a *aggregateOp) result(opts driver.CursorOptions) (*driver.BatchCursor, error) { + clientSession := a.session + + clock := a.clock + opts.ServerAPI = a.serverAPI + return driver.NewBatchCursor(a.cursorRes, clientSession, clock, opts) +} + +// resultCursorResponse returns the underlying CursorResponse result of executing this +// operation. +func (a *aggregateOp) resultCursorResponse() driver.CursorResponse { + return a.cursorRes +} + +func (a *aggregateOp) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { + curDoc, err := driver.ExtractCursorDocument(resp) + if err != nil { + return err + } + a.cursorRes, err = driver.NewCursorResponse(curDoc, info) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (a *aggregateOp) execute(ctx context.Context) error { + if a.deployment == nil { + return errors.New("the Aggregate operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: a.command, + ProcessResponseFn: a.processResponse, + + Client: a.session, + Clock: a.clock, + CommandMonitor: a.monitor, + Database: a.database, + Deployment: a.deployment, + ReadConcern: a.readConcern, + ReadPreference: a.readPreference, + Type: driver.Read, + RetryMode: a.retry, + MaxAdaptiveRetries: a.maxAdaptiveRetries, + EnableOverloadRetargeting: a.enableOverloadRetargeting, + Selector: a.selector, + WriteConcern: a.writeConcern, + Crypt: a.crypt, + MinimumWriteConcernWireVersion: 5, + ServerAPI: a.serverAPI, + IsOutputAggregate: a.hasOutputStage, + Timeout: a.timeout, + Name: driverutil.AggregateOp, + Authenticator: a.authenticator, + OmitMaxTimeMS: a.omitMaxTimeMS, + }.Execute(ctx) +} + +func (a *aggregateOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + header := bsoncore.Value{Type: bsoncore.TypeString, Data: bsoncore.AppendString(nil, a.collection)} + if a.collection == "" { + header = bsoncore.Value{Type: bsoncore.TypeInt32, Data: []byte{0x01, 0x00, 0x00, 0x00}} + } + dst = bsoncore.AppendValueElement(dst, "aggregate", header) + + cursorIdx, cursorDoc := bsoncore.AppendDocumentStart(nil) + if a.allowDiskUse != nil { + dst = bsoncore.AppendBooleanElement(dst, "allowDiskUse", *a.allowDiskUse) + } + if a.batchSize != nil { + cursorDoc = bsoncore.AppendInt32Element(cursorDoc, "batchSize", *a.batchSize) + } + if a.bypassDocumentValidation != nil { + dst = bsoncore.AppendBooleanElement(dst, "bypassDocumentValidation", *a.bypassDocumentValidation) + } + if a.collation != nil { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { + return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") + } + dst = bsoncore.AppendDocumentElement(dst, "collation", a.collation) + } + if a.comment.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "comment", a.comment) + } + if a.hint.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "hint", a.hint) + } + if a.pipeline != nil { + dst = bsoncore.AppendArrayElement(dst, "pipeline", a.pipeline) + } + if a.let != nil { + dst = bsoncore.AppendDocumentElement(dst, "let", a.let) + } + // Set rawData for 8.2+ servers. + if a.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *a.rawData) + } + for optionName, optionValue := range a.customOptions { + dst = bsoncore.AppendValueElement(dst, optionName, optionValue) + } + cursorDoc, _ = bsoncore.AppendDocumentEnd(cursorDoc, cursorIdx) + dst = bsoncore.AppendDocumentElement(dst, "cursor", cursorDoc) + + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_commit_transaction.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_commit_transaction.go new file mode 100644 index 00000000..2008928c --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_commit_transaction.go @@ -0,0 +1,78 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/internal/logger" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// commitTransactionOp attempts to commit a transaction. +type commitTransactionOp struct { + authenticator driver.Authenticator + recoveryToken bsoncore.Document + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + serverAPI *driver.ServerAPIOptions + logger *logger.Logger +} + +func (ct *commitTransactionOp) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { + return nil +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (ct *commitTransactionOp) execute(ctx context.Context) error { + if ct.deployment == nil { + return errors.New("the commitTransaction operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: ct.command, + ProcessResponseFn: ct.processResponse, + RetryMode: ct.retry, + Type: driver.Write, + Client: ct.session, + Clock: ct.clock, + CommandMonitor: ct.monitor, + MaxAdaptiveRetries: ct.maxAdaptiveRetries, + EnableOverloadRetargeting: ct.enableOverloadRetargeting, + Database: ct.database, + Deployment: ct.deployment, + Selector: ct.selector, + WriteConcern: ct.writeConcern, + ServerAPI: ct.serverAPI, + Name: driverutil.CommitTransactionOp, + Authenticator: ct.authenticator, + Logger: ct.logger, + }.Execute(ctx) +} + +func (ct *commitTransactionOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendInt32Element(dst, "commitTransaction", 1) + if ct.recoveryToken != nil { + dst = bsoncore.AppendDocumentElement(dst, "recoveryToken", ct.recoveryToken) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_count.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_count.go new file mode 100644 index 00000000..0649c489 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_count.go @@ -0,0 +1,173 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/readconcern" + "go.mongodb.org/mongo-driver/v2/mongo/readpref" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// countOp performs a count operation. +type countOp struct { + authenticator driver.Authenticator + session *session.Client + clock *session.ClusterClock + collection string + comment bsoncore.Value + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + readConcern *readconcern.ReadConcern + readPreference *readpref.ReadPref + selector description.ServerSelector + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + res countResult + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool +} + +// countResult represents a count result returned by the server. +type countResult struct { + // The number of documents found + N int64 +} + +func buildCountResult(response bsoncore.Document) (countResult, error) { + elements, err := response.Elements() + if err != nil { + return countResult{}, err + } + cr := countResult{} + for _, element := range elements { + switch element.Key() { + case "n": // for count using original command + var ok bool + cr.N, ok = element.Value().AsInt64OK() + if !ok { + return cr, fmt.Errorf("response field 'n' is type int64, but received BSON type %s", + element.Value().Type) + } + case "cursor": // for count using aggregate with $collStats + cursorDoc, ok := element.Value().DocumentOK() + if !ok { + return cr, fmt.Errorf("response field 'cursor' must be a document, but got BSON type %v", element.Value().Type) + } + firstBatch, err := cursorDoc.LookupErr("firstBatch") + if err != nil { + return cr, err + } + + // get count value from first batch + arr, ok := firstBatch.ArrayOK() + if !ok { + return cr, fmt.Errorf( + "response field 'cursor.firstBatch' must be an array, but got BSON type %v", + firstBatch.Type, + ) + } + val, err := arr.IndexErr(0) + if err != nil { + return cr, err + } + + valDoc, ok := val.DocumentOK() + if !ok { + return cr, fmt.Errorf( + "response field 'cursor.firstBatch[0]' must be a document, but got BSON type %v", + val.Type, + ) + } + count, err := valDoc.LookupErr("n") + if err != nil { + return cr, err + } + + // use count as Int64 for result + cr.N, ok = count.AsInt64OK() + if !ok { + return cr, fmt.Errorf( + "response field 'cursor.firstBatch[0].n' must be convertible to int64, but received BSON type %s", + count.Type, + ) + } + } + } + return cr, nil +} + +// result returns the result of executing this operation. +func (c *countOp) result() countResult { return c.res } + +func (c *countOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + var err error + c.res, err = buildCountResult(resp) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (c *countOp) execute(ctx context.Context) error { + if c.deployment == nil { + return errors.New("the count operation must have a Deployment set before execute can be called") + } + + err := driver.Operation{ + CommandFn: c.command, + ProcessResponseFn: c.processResponse, + RetryMode: c.retry, + MaxAdaptiveRetries: c.maxAdaptiveRetries, + EnableOverloadRetargeting: c.enableOverloadRetargeting, + Type: driver.Read, + Client: c.session, + Clock: c.clock, + CommandMonitor: c.monitor, + Crypt: c.crypt, + Database: c.database, + Deployment: c.deployment, + ReadConcern: c.readConcern, + ReadPreference: c.readPreference, + Selector: c.selector, + ServerAPI: c.serverAPI, + Timeout: c.timeout, + Name: driverutil.CountOp, + Authenticator: c.authenticator, + }.Execute(ctx) + // Swallow error if NamespaceNotFound(26) is returned from aggregate on non-existent namespace + if err != nil { + dErr, ok := err.(driver.Error) + if ok && dErr.Code == 26 { + err = nil + } + } + return err +} + +func (c *countOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "count", c.collection) + if c.comment.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "comment", c.comment) + } + // Set rawData for 8.2+ servers. + if c.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *c.rawData) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create.go new file mode 100644 index 00000000..427c24d7 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create.go @@ -0,0 +1,136 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// createOp performs a create operation. +type createOp struct { + authenticator driver.Authenticator + capped *bool + collation bsoncore.Document + changeStreamPreAndPostImages bsoncore.Document + collectionName *string + indexOptionDefaults bsoncore.Document + max *int64 + pipeline bsoncore.Document + size *int64 + storageEngine bsoncore.Document + validationAction *string + validationLevel *string + validator bsoncore.Document + viewOn *string + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + serverAPI *driver.ServerAPIOptions + expireAfterSeconds *int64 + timeSeries bsoncore.Document + encryptedFields bsoncore.Document + clusteredIndex bsoncore.Document +} + +func (c *createOp) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { + return nil +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (c *createOp) execute(ctx context.Context) error { + if c.deployment == nil { + return errors.New("the create operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: c.command, + ProcessResponseFn: c.processResponse, + Client: c.session, + Clock: c.clock, + CommandMonitor: c.monitor, + Crypt: c.crypt, + Database: c.database, + Deployment: c.deployment, + Selector: c.selector, + WriteConcern: c.writeConcern, + ServerAPI: c.serverAPI, + Authenticator: c.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (c *createOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + if c.collectionName != nil { + dst = bsoncore.AppendStringElement(dst, "create", *c.collectionName) + } + if c.capped != nil { + dst = bsoncore.AppendBooleanElement(dst, "capped", *c.capped) + } + if c.changeStreamPreAndPostImages != nil { + dst = bsoncore.AppendDocumentElement(dst, "changeStreamPreAndPostImages", c.changeStreamPreAndPostImages) + } + if c.collation != nil { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { + return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") + } + dst = bsoncore.AppendDocumentElement(dst, "collation", c.collation) + } + if c.indexOptionDefaults != nil { + dst = bsoncore.AppendDocumentElement(dst, "indexOptionDefaults", c.indexOptionDefaults) + } + if c.max != nil { + dst = bsoncore.AppendInt64Element(dst, "max", *c.max) + } + if c.pipeline != nil { + dst = bsoncore.AppendArrayElement(dst, "pipeline", c.pipeline) + } + if c.size != nil { + dst = bsoncore.AppendInt64Element(dst, "size", *c.size) + } + if c.storageEngine != nil { + dst = bsoncore.AppendDocumentElement(dst, "storageEngine", c.storageEngine) + } + if c.validationAction != nil { + dst = bsoncore.AppendStringElement(dst, "validationAction", *c.validationAction) + } + if c.validationLevel != nil { + dst = bsoncore.AppendStringElement(dst, "validationLevel", *c.validationLevel) + } + if c.validator != nil { + dst = bsoncore.AppendDocumentElement(dst, "validator", c.validator) + } + if c.viewOn != nil { + dst = bsoncore.AppendStringElement(dst, "viewOn", *c.viewOn) + } + if c.expireAfterSeconds != nil { + dst = bsoncore.AppendInt64Element(dst, "expireAfterSeconds", *c.expireAfterSeconds) + } + if c.timeSeries != nil { + dst = bsoncore.AppendDocumentElement(dst, "timeseries", c.timeSeries) + } + if c.encryptedFields != nil { + dst = bsoncore.AppendDocumentElement(dst, "encryptedFields", c.encryptedFields) + } + if c.clusteredIndex != nil { + dst = bsoncore.AppendDocumentElement(dst, "clusteredIndex", c.clusteredIndex) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create_indexes.go new file mode 100644 index 00000000..b8f6fbf8 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create_indexes.go @@ -0,0 +1,91 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// createIndexesOp performs a createIndexes operation. +type createIndexesOp struct { + authenticator driver.Authenticator + commitQuorum bsoncore.Value + indexes bsoncore.Document + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + maxAdaptiveRetries uint + enableOverloadRetargeting bool + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool +} + +func (ci *createIndexesOp) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { + return nil +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (ci *createIndexesOp) execute(ctx context.Context) error { + if ci.deployment == nil { + return errors.New("the createIndexes operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: ci.command, + ProcessResponseFn: ci.processResponse, + Client: ci.session, + Clock: ci.clock, + CommandMonitor: ci.monitor, + MaxAdaptiveRetries: ci.maxAdaptiveRetries, + EnableOverloadRetargeting: ci.enableOverloadRetargeting, + Crypt: ci.crypt, + Database: ci.database, + Deployment: ci.deployment, + Selector: ci.selector, + WriteConcern: ci.writeConcern, + ServerAPI: ci.serverAPI, + Timeout: ci.timeout, + Name: driverutil.CreateIndexesOp, + Authenticator: ci.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (ci *createIndexesOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "createIndexes", ci.collection) + if ci.commitQuorum.Type != bsoncore.Type(0) { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 9) { + return nil, errors.New("the 'commitQuorum' command parameter requires a minimum server wire version of 9") + } + dst = bsoncore.AppendValueElement(dst, "commitQuorum", ci.commitQuorum) + } + if ci.indexes != nil { + dst = bsoncore.AppendArrayElement(dst, "indexes", ci.indexes) + } + // Set rawData for 8.2+ servers. + if ci.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *ci.rawData) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create_search_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create_search_indexes.go new file mode 100644 index 00000000..dada734c --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_create_search_indexes.go @@ -0,0 +1,122 @@ +// Copyright (C) MongoDB, Inc. 2023-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// createSearchIndexesOp performs a createSearchIndexes operation. +type createSearchIndexesOp struct { + authenticator driver.Authenticator + indexes bsoncore.Document + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + res createSearchIndexesResult + serverAPI *driver.ServerAPIOptions + timeout *time.Duration +} + +// createSearchIndexResult represents a single search index result in createSearchIndexesResult. +type createSearchIndexResult struct { + Name string +} + +// createSearchIndexesResult represents a createSearchIndexes result returned by the server. +type createSearchIndexesResult struct { + IndexesCreated []createSearchIndexResult +} + +func buildCreateSearchIndexesResult(response bsoncore.Document) (createSearchIndexesResult, error) { + elements, err := response.Elements() + if err != nil { + return createSearchIndexesResult{}, err + } + csir := createSearchIndexesResult{} + for _, element := range elements { + if element.Key() == "indexesCreated" { + arr, ok := element.Value().ArrayOK() + if !ok { + return csir, fmt.Errorf("response field 'indexesCreated' is type array, but received BSON type %s", element.Value().Type) + } + + var values []bsoncore.Value + values, err = arr.Values() + if err != nil { + return csir, err + } + + for _, val := range values { + valDoc, ok := val.DocumentOK() + if !ok { + return csir, fmt.Errorf("indexesCreated value is type document, but received BSON type %s", val.Type) + } + var indexesCreated createSearchIndexResult + if err = bson.Unmarshal(valDoc, &indexesCreated); err != nil { + return csir, err + } + csir.IndexesCreated = append(csir.IndexesCreated, indexesCreated) + } + } + } + return csir, nil +} + +// result returns the result of executing this operation. +func (csi *createSearchIndexesOp) result() createSearchIndexesResult { return csi.res } + +func (csi *createSearchIndexesOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + var err error + csi.res, err = buildCreateSearchIndexesResult(resp) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (csi *createSearchIndexesOp) execute(ctx context.Context) error { + if csi.deployment == nil { + return errors.New("the createSearchIndexes operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: csi.command, + ProcessResponseFn: csi.processResponse, + Client: csi.session, + Clock: csi.clock, + CommandMonitor: csi.monitor, + Crypt: csi.crypt, + Database: csi.database, + Deployment: csi.deployment, + Selector: csi.selector, + ServerAPI: csi.serverAPI, + Timeout: csi.timeout, + Authenticator: csi.authenticator, + }.Execute(ctx) +} + +func (csi *createSearchIndexesOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "createSearchIndexes", csi.collection) + if csi.indexes != nil { + dst = bsoncore.AppendArrayElement(dst, "indexes", csi.indexes) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_delete.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_delete.go new file mode 100644 index 00000000..76a54b07 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_delete.go @@ -0,0 +1,145 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/internal/logger" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// deleteOp performs a delete operation. +type deleteOp struct { + authenticator driver.Authenticator + comment bsoncore.Value + deletes []bsoncore.Document + ordered *bool + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + hint *bool + res deleteResult + serverAPI *driver.ServerAPIOptions + let bsoncore.Document + timeout *time.Duration + rawData *bool + logger *logger.Logger +} + +// deleteResult represents a delete result returned by the server. +type deleteResult struct { + // Number of documents successfully deleted. + N int64 +} + +func buildDeleteResult(response bsoncore.Document) (deleteResult, error) { + elements, err := response.Elements() + if err != nil { + return deleteResult{}, err + } + dr := deleteResult{} + for _, element := range elements { + if element.Key() == "n" { + var ok bool + dr.N, ok = element.Value().AsInt64OK() + if !ok { + return dr, fmt.Errorf("response field 'n' is type int32 or int64, but received BSON type %s", element.Value().Type) + } + } + } + return dr, nil +} + +// result returns the result of executing this operation. +func (d *deleteOp) result() deleteResult { return d.res } + +func (d *deleteOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + dr, err := buildDeleteResult(resp) + d.res.N += dr.N + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (d *deleteOp) execute(ctx context.Context) error { + if d.deployment == nil { + return errors.New("the delete operation must have a Deployment set before execute can be called") + } + batches := &driver.Batches{ + Identifier: "deletes", + Documents: d.deletes, + Ordered: d.ordered, + } + + return driver.Operation{ + CommandFn: d.command, + ProcessResponseFn: d.processResponse, + Batches: batches, + RetryMode: d.retry, + MaxAdaptiveRetries: d.maxAdaptiveRetries, + EnableOverloadRetargeting: d.enableOverloadRetargeting, + Type: driver.Write, + Client: d.session, + Clock: d.clock, + CommandMonitor: d.monitor, + Crypt: d.crypt, + Database: d.database, + Deployment: d.deployment, + Selector: d.selector, + WriteConcern: d.writeConcern, + ServerAPI: d.serverAPI, + Timeout: d.timeout, + Logger: d.logger, + Name: driverutil.DeleteOp, + Authenticator: d.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (d *deleteOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "delete", d.collection) + if d.comment.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "comment", d.comment) + } + if d.ordered != nil { + dst = bsoncore.AppendBooleanElement(dst, "ordered", *d.ordered) + } + if d.hint != nil && *d.hint { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { + return nil, errors.New("the 'hint' command parameter requires a minimum server wire version of 5") + } + if !d.writeConcern.Acknowledged() { + return nil, errUnacknowledgedHint + } + } + if d.let != nil { + dst = bsoncore.AppendDocumentElement(dst, "let", d.let) + } + // Set rawData for 8.2+ servers. + if d.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *d.rawData) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_distinct.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_distinct.go new file mode 100644 index 00000000..f120e017 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_distinct.go @@ -0,0 +1,134 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/readconcern" + "go.mongodb.org/mongo-driver/v2/mongo/readpref" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// distinctOp performs a distinct operation. +type distinctOp struct { + authenticator driver.Authenticator + collation bsoncore.Document + key *string + query bsoncore.Document + session *session.Client + clock *session.ClusterClock + collection string + comment bsoncore.Value + hint bsoncore.Value + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + readConcern *readconcern.ReadConcern + readPreference *readpref.ReadPref + selector description.ServerSelector + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + res distinctResult + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool +} + +// distinctResult represents a distinct result returned by the server. +type distinctResult struct { + // The distinct values for the field. + Values bsoncore.Value +} + +func buildDistinctResult(response bsoncore.Document) (distinctResult, error) { + elements, err := response.Elements() + if err != nil { + return distinctResult{}, err + } + dr := distinctResult{} + for _, element := range elements { + if element.Key() == "values" { + dr.Values = element.Value() + } + } + return dr, nil +} + +// result returns the result of executing this operation. +func (d *distinctOp) result() distinctResult { return d.res } + +func (d *distinctOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + var err error + d.res, err = buildDistinctResult(resp) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (d *distinctOp) execute(ctx context.Context) error { + if d.deployment == nil { + return errors.New("the distinct operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: d.command, + ProcessResponseFn: d.processResponse, + RetryMode: d.retry, + MaxAdaptiveRetries: d.maxAdaptiveRetries, + EnableOverloadRetargeting: d.enableOverloadRetargeting, + Type: driver.Read, + Client: d.session, + Clock: d.clock, + CommandMonitor: d.monitor, + Crypt: d.crypt, + Database: d.database, + Deployment: d.deployment, + ReadConcern: d.readConcern, + ReadPreference: d.readPreference, + Selector: d.selector, + ServerAPI: d.serverAPI, + Timeout: d.timeout, + Name: driverutil.DistinctOp, + Authenticator: d.authenticator, + }.Execute(ctx) +} + +func (d *distinctOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "distinct", d.collection) + if d.collation != nil { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { + return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") + } + dst = bsoncore.AppendDocumentElement(dst, "collation", d.collation) + } + if d.comment.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "comment", d.comment) + } + if d.hint.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "hint", d.hint) + } + if d.key != nil { + dst = bsoncore.AppendStringElement(dst, "key", *d.key) + } + if d.query != nil { + dst = bsoncore.AppendDocumentElement(dst, "query", d.query) + } + // Set rawData for 8.2+ servers. + if d.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *d.rawData) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_collection.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_collection.go new file mode 100644 index 00000000..9acd2ba2 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_collection.go @@ -0,0 +1,66 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// dropCollectionOp performs a drop operation. +type dropCollectionOp struct { + authenticator driver.Authenticator + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + serverAPI *driver.ServerAPIOptions + timeout *time.Duration +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (dc *dropCollectionOp) execute(ctx context.Context) error { + if dc.deployment == nil { + return errors.New("the dropCollection operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: dc.command, + Client: dc.session, + Clock: dc.clock, + CommandMonitor: dc.monitor, + Crypt: dc.crypt, + Database: dc.database, + Deployment: dc.deployment, + Selector: dc.selector, + WriteConcern: dc.writeConcern, + ServerAPI: dc.serverAPI, + Timeout: dc.timeout, + Name: driverutil.DropOp, + Authenticator: dc.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (dc *dropCollectionOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "drop", dc.collection) + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_database.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_database.go new file mode 100644 index 00000000..a5bf120b --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_database.go @@ -0,0 +1,62 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// dropDatabaseOp performs a dropDatabase operation +type dropDatabaseOp struct { + authenticator driver.Authenticator + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + serverAPI *driver.ServerAPIOptions +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (dd *dropDatabaseOp) execute(ctx context.Context) error { + if dd.deployment == nil { + return errors.New("the dropDatabase operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: dd.command, + Client: dd.session, + Clock: dd.clock, + CommandMonitor: dd.monitor, + Crypt: dd.crypt, + Database: dd.database, + Deployment: dd.deployment, + Selector: dd.selector, + WriteConcern: dd.writeConcern, + ServerAPI: dd.serverAPI, + Name: driverutil.DropDatabaseOp, + Authenticator: dd.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (dd *dropDatabaseOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendInt32Element(dst, "dropDatabase", 1) + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_indexes.go new file mode 100644 index 00000000..8634168d --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_indexes.go @@ -0,0 +1,86 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// dropIndexesOp performs a dropIndexes operation. +type dropIndexesOp struct { + authenticator driver.Authenticator + index any + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + maxAdaptiveRetries uint + enableOverloadRetargeting bool + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (di *dropIndexesOp) execute(ctx context.Context) error { + if di.deployment == nil { + return errors.New("the dropIndexes operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: di.command, + Client: di.session, + Clock: di.clock, + CommandMonitor: di.monitor, + MaxAdaptiveRetries: di.maxAdaptiveRetries, + EnableOverloadRetargeting: di.enableOverloadRetargeting, + Crypt: di.crypt, + Database: di.database, + Deployment: di.deployment, + Selector: di.selector, + WriteConcern: di.writeConcern, + ServerAPI: di.serverAPI, + Timeout: di.timeout, + Name: driverutil.DropIndexesOp, + Authenticator: di.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (di *dropIndexesOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "dropIndexes", di.collection) + + switch t := di.index.(type) { + case string: + dst = bsoncore.AppendStringElement(dst, "index", t) + case bsoncore.Document: + if di.index != nil { + dst = bsoncore.AppendDocumentElement(dst, "index", t) + } + } + // Set rawData for 8.2+ servers. + if di.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *di.rawData) + } + + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_search_index.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_search_index.go new file mode 100644 index 00000000..933506ff --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_drop_search_index.go @@ -0,0 +1,62 @@ +// Copyright (C) MongoDB, Inc. 2023-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// dropSearchIndexOp performs a dropSearchIndex operation. +type dropSearchIndexOp struct { + authenticator driver.Authenticator + index string + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + serverAPI *driver.ServerAPIOptions + timeout *time.Duration +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (dsi *dropSearchIndexOp) execute(ctx context.Context) error { + if dsi.deployment == nil { + return errors.New("the dropSearchIndex operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: dsi.command, + Client: dsi.session, + Clock: dsi.clock, + CommandMonitor: dsi.monitor, + Crypt: dsi.crypt, + Database: dsi.database, + Deployment: dsi.deployment, + Selector: dsi.selector, + ServerAPI: dsi.serverAPI, + Timeout: dsi.timeout, + Authenticator: dsi.authenticator, + }.Execute(ctx) +} + +func (dsi *dropSearchIndexOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "dropSearchIndex", dsi.collection) + dst = bsoncore.AppendStringElement(dst, "name", dsi.index) + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_end_sessions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_end_sessions.go new file mode 100644 index 00000000..5271aead --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_end_sessions.go @@ -0,0 +1,68 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// endSessionsOp performs an endSessions operation. +type endSessionsOp struct { + sessionIDs bsoncore.Document + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + serverAPI *driver.ServerAPIOptions + maxAdaptiveRetries uint + enableOverloadRetargeting bool +} + +func (es *endSessionsOp) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { + return nil +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (es *endSessionsOp) execute(ctx context.Context) error { + if es.deployment == nil { + return errors.New("the endSessions operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: es.command, + ProcessResponseFn: es.processResponse, + Client: es.session, + Clock: es.clock, + CommandMonitor: es.monitor, + MaxAdaptiveRetries: es.maxAdaptiveRetries, + EnableOverloadRetargeting: es.enableOverloadRetargeting, + Crypt: es.crypt, + Database: es.database, + Deployment: es.deployment, + Selector: es.selector, + ServerAPI: es.serverAPI, + Name: driverutil.EndSessionsOp, + }.Execute(ctx) +} + +func (es *endSessionsOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + if es.sessionIDs != nil { + dst = bsoncore.AppendArrayElement(dst, "endSessions", es.sessionIDs) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_find.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_find.go new file mode 100644 index 00000000..0a3f1c37 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_find.go @@ -0,0 +1,193 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/internal/logger" + "go.mongodb.org/mongo-driver/v2/mongo/readconcern" + "go.mongodb.org/mongo-driver/v2/mongo/readpref" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// findOp performs a find operation. +type findOp struct { + authenticator driver.Authenticator + allowDiskUse *bool + allowPartialResults *bool + awaitData *bool + batchSize *int32 + collation bsoncore.Document + comment bsoncore.Value + filter bsoncore.Document + hint bsoncore.Value + let bsoncore.Document + limit *int64 + max bsoncore.Document + min bsoncore.Document + noCursorTimeout *bool + oplogReplay *bool + projection bsoncore.Document + returnKey *bool + showRecordID *bool + singleBatch *bool + skip *int64 + sort bsoncore.Document + tailable *bool + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + readConcern *readconcern.ReadConcern + readPreference *readpref.ReadPref + selector description.ServerSelector + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + cursorRes driver.CursorResponse + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool + logger *logger.Logger + omitMaxTimeMS bool +} + +// result returns the result of executing this operation. +func (f *findOp) result(opts driver.CursorOptions) (*driver.BatchCursor, error) { + opts.ServerAPI = f.serverAPI + return driver.NewBatchCursor(f.cursorRes, f.session, f.clock, opts) +} + +func (f *findOp) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { + curDoc, err := driver.ExtractCursorDocument(resp) + if err != nil { + return err + } + f.cursorRes, err = driver.NewCursorResponse(curDoc, info) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (f *findOp) execute(ctx context.Context) error { + if f.deployment == nil { + return errors.New("the find operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: f.command, + ProcessResponseFn: f.processResponse, + RetryMode: f.retry, + MaxAdaptiveRetries: f.maxAdaptiveRetries, + EnableOverloadRetargeting: f.enableOverloadRetargeting, + Type: driver.Read, + Client: f.session, + Clock: f.clock, + CommandMonitor: f.monitor, + Crypt: f.crypt, + Database: f.database, + Deployment: f.deployment, + ReadConcern: f.readConcern, + ReadPreference: f.readPreference, + Selector: f.selector, + Legacy: driver.LegacyFind, + ServerAPI: f.serverAPI, + Timeout: f.timeout, + Logger: f.logger, + Name: driverutil.FindOp, + Authenticator: f.authenticator, + OmitMaxTimeMS: f.omitMaxTimeMS, + }.Execute(ctx) +} + +func (f *findOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "find", f.collection) + if f.allowDiskUse != nil { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 4) { + return nil, errors.New("the 'allowDiskUse' command parameter requires a minimum server wire version of 4") + } + dst = bsoncore.AppendBooleanElement(dst, "allowDiskUse", *f.allowDiskUse) + } + if f.allowPartialResults != nil { + dst = bsoncore.AppendBooleanElement(dst, "allowPartialResults", *f.allowPartialResults) + } + if f.awaitData != nil { + dst = bsoncore.AppendBooleanElement(dst, "awaitData", *f.awaitData) + } + if f.batchSize != nil { + dst = bsoncore.AppendInt32Element(dst, "batchSize", *f.batchSize) + } + if f.collation != nil { + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { + return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") + } + dst = bsoncore.AppendDocumentElement(dst, "collation", f.collation) + } + if f.comment.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "comment", f.comment) + } + if f.filter != nil { + dst = bsoncore.AppendDocumentElement(dst, "filter", f.filter) + } + if f.hint.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "hint", f.hint) + } + if f.let != nil { + dst = bsoncore.AppendDocumentElement(dst, "let", f.let) + } + if f.limit != nil { + dst = bsoncore.AppendInt64Element(dst, "limit", *f.limit) + } + if f.max != nil { + dst = bsoncore.AppendDocumentElement(dst, "max", f.max) + } + if f.min != nil { + dst = bsoncore.AppendDocumentElement(dst, "min", f.min) + } + if f.noCursorTimeout != nil { + dst = bsoncore.AppendBooleanElement(dst, "noCursorTimeout", *f.noCursorTimeout) + } + if f.oplogReplay != nil { + dst = bsoncore.AppendBooleanElement(dst, "oplogReplay", *f.oplogReplay) + } + if f.projection != nil { + dst = bsoncore.AppendDocumentElement(dst, "projection", f.projection) + } + if f.returnKey != nil { + dst = bsoncore.AppendBooleanElement(dst, "returnKey", *f.returnKey) + } + if f.showRecordID != nil { + dst = bsoncore.AppendBooleanElement(dst, "showRecordId", *f.showRecordID) + } + if f.singleBatch != nil { + dst = bsoncore.AppendBooleanElement(dst, "singleBatch", *f.singleBatch) + } + if f.skip != nil { + dst = bsoncore.AppendInt64Element(dst, "skip", *f.skip) + } + if f.sort != nil { + dst = bsoncore.AppendDocumentElement(dst, "sort", f.sort) + } + if f.tailable != nil { + dst = bsoncore.AppendBooleanElement(dst, "tailable", *f.tailable) + } + // Set rawData for 8.2+ servers. + if f.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *f.rawData) + } + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_find_and_modify.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_find_and_modify.go new file mode 100644 index 00000000..84180b30 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_find_and_modify.go @@ -0,0 +1,218 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// findAndModifyOp performs a findAndModify operation. +type findAndModifyOp struct { + authenticator driver.Authenticator + arrayFilters bsoncore.Array + bypassDocumentValidation *bool + collation bsoncore.Document + comment bsoncore.Value + fields bsoncore.Document + newDocument *bool + query bsoncore.Document + remove *bool + sort bsoncore.Document + update bsoncore.Value + upsert *bool + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + database string + deployment driver.Deployment + selector description.ServerSelector + writeConcern *writeconcern.WriteConcern + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + crypt driver.Crypt + hint bsoncore.Value + serverAPI *driver.ServerAPIOptions + let bsoncore.Document + timeout *time.Duration + rawData *bool + additionalCmd bson.D + + res findAndModifyResult +} + +// lastErrorObject represents information about updates and upserts returned by the server. +type lastErrorObject struct { + // True if an update modified an existing document + UpdatedExisting bool + // Object ID of the upserted document. + Upserted any +} + +// findAndModifyResult represents a findAndModify result returned by the server. +type findAndModifyResult struct { + // Either the old or modified document, depending on the value of the new parameter. + Value bsoncore.Document + // Contains information about updates and upserts. + LastErrorObject lastErrorObject +} + +func buildFindAndModifyResult(response bsoncore.Document) (findAndModifyResult, error) { + elements, err := response.Elements() + if err != nil { + return findAndModifyResult{}, err + } + famr := findAndModifyResult{} + for _, element := range elements { + switch element.Key() { + case "value": + var ok bool + famr.Value, ok = element.Value().DocumentOK() + + // The 'value' field returned by a findAndModify operation can be null in the case that no document was found. + if element.Value().Type != bsoncore.TypeNull && !ok { + return famr, fmt.Errorf("response field 'value' is type document or null, but received BSON type %s", element.Value().Type) + } + case "lastErrorObject": + valDoc, ok := element.Value().DocumentOK() + if !ok { + return famr, fmt.Errorf("response field 'lastErrorObject' is type document, but received BSON type %s", element.Value().Type) + } + + var leo lastErrorObject + if err = bson.Unmarshal(valDoc, &leo); err != nil { + return famr, err + } + famr.LastErrorObject = leo + } + } + return famr, nil +} + +// result returns the result of executing this operation. +func (fam *findAndModifyOp) result() findAndModifyResult { return fam.res } + +func (fam *findAndModifyOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + var err error + + fam.res, err = buildFindAndModifyResult(resp) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (fam *findAndModifyOp) execute(ctx context.Context) error { + if fam.deployment == nil { + return errors.New("the findAndModify operation must have a Deployment set before it can be executed") + } + + return driver.Operation{ + CommandFn: fam.command, + ProcessResponseFn: fam.processResponse, + + RetryMode: fam.retry, + MaxAdaptiveRetries: fam.maxAdaptiveRetries, + EnableOverloadRetargeting: fam.enableOverloadRetargeting, + Type: driver.Write, + Client: fam.session, + Clock: fam.clock, + CommandMonitor: fam.monitor, + Database: fam.database, + Deployment: fam.deployment, + Selector: fam.selector, + WriteConcern: fam.writeConcern, + Crypt: fam.crypt, + ServerAPI: fam.serverAPI, + Timeout: fam.timeout, + Name: driverutil.FindAndModifyOp, + Authenticator: fam.authenticator, + SendAfterClusterTime: true, + }.Execute(ctx) +} + +func (fam *findAndModifyOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "findAndModify", fam.collection) + if fam.arrayFilters != nil { + + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 6) { + return nil, errors.New("the 'arrayFilters' command parameter requires a minimum server wire version of 6") + } + dst = bsoncore.AppendArrayElement(dst, "arrayFilters", fam.arrayFilters) + } + if fam.bypassDocumentValidation != nil { + dst = bsoncore.AppendBooleanElement(dst, "bypassDocumentValidation", *fam.bypassDocumentValidation) + } + if fam.collation != nil { + + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { + return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") + } + dst = bsoncore.AppendDocumentElement(dst, "collation", fam.collation) + } + if fam.comment.Type != bsoncore.Type(0) { + dst = bsoncore.AppendValueElement(dst, "comment", fam.comment) + } + if fam.fields != nil { + dst = bsoncore.AppendDocumentElement(dst, "fields", fam.fields) + } + if fam.newDocument != nil { + dst = bsoncore.AppendBooleanElement(dst, "new", *fam.newDocument) + } + if fam.query != nil { + dst = bsoncore.AppendDocumentElement(dst, "query", fam.query) + } + if fam.remove != nil { + dst = bsoncore.AppendBooleanElement(dst, "remove", *fam.remove) + } + if fam.sort != nil { + dst = bsoncore.AppendDocumentElement(dst, "sort", fam.sort) + } + if fam.update.Data != nil { + dst = bsoncore.AppendValueElement(dst, "update", fam.update) + } + if fam.upsert != nil { + dst = bsoncore.AppendBooleanElement(dst, "upsert", *fam.upsert) + } + if fam.hint.Type != bsoncore.Type(0) { + + if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 8) { + return nil, errors.New("the 'hint' command parameter requires a minimum server wire version of 8") + } + if !fam.writeConcern.Acknowledged() { + return nil, errUnacknowledgedHint + } + dst = bsoncore.AppendValueElement(dst, "hint", fam.hint) + } + if fam.let != nil { + dst = bsoncore.AppendDocumentElement(dst, "let", fam.let) + } + // Set rawData for 8.2+ servers. + if fam.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *fam.rawData) + } + if len(fam.additionalCmd) > 0 { + doc, err := bson.Marshal(fam.additionalCmd) + if err != nil { + return nil, err + } + dst = append(dst, doc[4:len(doc)-1]...) + } + + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_insert.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_insert.go index 260d9e57..a3ef5200 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_insert.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_insert.go @@ -42,7 +42,7 @@ type insertOp struct { retry *driver.RetryMode maxAdaptiveRetries uint enableOverloadRetargeting bool - result insertResult + res insertResult serverAPI *driver.ServerAPIOptions timeout *time.Duration rawData *bool @@ -74,19 +74,19 @@ func buildInsertResult(response bsoncore.Document) (insertResult, error) { return ir, nil } -// Result returns the result of executing this operation. -func (i *insertOp) Result() insertResult { return i.result } +// result returns the result of executing this operation. +func (i *insertOp) result() insertResult { return i.res } func (i *insertOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { ir, err := buildInsertResult(resp) - i.result.N += ir.N + i.res.N += ir.N return err } -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (i *insertOp) Execute(ctx context.Context) error { +// execute runs this operations and returns an error if the operation did not execute successfully. +func (i *insertOp) execute(ctx context.Context) error { if i.deployment == nil { - return errors.New("the Insert operation must have a Deployment set before Execute can be called") + return errors.New("the insert operation must have a Deployment set before execute can be called") } batches := &driver.Batches{ Identifier: "documents", diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_collections.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_collections.go new file mode 100644 index 00000000..c0c745c3 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_collections.go @@ -0,0 +1,116 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/readpref" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// listCollectionsOp performs a listCollections operation. +type listCollectionsOp struct { + authenticator driver.Authenticator + filter bsoncore.Document + nameOnly *bool + authorizedCollections *bool + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + readPreference *readpref.ReadPref + selector description.ServerSelector + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + res driver.CursorResponse + batchSize *int32 + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool +} + +// result returns the result of executing this operation. +func (lc *listCollectionsOp) result(opts driver.CursorOptions) (*driver.BatchCursor, error) { + opts.ServerAPI = lc.serverAPI + + return driver.NewBatchCursor(lc.res, lc.session, lc.clock, opts) +} + +func (lc *listCollectionsOp) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { + curDoc, err := driver.ExtractCursorDocument(resp) + if err != nil { + return err + } + lc.res, err = driver.NewCursorResponse(curDoc, info) + return err +} + +// execute runs this operations and returns an error if the operation did not execute successfully. +func (lc *listCollectionsOp) execute(ctx context.Context) error { + if lc.deployment == nil { + return errors.New("the ListCollections operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: lc.command, + ProcessResponseFn: lc.processResponse, + RetryMode: lc.retry, + MaxAdaptiveRetries: lc.maxAdaptiveRetries, + EnableOverloadRetargeting: lc.enableOverloadRetargeting, + Type: driver.Read, + Client: lc.session, + Clock: lc.clock, + CommandMonitor: lc.monitor, + Crypt: lc.crypt, + Database: lc.database, + Deployment: lc.deployment, + ReadPreference: lc.readPreference, + Selector: lc.selector, + Legacy: driver.LegacyListCollections, + ServerAPI: lc.serverAPI, + Timeout: lc.timeout, + Name: driverutil.ListCollectionsOp, + Authenticator: lc.authenticator, + }.Execute(ctx) +} + +func (lc *listCollectionsOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendInt32Element(dst, "listCollections", 1) + if lc.filter != nil { + dst = bsoncore.AppendDocumentElement(dst, "filter", lc.filter) + } + if lc.nameOnly != nil { + dst = bsoncore.AppendBooleanElement(dst, "nameOnly", *lc.nameOnly) + } + if lc.authorizedCollections != nil { + dst = bsoncore.AppendBooleanElement(dst, "authorizedCollections", *lc.authorizedCollections) + } + + cursorDoc := bsoncore.NewDocumentBuilder() + if lc.batchSize != nil { + cursorDoc.AppendInt32("batchSize", *lc.batchSize) + } + dst = bsoncore.AppendDocumentElement(dst, "cursor", cursorDoc.Build()) + + // Set rawData for 8.2+ servers. + if lc.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *lc.rawData) + } + + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_databases.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_databases.go new file mode 100644 index 00000000..530d6d2f --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_databases.go @@ -0,0 +1,182 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/mongo/readpref" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// listDatabasesOp performs a listDatabases operation. +type listDatabasesOp struct { + authenticator driver.Authenticator + filter bsoncore.Document + authorizedDatabases *bool + nameOnly *bool + session *session.Client + clock *session.ClusterClock + monitor *event.CommandMonitor + database string + deployment driver.Deployment + readPreference *readpref.ReadPref + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + selector description.ServerSelector + crypt driver.Crypt + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + + res listDatabasesResult +} + +// listDatabasesResult represents a listDatabases result returned by the server. +type listDatabasesResult struct { + // An array of documents, one document for each database + databases []databaseRecord + // The sum of the size of all the database files on disk in bytes. + totalSize int64 +} + +type databaseRecord struct { + Name string + SizeOnDisk int64 `bson:"sizeOnDisk"` + Empty bool +} + +func buildListDatabasesResult(response bsoncore.Document) (listDatabasesResult, error) { + elements, err := response.Elements() + if err != nil { + return listDatabasesResult{}, err + } + ir := listDatabasesResult{} + for _, element := range elements { + switch element.Key() { + case "totalSize": + var ok bool + ir.totalSize, ok = element.Value().AsInt64OK() + if !ok { + return ir, fmt.Errorf("response field 'totalSize' is type int64, but received BSON type %s: %s", element.Value().Type, element.Value()) + } + case "databases": + arr, ok := element.Value().ArrayOK() + if !ok { + return ir, fmt.Errorf("response field 'databases' is type array, but received BSON type %s", element.Value().Type) + } + + var tmp bsoncore.Document + err := bson.Unmarshal(arr, &tmp) + if err != nil { + return ir, err + } + + records, err := tmp.Elements() + if err != nil { + return ir, err + } + + ir.databases = make([]databaseRecord, len(records)) + for i, val := range records { + valueDoc, ok := val.Value().DocumentOK() + if !ok { + return ir, fmt.Errorf("'databases' element is type document, but received BSON type %s", val.Value().Type) + } + + elems, err := valueDoc.Elements() + if err != nil { + return ir, err + } + + for _, elem := range elems { + switch elem.Key() { + case "name": + ir.databases[i].Name, ok = elem.Value().StringValueOK() + if !ok { + return ir, fmt.Errorf("response field 'name' is type string, but received BSON type %s", elem.Value().Type) + } + case "sizeOnDisk": + ir.databases[i].SizeOnDisk, ok = elem.Value().AsInt64OK() + if !ok { + return ir, fmt.Errorf("response field 'sizeOnDisk' is type int64, but received BSON type %s", elem.Value().Type) + } + case "empty": + ir.databases[i].Empty, ok = elem.Value().BooleanOK() + if !ok { + return ir, fmt.Errorf("response field 'empty' is type bool, but received BSON type %s", elem.Value().Type) + } + } + } + } + } + } + return ir, nil +} + +// result returns the result of executing this operation. +func (ld *listDatabasesOp) result() listDatabasesResult { return ld.res } + +func (ld *listDatabasesOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + var err error + + ld.res, err = buildListDatabasesResult(resp) + return err +} + +// execute runs this operations and returns an error if the operation did not execute successfully. +func (ld *listDatabasesOp) execute(ctx context.Context) error { + if ld.deployment == nil { + return errors.New("the ListDatabases operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: ld.command, + ProcessResponseFn: ld.processResponse, + + Client: ld.session, + Clock: ld.clock, + CommandMonitor: ld.monitor, + Database: ld.database, + Deployment: ld.deployment, + ReadPreference: ld.readPreference, + RetryMode: ld.retry, + MaxAdaptiveRetries: ld.maxAdaptiveRetries, + EnableOverloadRetargeting: ld.enableOverloadRetargeting, + Type: driver.Read, + Selector: ld.selector, + Crypt: ld.crypt, + ServerAPI: ld.serverAPI, + Timeout: ld.timeout, + Name: driverutil.ListDatabasesOp, + Authenticator: ld.authenticator, + }.Execute(ctx) +} + +func (ld *listDatabasesOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendInt32Element(dst, "listDatabases", 1) + if ld.filter != nil { + dst = bsoncore.AppendDocumentElement(dst, "filter", ld.filter) + } + if ld.nameOnly != nil { + dst = bsoncore.AppendBooleanElement(dst, "nameOnly", *ld.nameOnly) + } + if ld.authorizedDatabases != nil { + dst = bsoncore.AppendBooleanElement(dst, "authorizedDatabases", *ld.authorizedDatabases) + } + + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_indexes.go new file mode 100644 index 00000000..01cf8bd7 --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_list_indexes.go @@ -0,0 +1,106 @@ +// Copyright (C) MongoDB, Inc. 2019-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// listIndexesOp performs a listIndexes operation. +type listIndexesOp struct { + authenticator driver.Authenticator + batchSize *int32 + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + database string + deployment driver.Deployment + selector description.ServerSelector + retry *driver.RetryMode + maxAdaptiveRetries uint + enableOverloadRetargeting bool + crypt driver.Crypt + serverAPI *driver.ServerAPIOptions + timeout *time.Duration + rawData *bool + + res driver.CursorResponse +} + +// result returns the result of executing this operation. +func (li *listIndexesOp) result(opts driver.CursorOptions) (*driver.BatchCursor, error) { + clientSession := li.session + + clock := li.clock + opts.ServerAPI = li.serverAPI + return driver.NewBatchCursor(li.res, clientSession, clock, opts) +} + +func (li *listIndexesOp) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { + curDoc, err := driver.ExtractCursorDocument(resp) + if err != nil { + return err + } + li.res, err = driver.NewCursorResponse(curDoc, info) + return err +} + +// execute runs this operations and returns an error if the operation did not execute successfully. +func (li *listIndexesOp) execute(ctx context.Context) error { + if li.deployment == nil { + return errors.New("the ListIndexes operation must have a Deployment set before Execute can be called") + } + + return driver.Operation{ + CommandFn: li.command, + ProcessResponseFn: li.processResponse, + + Client: li.session, + Clock: li.clock, + CommandMonitor: li.monitor, + Database: li.database, + Deployment: li.deployment, + Selector: li.selector, + Crypt: li.crypt, + Legacy: driver.LegacyListIndexes, + RetryMode: li.retry, + MaxAdaptiveRetries: li.maxAdaptiveRetries, + EnableOverloadRetargeting: li.enableOverloadRetargeting, + Type: driver.Read, + ServerAPI: li.serverAPI, + Timeout: li.timeout, + Name: driverutil.ListIndexesOp, + Authenticator: li.authenticator, + }.Execute(ctx) +} + +func (li *listIndexesOp) command(dst []byte, desc description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "listIndexes", li.collection) + cursorIdx, cursorDoc := bsoncore.AppendDocumentStart(nil) + + if li.batchSize != nil { + cursorDoc = bsoncore.AppendInt32Element(cursorDoc, "batchSize", *li.batchSize) + } + cursorDoc, _ = bsoncore.AppendDocumentEnd(cursorDoc, cursorIdx) + dst = bsoncore.AppendDocumentElement(dst, "cursor", cursorDoc) + // Set rawData for 8.2+ servers. + if li.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { + dst = bsoncore.AppendBooleanElement(dst, "rawData", *li.rawData) + } + + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update.go index ad64b09a..d5698c1d 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update.go @@ -45,7 +45,7 @@ type updateOp struct { retry *driver.RetryMode maxAdaptiveRetries uint enableOverloadRetargeting bool - result updateResult + res updateResult crypt driver.Crypt serverAPI *driver.ServerAPIOptions let bsoncore.Document @@ -115,27 +115,27 @@ func buildUpdateResult(response bsoncore.Document) (updateResult, error) { return ur, nil } -// Result returns the result of executing this operation. -func (u *updateOp) Result() updateResult { return u.result } +// result returns the result of executing this operation. +func (u *updateOp) result() updateResult { return u.res } func (u *updateOp) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { ur, err := buildUpdateResult(resp) - u.result.N += ur.N - u.result.NModified += ur.NModified + u.res.N += ur.N + u.res.NModified += ur.NModified if info.CurrentIndex > 0 { for ind := range ur.Upserted { ur.Upserted[ind].Index += int64(info.CurrentIndex) } } - u.result.Upserted = append(u.result.Upserted, ur.Upserted...) + u.res.Upserted = append(u.res.Upserted, ur.Upserted...) return err } -// Execute runs this operation and returns an error if the operation did not execute successfully. -func (u *updateOp) Execute(ctx context.Context) error { +// execute runs this operation and returns an error if the operation did not execute successfully. +func (u *updateOp) execute(ctx context.Context) error { if u.deployment == nil { - return errors.New("the update operation must have a Deployment set before Execute can be called") + return errors.New("the update operation must have a Deployment set before execute can be called") } batches := &driver.Batches{ Identifier: "updates", diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update_search_index.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update_search_index.go new file mode 100644 index 00000000..90e1e19b --- /dev/null +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/op_update_search_index.go @@ -0,0 +1,96 @@ +// Copyright (C) MongoDB, Inc. 2023-present. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +package mongo + +import ( + "context" + "errors" + "fmt" + "time" + + "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" +) + +// updateSearchIndexOp performs an updateSearchIndex operation. +type updateSearchIndexOp struct { + authenticator driver.Authenticator + index string + definition bsoncore.Document + session *session.Client + clock *session.ClusterClock + collection string + monitor *event.CommandMonitor + crypt driver.Crypt + database string + deployment driver.Deployment + selector description.ServerSelector + res updateSearchIndexResult + serverAPI *driver.ServerAPIOptions + timeout *time.Duration +} + +// updateSearchIndexResult represents a single index in the updateSearchIndexResult result. +type updateSearchIndexResult struct { + Ok int32 +} + +func buildUpdateSearchIndexResult(response bsoncore.Document) (updateSearchIndexResult, error) { + elements, err := response.Elements() + if err != nil { + return updateSearchIndexResult{}, err + } + usir := updateSearchIndexResult{} + for _, element := range elements { + if element.Key() == "ok" { + var ok bool + usir.Ok, ok = element.Value().AsInt32OK() + if !ok { + return usir, fmt.Errorf("response field 'ok' is type int32, but received BSON type %s", element.Value().Type) + } + } + } + return usir, nil +} + +func (usi *updateSearchIndexOp) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + var err error + usi.res, err = buildUpdateSearchIndexResult(resp) + return err +} + +// execute runs this operation and returns an error if the operation did not execute successfully. +func (usi *updateSearchIndexOp) execute(ctx context.Context) error { + if usi.deployment == nil { + return errors.New("the updateSearchIndex operation must have a Deployment set before execute can be called") + } + + return driver.Operation{ + CommandFn: usi.command, + ProcessResponseFn: usi.processResponse, + Client: usi.session, + Clock: usi.clock, + CommandMonitor: usi.monitor, + Crypt: usi.crypt, + Database: usi.database, + Deployment: usi.deployment, + Selector: usi.selector, + ServerAPI: usi.serverAPI, + Timeout: usi.timeout, + Authenticator: usi.authenticator, + }.Execute(ctx) +} + +func (usi *updateSearchIndexOp) command(dst []byte, _ description.SelectedServer) ([]byte, error) { + dst = bsoncore.AppendStringElement(dst, "updateSearchIndex", usi.collection) + dst = bsoncore.AppendStringElement(dst, "name", usi.index) + dst = bsoncore.AppendDocumentElement(dst, "definition", usi.definition) + return dst, nil +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/autoencryptionoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/autoencryptionoptions.go index db3508fb..11aa8579 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/autoencryptionoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/autoencryptionoptions.go @@ -31,17 +31,18 @@ import ( // // See corresponding setter methods for documentation. type AutoEncryptionOptions struct { - KeyVaultClientOptions *ClientOptions - KeyVaultNamespace string - KmsProviders map[string]map[string]any - SchemaMap map[string]any - BypassAutoEncryption *bool - ExtraOptions map[string]any - TLSConfig map[string]*tls.Config - HTTPClient *http.Client - EncryptedFieldsMap map[string]any - BypassQueryAnalysis *bool - KeyExpiration *time.Duration + KeyVaultClientOptions *ClientOptions + KeyVaultNamespace string + KmsProviders map[string]map[string]any + SchemaMap map[string]any + BypassAutoEncryption *bool + ExtraOptions map[string]any + TLSConfig map[string]*tls.Config + HTTPClient *http.Client + EncryptedFieldsMap map[string]any + BypassQueryAnalysis *bool + KeyExpiration *time.Duration + AWSCredentialsProvider AWSCredentialsProvider } // AutoEncryption creates a new AutoEncryptionOptions configured with default values. @@ -174,3 +175,14 @@ func (a *AutoEncryptionOptions) SetKeyExpiration(expiration time.Duration) *Auto return a } + +// SetAWSCredentialsProvider specifies options for custom AWS credential provider. +// +// To adapt an AWS SDK v2 credentials provider, use awsauth.NewCredentialsProvider +// from the go.mongodb.org/mongo-driver/ext/awsauth module, which returns a value +// satisfying the AWSCredentialsProvider interface. +func (a *AutoEncryptionOptions) SetAWSCredentialsProvider(provider AWSCredentialsProvider) *AutoEncryptionOptions { + a.AWSCredentialsProvider = provider + + return a +} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientencryptionoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientencryptionoptions.go index a6c477a7..e816e7bc 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientencryptionoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientencryptionoptions.go @@ -19,11 +19,12 @@ import ( // // See corresponding setter methods for documentation. type ClientEncryptionOptions struct { - KeyVaultNamespace string - KmsProviders map[string]map[string]any - TLSConfig map[string]*tls.Config - HTTPClient *http.Client - KeyExpiration *time.Duration + KeyVaultNamespace string + KmsProviders map[string]map[string]any + TLSConfig map[string]*tls.Config + HTTPClient *http.Client + KeyExpiration *time.Duration + AWSCredentialsProvider AWSCredentialsProvider } // ClientEncryptionOptionsBuilder contains options to configure client @@ -94,6 +95,21 @@ func (c *ClientEncryptionOptionsBuilder) SetKeyExpiration(expiration time.Durati return c } +// SetAWSCredentialsProvider specifies options for custom AWS credential provider. +// +// To adapt an AWS SDK v2 credentials provider, use awsauth.NewCredentialsProvider +// from the go.mongodb.org/mongo-driver/ext/awsauth module, which returns a value +// satisfying the AWSCredentialsProvider interface. +func (c *ClientEncryptionOptionsBuilder) SetAWSCredentialsProvider(provider AWSCredentialsProvider) *ClientEncryptionOptionsBuilder { + c.Opts = append(c.Opts, func(opts *ClientEncryptionOptions) error { + opts.AWSCredentialsProvider = provider + + return nil + }) + + return c +} + // BuildTLSConfig specifies tls.Config options for each KMS provider to use to configure TLS on all connections created // to the KMS provider. The input map should contain a mapping from each KMS provider to a document containing the necessary // options, as follows: diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientoptions.go index 882d1162..210d65ec 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/clientoptions.go @@ -116,6 +116,7 @@ type Credential struct { PasswordSet bool OIDCMachineCallback OIDCCallback OIDCHumanCallback OIDCCallback + AWSCredentialsProvider AWSCredentialsProvider } // OIDCCallback is the type for both Human and Machine Callback flows. @@ -136,6 +137,26 @@ type OIDCCredential struct { RefreshToken *string } +// AWSCredentialsProvider is the interface used to retrieve AWS credentials. +// +// To adapt an AWS SDK v2 credentials provider, use awsauth.NewCredentialsProvider +// from the go.mongodb.org/mongo-driver/ext/awsauth module, which returns a value +// satisfying this interface. +type AWSCredentialsProvider interface { + Retrieve(context.Context) (AWSCredentials, error) +} + +// AWSCredentials represents AWS credentials. +type AWSCredentials = struct { + AccessKeyID string + SecretAccessKey string + SessionToken string + Source string + CanExpire bool + Expires time.Time + AccountID string +} + // IDPInfo contains the information needed to perform OIDC authentication with // an Identity Provider. type IDPInfo struct { @@ -248,45 +269,46 @@ type DriverInfo struct { // can be set through the ClientOptions setter functions. See each function for // documentation. type ClientOptions struct { - AppName *string - Auth *Credential - AutoEncryptionOptions *AutoEncryptionOptions - ConnectTimeout *time.Duration - Compressors []string - Dialer ContextDialer - Direct *bool - DisableOCSPEndpointCheck *bool - DriverInfo *DriverInfo - HeartbeatInterval *time.Duration - Hosts []string - HTTPClient *http.Client - LoadBalanced *bool - LocalThreshold *time.Duration - LoggerOptions *LoggerOptions - MaxConnIdleTime *time.Duration - MaxPoolSize *uint64 - MinPoolSize *uint64 - MaxConnecting *uint64 - PoolMonitor *event.PoolMonitor - Monitor *event.CommandMonitor - ServerMonitor *event.ServerMonitor - ReadConcern *readconcern.ReadConcern - ReadPreference *readpref.ReadPref - BSONOptions *BSONOptions - Registry *bson.Registry - ReplicaSet *string - RetryReads *bool - RetryWrites *bool - ServerAPIOptions *ServerAPIOptions - ServerMonitoringMode *string - ServerSelectionTimeout *time.Duration - SRVMaxHosts *int - SRVServiceName *string - Timeout *time.Duration - TLSConfig *tls.Config - WriteConcern *writeconcern.WriteConcern - ZlibLevel *int - ZstdLevel *int + AppName *string + Auth *Credential + AutoEncryptionOptions *AutoEncryptionOptions + ConnectTimeout *time.Duration + Compressors []string + Dialer ContextDialer + Direct *bool + DisableCertificateRevocationCheck *bool + DisableOCSPEndpointCheck *bool + DriverInfo *DriverInfo + HeartbeatInterval *time.Duration + Hosts []string + HTTPClient *http.Client + LoadBalanced *bool + LocalThreshold *time.Duration + LoggerOptions *LoggerOptions + MaxConnIdleTime *time.Duration + MaxPoolSize *uint64 + MinPoolSize *uint64 + MaxConnecting *uint64 + PoolMonitor *event.PoolMonitor + Monitor *event.CommandMonitor + ServerMonitor *event.ServerMonitor + ReadConcern *readconcern.ReadConcern + ReadPreference *readpref.ReadPref + BSONOptions *BSONOptions + Registry *bson.Registry + ReplicaSet *string + RetryReads *bool + RetryWrites *bool + ServerAPIOptions *ServerAPIOptions + ServerMonitoringMode *string + ServerSelectionTimeout *time.Duration + SRVMaxHosts *int + SRVServiceName *string + Timeout *time.Duration + TLSConfig *tls.Config + WriteConcern *writeconcern.WriteConcern + ZlibLevel *int + ZstdLevel *int MaxAdaptiveRetries *uint EnableOverloadRetargeting *bool @@ -524,6 +546,10 @@ func setURIOpts(uri string, opts *ClientOptions) error { opts.ZstdLevel = &connString.ZstdLevel } + if connString.SSLDisableCertificateRevocationCheckSet { + opts.DisableCertificateRevocationCheck = &connString.SSLDisableCertificateRevocationCheck + } + if connString.SSLDisableOCSPEndpointCheckSet { opts.DisableOCSPEndpointCheck = &connString.SSLDisableOCSPEndpointCheck } @@ -604,6 +630,24 @@ func (c *ClientOptions) Validate() error { } } + // tlsDisableCertificateRevocationCheck conflicts with tlsInsecure and with + // tlsDisableOCSPEndpointCheck whenever both are present, whatever values they hold. + if c.DisableCertificateRevocationCheck != nil { + if c.DisableOCSPEndpointCheck != nil { + return errors.New("tlsDisableOCSPEndpointCheck cannot be used with tlsDisableCertificateRevocationCheck") + } + + // A tls.Config cannot distinguish InsecureSkipVerify being set to false from it never + // having been set, so fall back to the connection string when there is one. + insecureSet := c.TLSConfig != nil && c.TLSConfig.InsecureSkipVerify + if c.connString != nil && c.connString.SSLInsecureSet { + insecureSet = true + } + if insecureSet { + return errors.New("sslInsecure/tlsInsecure cannot be used with tlsDisableCertificateRevocationCheck") + } + } + if mode := c.ServerMonitoringMode; mode != nil && !connstring.IsValidServerMonitoringMode(*mode) { return fmt.Errorf("invalid server monitoring mode: %q", *mode) } @@ -668,8 +712,7 @@ func (c *ClientOptions) Validate() error { } // ApplyURI parses the given URI and sets options accordingly. The URI can contain host names, IPv4/IPv6 literals, or -// an SRV record that will be resolved when the Client is created. When using an SRV record, TLS support is -// implicitly enabled. Specify the "tls=false" URI option to override this. +// an SRV record that will be resolved when the Client is created. // // If the connection string contains any options that have previously been set, it will overwrite them. Options that // correspond to multiple URI parameters, such as WriteConcern, will be completely overwritten if any of the query @@ -681,6 +724,24 @@ func (c *ClientOptions) Validate() error { // // For more information about the URI format, see https://www.mongodb.com/docs/manual/reference/connection-string/. See // mongo.Connect documentation for examples of using URIs for different Client configurations. +// +// # Implicit TLS +// +// TLS is enabled implicitly when the URI uses the "mongodb+srv" scheme, or when any of the following URI options is +// present, whatever value it is set to: +// +// tlsCAFile (sslCertificateAuthorityFile) +// tlsCertificateKeyFile (sslClientCertificateKeyFile) +// tlsCertificateFile +// tlsPrivateKeyFile +// tlsDisableOCSPEndpointCheck +// tlsDisableCertificateRevocationCheck +// +// The value is not consulted: "tlsDisableOCSPEndpointCheck=false" enables TLS just as "=true" does. +// +// The "tls=false" URI option overrides implicit enablement. With the "mongodb+srv" scheme it always does. When TLS +// was enabled by one of the options listed above, it does so only if it appears later in the connection string than +// that option. func (c *ClientOptions) ApplyURI(uri string) *ClientOptions { if c.err != nil { return c @@ -1102,6 +1163,25 @@ func (c *ClientOptions) SetAutoEncryptionOptions(aeopts *AutoEncryptionOptions) return c } +// SetDisableCertificateRevocationCheck specifies whether or not the driver should check the revocation status of +// certificates presented by the server. +// +// If set to true, the driver will not check certificate revocation status via OCSP. If set to false, the driver +// checks revocation status and reaches out to OCSP responders when needed. +// +// Certificate chain and hostname verification are unaffected, so this is a narrower relaxation than tlsInsecure, +// which disables certificate verification entirely. +// +// This can also be set through the tlsDisableCertificateRevocationCheck URI option. The default value is false. +// +// This option must not be combined with tlsInsecure or tlsDisableOCSPEndpointCheck. If either of those was +// supplied, doing so is an error. +func (c *ClientOptions) SetDisableCertificateRevocationCheck(disableCheck bool) *ClientOptions { + c.DisableCertificateRevocationCheck = &disableCheck + + return c +} + // SetDisableOCSPEndpointCheck specifies whether or not the driver should reach out to OCSP responders to verify the // certificate status for certificates presented by the server that contain a list of OCSP responders. // diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/createcollectionoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/createcollectionoptions.go index 4bac0d04..8e56dfef 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/createcollectionoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/createcollectionoptions.go @@ -239,9 +239,9 @@ func (c *CreateCollectionOptionsBuilder) SetDefaultIndexOptions(iopts *DefaultIn // this option. If a capped collection reaches its size limit, old documents will be removed, regardless // of the number of documents in the collection. The default value is 0, meaning the maximum number of // documents is unbounded. -func (c *CreateCollectionOptionsBuilder) SetMaxDocuments(max int64) *CreateCollectionOptionsBuilder { +func (c *CreateCollectionOptionsBuilder) SetMaxDocuments(maxVal int64) *CreateCollectionOptionsBuilder { c.Opts = append(c.Opts, func(opts *CreateCollectionOptions) error { - opts.MaxDocuments = &max + opts.MaxDocuments = &maxVal return nil }) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/encryptoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/encryptoptions.go index 05061031..f995bc12 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/encryptoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/encryptoptions.go @@ -45,9 +45,9 @@ func (ro *RangeOptionsBuilder) List() []func(*RangeOptions) error { } // SetMin sets the range index minimum value. -func (ro *RangeOptionsBuilder) SetMin(min bson.RawValue) *RangeOptionsBuilder { +func (ro *RangeOptionsBuilder) SetMin(minVal bson.RawValue) *RangeOptionsBuilder { ro.Opts = append(ro.Opts, func(opts *RangeOptions) error { - opts.Min = &min + opts.Min = &minVal return nil }) @@ -56,9 +56,9 @@ func (ro *RangeOptionsBuilder) SetMin(min bson.RawValue) *RangeOptionsBuilder { } // SetMax sets the range index maximum value. -func (ro *RangeOptionsBuilder) SetMax(max bson.RawValue) *RangeOptionsBuilder { +func (ro *RangeOptionsBuilder) SetMax(maxVal bson.RawValue) *RangeOptionsBuilder { ro.Opts = append(ro.Opts, func(opts *RangeOptions) error { - opts.Max = &max + opts.Max = &maxVal return nil }) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/findoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/findoptions.go index a42fe08f..c6dcd096 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/findoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/findoptions.go @@ -164,9 +164,9 @@ func (f *FindOptionsBuilder) SetLimit(i int64) *FindOptionsBuilder { // SetMax sets the value for the Max field. Max is a document specifying the exclusive upper bound // for a specific index. The default value is nil, which means that there is no maximum value. -func (f *FindOptionsBuilder) SetMax(max any) *FindOptionsBuilder { +func (f *FindOptionsBuilder) SetMax(maxVal any) *FindOptionsBuilder { f.Opts = append(f.Opts, func(opts *FindOptions) error { - opts.Max = max + opts.Max = maxVal return nil }) return f @@ -187,9 +187,9 @@ func (f *FindOptionsBuilder) SetMaxAwaitTime(d time.Duration) *FindOptionsBuilde // SetMin sets the value for the Min field. Min is a document specifying the inclusive lower bound // for a specific index. The default value is 0, which means that there is no minimum value. -func (f *FindOptionsBuilder) SetMin(min any) *FindOptionsBuilder { +func (f *FindOptionsBuilder) SetMin(minVal any) *FindOptionsBuilder { f.Opts = append(f.Opts, func(opts *FindOptions) error { - opts.Min = min + opts.Min = minVal return nil }) return f @@ -359,9 +359,9 @@ func (f *FindOneOptionsBuilder) SetHint(hint any) *FindOneOptionsBuilder { // SetMax sets the value for the Max field. Sets a document specifying the exclusive upper bound // for a specific index. The default value is nil, which means that there is no maximum value. -func (f *FindOneOptionsBuilder) SetMax(max any) *FindOneOptionsBuilder { +func (f *FindOneOptionsBuilder) SetMax(maxVal any) *FindOneOptionsBuilder { f.Opts = append(f.Opts, func(opts *FindOneOptions) error { - opts.Max = max + opts.Max = maxVal return nil }) return f @@ -369,9 +369,9 @@ func (f *FindOneOptionsBuilder) SetMax(max any) *FindOneOptionsBuilder { // SetMin sets the value for the Min field. Sets a document specifying the inclusive lower bound // for a specific index. The default value is 0, which means that there is no minimum value. -func (f *FindOneOptionsBuilder) SetMin(min any) *FindOneOptionsBuilder { +func (f *FindOneOptionsBuilder) SetMin(minVal any) *FindOneOptionsBuilder { f.Opts = append(f.Opts, func(opts *FindOneOptions) error { - opts.Min = min + opts.Min = minVal return nil }) return f diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/indexoptions.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/indexoptions.go index 309a77ba..10c3f204 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/indexoptions.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/options/indexoptions.go @@ -398,9 +398,9 @@ func (i *IndexOptionsBuilder) SetBits(bits int32) *IndexOptionsBuilder { // SetMax sets the value for the Max field. Specifies the upper inclusive boundary for // longitude and latitude values. This option is only applicable to 2D indexes and // is ignored for other index types. The default value is 180.0. -func (i *IndexOptionsBuilder) SetMax(max float64) *IndexOptionsBuilder { +func (i *IndexOptionsBuilder) SetMax(maxVal float64) *IndexOptionsBuilder { i.Opts = append(i.Opts, func(opts *IndexOptions) error { - opts.Max = &max + opts.Max = &maxVal return nil }) @@ -411,9 +411,9 @@ func (i *IndexOptionsBuilder) SetMax(max float64) *IndexOptionsBuilder { // SetMin sets the value for the Min field. Specifies the lower inclusive boundary for // longitude and latitude values. This option is only applicable to 2D indexes and // is ignored for other index types. The default value is -180.0. -func (i *IndexOptionsBuilder) SetMin(min float64) *IndexOptionsBuilder { +func (i *IndexOptionsBuilder) SetMin(minVal float64) *IndexOptionsBuilder { i.Opts = append(i.Opts, func(opts *IndexOptions) error { - opts.Min = &min + opts.Min = &minVal return nil }) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/results.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/results.go index e50157e6..b3b3ec19 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/results.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/results.go @@ -10,7 +10,6 @@ import ( "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" ) // ClientBulkWriteResult is the result type returned by a client-level BulkWrite operation. @@ -137,16 +136,16 @@ type ListDatabasesResult struct { TotalSize int64 } -func newListDatabasesResultFromOperation(res operation.ListDatabasesResult) ListDatabasesResult { +func newListDatabasesResultFromOperation(res listDatabasesResult) ListDatabasesResult { var ldr ListDatabasesResult - ldr.Databases = make([]DatabaseSpecification, 0, len(res.Databases)) - for _, spec := range res.Databases { + ldr.Databases = make([]DatabaseSpecification, 0, len(res.databases)) + for _, spec := range res.databases { ldr.Databases = append( ldr.Databases, - DatabaseSpecification{Name: spec.Name, SizeOnDisk: spec.SizeOnDisk, Empty: spec.Empty}, + DatabaseSpecification(spec), ) } - ldr.TotalSize = res.TotalSize + ldr.TotalSize = res.totalSize return ldr } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/search_index_view.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/search_index_view.go index 2ac92eb8..79c21ce0 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/search_index_view.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/search_index_view.go @@ -17,7 +17,6 @@ import ( "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -165,20 +164,27 @@ func (siv SearchIndexView) CreateMany( selector := makePinnedSelector(sess, siv.coll.writeSelector) - op := operation.NewCreateSearchIndexes(indexes). - Session(sess).CommandMonitor(siv.coll.client.monitor). - ServerSelector(selector).ClusterClock(siv.coll.client.clock). - Collection(siv.coll.name).Database(siv.coll.db.name). - Deployment(siv.coll.client.deployment).ServerAPI(siv.coll.client.serverAPI). - Timeout(siv.coll.client.timeout).Authenticator(siv.coll.client.authenticator) + op := &createSearchIndexesOp{ + indexes: indexes, + session: sess, + monitor: siv.coll.client.monitor, + selector: selector, + clock: siv.coll.client.clock, + collection: siv.coll.name, + database: siv.coll.db.name, + deployment: siv.coll.client.deployment, + serverAPI: siv.coll.client.serverAPI, + timeout: siv.coll.client.timeout, + authenticator: siv.coll.client.authenticator, + } - err = op.Execute(ctx) + err = op.execute(ctx) if err != nil { _, err = processWriteError(err) return nil, err } - indexesCreated := op.Result().IndexesCreated + indexesCreated := op.result().IndexesCreated names := make([]string, 0, len(indexesCreated)) for _, index := range indexesCreated { names = append(names, index.Name) @@ -222,14 +228,21 @@ func (siv SearchIndexView) DropOne( selector := makePinnedSelector(sess, siv.coll.writeSelector) - op := operation.NewDropSearchIndex(name). - Session(sess).CommandMonitor(siv.coll.client.monitor). - ServerSelector(selector).ClusterClock(siv.coll.client.clock). - Collection(siv.coll.name).Database(siv.coll.db.name). - Deployment(siv.coll.client.deployment).ServerAPI(siv.coll.client.serverAPI). - Timeout(siv.coll.client.timeout).Authenticator(siv.coll.client.authenticator) + op := dropSearchIndexOp{ + index: name, + session: sess, + monitor: siv.coll.client.monitor, + selector: selector, + clock: siv.coll.client.clock, + collection: siv.coll.name, + database: siv.coll.db.name, + deployment: siv.coll.client.deployment, + serverAPI: siv.coll.client.serverAPI, + timeout: siv.coll.client.timeout, + authenticator: siv.coll.client.authenticator, + } - err = op.Execute(ctx) + err = op.execute(ctx) var de driver.Error if errors.As(err, &de) && de.NamespaceNotFound() { return nil @@ -279,12 +292,20 @@ func (siv SearchIndexView) UpdateOne( selector := makePinnedSelector(sess, siv.coll.writeSelector) - op := operation.NewUpdateSearchIndex(name, indexDefinition). - Session(sess).CommandMonitor(siv.coll.client.monitor). - ServerSelector(selector).ClusterClock(siv.coll.client.clock). - Collection(siv.coll.name).Database(siv.coll.db.name). - Deployment(siv.coll.client.deployment).ServerAPI(siv.coll.client.serverAPI). - Timeout(siv.coll.client.timeout).Authenticator(siv.coll.client.authenticator) + op := updateSearchIndexOp{ + index: name, + definition: indexDefinition, + session: sess, + monitor: siv.coll.client.monitor, + selector: selector, + clock: siv.coll.client.clock, + collection: siv.coll.name, + database: siv.coll.db.name, + deployment: siv.coll.client.deployment, + serverAPI: siv.coll.client.serverAPI, + timeout: siv.coll.client.timeout, + authenticator: siv.coll.client.authenticator, + } - return op.Execute(ctx) + return op.execute(ctx) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/mongo/session.go b/vendor/go.mongodb.org/mongo-driver/v2/mongo/session.go index 905ca936..def9c738 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/mongo/session.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/mongo/session.go @@ -13,13 +13,13 @@ import ( "time" "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/internal/csot" "go.mongodb.org/mongo-driver/v2/internal/mongoutil" "go.mongodb.org/mongo-driver/v2/internal/randutil" "go.mongodb.org/mongo-driver/v2/internal/serverselector" "go.mongodb.org/mongo-driver/v2/mongo/options" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -81,6 +81,12 @@ func SessionFromContext(ctx context.Context) *Session { return sess } +// timeout returns the timeout that applies to operations executed on this +// session, which is inherited from the Client that created it. +func (s *Session) timeout() *time.Duration { + return s.client.timeout +} + // ID returns the current ID document associated with the session. The ID // document is in the form {"id": }. func (s *Session) ID() bson.Raw { @@ -89,6 +95,9 @@ func (s *Session) ID() bson.Raw { // EndSession aborts any existing transactions and close the session. func (s *Session) EndSession(ctx context.Context) { + ctx, cancel := csot.WithTimeout(ctx, s.timeout()) + defer cancel() + if s.clientSession.TransactionInProgress() { // ignore all errors aborting during an end session _ = s.AbortTransaction(ctx) @@ -139,6 +148,7 @@ func (s *Session) WithTransaction( if expDur == 0 { expDur = backoffInitial } else { + expDur += expDur / 2 if expDur > backoffMax { expDur = backoffMax } @@ -153,9 +163,6 @@ func (s *Session) WithTransaction( return nil, timeoutError{Wrapped: err} case <-sleep.C: } - if expDur < backoffMax { - expDur += expDur / 2 - } } err = s.StartTransaction(opts...) @@ -260,6 +267,9 @@ func (s *Session) StartTransaction(opts ...options.Lister[options.TransactionOpt // returns an error if there is no active transaction for this session or if the // transaction has been committed or aborted. func (s *Session) AbortTransaction(ctx context.Context) error { + ctx, cancel := csot.WithTimeout(ctx, s.timeout()) + defer cancel() + err := s.clientSession.CheckAbortTransaction() if err != nil { return err @@ -273,13 +283,24 @@ func (s *Session) AbortTransaction(ctx context.Context) error { selector := makePinnedSelector(s.clientSession, &serverselector.Write{}) s.clientSession.Aborting = true - _ = operation.NewAbortTransaction().Session(s.clientSession).ClusterClock(s.client.clock).Database("admin"). - Deployment(s.deployment).WriteConcern(s.clientSession.CurrentWc).ServerSelector(selector). - Retry(driver.RetryOncePerCommand).MaxAdaptiveRetries(s.client.effectiveAdaptiveRetries(true)). - EnableOverloadRetargeting(s.client.enableOverloadRetargeting). - CommandMonitor(s.client.monitor). - RecoveryToken(bsoncore.Document(s.clientSession.RecoveryToken)).ServerAPI(s.client.serverAPI). - Authenticator(s.client.authenticator).Logger(s.client.logger).Execute(ctx) + retry := driver.RetryOncePerCommand + op := abortTransactionOp{ + session: s.clientSession, + clock: s.client.clock, + database: "admin", + deployment: s.deployment, + writeConcern: s.clientSession.CurrentWc, + selector: selector, + retry: &retry, + maxAdaptiveRetries: s.client.effectiveAdaptiveRetries(true), + enableOverloadRetargeting: s.client.enableOverloadRetargeting, + monitor: s.client.monitor, + recoveryToken: bsoncore.Document(s.clientSession.RecoveryToken), + serverAPI: s.client.serverAPI, + authenticator: s.client.authenticator, + logger: s.client.logger, + } + _ = op.execute(ctx) s.clientSession.Aborting = false _ = s.clientSession.AbortTransaction() @@ -291,6 +312,9 @@ func (s *Session) AbortTransaction(ctx context.Context) error { // method returns an error if there is no active transaction for this session or // if the transaction has been aborted. func (s *Session) CommitTransaction(ctx context.Context) error { + ctx, cancel := csot.WithTimeout(ctx, s.timeout()) + defer cancel() + err := s.clientSession.CheckCommitTransaction() if err != nil { return err @@ -309,15 +333,25 @@ func (s *Session) CommitTransaction(ctx context.Context) error { selector := makePinnedSelector(s.clientSession, &serverselector.Write{}) s.clientSession.Committing = true - op := operation.NewCommitTransaction(). - Session(s.clientSession).ClusterClock(s.client.clock).Database("admin").Deployment(s.deployment). - WriteConcern(s.clientSession.CurrentWc).ServerSelector(selector).Retry(driver.RetryOncePerCommand). - MaxAdaptiveRetries(s.client.effectiveAdaptiveRetries(true)). - EnableOverloadRetargeting(s.client.enableOverloadRetargeting). - CommandMonitor(s.client.monitor).RecoveryToken(bsoncore.Document(s.clientSession.RecoveryToken)). - ServerAPI(s.client.serverAPI).Authenticator(s.client.authenticator).Logger(s.client.logger) - - err = op.Execute(ctx) + retry := driver.RetryOncePerCommand + op := commitTransactionOp{ + session: s.clientSession, + clock: s.client.clock, + database: "admin", + deployment: s.deployment, + writeConcern: s.clientSession.CurrentWc, + selector: selector, + retry: &retry, + maxAdaptiveRetries: s.client.effectiveAdaptiveRetries(true), + enableOverloadRetargeting: s.client.enableOverloadRetargeting, + monitor: s.client.monitor, + recoveryToken: bsoncore.Document(s.clientSession.RecoveryToken), + serverAPI: s.client.serverAPI, + authenticator: s.client.authenticator, + logger: s.client.logger, + } + + err = op.execute(ctx) // Return error without updating transaction state if it is a timeout, as the transaction has not // actually been committed. if IsTimeout(err) { diff --git a/vendor/go.mongodb.org/mongo-driver/v2/version/version.go b/vendor/go.mongodb.org/mongo-driver/v2/version/version.go index 2a9adcd7..692999ad 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/version/version.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/version/version.go @@ -11,4 +11,4 @@ package version // Driver is the current version of the driver. -var Driver = "2.8.2" +var Driver = "2.9.2" diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/array.go b/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/array.go index bfedbc86..b3788232 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/array.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/array.go @@ -173,6 +173,9 @@ func (a Array) Validate() error { if int(length) > len(a) { return NewArrayLengthError(int(length), len(a)) } + if length < 5 { + return ErrInvalidLength + } if a[length-1] != 0x00 { return ErrMissingNull } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/bsoncore.go b/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/bsoncore.go index 52b001cb..2e1a4c5f 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/bsoncore.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/bsoncore.go @@ -688,6 +688,13 @@ func valueLength(src []byte, t Type) (int32, bool) { ok = false } + // Adding a type's fixed overhead to a length read from src can overflow + // int32 and wrap negative, which would slip past the len(src) checks in + // readValue and ReadElement. Reject any negative result as malformed. + if length < 0 { + ok = false + } + return length, ok } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/document.go b/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/document.go index 30a059ff..8baaca3c 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/document.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore/document.go @@ -115,7 +115,7 @@ func newBufferFromReader(r io.Reader) ([]byte, error) { } length, _, _ := binaryutil.ReadI32(lengthBytes[:]) // ignore ok since we always have enough bytes to read a length - if length < 0 { + if length < 5 { return nil, ErrInvalidLength } buffer := make([]byte, length) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/auth.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/auth.go index bfc7bbdb..e9080aed 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/auth.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/auth.go @@ -13,11 +13,11 @@ import ( "net/http" "strings" + "go.mongodb.org/mongo-driver/v2/internal/handshake/operation" "go.mongodb.org/mongo-driver/v2/mongo/address" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/mnet" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/aws_conv.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/aws_sasl_adapter.go similarity index 64% rename from vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/aws_conv.go rename to vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/aws_sasl_adapter.go index 06dd0437..3e97009e 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/aws_conv.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/aws_sasl_adapter.go @@ -18,7 +18,6 @@ import ( "time" "go.mongodb.org/mongo-driver/v2/bson" - "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" v4signer "go.mongodb.org/mongo-driver/v2/internal/aws/signer/v4" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" ) @@ -32,59 +31,63 @@ const ( clientDone ) -type awsConversation struct { - state clientState - valid bool - nonce []byte - credentials *credentials.Credentials +type awsSaslAdapter struct { + signer *v4signer.Signer + + state clientState + nonce []byte +} + +var _ SaslClient = (*awsSaslAdapter)(nil) + +func (a *awsSaslAdapter) Start() (string, []byte, error) { + step, err := a.step(nil) + if err != nil { + return MongoDBAWS, nil, err + } + return MongoDBAWS, step, nil +} + +func (a *awsSaslAdapter) Next(_ context.Context, challenge []byte) ([]byte, error) { + step, err := a.step(challenge) + if err != nil { + return nil, err + } + return step, nil } -type serverMessage struct { - Nonce bson.Binary `bson:"s"` - Host string `bson:"h"` +func (a *awsSaslAdapter) Completed() bool { + return a.state == clientDone } const ( amzDateFormat = "20060102T150405Z" defaultRegion = "us-east-1" maxHostLength = 255 - responceNonceLength = 64 + responseNonceLength = 64 ) -// Step takes a string provided from a server (or just an empty string for the +// step takes a string provided from a server (or just an empty string for the // very first conversation step) and attempts to move the authentication // conversation forward. It returns a string to be sent to the server or an // error if the server message is invalid. Calling Step after a conversation // completes is also an error. -func (ac *awsConversation) Step(challenge []byte) (response []byte, err error) { - switch ac.state { +func (a *awsSaslAdapter) step(challenge []byte) (response []byte, err error) { + switch a.state { case clientStarting: - ac.state = clientFirst - response = ac.firstMsg() + a.state = clientFirst + response = a.firstMsg() case clientFirst: - ac.state = clientFinal - response, err = ac.finalMsg(challenge) + a.state = clientFinal + response, err = a.finalMsg(challenge) case clientFinal: - ac.state = clientDone - ac.valid = true + a.state = clientDone default: response, err = nil, errors.New("conversation already completed") } return } -// Done returns true if the conversation is completed or has errored. -func (ac *awsConversation) Done() bool { - return ac.state == clientDone -} - -// Valid returns true if the conversation successfully authenticated with the -// server, including counter-validation that the server actually has the -// user's stored credentials. -func (ac *awsConversation) Valid() bool { - return ac.valid -} - func getRegion(host string) (string, error) { region := defaultRegion @@ -111,20 +114,23 @@ func getRegion(host string) (string, error) { return region, nil } -func (ac *awsConversation) firstMsg() []byte { +func (a *awsSaslAdapter) firstMsg() []byte { // Values are cached for use in final message parameters - ac.nonce = make([]byte, 32) - _, _ = rand.Read(ac.nonce) + a.nonce = make([]byte, 32) + _, _ = rand.Read(a.nonce) idx, msg := bsoncore.AppendDocumentStart(nil) msg = bsoncore.AppendInt32Element(msg, "p", 110) - msg = bsoncore.AppendBinaryElement(msg, "r", 0x00, ac.nonce) + msg = bsoncore.AppendBinaryElement(msg, "r", 0x00, a.nonce) msg, _ = bsoncore.AppendDocumentEnd(msg, idx) return msg } -func (ac *awsConversation) finalMsg(s1 []byte) ([]byte, error) { - var sm serverMessage +func (a *awsSaslAdapter) finalMsg(s1 []byte) ([]byte, error) { + var sm struct { + Nonce bson.Binary `bson:"s"` + Host string `bson:"h"` + } err := bson.Unmarshal(s1, &sm) if err != nil { return nil, err @@ -134,10 +140,10 @@ func (ac *awsConversation) finalMsg(s1 []byte) ([]byte, error) { if sm.Nonce.Subtype != 0x00 { return nil, errors.New("server reply contained unexpected binary subtype") } - if len(sm.Nonce.Data) != responceNonceLength { - return nil, fmt.Errorf("server reply nonce was not %v bytes", responceNonceLength) + if len(sm.Nonce.Data) != responseNonceLength { + return nil, fmt.Errorf("server reply nonce was not %v bytes", responseNonceLength) } - if !bytes.HasPrefix(sm.Nonce.Data, ac.nonce) { + if !bytes.HasPrefix(sm.Nonce.Data, a.nonce) { return nil, errors.New("server nonce did not extend client nonce") } @@ -146,31 +152,23 @@ func (ac *awsConversation) finalMsg(s1 []byte) ([]byte, error) { return nil, err } - creds, err := ac.credentials.GetWithContext(context.Background()) - if err != nil { - return nil, err - } - currentTime := time.Now().UTC() body := "Action=GetCallerIdentity&Version=2011-06-15" // Create http.Request - req, _ := http.NewRequest("POST", "/", strings.NewReader(body)) + req, err := http.NewRequest("POST", "/", strings.NewReader(body)) + if err != nil { + return nil, err + } + req.Host = sm.Host req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Content-Length", "43") - req.Host = sm.Host req.Header.Set("X-Amz-Date", currentTime.Format(amzDateFormat)) - if len(creds.SessionToken) > 0 { - req.Header.Set("X-Amz-Security-Token", creds.SessionToken) - } req.Header.Set("X-MongoDB-Server-Nonce", base64.StdEncoding.EncodeToString(sm.Nonce.Data)) req.Header.Set("X-MongoDB-GS2-CB-Flag", "n") - // Create signer with credentials - signer := v4signer.NewSigner(ac.credentials) - // Get signed header - _, err = signer.Sign(req, strings.NewReader(body), "sts", region, currentTime) + _, err = a.signer.Sign(req, strings.NewReader(body), "sts", region, currentTime) if err != nil { return nil, err } @@ -179,8 +177,8 @@ func (ac *awsConversation) finalMsg(s1 []byte) ([]byte, error) { idx, msg := bsoncore.AppendDocumentStart(nil) msg = bsoncore.AppendStringElement(msg, "a", req.Header.Get("Authorization")) msg = bsoncore.AppendStringElement(msg, "d", req.Header.Get("X-Amz-Date")) - if len(creds.SessionToken) > 0 { - msg = bsoncore.AppendStringElement(msg, "t", creds.SessionToken) + if sessionToken := req.Header.Get("X-Amz-Security-Token"); len(sessionToken) > 0 { + msg = bsoncore.AppendStringElement(msg, "t", sessionToken) } msg, _ = bsoncore.AppendDocumentEnd(msg, idx) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/awscreds.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/awscreds.go index 36595c20..8da59498 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/awscreds.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/awscreds.go @@ -24,13 +24,10 @@ const ( expiryWindow = 5 * time.Minute ) -// AWSCredentialProvider wraps AWS credentials. -type AWSCredentialProvider struct { - Cred *credentials.Credentials -} - -// NewAWSCredentialProvider generates new AWSCredentialProvider -func NewAWSCredentialProvider(httpClient *http.Client, providers ...credentials.Provider) AWSCredentialProvider { +// NewAWSCredentials returns a Credentials that resolves AWS credentials by +// chaining the given providers with the default environment, assume-role, ECS, +// and EC2 providers in order. +func NewAWSCredentials(httpClient *http.Client, providers ...credentials.Provider) *credentials.Credentials { providers = append( providers, credproviders.NewEnvProvider(), @@ -39,12 +36,17 @@ func NewAWSCredentialProvider(httpClient *http.Client, providers ...credentials. credproviders.NewEC2Provider(httpClient, expiryWindow), ) - return AWSCredentialProvider{credentials.NewChainCredentials(providers)} + return credentials.NewChainCredentials(providers) +} + +// AWSCredentialDocSource wraps AWS credentials. +type AWSCredentialDocSource struct { + Creds *credentials.Credentials } // GetCredentialsDoc generates AWS credentials. -func (p AWSCredentialProvider) GetCredentialsDoc(ctx context.Context) (bsoncore.Document, error) { - creds, err := p.Cred.GetWithContext(ctx) +func (p AWSCredentialDocSource) GetCredentialsDoc(ctx context.Context) (bsoncore.Document, error) { + creds, err := p.Creds.Get(ctx) if err != nil { return nil, err } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/azurecreds.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/azurecreds.go index c6d4b473..d2f16ef9 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/azurecreds.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds/azurecreds.go @@ -30,7 +30,7 @@ func NewAzureCredentialProvider(httpClient *http.Client) AzureCredentialProvider // GetCredentialsDoc generates Azure credentials. func (p AzureCredentialProvider) GetCredentialsDoc(ctx context.Context) (bsoncore.Document, error) { - creds, err := p.cred.GetWithContext(ctx) + creds, err := p.cred.Get(ctx) if err != nil { return nil, err } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/mongodbaws.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/mongodbaws.go index dd9661e1..8e2d7774 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/mongodbaws.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/mongodbaws.go @@ -12,6 +12,7 @@ import ( "net/http" "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" + v4signer "go.mongodb.org/mongo-driver/v2/internal/aws/signer/v4" "go.mongodb.org/mongo-driver/v2/internal/credproviders" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds" @@ -27,33 +28,36 @@ func newMongoDBAWSAuthenticator(cred *Cred, httpClient *http.Client) (Authentica if httpClient == nil { return nil, errors.New("httpClient must not be nil") } - return &MongoDBAWSAuthenticator{ - credentials: &credproviders.StaticProvider{ + + providers := []credentials.Provider{ + &credproviders.StaticProvider{ Value: credentials.Value{ AccessKeyID: cred.Username, SecretAccessKey: cred.Password, SessionToken: cred.Props["AWS_SESSION_TOKEN"], }, }, - httpClient: httpClient, + } + if cred.AWSCredentialsProvider != nil { + providers = append(providers, cred.AWSCredentialsProvider) + } + + return &MongoDBAWSAuthenticator{ + credentials: creds.NewAWSCredentials(httpClient, providers...), }, nil } // MongoDBAWSAuthenticator uses AWS-IAM credentials over SASL to authenticate a connection. type MongoDBAWSAuthenticator struct { - credentials *credproviders.StaticProvider - httpClient *http.Client + credentials *credentials.Credentials } // Auth authenticates the connection. func (a *MongoDBAWSAuthenticator) Auth(ctx context.Context, cfg *driver.AuthConfig) error { - providers := creds.NewAWSCredentialProvider(a.httpClient, a.credentials) - adapter := &awsSaslAdapter{ - conversation: &awsConversation{ - credentials: providers.Cred, - }, + awsSasl := &awsSaslAdapter{ + signer: v4signer.NewSigner(a.credentials), } - err := ConductSaslConversation(ctx, cfg, sourceExternal, adapter) + err := ConductSaslConversation(ctx, cfg, sourceExternal, awsSasl) if err != nil { return newAuthError("sasl conversation error", err) } @@ -64,29 +68,3 @@ func (a *MongoDBAWSAuthenticator) Auth(ctx context.Context, cfg *driver.AuthConf func (a *MongoDBAWSAuthenticator) Reauth(_ context.Context, _ *driver.AuthConfig) error { return newAuthError("AWS authentication does not support reauthentication", nil) } - -type awsSaslAdapter struct { - conversation *awsConversation -} - -var _ SaslClient = (*awsSaslAdapter)(nil) - -func (a *awsSaslAdapter) Start() (string, []byte, error) { - step, err := a.conversation.Step(nil) - if err != nil { - return MongoDBAWS, nil, err - } - return MongoDBAWS, step, nil -} - -func (a *awsSaslAdapter) Next(_ context.Context, challenge []byte) ([]byte, error) { - step, err := a.conversation.Step(challenge) - if err != nil { - return nil, err - } - return step, nil -} - -func (a *awsSaslAdapter) Completed() bool { - return a.conversation.Done() -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/sasl.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/sasl.go index 659fe45e..a9148750 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/sasl.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/sasl.go @@ -13,9 +13,29 @@ import ( "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" + "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" ) +// runCommand runs a generic command against the connection in cfg and returns +// the raw server response. +func runCommand(ctx context.Context, cfg *driver.AuthConfig, db string, cmd bsoncore.Document) (bsoncore.Document, error) { + var res bsoncore.Document + err := driver.Operation{ + CommandFn: func(dst []byte, _ description.SelectedServer) ([]byte, error) { + return append(dst, cmd[4:len(cmd)-1]...), nil + }, + ProcessResponseFn: func(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { + res = resp + return nil + }, + Database: db, + Deployment: driver.SingleConnectionDeployment{C: cfg.Connection}, + Clock: cfg.ClusterClock, + ServerAPI: cfg.ServerAPI, + }.Execute(ctx) + return res, err +} + // SaslClient is the client piece of a sasl conversation. type SaslClient interface { Start() (string, []byte, error) @@ -132,17 +152,10 @@ func (sc *saslConversation) Finish(ctx context.Context, cfg *driver.AuthConfig, bsoncore.AppendInt32Element(nil, "conversationId", int32(cid)), bsoncore.AppendBinaryElement(nil, "payload", 0x00, payload), ) - saslContinueCmd := operation.NewCommand(doc). - Database(sc.source). - Deployment(driver.SingleConnectionDeployment{cfg.Connection}). - ClusterClock(cfg.ClusterClock). - ServerAPI(cfg.ServerAPI) - - err = saslContinueCmd.Execute(ctx) + rdr, err = runCommand(ctx, cfg, sc.source, doc) if err != nil { return newError(err, sc.mechanism) } - rdr = saslContinueCmd.Result() err = bson.Unmarshal(rdr, &saslResp) if err != nil { @@ -160,14 +173,10 @@ func ConductSaslConversation(ctx context.Context, cfg *driver.AuthConfig, authSo if err != nil { return newError(err, conversation.mechanism) } - saslStartCmd := operation.NewCommand(saslStartDoc). - Database(authSource). - Deployment(driver.SingleConnectionDeployment{cfg.Connection}). - ClusterClock(cfg.ClusterClock). - ServerAPI(cfg.ServerAPI) - if err := saslStartCmd.Execute(ctx); err != nil { + saslStartRes, err := runCommand(ctx, cfg, authSource, saslStartDoc) + if err != nil { return newError(err, conversation.mechanism) } - return conversation.Finish(ctx, cfg, saslStartCmd.Result()) + return conversation.Finish(ctx, cfg, saslStartRes) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/x509.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/x509.go index f8390234..f997b1c8 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/x509.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/x509.go @@ -12,7 +12,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" ) // MongoDBX509 is the mechanism name for MongoDBX509. @@ -67,13 +66,7 @@ func (a *MongoDBX509Authenticator) CreateSpeculativeConversation() (SpeculativeC // Auth authenticates the provided connection by conducting an X509 authentication conversation. func (a *MongoDBX509Authenticator) Auth(ctx context.Context, cfg *driver.AuthConfig) error { requestDoc := createFirstX509Message() - authCmd := operation. - NewCommand(requestDoc). - Database(sourceExternal). - Deployment(driver.SingleConnectionDeployment{cfg.Connection}). - ClusterClock(cfg.ClusterClock). - ServerAPI(cfg.ServerAPI) - err := authCmd.Execute(ctx) + _, err := runCommand(ctx, cfg, sourceExternal, requestDoc) if err != nil { return newAuthError("round trip error", err) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/compression.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/compression.go index 349781f4..4d53302f 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/compression.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/compression.go @@ -155,9 +155,13 @@ var zstdReaderPool = sync.Pool{ // DecompressPayload takes a byte slice that has been compressed and undoes it according to the options passed func DecompressPayload(in []byte, opts CompressionOpts) ([]byte, error) { - switch opts.Compressor { - case wiremessage.CompressorNoOp: + if opts.Compressor == wiremessage.CompressorNoOp { return in, nil + } + if opts.UncompressedSize < 0 { + return nil, fmt.Errorf("invalid uncompressed size: %d", opts.UncompressedSize) + } + switch opts.Compressor { case wiremessage.CompressorSnappy: l, err := snappy.DecodedLen(in) if err != nil { diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/connstring/connstring.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/connstring/connstring.go index 256cc9d8..20a86fd5 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/connstring/connstring.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/connstring/connstring.go @@ -106,90 +106,92 @@ func Parse(s string) (*ConnString, error) { // ConnString represents a connection string to mongodb. type ConnString struct { - Original string - AppName string - AuthMechanism string - AuthMechanismProperties map[string]string - AuthMechanismPropertiesSet bool - AuthSource string - AuthSourceSet bool - Compressors []string - Connect ConnectMode - ConnectSet bool - DirectConnection bool - DirectConnectionSet bool - ConnectTimeout time.Duration - ConnectTimeoutSet bool - Database string - HeartbeatInterval time.Duration - HeartbeatIntervalSet bool - Hosts []string - J bool - JSet bool - LoadBalanced bool - LoadBalancedSet bool - LocalThreshold time.Duration - LocalThresholdSet bool - MaxConnIdleTime time.Duration - MaxConnIdleTimeSet bool - MaxPoolSize uint64 - MaxPoolSizeSet bool - MinPoolSize uint64 - MinPoolSizeSet bool - MaxConnecting uint64 - MaxConnectingSet bool - Password string - PasswordSet bool - RawHosts []string - ReadConcernLevel string - ReadPreference string - ReadPreferenceTagSets []map[string]string - RetryWrites bool - RetryWritesSet bool - RetryReads bool - RetryReadsSet bool - MaxAdaptiveRetries uint - MaxAdaptiveRetriesSet bool - EnableOverloadRetargeting bool - EnableOverloadRetargetingSet bool - MaxStaleness time.Duration - MaxStalenessSet bool - ReplicaSet string - Scheme string - ServerMonitoringMode string - ServerSelectionTimeout time.Duration - ServerSelectionTimeoutSet bool - SocketTimeout time.Duration - SocketTimeoutSet bool - SRVMaxHosts int - SRVServiceName string - SSL bool - SSLSet bool - SSLClientCertificateKeyFile string - SSLClientCertificateKeyFileSet bool - SSLClientCertificateKeyPassword func() string - SSLClientCertificateKeyPasswordSet bool - SSLCertificateFile string - SSLCertificateFileSet bool - SSLPrivateKeyFile string - SSLPrivateKeyFileSet bool - SSLInsecure bool - SSLInsecureSet bool - SSLCaFile string - SSLCaFileSet bool - SSLDisableOCSPEndpointCheck bool - SSLDisableOCSPEndpointCheckSet bool - Timeout time.Duration - TimeoutSet bool - WString string - WNumber int - WNumberSet bool - Username string - UsernameSet bool - ZlibLevel int - ZlibLevelSet bool - ZstdLevel int - ZstdLevelSet bool + Original string + AppName string + AuthMechanism string + AuthMechanismProperties map[string]string + AuthMechanismPropertiesSet bool + AuthSource string + AuthSourceSet bool + Compressors []string + Connect ConnectMode + ConnectSet bool + DirectConnection bool + DirectConnectionSet bool + ConnectTimeout time.Duration + ConnectTimeoutSet bool + Database string + HeartbeatInterval time.Duration + HeartbeatIntervalSet bool + Hosts []string + J bool + JSet bool + LoadBalanced bool + LoadBalancedSet bool + LocalThreshold time.Duration + LocalThresholdSet bool + MaxConnIdleTime time.Duration + MaxConnIdleTimeSet bool + MaxPoolSize uint64 + MaxPoolSizeSet bool + MinPoolSize uint64 + MinPoolSizeSet bool + MaxConnecting uint64 + MaxConnectingSet bool + Password string + PasswordSet bool + RawHosts []string + ReadConcernLevel string + ReadPreference string + ReadPreferenceTagSets []map[string]string + RetryWrites bool + RetryWritesSet bool + RetryReads bool + RetryReadsSet bool + MaxAdaptiveRetries uint + MaxAdaptiveRetriesSet bool + EnableOverloadRetargeting bool + EnableOverloadRetargetingSet bool + MaxStaleness time.Duration + MaxStalenessSet bool + ReplicaSet string + Scheme string + ServerMonitoringMode string + ServerSelectionTimeout time.Duration + ServerSelectionTimeoutSet bool + SocketTimeout time.Duration + SocketTimeoutSet bool + SRVMaxHosts int + SRVServiceName string + SSL bool + SSLSet bool + SSLClientCertificateKeyFile string + SSLClientCertificateKeyFileSet bool + SSLClientCertificateKeyPassword func() string + SSLClientCertificateKeyPasswordSet bool + SSLCertificateFile string + SSLCertificateFileSet bool + SSLPrivateKeyFile string + SSLPrivateKeyFileSet bool + SSLInsecure bool + SSLInsecureSet bool + SSLCaFile string + SSLCaFileSet bool + SSLDisableCertificateRevocationCheck bool + SSLDisableCertificateRevocationCheckSet bool + SSLDisableOCSPEndpointCheck bool + SSLDisableOCSPEndpointCheckSet bool + Timeout time.Duration + TimeoutSet bool + WString string + WNumber int + WNumberSet bool + Username string + UsernameSet bool + ZlibLevel int + ZlibLevelSet bool + ZstdLevel int + ZstdLevelSet bool Options map[string][]string UnknownOptions map[string][]string @@ -648,6 +650,19 @@ func (u *ConnString) addOptions(connectionArgPairs []string) error { } u.Timeout = time.Duration(n) * time.Millisecond u.TimeoutSet = true + case "tlsdisablecertificaterevocationcheck": + u.SSL = true + u.SSLSet = true + + switch value { + case "true": + u.SSLDisableCertificateRevocationCheck = true + case "false": + u.SSLDisableCertificateRevocationCheck = false + default: + return fmt.Errorf("invalid value for %q: %q", key, value) + } + u.SSLDisableCertificateRevocationCheckSet = true case "tlsdisableocspendpointcheck": u.SSL = true u.SSLSet = true @@ -811,9 +826,17 @@ func (u *ConnString) validateSSL() error { return errors.New("the tlsCertificateFile URI option must be provided if the tlsPrivateKeyFile option is specified") } + if u.SSLDisableOCSPEndpointCheckSet && u.SSLDisableCertificateRevocationCheckSet { + return errors.New("tlsDisableOCSPEndpointCheck cannot be used with tlsDisableCertificateRevocationCheck") + } + if u.SSLInsecureSet && u.SSLDisableOCSPEndpointCheckSet { return errors.New("the sslInsecure/tlsInsecure URI option cannot be provided along with " + - "tlsDisableOCSPEndpointCheck ") + "tlsDisableOCSPEndpointCheck") + } + + if u.SSLInsecureSet && u.SSLDisableCertificateRevocationCheckSet { + return errors.New("sslInsecure/tlsInsecure cannot be used with tlsDisableCertificateRevocationCheck") } return nil } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/driver.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/driver.go index 49ce715c..fa55dd6a 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/driver.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/driver.go @@ -17,6 +17,7 @@ import ( "context" "time" + "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" "go.mongodb.org/mongo-driver/v2/internal/csot" "go.mongodb.org/mongo-driver/v2/mongo/address" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" @@ -73,13 +74,19 @@ type Authenticator interface { // Cred is a user's credential. type Cred struct { - Source string - Username string - Password string - PasswordSet bool - Props map[string]string - OIDCMachineCallback OIDCCallback - OIDCHumanCallback OIDCCallback + Source string + Username string + Password string + PasswordSet bool + Props map[string]string + OIDCMachineCallback OIDCCallback + OIDCHumanCallback OIDCCallback + AWSCredentialsProvider AWSCredentialsProvider +} + +// AWSCredentialsProvider is the interface used to retrieve AWS credentials. +type AWSCredentialsProvider interface { + Retrieve(ctx context.Context) (credentials.Value, error) } // Deployment is implemented by types that can select a server from a deployment. diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/errors.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/errors.go index 81a9b3e6..b1a6a1b8 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/errors.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/errors.go @@ -12,6 +12,7 @@ import ( "errors" "fmt" "strings" + "time" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/internal/driverutil" @@ -122,6 +123,7 @@ type WriteCommandError struct { WriteErrors WriteErrors Labels []string Raw bsoncore.Document + BaseBackoff time.Duration } // UnsupportedStorageEngine returns whether or not the WriteCommandError comes from a retryable write being attempted @@ -278,6 +280,7 @@ type Error struct { Wrapped error TopologyVersion *description.TopologyVersion Raw bsoncore.Document + BaseBackoff time.Duration } // UnsupportedStorageEngine returns whether e came as a result of an unsupported storage engine @@ -287,13 +290,18 @@ func (e Error) UnsupportedStorageEngine() bool { // Error implements the error interface. func (e Error) Error() string { - var msg string - if e.Name != "" { - msg = fmt.Sprintf("(%v)", e.Name) + msg := e.Message + if e.Wrapped != nil && e.Wrapped.Error() != e.Message { + if msg != "" { + msg += ": " + } + msg += e.Wrapped.Error() } - msg += " " + e.Message - if e.Wrapped != nil { - msg += ": " + e.Wrapped.Error() + if e.Name != "" { + if msg == "" { + return fmt.Sprintf("(%v)", e.Name) + } + msg = fmt.Sprintf("(%v) %s", e.Name, msg) } return msg } @@ -402,6 +410,7 @@ func ExtractErrorFromServerResponse(doc bsoncore.Document) error { var errmsg, codeName string var code int32 var labels []string + var baseBackoff time.Duration var ok bool var tv *description.TopologyVersion var wcError WriteCommandError @@ -443,6 +452,10 @@ func ExtractErrorFromServerResponse(doc bsoncore.Document) error { if c, okay := elem.Value().Int32OK(); okay { code = c } + case "baseBackoffMS": + if ms, okay := elem.Value().AsInt64OK(); okay { + baseBackoff = time.Duration(ms) * time.Millisecond + } case "errorLabels": if arr, okay := elem.Value().ArrayOK(); okay { vals, err := arr.Values() @@ -507,6 +520,9 @@ func ExtractErrorFromServerResponse(doc bsoncore.Document) error { wcError.WriteConcernError.Details = make([]byte, len(info)) copy(wcError.WriteConcernError.Details, info) } + if ms, exists := doc.Lookup("baseBackoffMS").AsInt64OK(); exists && baseBackoff == 0 { + baseBackoff = time.Duration(ms) * time.Millisecond + } if errLabels, exists := doc.Lookup("errorLabels").ArrayOK(); exists { vals, err := errLabels.Values() if err != nil { @@ -542,6 +558,7 @@ func ExtractErrorFromServerResponse(doc bsoncore.Document) error { Labels: labels, TopologyVersion: tv, Raw: doc, + BaseBackoff: baseBackoff, } // If we get a MaxTimeMSExpired error, assume that the error was caused @@ -565,6 +582,7 @@ func ExtractErrorFromServerResponse(doc bsoncore.Document) error { wcError.WriteConcernError.TopologyVersion = tv } wcError.Raw = doc + wcError.BaseBackoff = baseBackoff return wcError } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/mongocrypt.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/mongocrypt.go index 506d92be..062ea5f8 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/mongocrypt.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/mongocrypt.go @@ -24,6 +24,7 @@ import ( "unsafe" "go.mongodb.org/mongo-driver/v2/bson" + "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" "go.mongodb.org/mongo-driver/v2/internal/httputil" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth/creds" @@ -63,8 +64,16 @@ func NewMongoCrypt(opts *options.MongoCryptOptions) (*MongoCrypt, error) { if needsKmsProvider(opts.KmsProviders, "gcp") { kmsProviders["gcp"] = creds.NewGCPCredentialProvider(httpClient) } + awsCredentialsProvider := opts.AWSCredentialsProvider if needsKmsProvider(opts.KmsProviders, "aws") { - kmsProviders["aws"] = creds.NewAWSCredentialProvider(httpClient) + var providers []credentials.Provider + if awsCredentialsProvider != nil { + providers = append(providers, awsCredentialsProvider) + } + kmsProviders["aws"] = creds.AWSCredentialDocSource{Creds: creds.NewAWSCredentials(httpClient, providers...)} + } else if awsCredentialsProvider != nil { + return nil, fmt.Errorf("can only provide a custom AWS credential provider " + + "when the state machine is configured for automatic AWS credential fetching") } if needsKmsProvider(opts.KmsProviders, "azure") { kmsProviders["azure"] = creds.NewAzureCredentialProvider(httpClient) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/options/mongocrypt_options.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/options/mongocrypt_options.go index d97c535e..8daacad2 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/options/mongocrypt_options.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/options/mongocrypt_options.go @@ -10,6 +10,7 @@ import ( "net/http" "time" + "go.mongodb.org/mongo-driver/v2/internal/aws/credentials" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" ) @@ -23,4 +24,5 @@ type MongoCryptOptions struct { CryptSharedLibOverridePath string HTTPClient *http.Client KeyExpiration *time.Duration + AWSCredentialsProvider credentials.Provider } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation.go index 21fdd326..22f2f118 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation.go @@ -64,8 +64,6 @@ var ( const ( // maximum BSON object size when in-use encryption is enabled cryptMaxBsonObjectSize int = 2097152 - // minimum wire version necessary to use automatic encryption - cryptMinWireVersion int32 = 8 // minimum wire version necessary to use read snapshots readSnapshotMinWireVersion int32 = 13 @@ -566,7 +564,7 @@ func (op Operation) Execute(ctx context.Context) error { var operationErr WriteCommandError var prevErr error var prevIndefiniteErr error - var expDur time.Duration + var overloadAttempt uint var transactionState session.TransactionState var isOverloadedError bool var attempt uint @@ -628,15 +626,16 @@ func (op Operation) Execute(ctx context.Context) error { if isOverloadedError { isOverloadedError = false - if expDur == 0 { - expDur = backoffInitial - } else { - expDur *= 2 - if expDur > backoffMax { - expDur = backoffMax - } + overloadAttempt++ + + // A positive "baseBackoffMS" on the error is a server-supplied base + // backoff that replaces the driver's default. + base := backoffInitial + if serverBase := serverBaseBackoff(err); serverBase > 0 { + base = serverBase } - backoff := randutil.JitterDuration(expDur) + + backoff := randutil.JitterDuration(overloadBackoff(base, overloadAttempt)) if deadline, ok := ctx.Deadline(); ok && time.Until(deadline) < backoff { return err } @@ -1103,7 +1102,7 @@ func (op Operation) Execute(ctx context.Context) error { } } isOverloadedError = false - expDur = 0 + overloadAttempt = 0 attempt = 0 currIndex += startedInfo.processedBatches op.Batches.AdvanceBatches(startedInfo.processedBatches) @@ -1439,9 +1438,6 @@ func (op Operation) createWireMessage( wmindex, dst = wiremessage.AppendHeaderStart(dst, requestID, 0, wiremessage.OpQuery) info.processedBatches, dst, info.cmd, err = op.createLegacyHandshakeWireMessage(ctx, maxTimeMS, dst, desc) case op.shouldEncrypt(): - if desc.WireVersion.Max < cryptMinWireVersion { - return dst, false, info, errors.New("auto-encryption requires a MongoDB version of 4.2") - } cmdFn := func(dst []byte, desc description.SelectedServer) ([]byte, error) { info.processedBatches, dst, err = op.addEncryptCommandFields(ctx, dst, desc) return dst, err @@ -2042,6 +2038,10 @@ func (Operation) decodeOpReply(wm []byte) opReply { } if reply.responseFlags&wiremessage.QueryFailure == wiremessage.QueryFailure { + if len(reply.documents) == 0 { + reply.err = errors.New("malformed OP_REPLY: QueryFailure flag set but no documents returned") + return reply + } reply.err = QueryFailureError{ Message: "command failure", Response: reply.documents[0], @@ -2288,6 +2288,33 @@ func (op Operation) publishFinishedEvent(ctx context.Context, info finishedInfor op.CommandMonitor.Failed(ctx, failedEvent) } +// overloadBackoff returns the exponential backoff duration for the given overload retry attempt. +func overloadBackoff(base time.Duration, attempt uint) time.Duration { + d := base + for i := uint(0); i < attempt && d < backoffMax; i++ { + d *= 2 + } + if d > backoffMax { + d = backoffMax + } + return d +} + +// serverBaseBackoff returns the server-supplied base backoff attached to err. +func serverBaseBackoff(err error) time.Duration { + var cerr Error + if errors.As(err, &cerr) { + return cerr.BaseBackoff + } + + var wce WriteCommandError + if errors.As(err, &wce) { + return wce.BaseBackoff + } + + return 0 +} + // sessionsSupported returns true of the given server version indicates that it supports sessions. func sessionsSupported(wireVersion *description.VersionRange) bool { return wireVersion != nil diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/abort_transaction.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/abort_transaction.go deleted file mode 100644 index 2b15056f..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/abort_transaction.go +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/internal/logger" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// AbortTransaction performs an abortTransaction operation. -type AbortTransaction struct { - authenticator driver.Authenticator - recoveryToken bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - serverAPI *driver.ServerAPIOptions - logger *logger.Logger -} - -// NewAbortTransaction constructs and returns a new AbortTransaction. -func NewAbortTransaction() *AbortTransaction { - return &AbortTransaction{} -} - -func (at *AbortTransaction) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { - return nil -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (at *AbortTransaction) Execute(ctx context.Context) error { - if at.deployment == nil { - return errors.New("the AbortTransaction operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: at.command, - ProcessResponseFn: at.processResponse, - RetryMode: at.retry, - Type: driver.Write, - Client: at.session, - Clock: at.clock, - CommandMonitor: at.monitor, - MaxAdaptiveRetries: at.maxAdaptiveRetries, - EnableOverloadRetargeting: at.enableOverloadRetargeting, - Crypt: at.crypt, - Database: at.database, - Deployment: at.deployment, - Selector: at.selector, - WriteConcern: at.writeConcern, - ServerAPI: at.serverAPI, - Name: driverutil.AbortTransactionOp, - Authenticator: at.authenticator, - Logger: at.logger, - }.Execute(ctx) -} - -func (at *AbortTransaction) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendInt32Element(dst, "abortTransaction", 1) - if at.recoveryToken != nil { - dst = bsoncore.AppendDocumentElement(dst, "recoveryToken", at.recoveryToken) - } - return dst, nil -} - -// RecoveryToken sets the recovery token to use when committing or aborting a sharded transaction. -func (at *AbortTransaction) RecoveryToken(recoveryToken bsoncore.Document) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.recoveryToken = recoveryToken - return at -} - -// Session sets the session for this operation. -func (at *AbortTransaction) Session(session *session.Client) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.session = session - return at -} - -// ClusterClock sets the cluster clock for this operation. -func (at *AbortTransaction) ClusterClock(clock *session.ClusterClock) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.clock = clock - return at -} - -// Collection sets the collection that this command will run against. -func (at *AbortTransaction) Collection(collection string) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.collection = collection - return at -} - -// CommandMonitor sets the monitor to use for APM events. -func (at *AbortTransaction) CommandMonitor(monitor *event.CommandMonitor) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.monitor = monitor - return at -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (at *AbortTransaction) Crypt(crypt driver.Crypt) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.crypt = crypt - return at -} - -// Database sets the database to run this operation against. -func (at *AbortTransaction) Database(database string) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.database = database - return at -} - -// Deployment sets the deployment to use for this operation. -func (at *AbortTransaction) Deployment(deployment driver.Deployment) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.deployment = deployment - return at -} - -// ServerSelector sets the selector used to retrieve a server. -func (at *AbortTransaction) ServerSelector(selector description.ServerSelector) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.selector = selector - return at -} - -// WriteConcern sets the write concern for this operation. -func (at *AbortTransaction) WriteConcern(writeConcern *writeconcern.WriteConcern) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.writeConcern = writeConcern - return at -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (at *AbortTransaction) Retry(retry driver.RetryMode) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.retry = &retry - return at -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (at *AbortTransaction) MaxAdaptiveRetries(maxAdaptiveRetries uint) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.maxAdaptiveRetries = maxAdaptiveRetries - return at -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (at *AbortTransaction) EnableOverloadRetargeting(enabled bool) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.enableOverloadRetargeting = enabled - return at -} - -// ServerAPI sets the server API version for this operation. -func (at *AbortTransaction) ServerAPI(serverAPI *driver.ServerAPIOptions) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.serverAPI = serverAPI - return at -} - -// Authenticator sets the authenticator to use for this operation. -func (at *AbortTransaction) Authenticator(authenticator driver.Authenticator) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.authenticator = authenticator - return at -} - -// Logger sets the logger for this operation. -func (at *AbortTransaction) Logger(logger *logger.Logger) *AbortTransaction { - if at == nil { - at = new(AbortTransaction) - } - - at.logger = logger - return at -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/aggregate.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/aggregate.go deleted file mode 100644 index 22dbb808..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/aggregate.go +++ /dev/null @@ -1,467 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/readconcern" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Aggregate represents an aggregate operation. -type Aggregate struct { - authenticator driver.Authenticator - allowDiskUse *bool - batchSize *int32 - bypassDocumentValidation *bool - collation bsoncore.Document - comment bsoncore.Value - hint bsoncore.Value - pipeline bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - database string - deployment driver.Deployment - readConcern *readconcern.ReadConcern - readPreference *readpref.ReadPref - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - crypt driver.Crypt - serverAPI *driver.ServerAPIOptions - let bsoncore.Document - hasOutputStage bool - customOptions map[string]bsoncore.Value - timeout *time.Duration - omitMaxTimeMS bool - rawData *bool - - result driver.CursorResponse -} - -// NewAggregate constructs and returns a new Aggregate. -func NewAggregate(pipeline bsoncore.Document) *Aggregate { - return &Aggregate{ - pipeline: pipeline, - } -} - -// Result returns the result of executing this operation. -func (a *Aggregate) Result(opts driver.CursorOptions) (*driver.BatchCursor, error) { - clientSession := a.session - - clock := a.clock - opts.ServerAPI = a.serverAPI - return driver.NewBatchCursor(a.result, clientSession, clock, opts) -} - -// ResultCursorResponse returns the underlying CursorResponse result of executing this -// operation. -func (a *Aggregate) ResultCursorResponse() driver.CursorResponse { - return a.result -} - -func (a *Aggregate) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { - curDoc, err := driver.ExtractCursorDocument(resp) - if err != nil { - return err - } - a.result, err = driver.NewCursorResponse(curDoc, info) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (a *Aggregate) Execute(ctx context.Context) error { - if a.deployment == nil { - return errors.New("the Aggregate operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: a.command, - ProcessResponseFn: a.processResponse, - - Client: a.session, - Clock: a.clock, - CommandMonitor: a.monitor, - Database: a.database, - Deployment: a.deployment, - ReadConcern: a.readConcern, - ReadPreference: a.readPreference, - Type: driver.Read, - RetryMode: a.retry, - MaxAdaptiveRetries: a.maxAdaptiveRetries, - EnableOverloadRetargeting: a.enableOverloadRetargeting, - Selector: a.selector, - WriteConcern: a.writeConcern, - Crypt: a.crypt, - MinimumWriteConcernWireVersion: 5, - ServerAPI: a.serverAPI, - IsOutputAggregate: a.hasOutputStage, - Timeout: a.timeout, - Name: driverutil.AggregateOp, - Authenticator: a.authenticator, - OmitMaxTimeMS: a.omitMaxTimeMS, - }.Execute(ctx) -} - -func (a *Aggregate) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - header := bsoncore.Value{Type: bsoncore.TypeString, Data: bsoncore.AppendString(nil, a.collection)} - if a.collection == "" { - header = bsoncore.Value{Type: bsoncore.TypeInt32, Data: []byte{0x01, 0x00, 0x00, 0x00}} - } - dst = bsoncore.AppendValueElement(dst, "aggregate", header) - - cursorIdx, cursorDoc := bsoncore.AppendDocumentStart(nil) - if a.allowDiskUse != nil { - dst = bsoncore.AppendBooleanElement(dst, "allowDiskUse", *a.allowDiskUse) - } - if a.batchSize != nil { - cursorDoc = bsoncore.AppendInt32Element(cursorDoc, "batchSize", *a.batchSize) - } - if a.bypassDocumentValidation != nil { - dst = bsoncore.AppendBooleanElement(dst, "bypassDocumentValidation", *a.bypassDocumentValidation) - } - if a.collation != nil { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { - return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") - } - dst = bsoncore.AppendDocumentElement(dst, "collation", a.collation) - } - if a.comment.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "comment", a.comment) - } - if a.hint.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "hint", a.hint) - } - if a.pipeline != nil { - dst = bsoncore.AppendArrayElement(dst, "pipeline", a.pipeline) - } - if a.let != nil { - dst = bsoncore.AppendDocumentElement(dst, "let", a.let) - } - // Set rawData for 8.2+ servers. - if a.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *a.rawData) - } - for optionName, optionValue := range a.customOptions { - dst = bsoncore.AppendValueElement(dst, optionName, optionValue) - } - cursorDoc, _ = bsoncore.AppendDocumentEnd(cursorDoc, cursorIdx) - dst = bsoncore.AppendDocumentElement(dst, "cursor", cursorDoc) - - return dst, nil -} - -// AllowDiskUse enables writing to temporary files. When true, aggregation stages can write to the dbPath/_tmp directory. -func (a *Aggregate) AllowDiskUse(allowDiskUse bool) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.allowDiskUse = &allowDiskUse - return a -} - -// BatchSize specifies the number of documents to return in every batch. -func (a *Aggregate) BatchSize(batchSize int32) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.batchSize = &batchSize - return a -} - -// BypassDocumentValidation allows the write to opt-out of document level validation. This only applies when the $out stage is specified. -func (a *Aggregate) BypassDocumentValidation(bypassDocumentValidation bool) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.bypassDocumentValidation = &bypassDocumentValidation - return a -} - -// Collation specifies a collation. -func (a *Aggregate) Collation(collation bsoncore.Document) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.collation = collation - return a -} - -// Comment sets a value to help trace an operation. -func (a *Aggregate) Comment(comment bsoncore.Value) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.comment = comment - return a -} - -// Hint specifies the index to use. -func (a *Aggregate) Hint(hint bsoncore.Value) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.hint = hint - return a -} - -// Pipeline determines how data is transformed for an aggregation. -func (a *Aggregate) Pipeline(pipeline bsoncore.Document) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.pipeline = pipeline - return a -} - -// Session sets the session for this operation. -func (a *Aggregate) Session(session *session.Client) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.session = session - return a -} - -// ClusterClock sets the cluster clock for this operation. -func (a *Aggregate) ClusterClock(clock *session.ClusterClock) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.clock = clock - return a -} - -// Collection sets the collection that this command will run against. -func (a *Aggregate) Collection(collection string) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.collection = collection - return a -} - -// CommandMonitor sets the monitor to use for APM events. -func (a *Aggregate) CommandMonitor(monitor *event.CommandMonitor) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.monitor = monitor - return a -} - -// Database sets the database to run this operation against. -func (a *Aggregate) Database(database string) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.database = database - return a -} - -// Deployment sets the deployment to use for this operation. -func (a *Aggregate) Deployment(deployment driver.Deployment) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.deployment = deployment - return a -} - -// ReadConcern specifies the read concern for this operation. -func (a *Aggregate) ReadConcern(readConcern *readconcern.ReadConcern) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.readConcern = readConcern - return a -} - -// ReadPreference set the read preference used with this operation. -func (a *Aggregate) ReadPreference(readPreference *readpref.ReadPref) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.readPreference = readPreference - return a -} - -// ServerSelector sets the selector used to retrieve a server. -func (a *Aggregate) ServerSelector(selector description.ServerSelector) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.selector = selector - return a -} - -// WriteConcern sets the write concern for this operation. -func (a *Aggregate) WriteConcern(writeConcern *writeconcern.WriteConcern) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.writeConcern = writeConcern - return a -} - -// Retry enables retryable writes for this operation. Retries are not handled automatically, -// instead a boolean is returned from Execute and SelectAndExecute that indicates if the -// operation can be retried. Retrying is handled by calling RetryExecute. -func (a *Aggregate) Retry(retry driver.RetryMode) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.retry = &retry - return a -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (a *Aggregate) MaxAdaptiveRetries(maxAdaptiveRetries uint) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.maxAdaptiveRetries = maxAdaptiveRetries - return a -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (a *Aggregate) EnableOverloadRetargeting(enabled bool) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.enableOverloadRetargeting = enabled - return a -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (a *Aggregate) Crypt(crypt driver.Crypt) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.crypt = crypt - return a -} - -// ServerAPI sets the server API version for this operation. -func (a *Aggregate) ServerAPI(serverAPI *driver.ServerAPIOptions) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.serverAPI = serverAPI - return a -} - -// Let specifies the let document to use. This option is only valid for server versions 5.0 and above. -func (a *Aggregate) Let(let bsoncore.Document) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.let = let - return a -} - -// HasOutputStage specifies whether the aggregate contains an output stage. Used in determining when to -// append read preference at the operation level. -func (a *Aggregate) HasOutputStage(hos bool) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.hasOutputStage = hos - return a -} - -// CustomOptions specifies extra options to use in the aggregate command. -func (a *Aggregate) CustomOptions(co map[string]bsoncore.Value) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.customOptions = co - return a -} - -// Timeout sets the timeout for this operation. -func (a *Aggregate) Timeout(timeout *time.Duration) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.timeout = timeout - return a -} - -// Authenticator sets the authenticator to use for this operation. -func (a *Aggregate) Authenticator(authenticator driver.Authenticator) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.authenticator = authenticator - return a -} - -// OmitMaxTimeMS omits the automatically-calculated "maxTimeMS" from the -// command. -func (a *Aggregate) OmitMaxTimeMS(omit bool) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.omitMaxTimeMS = omit - return a -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (a *Aggregate) RawData(rawData bool) *Aggregate { - if a == nil { - a = new(Aggregate) - } - - a.rawData = &rawData - return a -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/command.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/command.go deleted file mode 100644 index a4f60abf..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/command.go +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2021-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/logger" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Command is used to run a generic operation. -type Command struct { - authenticator driver.Authenticator - command bsoncore.Document - database string - deployment driver.Deployment - selector description.ServerSelector - readPreference *readpref.ReadPref - clock *session.ClusterClock - session *session.Client - monitor *event.CommandMonitor - resultResponse bsoncore.Document - resultCursor *driver.BatchCursor - maxAdaptiveRetries uint - enableOverloadRetargeting bool - crypt driver.Crypt - serverAPI *driver.ServerAPIOptions - createCursor bool - cursorOpts driver.CursorOptions - timeout *time.Duration - logger *logger.Logger -} - -// NewCommand constructs and returns a new Command. Once the operation is executed, the result may only be accessed via -// the Result() function. -func NewCommand(command bsoncore.Document) *Command { - return &Command{ - command: command, - } -} - -// NewCursorCommand constructs a new Command. Once the operation is executed, the server response will be used to -// construct a cursor, which can be accessed via the ResultCursor() function. -func NewCursorCommand(command bsoncore.Document, cursorOpts driver.CursorOptions) *Command { - return &Command{ - command: command, - cursorOpts: cursorOpts, - createCursor: true, - - maxAdaptiveRetries: cursorOpts.MaxAdaptiveRetries, - enableOverloadRetargeting: cursorOpts.EnableOverloadRetargeting, - } -} - -// Result returns the result of executing this operation. -func (c *Command) Result() bsoncore.Document { return c.resultResponse } - -// ResultCursor returns the BatchCursor that was constructed using the command response. If the operation was not -// configured to create a cursor (i.e. it was created using NewCommand rather than NewCursorCommand), this function -// will return nil and an error. -func (c *Command) ResultCursor() (*driver.BatchCursor, error) { - if !c.createCursor { - return nil, errors.New("command operation was not configured to create a cursor, but a result cursor was requested") - } - return c.resultCursor, nil -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (c *Command) Execute(ctx context.Context) error { - if c.deployment == nil { - return errors.New("the Command operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: func(dst []byte, _ description.SelectedServer) ([]byte, error) { - return append(dst, c.command[4:len(c.command)-1]...), nil - }, - ProcessResponseFn: func(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { - c.resultResponse = resp - - if c.createCursor { - curDoc, err := driver.ExtractCursorDocument(resp) - if err != nil { - return err - } - cursorRes, err := driver.NewCursorResponse(curDoc, info) - if err != nil { - return err - } - - c.resultCursor, err = driver.NewBatchCursor(cursorRes, c.session, c.clock, c.cursorOpts) - return err - } - - return nil - }, - Client: c.session, - Clock: c.clock, - CommandMonitor: c.monitor, - Database: c.database, - Deployment: c.deployment, - ReadPreference: c.readPreference, - Selector: c.selector, - MaxAdaptiveRetries: c.maxAdaptiveRetries, - EnableOverloadRetargeting: c.enableOverloadRetargeting, - Crypt: c.crypt, - ServerAPI: c.serverAPI, - Timeout: c.timeout, - Logger: c.logger, - Authenticator: c.authenticator, - }.Execute(ctx) -} - -// Session sets the session for this operation. -func (c *Command) Session(session *session.Client) *Command { - if c == nil { - c = new(Command) - } - - c.session = session - return c -} - -// ClusterClock sets the cluster clock for this operation. -func (c *Command) ClusterClock(clock *session.ClusterClock) *Command { - if c == nil { - c = new(Command) - } - - c.clock = clock - return c -} - -// CommandMonitor sets the monitor to use for APM events. -func (c *Command) CommandMonitor(monitor *event.CommandMonitor) *Command { - if c == nil { - c = new(Command) - } - - c.monitor = monitor - return c -} - -// Database sets the database to run this operation against. -func (c *Command) Database(database string) *Command { - if c == nil { - c = new(Command) - } - - c.database = database - return c -} - -// Deployment sets the deployment to use for this operation. -func (c *Command) Deployment(deployment driver.Deployment) *Command { - if c == nil { - c = new(Command) - } - - c.deployment = deployment - return c -} - -// ReadPreference set the read preference used with this operation. -func (c *Command) ReadPreference(readPreference *readpref.ReadPref) *Command { - if c == nil { - c = new(Command) - } - - c.readPreference = readPreference - return c -} - -// ServerSelector sets the selector used to retrieve a server. -func (c *Command) ServerSelector(selector description.ServerSelector) *Command { - if c == nil { - c = new(Command) - } - - c.selector = selector - return c -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (c *Command) MaxAdaptiveRetries(maxAdaptiveRetries uint) *Command { - if c == nil { - c = new(Command) - } - - c.maxAdaptiveRetries = maxAdaptiveRetries - return c -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (c *Command) EnableOverloadRetargeting(enabled bool) *Command { - if c == nil { - c = new(Command) - } - - c.enableOverloadRetargeting = enabled - return c -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (c *Command) Crypt(crypt driver.Crypt) *Command { - if c == nil { - c = new(Command) - } - - c.crypt = crypt - return c -} - -// ServerAPI sets the server API version for this operation. -func (c *Command) ServerAPI(serverAPI *driver.ServerAPIOptions) *Command { - if c == nil { - c = new(Command) - } - - c.serverAPI = serverAPI - return c -} - -// Timeout sets the timeout for this operation. -func (c *Command) Timeout(timeout *time.Duration) *Command { - if c == nil { - c = new(Command) - } - - c.timeout = timeout - return c -} - -// Logger sets the logger for this operation. -func (c *Command) Logger(logger *logger.Logger) *Command { - if c == nil { - c = new(Command) - } - - c.logger = logger - return c -} - -// Authenticator sets the authenticator to use for this operation. -func (c *Command) Authenticator(authenticator driver.Authenticator) *Command { - if c == nil { - c = new(Command) - } - - c.authenticator = authenticator - return c -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/commit_transaction.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/commit_transaction.go deleted file mode 100644 index d9a9745d..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/commit_transaction.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/internal/logger" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// CommitTransaction attempts to commit a transaction. -type CommitTransaction struct { - authenticator driver.Authenticator - recoveryToken bsoncore.Document - session *session.Client - clock *session.ClusterClock - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - serverAPI *driver.ServerAPIOptions - logger *logger.Logger -} - -// NewCommitTransaction constructs and returns a new CommitTransaction. -func NewCommitTransaction() *CommitTransaction { - return &CommitTransaction{} -} - -func (ct *CommitTransaction) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { - return nil -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (ct *CommitTransaction) Execute(ctx context.Context) error { - if ct.deployment == nil { - return errors.New("the CommitTransaction operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: ct.command, - ProcessResponseFn: ct.processResponse, - RetryMode: ct.retry, - Type: driver.Write, - Client: ct.session, - Clock: ct.clock, - CommandMonitor: ct.monitor, - MaxAdaptiveRetries: ct.maxAdaptiveRetries, - EnableOverloadRetargeting: ct.enableOverloadRetargeting, - Crypt: ct.crypt, - Database: ct.database, - Deployment: ct.deployment, - Selector: ct.selector, - WriteConcern: ct.writeConcern, - ServerAPI: ct.serverAPI, - Name: driverutil.CommitTransactionOp, - Authenticator: ct.authenticator, - Logger: ct.logger, - }.Execute(ctx) -} - -func (ct *CommitTransaction) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendInt32Element(dst, "commitTransaction", 1) - if ct.recoveryToken != nil { - dst = bsoncore.AppendDocumentElement(dst, "recoveryToken", ct.recoveryToken) - } - return dst, nil -} - -// RecoveryToken sets the recovery token to use when committing or aborting a sharded transaction. -func (ct *CommitTransaction) RecoveryToken(recoveryToken bsoncore.Document) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.recoveryToken = recoveryToken - return ct -} - -// Session sets the session for this operation. -func (ct *CommitTransaction) Session(session *session.Client) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.session = session - return ct -} - -// ClusterClock sets the cluster clock for this operation. -func (ct *CommitTransaction) ClusterClock(clock *session.ClusterClock) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.clock = clock - return ct -} - -// CommandMonitor sets the monitor to use for APM events. -func (ct *CommitTransaction) CommandMonitor(monitor *event.CommandMonitor) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.monitor = monitor - return ct -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (ct *CommitTransaction) Crypt(crypt driver.Crypt) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.crypt = crypt - return ct -} - -// Database sets the database to run this operation against. -func (ct *CommitTransaction) Database(database string) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.database = database - return ct -} - -// Deployment sets the deployment to use for this operation. -func (ct *CommitTransaction) Deployment(deployment driver.Deployment) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.deployment = deployment - return ct -} - -// ServerSelector sets the selector used to retrieve a server. -func (ct *CommitTransaction) ServerSelector(selector description.ServerSelector) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.selector = selector - return ct -} - -// WriteConcern sets the write concern for this operation. -func (ct *CommitTransaction) WriteConcern(writeConcern *writeconcern.WriteConcern) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.writeConcern = writeConcern - return ct -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (ct *CommitTransaction) Retry(retry driver.RetryMode) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.retry = &retry - return ct -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (ct *CommitTransaction) MaxAdaptiveRetries(maxAdaptiveRetries uint) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.maxAdaptiveRetries = maxAdaptiveRetries - return ct -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (ct *CommitTransaction) EnableOverloadRetargeting(enabled bool) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.enableOverloadRetargeting = enabled - return ct -} - -// ServerAPI sets the server API version for this operation. -func (ct *CommitTransaction) ServerAPI(serverAPI *driver.ServerAPIOptions) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.serverAPI = serverAPI - return ct -} - -// Authenticator sets the authenticator to use for this operation. -func (ct *CommitTransaction) Authenticator(authenticator driver.Authenticator) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.authenticator = authenticator - return ct -} - -// Logger sets the logger for this operation. -func (ct *CommitTransaction) Logger(logger *logger.Logger) *CommitTransaction { - if ct == nil { - ct = new(CommitTransaction) - } - - ct.logger = logger - return ct -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/count.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/count.go deleted file mode 100644 index 69e585eb..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/count.go +++ /dev/null @@ -1,352 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/readconcern" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Count represents a count operation. -type Count struct { - authenticator driver.Authenticator - query bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - comment bsoncore.Value - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - readConcern *readconcern.ReadConcern - readPreference *readpref.ReadPref - selector description.ServerSelector - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - result CountResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool -} - -// CountResult represents a count result returned by the server. -type CountResult struct { - // The number of documents found - N int64 -} - -func buildCountResult(response bsoncore.Document) (CountResult, error) { - elements, err := response.Elements() - if err != nil { - return CountResult{}, err - } - cr := CountResult{} - for _, element := range elements { - switch element.Key() { - case "n": // for count using original command - var ok bool - cr.N, ok = element.Value().AsInt64OK() - if !ok { - return cr, fmt.Errorf("response field 'n' is type int64, but received BSON type %s", - element.Value().Type) - } - case "cursor": // for count using aggregate with $collStats - firstBatch, err := element.Value().Document().LookupErr("firstBatch") - if err != nil { - return cr, err - } - - // get count value from first batch - val := firstBatch.Array().Index(0) - count, err := val.Document().LookupErr("n") - if err != nil { - return cr, err - } - - // use count as Int64 for result - var ok bool - cr.N, ok = count.AsInt64OK() - if !ok { - return cr, fmt.Errorf("response field 'n' is type int64, but received BSON type %s", - element.Value().Type) - } - } - } - return cr, nil -} - -// NewCount constructs and returns a new Count. -func NewCount() *Count { - return &Count{} -} - -// Result returns the result of executing this operation. -func (c *Count) Result() CountResult { return c.result } - -func (c *Count) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - c.result, err = buildCountResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (c *Count) Execute(ctx context.Context) error { - if c.deployment == nil { - return errors.New("the Count operation must have a Deployment set before Execute can be called") - } - - err := driver.Operation{ - CommandFn: c.command, - ProcessResponseFn: c.processResponse, - RetryMode: c.retry, - MaxAdaptiveRetries: c.maxAdaptiveRetries, - EnableOverloadRetargeting: c.enableOverloadRetargeting, - Type: driver.Read, - Client: c.session, - Clock: c.clock, - CommandMonitor: c.monitor, - Crypt: c.crypt, - Database: c.database, - Deployment: c.deployment, - ReadConcern: c.readConcern, - ReadPreference: c.readPreference, - Selector: c.selector, - ServerAPI: c.serverAPI, - Timeout: c.timeout, - Name: driverutil.CountOp, - Authenticator: c.authenticator, - }.Execute(ctx) - // Swallow error if NamespaceNotFound(26) is returned from aggregate on non-existent namespace - if err != nil { - dErr, ok := err.(driver.Error) - if ok && dErr.Code == 26 { - err = nil - } - } - return err -} - -func (c *Count) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "count", c.collection) - if c.query != nil { - dst = bsoncore.AppendDocumentElement(dst, "query", c.query) - } - if c.comment.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "comment", c.comment) - } - // Set rawData for 8.2+ servers. - if c.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *c.rawData) - } - return dst, nil -} - -// Query determines what results are returned from find. -func (c *Count) Query(query bsoncore.Document) *Count { - if c == nil { - c = new(Count) - } - - c.query = query - return c -} - -// Session sets the session for this operation. -func (c *Count) Session(session *session.Client) *Count { - if c == nil { - c = new(Count) - } - - c.session = session - return c -} - -// ClusterClock sets the cluster clock for this operation. -func (c *Count) ClusterClock(clock *session.ClusterClock) *Count { - if c == nil { - c = new(Count) - } - - c.clock = clock - return c -} - -// Collection sets the collection that this command will run against. -func (c *Count) Collection(collection string) *Count { - if c == nil { - c = new(Count) - } - - c.collection = collection - return c -} - -// Comment sets a value to help trace an operation. -func (c *Count) Comment(comment bsoncore.Value) *Count { - if c == nil { - c = new(Count) - } - - c.comment = comment - return c -} - -// CommandMonitor sets the monitor to use for APM events. -func (c *Count) CommandMonitor(monitor *event.CommandMonitor) *Count { - if c == nil { - c = new(Count) - } - - c.monitor = monitor - return c -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (c *Count) Crypt(crypt driver.Crypt) *Count { - if c == nil { - c = new(Count) - } - - c.crypt = crypt - return c -} - -// Database sets the database to run this operation against. -func (c *Count) Database(database string) *Count { - if c == nil { - c = new(Count) - } - - c.database = database - return c -} - -// Deployment sets the deployment to use for this operation. -func (c *Count) Deployment(deployment driver.Deployment) *Count { - if c == nil { - c = new(Count) - } - - c.deployment = deployment - return c -} - -// ReadConcern specifies the read concern for this operation. -func (c *Count) ReadConcern(readConcern *readconcern.ReadConcern) *Count { - if c == nil { - c = new(Count) - } - - c.readConcern = readConcern - return c -} - -// ReadPreference set the read preference used with this operation. -func (c *Count) ReadPreference(readPreference *readpref.ReadPref) *Count { - if c == nil { - c = new(Count) - } - - c.readPreference = readPreference - return c -} - -// ServerSelector sets the selector used to retrieve a server. -func (c *Count) ServerSelector(selector description.ServerSelector) *Count { - if c == nil { - c = new(Count) - } - - c.selector = selector - return c -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (c *Count) Retry(retry driver.RetryMode) *Count { - if c == nil { - c = new(Count) - } - - c.retry = &retry - return c -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (c *Count) MaxAdaptiveRetries(maxAdaptiveRetries uint) *Count { - if c == nil { - c = new(Count) - } - - c.maxAdaptiveRetries = maxAdaptiveRetries - return c -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (c *Count) EnableOverloadRetargeting(enabled bool) *Count { - if c == nil { - c = new(Count) - } - - c.enableOverloadRetargeting = enabled - return c -} - -// ServerAPI sets the server API version for this operation. -func (c *Count) ServerAPI(serverAPI *driver.ServerAPIOptions) *Count { - if c == nil { - c = new(Count) - } - - c.serverAPI = serverAPI - return c -} - -// Timeout sets the timeout for this operation. -func (c *Count) Timeout(timeout *time.Duration) *Count { - if c == nil { - c = new(Count) - } - - c.timeout = timeout - return c -} - -// Authenticator sets the authenticator to use for this operation. -func (c *Count) Authenticator(authenticator driver.Authenticator) *Count { - if c == nil { - c = new(Count) - } - - c.authenticator = authenticator - return c -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (c *Count) RawData(rawData bool) *Count { - if c == nil { - c = new(Count) - } - - c.rawData = &rawData - return c -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create.go deleted file mode 100644 index 1289bbb5..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create.go +++ /dev/null @@ -1,415 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Create represents a create operation. -type Create struct { - authenticator driver.Authenticator - capped *bool - collation bsoncore.Document - changeStreamPreAndPostImages bsoncore.Document - collectionName *string - indexOptionDefaults bsoncore.Document - max *int64 - pipeline bsoncore.Document - size *int64 - storageEngine bsoncore.Document - validationAction *string - validationLevel *string - validator bsoncore.Document - viewOn *string - session *session.Client - clock *session.ClusterClock - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - serverAPI *driver.ServerAPIOptions - expireAfterSeconds *int64 - timeSeries bsoncore.Document - encryptedFields bsoncore.Document - clusteredIndex bsoncore.Document -} - -// NewCreate constructs and returns a new Create. -func NewCreate(collectionName string) *Create { - return &Create{ - collectionName: &collectionName, - } -} - -func (c *Create) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { - return nil -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (c *Create) Execute(ctx context.Context) error { - if c.deployment == nil { - return errors.New("the Create operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: c.command, - ProcessResponseFn: c.processResponse, - Client: c.session, - Clock: c.clock, - CommandMonitor: c.monitor, - Crypt: c.crypt, - Database: c.database, - Deployment: c.deployment, - Selector: c.selector, - WriteConcern: c.writeConcern, - ServerAPI: c.serverAPI, - Authenticator: c.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (c *Create) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - if c.collectionName != nil { - dst = bsoncore.AppendStringElement(dst, "create", *c.collectionName) - } - if c.capped != nil { - dst = bsoncore.AppendBooleanElement(dst, "capped", *c.capped) - } - if c.changeStreamPreAndPostImages != nil { - dst = bsoncore.AppendDocumentElement(dst, "changeStreamPreAndPostImages", c.changeStreamPreAndPostImages) - } - if c.collation != nil { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { - return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") - } - dst = bsoncore.AppendDocumentElement(dst, "collation", c.collation) - } - if c.indexOptionDefaults != nil { - dst = bsoncore.AppendDocumentElement(dst, "indexOptionDefaults", c.indexOptionDefaults) - } - if c.max != nil { - dst = bsoncore.AppendInt64Element(dst, "max", *c.max) - } - if c.pipeline != nil { - dst = bsoncore.AppendArrayElement(dst, "pipeline", c.pipeline) - } - if c.size != nil { - dst = bsoncore.AppendInt64Element(dst, "size", *c.size) - } - if c.storageEngine != nil { - dst = bsoncore.AppendDocumentElement(dst, "storageEngine", c.storageEngine) - } - if c.validationAction != nil { - dst = bsoncore.AppendStringElement(dst, "validationAction", *c.validationAction) - } - if c.validationLevel != nil { - dst = bsoncore.AppendStringElement(dst, "validationLevel", *c.validationLevel) - } - if c.validator != nil { - dst = bsoncore.AppendDocumentElement(dst, "validator", c.validator) - } - if c.viewOn != nil { - dst = bsoncore.AppendStringElement(dst, "viewOn", *c.viewOn) - } - if c.expireAfterSeconds != nil { - dst = bsoncore.AppendInt64Element(dst, "expireAfterSeconds", *c.expireAfterSeconds) - } - if c.timeSeries != nil { - dst = bsoncore.AppendDocumentElement(dst, "timeseries", c.timeSeries) - } - if c.encryptedFields != nil { - dst = bsoncore.AppendDocumentElement(dst, "encryptedFields", c.encryptedFields) - } - if c.clusteredIndex != nil { - dst = bsoncore.AppendDocumentElement(dst, "clusteredIndex", c.clusteredIndex) - } - return dst, nil -} - -// Capped specifies if the collection is capped. -func (c *Create) Capped(capped bool) *Create { - if c == nil { - c = new(Create) - } - - c.capped = &capped - return c -} - -// Collation specifies a collation. -func (c *Create) Collation(collation bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.collation = collation - return c -} - -// ChangeStreamPreAndPostImages specifies how change streams opened against the collection can return pre- -// and post-images of updated documents. This option is only valid for server versions 6.0 and above. -func (c *Create) ChangeStreamPreAndPostImages(csppi bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.changeStreamPreAndPostImages = csppi - return c -} - -// CollectionName specifies the name of the collection to create. -func (c *Create) CollectionName(collectionName string) *Create { - if c == nil { - c = new(Create) - } - - c.collectionName = &collectionName - return c -} - -// IndexOptionDefaults specifies a default configuration for indexes on the collection. -func (c *Create) IndexOptionDefaults(indexOptionDefaults bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.indexOptionDefaults = indexOptionDefaults - return c -} - -// Max specifies the maximum number of documents allowed in a capped collection. -func (c *Create) Max(max int64) *Create { - if c == nil { - c = new(Create) - } - - c.max = &max - return c -} - -// Pipeline specifies the agggregtion pipeline to be run against the source to create the view. -func (c *Create) Pipeline(pipeline bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.pipeline = pipeline - return c -} - -// Size specifies the maximum size in bytes for a capped collection. -func (c *Create) Size(size int64) *Create { - if c == nil { - c = new(Create) - } - - c.size = &size - return c -} - -// StorageEngine specifies the storage engine to use for the index. -func (c *Create) StorageEngine(storageEngine bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.storageEngine = storageEngine - return c -} - -// ValidationAction specifies what should happen if a document being inserted does not pass validation. -func (c *Create) ValidationAction(validationAction string) *Create { - if c == nil { - c = new(Create) - } - - c.validationAction = &validationAction - return c -} - -// ValidationLevel specifies how strictly the server applies validation rules to existing documents in the collection -// during update operations. -func (c *Create) ValidationLevel(validationLevel string) *Create { - if c == nil { - c = new(Create) - } - - c.validationLevel = &validationLevel - return c -} - -// Validator specifies validation rules for the collection. -func (c *Create) Validator(validator bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.validator = validator - return c -} - -// ViewOn specifies the name of the source collection or view on which the view will be created. -func (c *Create) ViewOn(viewOn string) *Create { - if c == nil { - c = new(Create) - } - - c.viewOn = &viewOn - return c -} - -// Session sets the session for this operation. -func (c *Create) Session(session *session.Client) *Create { - if c == nil { - c = new(Create) - } - - c.session = session - return c -} - -// ClusterClock sets the cluster clock for this operation. -func (c *Create) ClusterClock(clock *session.ClusterClock) *Create { - if c == nil { - c = new(Create) - } - - c.clock = clock - return c -} - -// CommandMonitor sets the monitor to use for APM events. -func (c *Create) CommandMonitor(monitor *event.CommandMonitor) *Create { - if c == nil { - c = new(Create) - } - - c.monitor = monitor - return c -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (c *Create) Crypt(crypt driver.Crypt) *Create { - if c == nil { - c = new(Create) - } - - c.crypt = crypt - return c -} - -// Database sets the database to run this operation against. -func (c *Create) Database(database string) *Create { - if c == nil { - c = new(Create) - } - - c.database = database - return c -} - -// Deployment sets the deployment to use for this operation. -func (c *Create) Deployment(deployment driver.Deployment) *Create { - if c == nil { - c = new(Create) - } - - c.deployment = deployment - return c -} - -// ServerSelector sets the selector used to retrieve a server. -func (c *Create) ServerSelector(selector description.ServerSelector) *Create { - if c == nil { - c = new(Create) - } - - c.selector = selector - return c -} - -// WriteConcern sets the write concern for this operation. -func (c *Create) WriteConcern(writeConcern *writeconcern.WriteConcern) *Create { - if c == nil { - c = new(Create) - } - - c.writeConcern = writeConcern - return c -} - -// ServerAPI sets the server API version for this operation. -func (c *Create) ServerAPI(serverAPI *driver.ServerAPIOptions) *Create { - if c == nil { - c = new(Create) - } - - c.serverAPI = serverAPI - return c -} - -// ExpireAfterSeconds sets the seconds to wait before deleting old time-series data. -func (c *Create) ExpireAfterSeconds(eas int64) *Create { - if c == nil { - c = new(Create) - } - - c.expireAfterSeconds = &eas - return c -} - -// TimeSeries sets the time series options for this operation. -func (c *Create) TimeSeries(timeSeries bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.timeSeries = timeSeries - return c -} - -// EncryptedFields sets the EncryptedFields for this operation. -func (c *Create) EncryptedFields(ef bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.encryptedFields = ef - return c -} - -// ClusteredIndex sets the ClusteredIndex option for this operation. -func (c *Create) ClusteredIndex(ci bsoncore.Document) *Create { - if c == nil { - c = new(Create) - } - - c.clusteredIndex = ci - return c -} - -// Authenticator sets the authenticator to use for this operation. -func (c *Create) Authenticator(authenticator driver.Authenticator) *Create { - if c == nil { - c = new(Create) - } - - c.authenticator = authenticator - return c -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create_indexes.go deleted file mode 100644 index e6a0e2c0..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create_indexes.go +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// CreateIndexes performs a createIndexes operation. -type CreateIndexes struct { - authenticator driver.Authenticator - commitQuorum bsoncore.Value - indexes bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - maxAdaptiveRetries uint - enableOverloadRetargeting bool - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - result CreateIndexesResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool -} - -// CreateIndexesResult represents a createIndexes result returned by the server. -type CreateIndexesResult struct { - // If the collection was created automatically. - CreatedCollectionAutomatically bool - // The number of indexes existing after this command. - IndexesAfter int32 - // The number of indexes existing before this command. - IndexesBefore int32 -} - -func buildCreateIndexesResult(response bsoncore.Document) (CreateIndexesResult, error) { - elements, err := response.Elements() - if err != nil { - return CreateIndexesResult{}, err - } - cir := CreateIndexesResult{} - for _, element := range elements { - switch element.Key() { - case "createdCollectionAutomatically": - var ok bool - cir.CreatedCollectionAutomatically, ok = element.Value().BooleanOK() - if !ok { - return cir, fmt.Errorf("response field 'createdCollectionAutomatically' is type bool, but received BSON type %s", element.Value().Type) - } - case "indexesAfter": - var ok bool - cir.IndexesAfter, ok = element.Value().AsInt32OK() - if !ok { - return cir, fmt.Errorf("response field 'indexesAfter' is type int32, but received BSON type %s", element.Value().Type) - } - case "indexesBefore": - var ok bool - cir.IndexesBefore, ok = element.Value().AsInt32OK() - if !ok { - return cir, fmt.Errorf("response field 'indexesBefore' is type int32, but received BSON type %s", element.Value().Type) - } - } - } - return cir, nil -} - -// NewCreateIndexes constructs and returns a new CreateIndexes. -func NewCreateIndexes(indexes bsoncore.Document) *CreateIndexes { - return &CreateIndexes{ - indexes: indexes, - } -} - -// Result returns the result of executing this operation. -func (ci *CreateIndexes) Result() CreateIndexesResult { return ci.result } - -func (ci *CreateIndexes) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - ci.result, err = buildCreateIndexesResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (ci *CreateIndexes) Execute(ctx context.Context) error { - if ci.deployment == nil { - return errors.New("the CreateIndexes operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: ci.command, - ProcessResponseFn: ci.processResponse, - Client: ci.session, - Clock: ci.clock, - CommandMonitor: ci.monitor, - MaxAdaptiveRetries: ci.maxAdaptiveRetries, - EnableOverloadRetargeting: ci.enableOverloadRetargeting, - Crypt: ci.crypt, - Database: ci.database, - Deployment: ci.deployment, - Selector: ci.selector, - WriteConcern: ci.writeConcern, - ServerAPI: ci.serverAPI, - Timeout: ci.timeout, - Name: driverutil.CreateIndexesOp, - Authenticator: ci.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (ci *CreateIndexes) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "createIndexes", ci.collection) - if ci.commitQuorum.Type != bsoncore.Type(0) { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 9) { - return nil, errors.New("the 'commitQuorum' command parameter requires a minimum server wire version of 9") - } - dst = bsoncore.AppendValueElement(dst, "commitQuorum", ci.commitQuorum) - } - if ci.indexes != nil { - dst = bsoncore.AppendArrayElement(dst, "indexes", ci.indexes) - } - // Set rawData for 8.2+ servers. - if ci.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *ci.rawData) - } - return dst, nil -} - -// CommitQuorum specifies the number of data-bearing members of a replica set, including the primary, that must -// complete the index builds successfully before the primary marks the indexes as ready. This should either be a -// string or int32 value. -func (ci *CreateIndexes) CommitQuorum(commitQuorum bsoncore.Value) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.commitQuorum = commitQuorum - return ci -} - -// Indexes specifies an array containing index specification documents for the indexes being created. -func (ci *CreateIndexes) Indexes(indexes bsoncore.Document) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.indexes = indexes - return ci -} - -// Session sets the session for this operation. -func (ci *CreateIndexes) Session(session *session.Client) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.session = session - return ci -} - -// ClusterClock sets the cluster clock for this operation. -func (ci *CreateIndexes) ClusterClock(clock *session.ClusterClock) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.clock = clock - return ci -} - -// Collection sets the collection that this command will run against. -func (ci *CreateIndexes) Collection(collection string) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.collection = collection - return ci -} - -// CommandMonitor sets the monitor to use for APM events. -func (ci *CreateIndexes) CommandMonitor(monitor *event.CommandMonitor) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.monitor = monitor - return ci -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (ci *CreateIndexes) MaxAdaptiveRetries(maxAdaptiveRetries uint) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.maxAdaptiveRetries = maxAdaptiveRetries - return ci -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (ci *CreateIndexes) EnableOverloadRetargeting(enabled bool) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.enableOverloadRetargeting = enabled - return ci -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (ci *CreateIndexes) Crypt(crypt driver.Crypt) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.crypt = crypt - return ci -} - -// Database sets the database to run this operation against. -func (ci *CreateIndexes) Database(database string) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.database = database - return ci -} - -// Deployment sets the deployment to use for this operation. -func (ci *CreateIndexes) Deployment(deployment driver.Deployment) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.deployment = deployment - return ci -} - -// ServerSelector sets the selector used to retrieve a server. -func (ci *CreateIndexes) ServerSelector(selector description.ServerSelector) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.selector = selector - return ci -} - -// WriteConcern sets the write concern for this operation. -func (ci *CreateIndexes) WriteConcern(writeConcern *writeconcern.WriteConcern) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.writeConcern = writeConcern - return ci -} - -// ServerAPI sets the server API version for this operation. -func (ci *CreateIndexes) ServerAPI(serverAPI *driver.ServerAPIOptions) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.serverAPI = serverAPI - return ci -} - -// Timeout sets the timeout for this operation. -func (ci *CreateIndexes) Timeout(timeout *time.Duration) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.timeout = timeout - return ci -} - -// Authenticator sets the authenticator to use for this operation. -func (ci *CreateIndexes) Authenticator(authenticator driver.Authenticator) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.authenticator = authenticator - return ci -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (ci *CreateIndexes) RawData(rawData bool) *CreateIndexes { - if ci == nil { - ci = new(CreateIndexes) - } - - ci.rawData = &rawData - return ci -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create_search_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create_search_indexes.go deleted file mode 100644 index 84a54974..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/create_search_indexes.go +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2023-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/bson" - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// CreateSearchIndexes performs a createSearchIndexes operation. -type CreateSearchIndexes struct { - authenticator driver.Authenticator - indexes bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - result CreateSearchIndexesResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration -} - -// CreateSearchIndexResult represents a single search index result in CreateSearchIndexesResult. -type CreateSearchIndexResult struct { - Name string -} - -// CreateSearchIndexesResult represents a createSearchIndexes result returned by the server. -type CreateSearchIndexesResult struct { - IndexesCreated []CreateSearchIndexResult -} - -func buildCreateSearchIndexesResult(response bsoncore.Document) (CreateSearchIndexesResult, error) { - elements, err := response.Elements() - if err != nil { - return CreateSearchIndexesResult{}, err - } - csir := CreateSearchIndexesResult{} - for _, element := range elements { - switch element.Key() { - case "indexesCreated": - arr, ok := element.Value().ArrayOK() - if !ok { - return csir, fmt.Errorf("response field 'indexesCreated' is type array, but received BSON type %s", element.Value().Type) - } - - var values []bsoncore.Value - values, err = arr.Values() - if err != nil { - break - } - - for _, val := range values { - valDoc, ok := val.DocumentOK() - if !ok { - return csir, fmt.Errorf("indexesCreated value is type document, but received BSON type %s", val.Type) - } - var indexesCreated CreateSearchIndexResult - if err = bson.Unmarshal(valDoc, &indexesCreated); err != nil { - return csir, err - } - csir.IndexesCreated = append(csir.IndexesCreated, indexesCreated) - } - } - } - return csir, nil -} - -// NewCreateSearchIndexes constructs and returns a new CreateSearchIndexes. -func NewCreateSearchIndexes(indexes bsoncore.Document) *CreateSearchIndexes { - return &CreateSearchIndexes{ - indexes: indexes, - } -} - -// Result returns the result of executing this operation. -func (csi *CreateSearchIndexes) Result() CreateSearchIndexesResult { return csi.result } - -func (csi *CreateSearchIndexes) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - csi.result, err = buildCreateSearchIndexesResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (csi *CreateSearchIndexes) Execute(ctx context.Context) error { - if csi.deployment == nil { - return errors.New("the CreateSearchIndexes operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: csi.command, - ProcessResponseFn: csi.processResponse, - Client: csi.session, - Clock: csi.clock, - CommandMonitor: csi.monitor, - Crypt: csi.crypt, - Database: csi.database, - Deployment: csi.deployment, - Selector: csi.selector, - ServerAPI: csi.serverAPI, - Timeout: csi.timeout, - Authenticator: csi.authenticator, - }.Execute(ctx) -} - -func (csi *CreateSearchIndexes) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "createSearchIndexes", csi.collection) - if csi.indexes != nil { - dst = bsoncore.AppendArrayElement(dst, "indexes", csi.indexes) - } - return dst, nil -} - -// Indexes specifies an array containing index specification documents for the indexes being created. -func (csi *CreateSearchIndexes) Indexes(indexes bsoncore.Document) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.indexes = indexes - return csi -} - -// Session sets the session for this operation. -func (csi *CreateSearchIndexes) Session(session *session.Client) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.session = session - return csi -} - -// ClusterClock sets the cluster clock for this operation. -func (csi *CreateSearchIndexes) ClusterClock(clock *session.ClusterClock) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.clock = clock - return csi -} - -// Collection sets the collection that this command will run against. -func (csi *CreateSearchIndexes) Collection(collection string) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.collection = collection - return csi -} - -// CommandMonitor sets the monitor to use for APM events. -func (csi *CreateSearchIndexes) CommandMonitor(monitor *event.CommandMonitor) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.monitor = monitor - return csi -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (csi *CreateSearchIndexes) Crypt(crypt driver.Crypt) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.crypt = crypt - return csi -} - -// Database sets the database to run this operation against. -func (csi *CreateSearchIndexes) Database(database string) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.database = database - return csi -} - -// Deployment sets the deployment to use for this operation. -func (csi *CreateSearchIndexes) Deployment(deployment driver.Deployment) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.deployment = deployment - return csi -} - -// ServerSelector sets the selector used to retrieve a server. -func (csi *CreateSearchIndexes) ServerSelector(selector description.ServerSelector) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.selector = selector - return csi -} - -// ServerAPI sets the server API version for this operation. -func (csi *CreateSearchIndexes) ServerAPI(serverAPI *driver.ServerAPIOptions) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.serverAPI = serverAPI - return csi -} - -// Timeout sets the timeout for this operation. -func (csi *CreateSearchIndexes) Timeout(timeout *time.Duration) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.timeout = timeout - return csi -} - -// Authenticator sets the authenticator to use for this operation. -func (csi *CreateSearchIndexes) Authenticator(authenticator driver.Authenticator) *CreateSearchIndexes { - if csi == nil { - csi = new(CreateSearchIndexes) - } - - csi.authenticator = authenticator - return csi -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/delete.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/delete.go deleted file mode 100644 index 6a520914..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/delete.go +++ /dev/null @@ -1,380 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/internal/logger" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Delete performs a delete operation -type Delete struct { - authenticator driver.Authenticator - comment bsoncore.Value - deletes []bsoncore.Document - ordered *bool - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - hint *bool - result DeleteResult - serverAPI *driver.ServerAPIOptions - let bsoncore.Document - timeout *time.Duration - rawData *bool - logger *logger.Logger -} - -// DeleteResult represents a delete result returned by the server. -type DeleteResult struct { - // Number of documents successfully deleted. - N int64 -} - -func buildDeleteResult(response bsoncore.Document) (DeleteResult, error) { - elements, err := response.Elements() - if err != nil { - return DeleteResult{}, err - } - dr := DeleteResult{} - for _, element := range elements { - if element.Key() == "n" { - var ok bool - dr.N, ok = element.Value().AsInt64OK() - if !ok { - return dr, fmt.Errorf("response field 'n' is type int32 or int64, but received BSON type %s", element.Value().Type) - } - } - } - return dr, nil -} - -// NewDelete constructs and returns a new Delete. -func NewDelete(deletes ...bsoncore.Document) *Delete { - return &Delete{ - deletes: deletes, - } -} - -// Result returns the result of executing this operation. -func (d *Delete) Result() DeleteResult { return d.result } - -func (d *Delete) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - dr, err := buildDeleteResult(resp) - d.result.N += dr.N - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (d *Delete) Execute(ctx context.Context) error { - if d.deployment == nil { - return errors.New("the Delete operation must have a Deployment set before Execute can be called") - } - batches := &driver.Batches{ - Identifier: "deletes", - Documents: d.deletes, - Ordered: d.ordered, - } - - return driver.Operation{ - CommandFn: d.command, - ProcessResponseFn: d.processResponse, - Batches: batches, - RetryMode: d.retry, - MaxAdaptiveRetries: d.maxAdaptiveRetries, - EnableOverloadRetargeting: d.enableOverloadRetargeting, - Type: driver.Write, - Client: d.session, - Clock: d.clock, - CommandMonitor: d.monitor, - Crypt: d.crypt, - Database: d.database, - Deployment: d.deployment, - Selector: d.selector, - WriteConcern: d.writeConcern, - ServerAPI: d.serverAPI, - Timeout: d.timeout, - Logger: d.logger, - Name: driverutil.DeleteOp, - Authenticator: d.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (d *Delete) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "delete", d.collection) - if d.comment.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "comment", d.comment) - } - if d.ordered != nil { - dst = bsoncore.AppendBooleanElement(dst, "ordered", *d.ordered) - } - if d.hint != nil && *d.hint { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { - return nil, errors.New("the 'hint' command parameter requires a minimum server wire version of 5") - } - if !d.writeConcern.Acknowledged() { - return nil, errUnacknowledgedHint - } - } - if d.let != nil { - dst = bsoncore.AppendDocumentElement(dst, "let", d.let) - } - // Set rawData for 8.2+ servers. - if d.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *d.rawData) - } - return dst, nil -} - -// Deletes adds documents to this operation that will be used to determine what documents to delete when this operation -// is executed. These documents should have the form {q: , limit: , collation: }. The -// collation field is optional. If limit is 0, there will be no limit on the number of documents deleted. -func (d *Delete) Deletes(deletes ...bsoncore.Document) *Delete { - if d == nil { - d = new(Delete) - } - - d.deletes = deletes - return d -} - -// Ordered sets ordered. If true, when a write fails, the operation will return the error, when -// false write failures do not stop execution of the operation. -func (d *Delete) Ordered(ordered bool) *Delete { - if d == nil { - d = new(Delete) - } - - d.ordered = &ordered - return d -} - -// Session sets the session for this operation. -func (d *Delete) Session(session *session.Client) *Delete { - if d == nil { - d = new(Delete) - } - - d.session = session - return d -} - -// ClusterClock sets the cluster clock for this operation. -func (d *Delete) ClusterClock(clock *session.ClusterClock) *Delete { - if d == nil { - d = new(Delete) - } - - d.clock = clock - return d -} - -// Collection sets the collection that this command will run against. -func (d *Delete) Collection(collection string) *Delete { - if d == nil { - d = new(Delete) - } - - d.collection = collection - return d -} - -// Comment sets a value to help trace an operation. -func (d *Delete) Comment(comment bsoncore.Value) *Delete { - if d == nil { - d = new(Delete) - } - - d.comment = comment - return d -} - -// CommandMonitor sets the monitor to use for APM events. -func (d *Delete) CommandMonitor(monitor *event.CommandMonitor) *Delete { - if d == nil { - d = new(Delete) - } - - d.monitor = monitor - return d -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (d *Delete) Crypt(crypt driver.Crypt) *Delete { - if d == nil { - d = new(Delete) - } - - d.crypt = crypt - return d -} - -// Database sets the database to run this operation against. -func (d *Delete) Database(database string) *Delete { - if d == nil { - d = new(Delete) - } - - d.database = database - return d -} - -// Deployment sets the deployment to use for this operation. -func (d *Delete) Deployment(deployment driver.Deployment) *Delete { - if d == nil { - d = new(Delete) - } - - d.deployment = deployment - return d -} - -// ServerSelector sets the selector used to retrieve a server. -func (d *Delete) ServerSelector(selector description.ServerSelector) *Delete { - if d == nil { - d = new(Delete) - } - - d.selector = selector - return d -} - -// WriteConcern sets the write concern for this operation. -func (d *Delete) WriteConcern(writeConcern *writeconcern.WriteConcern) *Delete { - if d == nil { - d = new(Delete) - } - - d.writeConcern = writeConcern - return d -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (d *Delete) Retry(retry driver.RetryMode) *Delete { - if d == nil { - d = new(Delete) - } - - d.retry = &retry - return d -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (d *Delete) MaxAdaptiveRetries(maxAdaptiveRetries uint) *Delete { - if d == nil { - d = new(Delete) - } - - d.maxAdaptiveRetries = maxAdaptiveRetries - return d -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (d *Delete) EnableOverloadRetargeting(enabled bool) *Delete { - if d == nil { - d = new(Delete) - } - - d.enableOverloadRetargeting = enabled - return d -} - -// Hint is a flag to indicate that the update document contains a hint. Hint is only supported by -// servers >= 4.4. Older servers will report an error for using the hint option. -func (d *Delete) Hint(hint bool) *Delete { - if d == nil { - d = new(Delete) - } - - d.hint = &hint - return d -} - -// ServerAPI sets the server API version for this operation. -func (d *Delete) ServerAPI(serverAPI *driver.ServerAPIOptions) *Delete { - if d == nil { - d = new(Delete) - } - - d.serverAPI = serverAPI - return d -} - -// Let specifies the let document to use. This option is only valid for server versions 5.0 and above. -func (d *Delete) Let(let bsoncore.Document) *Delete { - if d == nil { - d = new(Delete) - } - - d.let = let - return d -} - -// Timeout sets the timeout for this operation. -func (d *Delete) Timeout(timeout *time.Duration) *Delete { - if d == nil { - d = new(Delete) - } - - d.timeout = timeout - return d -} - -// Logger sets the logger for this operation. -func (d *Delete) Logger(logger *logger.Logger) *Delete { - if d == nil { - d = new(Delete) - } - - d.logger = logger - - return d -} - -// Authenticator sets the authenticator to use for this operation. -func (d *Delete) Authenticator(authenticator driver.Authenticator) *Delete { - if d == nil { - d = new(Delete) - } - - d.authenticator = authenticator - return d -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (d *Delete) RawData(rawData bool) *Delete { - if d == nil { - d = new(Delete) - } - - d.rawData = &rawData - return d -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/distinct.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/distinct.go deleted file mode 100644 index 411eb3ca..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/distinct.go +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/readconcern" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Distinct performs a distinct operation. -type Distinct struct { - authenticator driver.Authenticator - collation bsoncore.Document - key *string - query bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - comment bsoncore.Value - hint bsoncore.Value - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - readConcern *readconcern.ReadConcern - readPreference *readpref.ReadPref - selector description.ServerSelector - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - result DistinctResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool -} - -// DistinctResult represents a distinct result returned by the server. -type DistinctResult struct { - // The distinct values for the field. - Values bsoncore.Value -} - -func buildDistinctResult(response bsoncore.Document) (DistinctResult, error) { - elements, err := response.Elements() - if err != nil { - return DistinctResult{}, err - } - dr := DistinctResult{} - for _, element := range elements { - if element.Key() == "values" { - dr.Values = element.Value() - } - } - return dr, nil -} - -// NewDistinct constructs and returns a new Distinct. -func NewDistinct(key string, query bsoncore.Document) *Distinct { - return &Distinct{ - key: &key, - query: query, - } -} - -// Result returns the result of executing this operation. -func (d *Distinct) Result() DistinctResult { return d.result } - -func (d *Distinct) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - d.result, err = buildDistinctResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (d *Distinct) Execute(ctx context.Context) error { - if d.deployment == nil { - return errors.New("the Distinct operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: d.command, - ProcessResponseFn: d.processResponse, - RetryMode: d.retry, - MaxAdaptiveRetries: d.maxAdaptiveRetries, - EnableOverloadRetargeting: d.enableOverloadRetargeting, - Type: driver.Read, - Client: d.session, - Clock: d.clock, - CommandMonitor: d.monitor, - Crypt: d.crypt, - Database: d.database, - Deployment: d.deployment, - ReadConcern: d.readConcern, - ReadPreference: d.readPreference, - Selector: d.selector, - ServerAPI: d.serverAPI, - Timeout: d.timeout, - Name: driverutil.DistinctOp, - Authenticator: d.authenticator, - }.Execute(ctx) -} - -func (d *Distinct) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "distinct", d.collection) - if d.collation != nil { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { - return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") - } - dst = bsoncore.AppendDocumentElement(dst, "collation", d.collation) - } - if d.comment.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "comment", d.comment) - } - if d.hint.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "hint", d.hint) - } - if d.key != nil { - dst = bsoncore.AppendStringElement(dst, "key", *d.key) - } - if d.query != nil { - dst = bsoncore.AppendDocumentElement(dst, "query", d.query) - } - // Set rawData for 8.2+ servers. - if d.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *d.rawData) - } - return dst, nil -} - -// Collation specifies a collation to be used. -func (d *Distinct) Collation(collation bsoncore.Document) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.collation = collation - return d -} - -// Key specifies which field to return distinct values for. -func (d *Distinct) Key(key string) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.key = &key - return d -} - -// Query specifies which documents to return distinct values from. -func (d *Distinct) Query(query bsoncore.Document) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.query = query - return d -} - -// Session sets the session for this operation. -func (d *Distinct) Session(session *session.Client) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.session = session - return d -} - -// ClusterClock sets the cluster clock for this operation. -func (d *Distinct) ClusterClock(clock *session.ClusterClock) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.clock = clock - return d -} - -// Collection sets the collection that this command will run against. -func (d *Distinct) Collection(collection string) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.collection = collection - return d -} - -// Comment sets a value to help trace an operation. -func (d *Distinct) Comment(comment bsoncore.Value) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.comment = comment - return d -} - -// Hint sets a value to help trace an operation. -func (d *Distinct) Hint(hint bsoncore.Value) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.hint = hint - return d -} - -// CommandMonitor sets the monitor to use for APM events. -func (d *Distinct) CommandMonitor(monitor *event.CommandMonitor) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.monitor = monitor - return d -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (d *Distinct) Crypt(crypt driver.Crypt) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.crypt = crypt - return d -} - -// Database sets the database to run this operation against. -func (d *Distinct) Database(database string) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.database = database - return d -} - -// Deployment sets the deployment to use for this operation. -func (d *Distinct) Deployment(deployment driver.Deployment) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.deployment = deployment - return d -} - -// ReadConcern specifies the read concern for this operation. -func (d *Distinct) ReadConcern(readConcern *readconcern.ReadConcern) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.readConcern = readConcern - return d -} - -// ReadPreference set the read preference used with this operation. -func (d *Distinct) ReadPreference(readPreference *readpref.ReadPref) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.readPreference = readPreference - return d -} - -// ServerSelector sets the selector used to retrieve a server. -func (d *Distinct) ServerSelector(selector description.ServerSelector) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.selector = selector - return d -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (d *Distinct) Retry(retry driver.RetryMode) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.retry = &retry - return d -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (d *Distinct) MaxAdaptiveRetries(maxAdaptiveRetries uint) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.maxAdaptiveRetries = maxAdaptiveRetries - return d -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (d *Distinct) EnableOverloadRetargeting(enabled bool) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.enableOverloadRetargeting = enabled - return d -} - -// ServerAPI sets the server API version for this operation. -func (d *Distinct) ServerAPI(serverAPI *driver.ServerAPIOptions) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.serverAPI = serverAPI - return d -} - -// Timeout sets the timeout for this operation. -func (d *Distinct) Timeout(timeout *time.Duration) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.timeout = timeout - return d -} - -// Authenticator sets the authenticator to use for this operation. -func (d *Distinct) Authenticator(authenticator driver.Authenticator) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.authenticator = authenticator - return d -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (d *Distinct) RawData(rawData bool) *Distinct { - if d == nil { - d = new(Distinct) - } - - d.rawData = &rawData - return d -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/doc.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/doc.go deleted file mode 100644 index e55b12a7..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/doc.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2024-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -// Package operation is intended for internal use only. It is made available to -// facilitate use cases that require access to internal MongoDB driver -// functionality and state. The API of this package is not stable and there is -// no backward compatibility guarantee. -// -// WARNING: THIS PACKAGE IS EXPERIMENTAL AND MAY BE MODIFIED OR REMOVED WITHOUT -// NOTICE! USE WITH EXTREME CAUTION! -package operation diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_collection.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_collection.go deleted file mode 100644 index a3880d91..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_collection.go +++ /dev/null @@ -1,236 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// DropCollection performs a drop operation. -type DropCollection struct { - authenticator driver.Authenticator - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - result DropCollectionResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration -} - -// DropCollectionResult represents a dropCollection result returned by the server. -type DropCollectionResult struct { - // The number of indexes in the dropped collection. - NIndexesWas int32 - // The namespace of the dropped collection. - Ns string -} - -func buildDropCollectionResult(response bsoncore.Document) (DropCollectionResult, error) { - elements, err := response.Elements() - if err != nil { - return DropCollectionResult{}, err - } - dcr := DropCollectionResult{} - for _, element := range elements { - switch element.Key() { - case "nIndexesWas": - var ok bool - dcr.NIndexesWas, ok = element.Value().AsInt32OK() - if !ok { - return dcr, fmt.Errorf("response field 'nIndexesWas' is type int32, but received BSON type %s", element.Value().Type) - } - case "ns": - var ok bool - dcr.Ns, ok = element.Value().StringValueOK() - if !ok { - return dcr, fmt.Errorf("response field 'ns' is type string, but received BSON type %s", element.Value().Type) - } - } - } - return dcr, nil -} - -// NewDropCollection constructs and returns a new DropCollection. -func NewDropCollection() *DropCollection { - return &DropCollection{} -} - -// Result returns the result of executing this operation. -func (dc *DropCollection) Result() DropCollectionResult { return dc.result } - -func (dc *DropCollection) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - dc.result, err = buildDropCollectionResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (dc *DropCollection) Execute(ctx context.Context) error { - if dc.deployment == nil { - return errors.New("the DropCollection operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: dc.command, - ProcessResponseFn: dc.processResponse, - Client: dc.session, - Clock: dc.clock, - CommandMonitor: dc.monitor, - Crypt: dc.crypt, - Database: dc.database, - Deployment: dc.deployment, - Selector: dc.selector, - WriteConcern: dc.writeConcern, - ServerAPI: dc.serverAPI, - Timeout: dc.timeout, - Name: driverutil.DropOp, - Authenticator: dc.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (dc *DropCollection) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "drop", dc.collection) - return dst, nil -} - -// Session sets the session for this operation. -func (dc *DropCollection) Session(session *session.Client) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.session = session - return dc -} - -// ClusterClock sets the cluster clock for this operation. -func (dc *DropCollection) ClusterClock(clock *session.ClusterClock) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.clock = clock - return dc -} - -// Collection sets the collection that this command will run against. -func (dc *DropCollection) Collection(collection string) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.collection = collection - return dc -} - -// CommandMonitor sets the monitor to use for APM events. -func (dc *DropCollection) CommandMonitor(monitor *event.CommandMonitor) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.monitor = monitor - return dc -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (dc *DropCollection) Crypt(crypt driver.Crypt) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.crypt = crypt - return dc -} - -// Database sets the database to run this operation against. -func (dc *DropCollection) Database(database string) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.database = database - return dc -} - -// Deployment sets the deployment to use for this operation. -func (dc *DropCollection) Deployment(deployment driver.Deployment) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.deployment = deployment - return dc -} - -// ServerSelector sets the selector used to retrieve a server. -func (dc *DropCollection) ServerSelector(selector description.ServerSelector) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.selector = selector - return dc -} - -// WriteConcern sets the write concern for this operation. -func (dc *DropCollection) WriteConcern(writeConcern *writeconcern.WriteConcern) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.writeConcern = writeConcern - return dc -} - -// ServerAPI sets the server API version for this operation. -func (dc *DropCollection) ServerAPI(serverAPI *driver.ServerAPIOptions) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.serverAPI = serverAPI - return dc -} - -// Timeout sets the timeout for this operation. -func (dc *DropCollection) Timeout(timeout *time.Duration) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.timeout = timeout - return dc -} - -// Authenticator sets the authenticator to use for this operation. -func (dc *DropCollection) Authenticator(authenticator driver.Authenticator) *DropCollection { - if dc == nil { - dc = new(DropCollection) - } - - dc.authenticator = authenticator - return dc -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_database.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_database.go deleted file mode 100644 index 2fcf03e7..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_database.go +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// DropDatabase performs a dropDatabase operation -type DropDatabase struct { - authenticator driver.Authenticator - session *session.Client - clock *session.ClusterClock - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - serverAPI *driver.ServerAPIOptions -} - -// NewDropDatabase constructs and returns a new DropDatabase. -func NewDropDatabase() *DropDatabase { - return &DropDatabase{} -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (dd *DropDatabase) Execute(ctx context.Context) error { - if dd.deployment == nil { - return errors.New("the DropDatabase operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: dd.command, - Client: dd.session, - Clock: dd.clock, - CommandMonitor: dd.monitor, - Crypt: dd.crypt, - Database: dd.database, - Deployment: dd.deployment, - Selector: dd.selector, - WriteConcern: dd.writeConcern, - ServerAPI: dd.serverAPI, - Name: driverutil.DropDatabaseOp, - Authenticator: dd.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (dd *DropDatabase) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendInt32Element(dst, "dropDatabase", 1) - return dst, nil -} - -// Session sets the session for this operation. -func (dd *DropDatabase) Session(session *session.Client) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.session = session - return dd -} - -// ClusterClock sets the cluster clock for this operation. -func (dd *DropDatabase) ClusterClock(clock *session.ClusterClock) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.clock = clock - return dd -} - -// CommandMonitor sets the monitor to use for APM events. -func (dd *DropDatabase) CommandMonitor(monitor *event.CommandMonitor) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.monitor = monitor - return dd -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (dd *DropDatabase) Crypt(crypt driver.Crypt) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.crypt = crypt - return dd -} - -// Database sets the database to run this operation against. -func (dd *DropDatabase) Database(database string) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.database = database - return dd -} - -// Deployment sets the deployment to use for this operation. -func (dd *DropDatabase) Deployment(deployment driver.Deployment) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.deployment = deployment - return dd -} - -// ServerSelector sets the selector used to retrieve a server. -func (dd *DropDatabase) ServerSelector(selector description.ServerSelector) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.selector = selector - return dd -} - -// WriteConcern sets the write concern for this operation. -func (dd *DropDatabase) WriteConcern(writeConcern *writeconcern.WriteConcern) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.writeConcern = writeConcern - return dd -} - -// ServerAPI sets the server API version for this operation. -func (dd *DropDatabase) ServerAPI(serverAPI *driver.ServerAPIOptions) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.serverAPI = serverAPI - return dd -} - -// Authenticator sets the authenticator to use for this operation. -func (dd *DropDatabase) Authenticator(authenticator driver.Authenticator) *DropDatabase { - if dd == nil { - dd = new(DropDatabase) - } - - dd.authenticator = authenticator - return dd -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_indexes.go deleted file mode 100644 index d7fff7b3..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_indexes.go +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// DropIndexes performs an dropIndexes operation. -type DropIndexes struct { - authenticator driver.Authenticator - index any - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - maxAdaptiveRetries uint - enableOverloadRetargeting bool - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - result DropIndexesResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool -} - -// DropIndexesResult represents a dropIndexes result returned by the server. -type DropIndexesResult struct { - // Number of indexes that existed before the drop was executed. - NIndexesWas int32 -} - -func buildDropIndexesResult(response bsoncore.Document) (DropIndexesResult, error) { - elements, err := response.Elements() - if err != nil { - return DropIndexesResult{}, err - } - dir := DropIndexesResult{} - for _, element := range elements { - if element.Key() == "nIndexesWas" { - var ok bool - dir.NIndexesWas, ok = element.Value().AsInt32OK() - if !ok { - return dir, fmt.Errorf("response field 'nIndexesWas' is type int32, but received BSON type %s", element.Value().Type) - } - } - } - return dir, nil -} - -// NewDropIndexes constructs and returns a new DropIndexes. -func NewDropIndexes(index any) *DropIndexes { - return &DropIndexes{ - index: index, - } -} - -// Result returns the result of executing this operation. -func (di *DropIndexes) Result() DropIndexesResult { return di.result } - -func (di *DropIndexes) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - di.result, err = buildDropIndexesResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (di *DropIndexes) Execute(ctx context.Context) error { - if di.deployment == nil { - return errors.New("the DropIndexes operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: di.command, - ProcessResponseFn: di.processResponse, - Client: di.session, - Clock: di.clock, - CommandMonitor: di.monitor, - MaxAdaptiveRetries: di.maxAdaptiveRetries, - EnableOverloadRetargeting: di.enableOverloadRetargeting, - Crypt: di.crypt, - Database: di.database, - Deployment: di.deployment, - Selector: di.selector, - WriteConcern: di.writeConcern, - ServerAPI: di.serverAPI, - Timeout: di.timeout, - Name: driverutil.DropIndexesOp, - Authenticator: di.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (di *DropIndexes) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "dropIndexes", di.collection) - - switch t := di.index.(type) { - case string: - dst = bsoncore.AppendStringElement(dst, "index", t) - case bsoncore.Document: - if di.index != nil { - dst = bsoncore.AppendDocumentElement(dst, "index", t) - } - } - // Set rawData for 8.2+ servers. - if di.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *di.rawData) - } - - return dst, nil -} - -// Index specifies the name of the index to drop. If '*' is specified, all indexes will be dropped. -func (di *DropIndexes) Index(index any) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.index = index - return di -} - -// Session sets the session for this operation. -func (di *DropIndexes) Session(session *session.Client) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.session = session - return di -} - -// ClusterClock sets the cluster clock for this operation. -func (di *DropIndexes) ClusterClock(clock *session.ClusterClock) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.clock = clock - return di -} - -// Collection sets the collection that this command will run against. -func (di *DropIndexes) Collection(collection string) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.collection = collection - return di -} - -// CommandMonitor sets the monitor to use for APM events. -func (di *DropIndexes) CommandMonitor(monitor *event.CommandMonitor) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.monitor = monitor - return di -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (di *DropIndexes) MaxAdaptiveRetries(maxAdaptiveRetries uint) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.maxAdaptiveRetries = maxAdaptiveRetries - return di -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (di *DropIndexes) EnableOverloadRetargeting(enabled bool) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.enableOverloadRetargeting = enabled - return di -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (di *DropIndexes) Crypt(crypt driver.Crypt) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.crypt = crypt - return di -} - -// Database sets the database to run this operation against. -func (di *DropIndexes) Database(database string) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.database = database - return di -} - -// Deployment sets the deployment to use for this operation. -func (di *DropIndexes) Deployment(deployment driver.Deployment) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.deployment = deployment - return di -} - -// ServerSelector sets the selector used to retrieve a server. -func (di *DropIndexes) ServerSelector(selector description.ServerSelector) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.selector = selector - return di -} - -// WriteConcern sets the write concern for this operation. -func (di *DropIndexes) WriteConcern(writeConcern *writeconcern.WriteConcern) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.writeConcern = writeConcern - return di -} - -// ServerAPI sets the server API version for this operation. -func (di *DropIndexes) ServerAPI(serverAPI *driver.ServerAPIOptions) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.serverAPI = serverAPI - return di -} - -// Timeout sets the timeout for this operation. -func (di *DropIndexes) Timeout(timeout *time.Duration) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.timeout = timeout - return di -} - -// Authenticator sets the authenticator to use for this operation. -func (di *DropIndexes) Authenticator(authenticator driver.Authenticator) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.authenticator = authenticator - return di -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (di *DropIndexes) RawData(rawData bool) *DropIndexes { - if di == nil { - di = new(DropIndexes) - } - - di.rawData = &rawData - return di -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_search_index.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_search_index.go deleted file mode 100644 index dd723566..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/drop_search_index.go +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2023-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// DropSearchIndex performs an dropSearchIndex operation. -type DropSearchIndex struct { - authenticator driver.Authenticator - index string - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - result DropSearchIndexResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration -} - -// DropSearchIndexResult represents a dropSearchIndex result returned by the server. -type DropSearchIndexResult struct { - Ok int32 -} - -func buildDropSearchIndexResult(response bsoncore.Document) (DropSearchIndexResult, error) { - elements, err := response.Elements() - if err != nil { - return DropSearchIndexResult{}, err - } - dsir := DropSearchIndexResult{} - for _, element := range elements { - if element.Key() == "ok" { - var ok bool - dsir.Ok, ok = element.Value().AsInt32OK() - if !ok { - return dsir, fmt.Errorf("response field 'ok' is type int32, but received BSON type %s", element.Value().Type) - } - } - } - return dsir, nil -} - -// NewDropSearchIndex constructs and returns a new DropSearchIndex. -func NewDropSearchIndex(index string) *DropSearchIndex { - return &DropSearchIndex{ - index: index, - } -} - -// Result returns the result of executing this operation. -func (dsi *DropSearchIndex) Result() DropSearchIndexResult { return dsi.result } - -func (dsi *DropSearchIndex) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - dsi.result, err = buildDropSearchIndexResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (dsi *DropSearchIndex) Execute(ctx context.Context) error { - if dsi.deployment == nil { - return errors.New("the DropSearchIndex operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: dsi.command, - ProcessResponseFn: dsi.processResponse, - Client: dsi.session, - Clock: dsi.clock, - CommandMonitor: dsi.monitor, - Crypt: dsi.crypt, - Database: dsi.database, - Deployment: dsi.deployment, - Selector: dsi.selector, - ServerAPI: dsi.serverAPI, - Timeout: dsi.timeout, - Authenticator: dsi.authenticator, - }.Execute(ctx) -} - -func (dsi *DropSearchIndex) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "dropSearchIndex", dsi.collection) - dst = bsoncore.AppendStringElement(dst, "name", dsi.index) - return dst, nil -} - -// Index specifies the name of the index to drop. If '*' is specified, all indexes will be dropped. -func (dsi *DropSearchIndex) Index(index string) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.index = index - return dsi -} - -// Session sets the session for this operation. -func (dsi *DropSearchIndex) Session(session *session.Client) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.session = session - return dsi -} - -// ClusterClock sets the cluster clock for this operation. -func (dsi *DropSearchIndex) ClusterClock(clock *session.ClusterClock) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.clock = clock - return dsi -} - -// Collection sets the collection that this command will run against. -func (dsi *DropSearchIndex) Collection(collection string) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.collection = collection - return dsi -} - -// CommandMonitor sets the monitor to use for APM events. -func (dsi *DropSearchIndex) CommandMonitor(monitor *event.CommandMonitor) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.monitor = monitor - return dsi -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (dsi *DropSearchIndex) Crypt(crypt driver.Crypt) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.crypt = crypt - return dsi -} - -// Database sets the database to run this operation against. -func (dsi *DropSearchIndex) Database(database string) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.database = database - return dsi -} - -// Deployment sets the deployment to use for this operation. -func (dsi *DropSearchIndex) Deployment(deployment driver.Deployment) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.deployment = deployment - return dsi -} - -// ServerSelector sets the selector used to retrieve a server. -func (dsi *DropSearchIndex) ServerSelector(selector description.ServerSelector) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.selector = selector - return dsi -} - -// ServerAPI sets the server API version for this operation. -func (dsi *DropSearchIndex) ServerAPI(serverAPI *driver.ServerAPIOptions) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.serverAPI = serverAPI - return dsi -} - -// Timeout sets the timeout for this operation. -func (dsi *DropSearchIndex) Timeout(timeout *time.Duration) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.timeout = timeout - return dsi -} - -// Authenticator sets the authenticator to use for this operation. -func (dsi *DropSearchIndex) Authenticator(authenticator driver.Authenticator) *DropSearchIndex { - if dsi == nil { - dsi = new(DropSearchIndex) - } - - dsi.authenticator = authenticator - return dsi -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/end_sessions.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/end_sessions.go deleted file mode 100644 index 71bba2d9..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/end_sessions.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// EndSessions performs an endSessions operation. -type EndSessions struct { - authenticator driver.Authenticator - sessionIDs bsoncore.Document - session *session.Client - clock *session.ClusterClock - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - serverAPI *driver.ServerAPIOptions - maxAdaptiveRetries uint - enableOverloadRetargeting bool -} - -// NewEndSessions constructs and returns a new EndSessions. -func NewEndSessions(sessionIDs bsoncore.Document) *EndSessions { - return &EndSessions{ - sessionIDs: sessionIDs, - } -} - -func (es *EndSessions) processResponse(context.Context, bsoncore.Document, driver.ResponseInfo) error { - return nil -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (es *EndSessions) Execute(ctx context.Context) error { - if es.deployment == nil { - return errors.New("the EndSessions operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: es.command, - ProcessResponseFn: es.processResponse, - Client: es.session, - Clock: es.clock, - CommandMonitor: es.monitor, - MaxAdaptiveRetries: es.maxAdaptiveRetries, - EnableOverloadRetargeting: es.enableOverloadRetargeting, - Crypt: es.crypt, - Database: es.database, - Deployment: es.deployment, - Selector: es.selector, - ServerAPI: es.serverAPI, - Name: driverutil.EndSessionsOp, - Authenticator: es.authenticator, - }.Execute(ctx) -} - -func (es *EndSessions) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - if es.sessionIDs != nil { - dst = bsoncore.AppendArrayElement(dst, "endSessions", es.sessionIDs) - } - return dst, nil -} - -// SessionIDs specifies the sessions to be expired. -func (es *EndSessions) SessionIDs(sessionIDs bsoncore.Document) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.sessionIDs = sessionIDs - return es -} - -// Session sets the session for this operation. -func (es *EndSessions) Session(session *session.Client) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.session = session - return es -} - -// ClusterClock sets the cluster clock for this operation. -func (es *EndSessions) ClusterClock(clock *session.ClusterClock) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.clock = clock - return es -} - -// CommandMonitor sets the monitor to use for APM events. -func (es *EndSessions) CommandMonitor(monitor *event.CommandMonitor) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.monitor = monitor - return es -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (es *EndSessions) Crypt(crypt driver.Crypt) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.crypt = crypt - return es -} - -// Database sets the database to run this operation against. -func (es *EndSessions) Database(database string) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.database = database - return es -} - -// Deployment sets the deployment to use for this operation. -func (es *EndSessions) Deployment(deployment driver.Deployment) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.deployment = deployment - return es -} - -// ServerSelector sets the selector used to retrieve a server. -func (es *EndSessions) ServerSelector(selector description.ServerSelector) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.selector = selector - return es -} - -// ServerAPI sets the server API version for this operation. -func (es *EndSessions) ServerAPI(serverAPI *driver.ServerAPIOptions) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.serverAPI = serverAPI - return es -} - -// Authenticator sets the authenticator to use for this operation. -func (es *EndSessions) Authenticator(authenticator driver.Authenticator) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.authenticator = authenticator - return es -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (es *EndSessions) MaxAdaptiveRetries(maxAdaptiveRetries uint) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.maxAdaptiveRetries = maxAdaptiveRetries - return es -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (es *EndSessions) EnableOverloadRetargeting(enabled bool) *EndSessions { - if es == nil { - es = new(EndSessions) - } - - es.enableOverloadRetargeting = enabled - return es -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/errors.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/errors.go deleted file mode 100644 index f88de014..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/errors.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2017-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import "errors" - -var errUnacknowledgedHint = errors.New("the 'hint' command parameter cannot be used with unacknowledged writes") diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/find.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/find.go deleted file mode 100644 index 23599814..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/find.go +++ /dev/null @@ -1,618 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/internal/logger" - "go.mongodb.org/mongo-driver/v2/mongo/readconcern" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// Find performs a find operation. -type Find struct { - authenticator driver.Authenticator - allowDiskUse *bool - allowPartialResults *bool - awaitData *bool - batchSize *int32 - collation bsoncore.Document - comment bsoncore.Value - filter bsoncore.Document - hint bsoncore.Value - let bsoncore.Document - limit *int64 - max bsoncore.Document - min bsoncore.Document - noCursorTimeout *bool - oplogReplay *bool - projection bsoncore.Document - returnKey *bool - showRecordID *bool - singleBatch *bool - skip *int64 - snapshot *bool - sort bsoncore.Document - tailable *bool - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - readConcern *readconcern.ReadConcern - readPreference *readpref.ReadPref - selector description.ServerSelector - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - result driver.CursorResponse - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool - logger *logger.Logger - omitMaxTimeMS bool -} - -// NewFind constructs and returns a new Find. -func NewFind(filter bsoncore.Document) *Find { - return &Find{ - filter: filter, - } -} - -// Result returns the result of executing this operation. -func (f *Find) Result(opts driver.CursorOptions) (*driver.BatchCursor, error) { - opts.ServerAPI = f.serverAPI - return driver.NewBatchCursor(f.result, f.session, f.clock, opts) -} - -func (f *Find) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { - curDoc, err := driver.ExtractCursorDocument(resp) - if err != nil { - return err - } - f.result, err = driver.NewCursorResponse(curDoc, info) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (f *Find) Execute(ctx context.Context) error { - if f.deployment == nil { - return errors.New("the Find operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: f.command, - ProcessResponseFn: f.processResponse, - RetryMode: f.retry, - MaxAdaptiveRetries: f.maxAdaptiveRetries, - EnableOverloadRetargeting: f.enableOverloadRetargeting, - Type: driver.Read, - Client: f.session, - Clock: f.clock, - CommandMonitor: f.monitor, - Crypt: f.crypt, - Database: f.database, - Deployment: f.deployment, - ReadConcern: f.readConcern, - ReadPreference: f.readPreference, - Selector: f.selector, - Legacy: driver.LegacyFind, - ServerAPI: f.serverAPI, - Timeout: f.timeout, - Logger: f.logger, - Name: driverutil.FindOp, - Authenticator: f.authenticator, - OmitMaxTimeMS: f.omitMaxTimeMS, - }.Execute(ctx) -} - -func (f *Find) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "find", f.collection) - if f.allowDiskUse != nil { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 4) { - return nil, errors.New("the 'allowDiskUse' command parameter requires a minimum server wire version of 4") - } - dst = bsoncore.AppendBooleanElement(dst, "allowDiskUse", *f.allowDiskUse) - } - if f.allowPartialResults != nil { - dst = bsoncore.AppendBooleanElement(dst, "allowPartialResults", *f.allowPartialResults) - } - if f.awaitData != nil { - dst = bsoncore.AppendBooleanElement(dst, "awaitData", *f.awaitData) - } - if f.batchSize != nil { - dst = bsoncore.AppendInt32Element(dst, "batchSize", *f.batchSize) - } - if f.collation != nil { - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { - return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") - } - dst = bsoncore.AppendDocumentElement(dst, "collation", f.collation) - } - if f.comment.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "comment", f.comment) - } - if f.filter != nil { - dst = bsoncore.AppendDocumentElement(dst, "filter", f.filter) - } - if f.hint.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "hint", f.hint) - } - if f.let != nil { - dst = bsoncore.AppendDocumentElement(dst, "let", f.let) - } - if f.limit != nil { - dst = bsoncore.AppendInt64Element(dst, "limit", *f.limit) - } - if f.max != nil { - dst = bsoncore.AppendDocumentElement(dst, "max", f.max) - } - if f.min != nil { - dst = bsoncore.AppendDocumentElement(dst, "min", f.min) - } - if f.noCursorTimeout != nil { - dst = bsoncore.AppendBooleanElement(dst, "noCursorTimeout", *f.noCursorTimeout) - } - if f.oplogReplay != nil { - dst = bsoncore.AppendBooleanElement(dst, "oplogReplay", *f.oplogReplay) - } - if f.projection != nil { - dst = bsoncore.AppendDocumentElement(dst, "projection", f.projection) - } - if f.returnKey != nil { - dst = bsoncore.AppendBooleanElement(dst, "returnKey", *f.returnKey) - } - if f.showRecordID != nil { - dst = bsoncore.AppendBooleanElement(dst, "showRecordId", *f.showRecordID) - } - if f.singleBatch != nil { - dst = bsoncore.AppendBooleanElement(dst, "singleBatch", *f.singleBatch) - } - if f.skip != nil { - dst = bsoncore.AppendInt64Element(dst, "skip", *f.skip) - } - if f.snapshot != nil { - dst = bsoncore.AppendBooleanElement(dst, "snapshot", *f.snapshot) - } - if f.sort != nil { - dst = bsoncore.AppendDocumentElement(dst, "sort", f.sort) - } - if f.tailable != nil { - dst = bsoncore.AppendBooleanElement(dst, "tailable", *f.tailable) - } - // Set rawData for 8.2+ servers. - if f.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *f.rawData) - } - return dst, nil -} - -// AllowDiskUse when true allows temporary data to be written to disk during the find command." -func (f *Find) AllowDiskUse(allowDiskUse bool) *Find { - if f == nil { - f = new(Find) - } - - f.allowDiskUse = &allowDiskUse - return f -} - -// AllowPartialResults when true allows partial results to be returned if some shards are down. -func (f *Find) AllowPartialResults(allowPartialResults bool) *Find { - if f == nil { - f = new(Find) - } - - f.allowPartialResults = &allowPartialResults - return f -} - -// AwaitData when true makes a cursor block before returning when no data is available. -func (f *Find) AwaitData(awaitData bool) *Find { - if f == nil { - f = new(Find) - } - - f.awaitData = &awaitData - return f -} - -// BatchSize specifies the number of documents to return in every batch. -func (f *Find) BatchSize(batchSize int32) *Find { - if f == nil { - f = new(Find) - } - - f.batchSize = &batchSize - return f -} - -// Collation specifies a collation to be used. -func (f *Find) Collation(collation bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.collation = collation - return f -} - -// Comment sets a value to help trace an operation. -func (f *Find) Comment(comment bsoncore.Value) *Find { - if f == nil { - f = new(Find) - } - - f.comment = comment - return f -} - -// Filter determines what results are returned from find. -func (f *Find) Filter(filter bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.filter = filter - return f -} - -// Hint specifies the index to use. -func (f *Find) Hint(hint bsoncore.Value) *Find { - if f == nil { - f = new(Find) - } - - f.hint = hint - return f -} - -// Let specifies the let document to use. This option is only valid for server versions 5.0 and above. -func (f *Find) Let(let bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.let = let - return f -} - -// Limit sets a limit on the number of documents to return. -func (f *Find) Limit(limit int64) *Find { - if f == nil { - f = new(Find) - } - - f.limit = &limit - return f -} - -// Max sets an exclusive upper bound for a specific index. -func (f *Find) Max(max bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.max = max - return f -} - -// Min sets an inclusive lower bound for a specific index. -func (f *Find) Min(min bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.min = min - return f -} - -// NoCursorTimeout when true prevents cursor from timing out after an inactivity period. -func (f *Find) NoCursorTimeout(noCursorTimeout bool) *Find { - if f == nil { - f = new(Find) - } - - f.noCursorTimeout = &noCursorTimeout - return f -} - -// OplogReplay when true replays a replica set's oplog. -func (f *Find) OplogReplay(oplogReplay bool) *Find { - if f == nil { - f = new(Find) - } - - f.oplogReplay = &oplogReplay - return f -} - -// Projection limits the fields returned for all documents. -func (f *Find) Projection(projection bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.projection = projection - return f -} - -// ReturnKey when true returns index keys for all result documents. -func (f *Find) ReturnKey(returnKey bool) *Find { - if f == nil { - f = new(Find) - } - - f.returnKey = &returnKey - return f -} - -// ShowRecordID when true adds a $recordId field with the record identifier to returned documents. -func (f *Find) ShowRecordID(showRecordID bool) *Find { - if f == nil { - f = new(Find) - } - - f.showRecordID = &showRecordID - return f -} - -// SingleBatch specifies whether the results should be returned in a single batch. -func (f *Find) SingleBatch(singleBatch bool) *Find { - if f == nil { - f = new(Find) - } - - f.singleBatch = &singleBatch - return f -} - -// Skip specifies the number of documents to skip before returning. -func (f *Find) Skip(skip int64) *Find { - if f == nil { - f = new(Find) - } - - f.skip = &skip - return f -} - -// Snapshot prevents the cursor from returning a document more than once because of an intervening write operation. -func (f *Find) Snapshot(snapshot bool) *Find { - if f == nil { - f = new(Find) - } - - f.snapshot = &snapshot - return f -} - -// Sort specifies the order in which to return results. -func (f *Find) Sort(sort bsoncore.Document) *Find { - if f == nil { - f = new(Find) - } - - f.sort = sort - return f -} - -// Tailable keeps a cursor open and resumable after the last data has been retrieved. -func (f *Find) Tailable(tailable bool) *Find { - if f == nil { - f = new(Find) - } - - f.tailable = &tailable - return f -} - -// Session sets the session for this operation. -func (f *Find) Session(session *session.Client) *Find { - if f == nil { - f = new(Find) - } - - f.session = session - return f -} - -// ClusterClock sets the cluster clock for this operation. -func (f *Find) ClusterClock(clock *session.ClusterClock) *Find { - if f == nil { - f = new(Find) - } - - f.clock = clock - return f -} - -// Collection sets the collection that this command will run against. -func (f *Find) Collection(collection string) *Find { - if f == nil { - f = new(Find) - } - - f.collection = collection - return f -} - -// CommandMonitor sets the monitor to use for APM events. -func (f *Find) CommandMonitor(monitor *event.CommandMonitor) *Find { - if f == nil { - f = new(Find) - } - - f.monitor = monitor - return f -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (f *Find) Crypt(crypt driver.Crypt) *Find { - if f == nil { - f = new(Find) - } - - f.crypt = crypt - return f -} - -// Database sets the database to run this operation against. -func (f *Find) Database(database string) *Find { - if f == nil { - f = new(Find) - } - - f.database = database - return f -} - -// Deployment sets the deployment to use for this operation. -func (f *Find) Deployment(deployment driver.Deployment) *Find { - if f == nil { - f = new(Find) - } - - f.deployment = deployment - return f -} - -// ReadConcern specifies the read concern for this operation. -func (f *Find) ReadConcern(readConcern *readconcern.ReadConcern) *Find { - if f == nil { - f = new(Find) - } - - f.readConcern = readConcern - return f -} - -// ReadPreference set the read preference used with this operation. -func (f *Find) ReadPreference(readPreference *readpref.ReadPref) *Find { - if f == nil { - f = new(Find) - } - - f.readPreference = readPreference - return f -} - -// ServerSelector sets the selector used to retrieve a server. -func (f *Find) ServerSelector(selector description.ServerSelector) *Find { - if f == nil { - f = new(Find) - } - - f.selector = selector - return f -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (f *Find) Retry(retry driver.RetryMode) *Find { - if f == nil { - f = new(Find) - } - - f.retry = &retry - return f -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (f *Find) MaxAdaptiveRetries(maxAdaptiveRetries uint) *Find { - if f == nil { - f = new(Find) - } - - f.maxAdaptiveRetries = maxAdaptiveRetries - return f -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (f *Find) EnableOverloadRetargeting(enabled bool) *Find { - if f == nil { - f = new(Find) - } - - f.enableOverloadRetargeting = enabled - return f -} - -// ServerAPI sets the server API version for this operation. -func (f *Find) ServerAPI(serverAPI *driver.ServerAPIOptions) *Find { - if f == nil { - f = new(Find) - } - - f.serverAPI = serverAPI - return f -} - -// Timeout sets the timeout for this operation. -func (f *Find) Timeout(timeout *time.Duration) *Find { - if f == nil { - f = new(Find) - } - - f.timeout = timeout - return f -} - -// Logger sets the logger for this operation. -func (f *Find) Logger(logger *logger.Logger) *Find { - if f == nil { - f = new(Find) - } - - f.logger = logger - return f -} - -// Authenticator sets the authenticator to use for this operation. -func (f *Find) Authenticator(authenticator driver.Authenticator) *Find { - if f == nil { - f = new(Find) - } - - f.authenticator = authenticator - return f -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (f *Find) RawData(rawData bool) *Find { - if f == nil { - f = new(Find) - } - - f.rawData = &rawData - return f -} - -// OmitMaxTimeMS omits the automatically-calculated "maxTimeMS" from the -// command. -func (f *Find) OmitMaxTimeMS(omit bool) *Find { - if f == nil { - f = new(Find) - } - - f.omitMaxTimeMS = omit - return f -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/find_and_modify.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/find_and_modify.go deleted file mode 100644 index c3bd2172..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/find_and_modify.go +++ /dev/null @@ -1,529 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/bson" - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/writeconcern" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// FindAndModify performs a findAndModify operation. -type FindAndModify struct { - authenticator driver.Authenticator - arrayFilters bsoncore.Array - bypassDocumentValidation *bool - collation bsoncore.Document - comment bsoncore.Value - fields bsoncore.Document - newDocument *bool - query bsoncore.Document - remove *bool - sort bsoncore.Document - update bsoncore.Value - upsert *bool - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - database string - deployment driver.Deployment - selector description.ServerSelector - writeConcern *writeconcern.WriteConcern - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - crypt driver.Crypt - hint bsoncore.Value - serverAPI *driver.ServerAPIOptions - let bsoncore.Document - timeout *time.Duration - rawData *bool - additionalCmd bson.D - - result FindAndModifyResult -} - -// LastErrorObject represents information about updates and upserts returned by the server. -type LastErrorObject struct { - // True if an update modified an existing document - UpdatedExisting bool - // Object ID of the upserted document. - Upserted any -} - -// FindAndModifyResult represents a findAndModify result returned by the server. -type FindAndModifyResult struct { - // Either the old or modified document, depending on the value of the new parameter. - Value bsoncore.Document - // Contains information about updates and upserts. - LastErrorObject LastErrorObject -} - -func buildFindAndModifyResult(response bsoncore.Document) (FindAndModifyResult, error) { - elements, err := response.Elements() - if err != nil { - return FindAndModifyResult{}, err - } - famr := FindAndModifyResult{} - for _, element := range elements { - switch element.Key() { - case "value": - var ok bool - famr.Value, ok = element.Value().DocumentOK() - - // The 'value' field returned by a FindAndModify can be null in the case that no document was found. - if element.Value().Type != bsoncore.TypeNull && !ok { - return famr, fmt.Errorf("response field 'value' is type document or null, but received BSON type %s", element.Value().Type) - } - case "lastErrorObject": - valDoc, ok := element.Value().DocumentOK() - if !ok { - return famr, fmt.Errorf("response field 'lastErrorObject' is type document, but received BSON type %s", element.Value().Type) - } - - var leo LastErrorObject - if err = bson.Unmarshal(valDoc, &leo); err != nil { - return famr, err - } - famr.LastErrorObject = leo - } - } - return famr, nil -} - -// NewFindAndModify constructs and returns a new FindAndModify. -func NewFindAndModify(query bsoncore.Document) *FindAndModify { - return &FindAndModify{ - query: query, - } -} - -// Result returns the result of executing this operation. -func (fam *FindAndModify) Result() FindAndModifyResult { return fam.result } - -func (fam *FindAndModify) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - - fam.result, err = buildFindAndModifyResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (fam *FindAndModify) Execute(ctx context.Context) error { - if fam.deployment == nil { - return errors.New("the FindAndModify operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: fam.command, - ProcessResponseFn: fam.processResponse, - - RetryMode: fam.retry, - MaxAdaptiveRetries: fam.maxAdaptiveRetries, - EnableOverloadRetargeting: fam.enableOverloadRetargeting, - Type: driver.Write, - Client: fam.session, - Clock: fam.clock, - CommandMonitor: fam.monitor, - Database: fam.database, - Deployment: fam.deployment, - Selector: fam.selector, - WriteConcern: fam.writeConcern, - Crypt: fam.crypt, - ServerAPI: fam.serverAPI, - Timeout: fam.timeout, - Name: driverutil.FindAndModifyOp, - Authenticator: fam.authenticator, - SendAfterClusterTime: true, - }.Execute(ctx) -} - -func (fam *FindAndModify) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "findAndModify", fam.collection) - if fam.arrayFilters != nil { - - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 6) { - return nil, errors.New("the 'arrayFilters' command parameter requires a minimum server wire version of 6") - } - dst = bsoncore.AppendArrayElement(dst, "arrayFilters", fam.arrayFilters) - } - if fam.bypassDocumentValidation != nil { - dst = bsoncore.AppendBooleanElement(dst, "bypassDocumentValidation", *fam.bypassDocumentValidation) - } - if fam.collation != nil { - - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 5) { - return nil, errors.New("the 'collation' command parameter requires a minimum server wire version of 5") - } - dst = bsoncore.AppendDocumentElement(dst, "collation", fam.collation) - } - if fam.comment.Type != bsoncore.Type(0) { - dst = bsoncore.AppendValueElement(dst, "comment", fam.comment) - } - if fam.fields != nil { - dst = bsoncore.AppendDocumentElement(dst, "fields", fam.fields) - } - if fam.newDocument != nil { - dst = bsoncore.AppendBooleanElement(dst, "new", *fam.newDocument) - } - if fam.query != nil { - dst = bsoncore.AppendDocumentElement(dst, "query", fam.query) - } - if fam.remove != nil { - dst = bsoncore.AppendBooleanElement(dst, "remove", *fam.remove) - } - if fam.sort != nil { - dst = bsoncore.AppendDocumentElement(dst, "sort", fam.sort) - } - if fam.update.Data != nil { - dst = bsoncore.AppendValueElement(dst, "update", fam.update) - } - if fam.upsert != nil { - dst = bsoncore.AppendBooleanElement(dst, "upsert", *fam.upsert) - } - if fam.hint.Type != bsoncore.Type(0) { - - if desc.WireVersion == nil || !driverutil.VersionRangeIncludes(*desc.WireVersion, 8) { - return nil, errors.New("the 'hint' command parameter requires a minimum server wire version of 8") - } - if !fam.writeConcern.Acknowledged() { - return nil, errUnacknowledgedHint - } - dst = bsoncore.AppendValueElement(dst, "hint", fam.hint) - } - if fam.let != nil { - dst = bsoncore.AppendDocumentElement(dst, "let", fam.let) - } - // Set rawData for 8.2+ servers. - if fam.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *fam.rawData) - } - if len(fam.additionalCmd) > 0 { - doc, err := bson.Marshal(fam.additionalCmd) - if err != nil { - return nil, err - } - dst = append(dst, doc[4:len(doc)-1]...) - } - - return dst, nil -} - -// ArrayFilters specifies an array of filter documents that determines which array elements to modify for an update operation on an array field. -func (fam *FindAndModify) ArrayFilters(arrayFilters bsoncore.Array) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.arrayFilters = arrayFilters - return fam -} - -// BypassDocumentValidation specifies if document validation can be skipped when executing the operation. -func (fam *FindAndModify) BypassDocumentValidation(bypassDocumentValidation bool) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.bypassDocumentValidation = &bypassDocumentValidation - return fam -} - -// Collation specifies a collation to be used. -func (fam *FindAndModify) Collation(collation bsoncore.Document) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.collation = collation - return fam -} - -// Comment sets a value to help trace an operation. -func (fam *FindAndModify) Comment(comment bsoncore.Value) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.comment = comment - return fam -} - -// Fields specifies a subset of fields to return. -func (fam *FindAndModify) Fields(fields bsoncore.Document) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.fields = fields - return fam -} - -// NewDocument specifies whether to return the modified document or the original. Defaults to false (return original). -func (fam *FindAndModify) NewDocument(newDocument bool) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.newDocument = &newDocument - return fam -} - -// Query specifies the selection criteria for the modification. -func (fam *FindAndModify) Query(query bsoncore.Document) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.query = query - return fam -} - -// Remove specifies that the matched document should be removed. Defaults to false. -func (fam *FindAndModify) Remove(remove bool) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.remove = &remove - return fam -} - -// Sort determines which document the operation modifies if the query matches multiple documents.The first document matched by the sort order will be modified. -func (fam *FindAndModify) Sort(sort bsoncore.Document) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.sort = sort - return fam -} - -// Update specifies the update document to perform on the matched document. -func (fam *FindAndModify) Update(update bsoncore.Value) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.update = update - return fam -} - -// Upsert specifies whether or not to create a new document if no documents match the query when doing an update. Defaults to false. -func (fam *FindAndModify) Upsert(upsert bool) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.upsert = &upsert - return fam -} - -// Session sets the session for this operation. -func (fam *FindAndModify) Session(session *session.Client) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.session = session - return fam -} - -// ClusterClock sets the cluster clock for this operation. -func (fam *FindAndModify) ClusterClock(clock *session.ClusterClock) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.clock = clock - return fam -} - -// Collection sets the collection that this command will run against. -func (fam *FindAndModify) Collection(collection string) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.collection = collection - return fam -} - -// CommandMonitor sets the monitor to use for APM events. -func (fam *FindAndModify) CommandMonitor(monitor *event.CommandMonitor) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.monitor = monitor - return fam -} - -// Database sets the database to run this operation against. -func (fam *FindAndModify) Database(database string) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.database = database - return fam -} - -// Deployment sets the deployment to use for this operation. -func (fam *FindAndModify) Deployment(deployment driver.Deployment) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.deployment = deployment - return fam -} - -// ServerSelector sets the selector used to retrieve a server. -func (fam *FindAndModify) ServerSelector(selector description.ServerSelector) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.selector = selector - return fam -} - -// WriteConcern sets the write concern for this operation. -func (fam *FindAndModify) WriteConcern(writeConcern *writeconcern.WriteConcern) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.writeConcern = writeConcern - return fam -} - -// Retry enables retryable writes for this operation. Retries are not handled automatically, -// instead a boolean is returned from Execute and SelectAndExecute that indicates if the -// operation can be retried. Retrying is handled by calling RetryExecute. -func (fam *FindAndModify) Retry(retry driver.RetryMode) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.retry = &retry - return fam -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (fam *FindAndModify) MaxAdaptiveRetries(maxAdaptiveRetries uint) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.maxAdaptiveRetries = maxAdaptiveRetries - return fam -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (fam *FindAndModify) EnableOverloadRetargeting(enabled bool) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.enableOverloadRetargeting = enabled - return fam -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (fam *FindAndModify) Crypt(crypt driver.Crypt) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.crypt = crypt - return fam -} - -// Hint specifies the index to use. -func (fam *FindAndModify) Hint(hint bsoncore.Value) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.hint = hint - return fam -} - -// ServerAPI sets the server API version for this operation. -func (fam *FindAndModify) ServerAPI(serverAPI *driver.ServerAPIOptions) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.serverAPI = serverAPI - return fam -} - -// Let specifies the let document to use. This option is only valid for server versions 5.0 and above. -func (fam *FindAndModify) Let(let bsoncore.Document) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.let = let - return fam -} - -// Timeout sets the timeout for this operation. -func (fam *FindAndModify) Timeout(timeout *time.Duration) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.timeout = timeout - return fam -} - -// Authenticator sets the authenticator to use for this operation. -func (fam *FindAndModify) Authenticator(authenticator driver.Authenticator) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.authenticator = authenticator - return fam -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (fam *FindAndModify) RawData(rawData bool) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.rawData = &rawData - return fam -} - -// AdditionalCmd sets additional command fields to be attached. -func (fam *FindAndModify) AdditionalCmd(d bson.D) *FindAndModify { - if fam == nil { - fam = new(FindAndModify) - } - - fam.additionalCmd = d - return fam -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_collections.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_collections.go deleted file mode 100644 index 97c81317..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_collections.go +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// ListCollections performs a listCollections operation. -type ListCollections struct { - authenticator driver.Authenticator - filter bsoncore.Document - nameOnly *bool - authorizedCollections *bool - session *session.Client - clock *session.ClusterClock - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - readPreference *readpref.ReadPref - selector description.ServerSelector - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - result driver.CursorResponse - batchSize *int32 - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool -} - -// NewListCollections constructs and returns a new ListCollections. -func NewListCollections(filter bsoncore.Document) *ListCollections { - return &ListCollections{ - filter: filter, - } -} - -// Result returns the result of executing this operation. -func (lc *ListCollections) Result(opts driver.CursorOptions) (*driver.BatchCursor, error) { - opts.ServerAPI = lc.serverAPI - - return driver.NewBatchCursor(lc.result, lc.session, lc.clock, opts) -} - -func (lc *ListCollections) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { - curDoc, err := driver.ExtractCursorDocument(resp) - if err != nil { - return err - } - lc.result, err = driver.NewCursorResponse(curDoc, info) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (lc *ListCollections) Execute(ctx context.Context) error { - if lc.deployment == nil { - return errors.New("the ListCollections operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: lc.command, - ProcessResponseFn: lc.processResponse, - RetryMode: lc.retry, - MaxAdaptiveRetries: lc.maxAdaptiveRetries, - EnableOverloadRetargeting: lc.enableOverloadRetargeting, - Type: driver.Read, - Client: lc.session, - Clock: lc.clock, - CommandMonitor: lc.monitor, - Crypt: lc.crypt, - Database: lc.database, - Deployment: lc.deployment, - ReadPreference: lc.readPreference, - Selector: lc.selector, - Legacy: driver.LegacyListCollections, - ServerAPI: lc.serverAPI, - Timeout: lc.timeout, - Name: driverutil.ListCollectionsOp, - Authenticator: lc.authenticator, - }.Execute(ctx) -} - -func (lc *ListCollections) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendInt32Element(dst, "listCollections", 1) - if lc.filter != nil { - dst = bsoncore.AppendDocumentElement(dst, "filter", lc.filter) - } - if lc.nameOnly != nil { - dst = bsoncore.AppendBooleanElement(dst, "nameOnly", *lc.nameOnly) - } - if lc.authorizedCollections != nil { - dst = bsoncore.AppendBooleanElement(dst, "authorizedCollections", *lc.authorizedCollections) - } - - cursorDoc := bsoncore.NewDocumentBuilder() - if lc.batchSize != nil { - cursorDoc.AppendInt32("batchSize", *lc.batchSize) - } - dst = bsoncore.AppendDocumentElement(dst, "cursor", cursorDoc.Build()) - - // Set rawData for 8.2+ servers. - if lc.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *lc.rawData) - } - - return dst, nil -} - -// Filter determines what results are returned from listCollections. -func (lc *ListCollections) Filter(filter bsoncore.Document) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.filter = filter - return lc -} - -// NameOnly specifies whether to only return collection names. -func (lc *ListCollections) NameOnly(nameOnly bool) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.nameOnly = &nameOnly - return lc -} - -// AuthorizedCollections specifies whether to only return collections the user -// is authorized to use. -func (lc *ListCollections) AuthorizedCollections(authorizedCollections bool) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.authorizedCollections = &authorizedCollections - return lc -} - -// Session sets the session for this operation. -func (lc *ListCollections) Session(session *session.Client) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.session = session - return lc -} - -// ClusterClock sets the cluster clock for this operation. -func (lc *ListCollections) ClusterClock(clock *session.ClusterClock) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.clock = clock - return lc -} - -// CommandMonitor sets the monitor to use for APM events. -func (lc *ListCollections) CommandMonitor(monitor *event.CommandMonitor) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.monitor = monitor - return lc -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (lc *ListCollections) Crypt(crypt driver.Crypt) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.crypt = crypt - return lc -} - -// Database sets the database to run this operation against. -func (lc *ListCollections) Database(database string) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.database = database - return lc -} - -// Deployment sets the deployment to use for this operation. -func (lc *ListCollections) Deployment(deployment driver.Deployment) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.deployment = deployment - return lc -} - -// ReadPreference set the read preference used with this operation. -func (lc *ListCollections) ReadPreference(readPreference *readpref.ReadPref) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.readPreference = readPreference - return lc -} - -// ServerSelector sets the selector used to retrieve a server. -func (lc *ListCollections) ServerSelector(selector description.ServerSelector) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.selector = selector - return lc -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (lc *ListCollections) Retry(retry driver.RetryMode) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.retry = &retry - return lc -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (lc *ListCollections) MaxAdaptiveRetries(maxAdaptiveRetries uint) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.maxAdaptiveRetries = maxAdaptiveRetries - return lc -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (lc *ListCollections) EnableOverloadRetargeting(enabled bool) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.enableOverloadRetargeting = enabled - return lc -} - -// BatchSize specifies the number of documents to return in every batch. -func (lc *ListCollections) BatchSize(batchSize int32) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.batchSize = &batchSize - return lc -} - -// ServerAPI sets the server API version for this operation. -func (lc *ListCollections) ServerAPI(serverAPI *driver.ServerAPIOptions) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.serverAPI = serverAPI - return lc -} - -// Timeout sets the timeout for this operation. -func (lc *ListCollections) Timeout(timeout *time.Duration) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.timeout = timeout - return lc -} - -// Authenticator sets the authenticator to use for this operation. -func (lc *ListCollections) Authenticator(authenticator driver.Authenticator) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.authenticator = authenticator - return lc -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (lc *ListCollections) RawData(rawData bool) *ListCollections { - if lc == nil { - lc = new(ListCollections) - } - - lc.rawData = &rawData - return lc -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_databases.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_databases.go deleted file mode 100644 index f66d6068..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_databases.go +++ /dev/null @@ -1,362 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/bson" - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/mongo/readpref" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// ListDatabases performs a listDatabases operation. -type ListDatabases struct { - authenticator driver.Authenticator - filter bsoncore.Document - authorizedDatabases *bool - nameOnly *bool - session *session.Client - clock *session.ClusterClock - monitor *event.CommandMonitor - database string - deployment driver.Deployment - readPreference *readpref.ReadPref - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - selector description.ServerSelector - crypt driver.Crypt - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - - result ListDatabasesResult -} - -// ListDatabasesResult represents a listDatabases result returned by the server. -type ListDatabasesResult struct { - // An array of documents, one document for each database - Databases []databaseRecord - // The sum of the size of all the database files on disk in bytes. - TotalSize int64 -} - -type databaseRecord struct { - Name string - SizeOnDisk int64 `bson:"sizeOnDisk"` - Empty bool -} - -func buildListDatabasesResult(response bsoncore.Document) (ListDatabasesResult, error) { - elements, err := response.Elements() - if err != nil { - return ListDatabasesResult{}, err - } - ir := ListDatabasesResult{} - for _, element := range elements { - switch element.Key() { - case "totalSize": - var ok bool - ir.TotalSize, ok = element.Value().AsInt64OK() - if !ok { - return ir, fmt.Errorf("response field 'totalSize' is type int64, but received BSON type %s: %s", element.Value().Type, element.Value()) - } - case "databases": - arr, ok := element.Value().ArrayOK() - if !ok { - return ir, fmt.Errorf("response field 'databases' is type array, but received BSON type %s", element.Value().Type) - } - - var tmp bsoncore.Document - err := bson.Unmarshal(arr, &tmp) - if err != nil { - return ir, err - } - - records, err := tmp.Elements() - if err != nil { - return ir, err - } - - ir.Databases = make([]databaseRecord, len(records)) - for i, val := range records { - valueDoc, ok := val.Value().DocumentOK() - if !ok { - return ir, fmt.Errorf("'databases' element is type document, but received BSON type %s", val.Value().Type) - } - - elems, err := valueDoc.Elements() - if err != nil { - return ir, err - } - - for _, elem := range elems { - switch elem.Key() { - case "name": - ir.Databases[i].Name, ok = elem.Value().StringValueOK() - if !ok { - return ir, fmt.Errorf("response field 'name' is type string, but received BSON type %s", elem.Value().Type) - } - case "sizeOnDisk": - ir.Databases[i].SizeOnDisk, ok = elem.Value().AsInt64OK() - if !ok { - return ir, fmt.Errorf("response field 'sizeOnDisk' is type int64, but received BSON type %s", elem.Value().Type) - } - case "empty": - ir.Databases[i].Empty, ok = elem.Value().BooleanOK() - if !ok { - return ir, fmt.Errorf("response field 'empty' is type bool, but received BSON type %s", elem.Value().Type) - } - } - } - } - } - } - return ir, nil -} - -// NewListDatabases constructs and returns a new ListDatabases. -func NewListDatabases(filter bsoncore.Document) *ListDatabases { - return &ListDatabases{ - filter: filter, - } -} - -// Result returns the result of executing this operation. -func (ld *ListDatabases) Result() ListDatabasesResult { return ld.result } - -func (ld *ListDatabases) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - - ld.result, err = buildListDatabasesResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (ld *ListDatabases) Execute(ctx context.Context) error { - if ld.deployment == nil { - return errors.New("the ListDatabases operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: ld.command, - ProcessResponseFn: ld.processResponse, - - Client: ld.session, - Clock: ld.clock, - CommandMonitor: ld.monitor, - Database: ld.database, - Deployment: ld.deployment, - ReadPreference: ld.readPreference, - RetryMode: ld.retry, - MaxAdaptiveRetries: ld.maxAdaptiveRetries, - EnableOverloadRetargeting: ld.enableOverloadRetargeting, - Type: driver.Read, - Selector: ld.selector, - Crypt: ld.crypt, - ServerAPI: ld.serverAPI, - Timeout: ld.timeout, - Name: driverutil.ListDatabasesOp, - Authenticator: ld.authenticator, - }.Execute(ctx) -} - -func (ld *ListDatabases) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendInt32Element(dst, "listDatabases", 1) - if ld.filter != nil { - dst = bsoncore.AppendDocumentElement(dst, "filter", ld.filter) - } - if ld.nameOnly != nil { - dst = bsoncore.AppendBooleanElement(dst, "nameOnly", *ld.nameOnly) - } - if ld.authorizedDatabases != nil { - dst = bsoncore.AppendBooleanElement(dst, "authorizedDatabases", *ld.authorizedDatabases) - } - - return dst, nil -} - -// Filter determines what results are returned from listDatabases. -func (ld *ListDatabases) Filter(filter bsoncore.Document) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.filter = filter - return ld -} - -// NameOnly specifies whether to only return database names. -func (ld *ListDatabases) NameOnly(nameOnly bool) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.nameOnly = &nameOnly - return ld -} - -// AuthorizedDatabases specifies whether to only return databases which the user is authorized to use." -func (ld *ListDatabases) AuthorizedDatabases(authorizedDatabases bool) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.authorizedDatabases = &authorizedDatabases - return ld -} - -// Session sets the session for this operation. -func (ld *ListDatabases) Session(session *session.Client) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.session = session - return ld -} - -// ClusterClock sets the cluster clock for this operation. -func (ld *ListDatabases) ClusterClock(clock *session.ClusterClock) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.clock = clock - return ld -} - -// CommandMonitor sets the monitor to use for APM events. -func (ld *ListDatabases) CommandMonitor(monitor *event.CommandMonitor) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.monitor = monitor - return ld -} - -// Database sets the database to run this operation against. -func (ld *ListDatabases) Database(database string) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.database = database - return ld -} - -// Deployment sets the deployment to use for this operation. -func (ld *ListDatabases) Deployment(deployment driver.Deployment) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.deployment = deployment - return ld -} - -// ReadPreference set the read preference used with this operation. -func (ld *ListDatabases) ReadPreference(readPreference *readpref.ReadPref) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.readPreference = readPreference - return ld -} - -// ServerSelector sets the selector used to retrieve a server. -func (ld *ListDatabases) ServerSelector(selector description.ServerSelector) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.selector = selector - return ld -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (ld *ListDatabases) Retry(retry driver.RetryMode) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.retry = &retry - return ld -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (ld *ListDatabases) MaxAdaptiveRetries(maxAdaptiveRetries uint) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.maxAdaptiveRetries = maxAdaptiveRetries - return ld -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (ld *ListDatabases) EnableOverloadRetargeting(enabled bool) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.enableOverloadRetargeting = enabled - return ld -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (ld *ListDatabases) Crypt(crypt driver.Crypt) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.crypt = crypt - return ld -} - -// ServerAPI sets the server API version for this operation. -func (ld *ListDatabases) ServerAPI(serverAPI *driver.ServerAPIOptions) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.serverAPI = serverAPI - return ld -} - -// Timeout sets the timeout for this operation. -func (ld *ListDatabases) Timeout(timeout *time.Duration) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.timeout = timeout - return ld -} - -// Authenticator sets the authenticator to use for this operation. -func (ld *ListDatabases) Authenticator(authenticator driver.Authenticator) *ListDatabases { - if ld == nil { - ld = new(ListDatabases) - } - - ld.authenticator = authenticator - return ld -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_indexes.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_indexes.go deleted file mode 100644 index 1eea4e64..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/list_indexes.go +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2019-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/internal/driverutil" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// ListIndexes performs a listIndexes operation. -type ListIndexes struct { - authenticator driver.Authenticator - batchSize *int32 - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - database string - deployment driver.Deployment - selector description.ServerSelector - retry *driver.RetryMode - maxAdaptiveRetries uint - enableOverloadRetargeting bool - crypt driver.Crypt - serverAPI *driver.ServerAPIOptions - timeout *time.Duration - rawData *bool - - result driver.CursorResponse -} - -// NewListIndexes constructs and returns a new ListIndexes. -func NewListIndexes() *ListIndexes { - return &ListIndexes{} -} - -// Result returns the result of executing this operation. -func (li *ListIndexes) Result(opts driver.CursorOptions) (*driver.BatchCursor, error) { - clientSession := li.session - - clock := li.clock - opts.ServerAPI = li.serverAPI - return driver.NewBatchCursor(li.result, clientSession, clock, opts) -} - -func (li *ListIndexes) processResponse(_ context.Context, resp bsoncore.Document, info driver.ResponseInfo) error { - curDoc, err := driver.ExtractCursorDocument(resp) - if err != nil { - return err - } - li.result, err = driver.NewCursorResponse(curDoc, info) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (li *ListIndexes) Execute(ctx context.Context) error { - if li.deployment == nil { - return errors.New("the ListIndexes operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: li.command, - ProcessResponseFn: li.processResponse, - - Client: li.session, - Clock: li.clock, - CommandMonitor: li.monitor, - Database: li.database, - Deployment: li.deployment, - Selector: li.selector, - Crypt: li.crypt, - Legacy: driver.LegacyListIndexes, - RetryMode: li.retry, - MaxAdaptiveRetries: li.maxAdaptiveRetries, - EnableOverloadRetargeting: li.enableOverloadRetargeting, - Type: driver.Read, - ServerAPI: li.serverAPI, - Timeout: li.timeout, - Name: driverutil.ListIndexesOp, - Authenticator: li.authenticator, - }.Execute(ctx) -} - -func (li *ListIndexes) command(dst []byte, desc description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "listIndexes", li.collection) - cursorIdx, cursorDoc := bsoncore.AppendDocumentStart(nil) - - if li.batchSize != nil { - cursorDoc = bsoncore.AppendInt32Element(cursorDoc, "batchSize", *li.batchSize) - } - cursorDoc, _ = bsoncore.AppendDocumentEnd(cursorDoc, cursorIdx) - dst = bsoncore.AppendDocumentElement(dst, "cursor", cursorDoc) - // Set rawData for 8.2+ servers. - if li.rawData != nil && desc.WireVersion != nil && driverutil.VersionRangeIncludes(*desc.WireVersion, 27) { - dst = bsoncore.AppendBooleanElement(dst, "rawData", *li.rawData) - } - - return dst, nil -} - -// BatchSize specifies the number of documents to return in every batch. -func (li *ListIndexes) BatchSize(batchSize int32) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.batchSize = &batchSize - return li -} - -// Session sets the session for this operation. -func (li *ListIndexes) Session(session *session.Client) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.session = session - return li -} - -// ClusterClock sets the cluster clock for this operation. -func (li *ListIndexes) ClusterClock(clock *session.ClusterClock) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.clock = clock - return li -} - -// Collection sets the collection that this command will run against. -func (li *ListIndexes) Collection(collection string) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.collection = collection - return li -} - -// CommandMonitor sets the monitor to use for APM events. -func (li *ListIndexes) CommandMonitor(monitor *event.CommandMonitor) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.monitor = monitor - return li -} - -// Database sets the database to run this operation against. -func (li *ListIndexes) Database(database string) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.database = database - return li -} - -// Deployment sets the deployment to use for this operation. -func (li *ListIndexes) Deployment(deployment driver.Deployment) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.deployment = deployment - return li -} - -// ServerSelector sets the selector used to retrieve a server. -func (li *ListIndexes) ServerSelector(selector description.ServerSelector) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.selector = selector - return li -} - -// Retry enables retryable mode for this operation. Retries are handled automatically in driver.Operation.Execute based -// on how the operation is set. -func (li *ListIndexes) Retry(retry driver.RetryMode) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.retry = &retry - return li -} - -// MaxAdaptiveRetries specifies the maximum number of times the driver should retry operations -// that fail with a server side overload error. -func (li *ListIndexes) MaxAdaptiveRetries(maxAdaptiveRetries uint) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.maxAdaptiveRetries = maxAdaptiveRetries - return li -} - -// EnableOverloadRetargeting specifies whether the driver adds the previously failed server's address -// to the list of deprioritized server addresses -func (li *ListIndexes) EnableOverloadRetargeting(enabled bool) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.enableOverloadRetargeting = enabled - return li -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (li *ListIndexes) Crypt(crypt driver.Crypt) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.crypt = crypt - return li -} - -// ServerAPI sets the server API version for this operation. -func (li *ListIndexes) ServerAPI(serverAPI *driver.ServerAPIOptions) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.serverAPI = serverAPI - return li -} - -// Timeout sets the timeout for this operation. -func (li *ListIndexes) Timeout(timeout *time.Duration) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.timeout = timeout - return li -} - -// Authenticator sets the authenticator to use for this operation. -func (li *ListIndexes) Authenticator(authenticator driver.Authenticator) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.authenticator = authenticator - return li -} - -// RawData sets the rawData to access timeseries data in the compressed format. -func (li *ListIndexes) RawData(rawData bool) *ListIndexes { - if li == nil { - li = new(ListIndexes) - } - - li.rawData = &rawData - return li -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/update_search_index.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/update_search_index.go deleted file mode 100644 index b215a9ba..00000000 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation/update_search_index.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (C) MongoDB, Inc. 2023-present. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. You may obtain -// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 - -package operation - -import ( - "context" - "errors" - "fmt" - "time" - - "go.mongodb.org/mongo-driver/v2/event" - "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" -) - -// UpdateSearchIndex performs a updateSearchIndex operation. -type UpdateSearchIndex struct { - authenticator driver.Authenticator - index string - definition bsoncore.Document - session *session.Client - clock *session.ClusterClock - collection string - monitor *event.CommandMonitor - crypt driver.Crypt - database string - deployment driver.Deployment - selector description.ServerSelector - result UpdateSearchIndexResult - serverAPI *driver.ServerAPIOptions - timeout *time.Duration -} - -// UpdateSearchIndexResult represents a single index in the updateSearchIndexResult result. -type UpdateSearchIndexResult struct { - Ok int32 -} - -func buildUpdateSearchIndexResult(response bsoncore.Document) (UpdateSearchIndexResult, error) { - elements, err := response.Elements() - if err != nil { - return UpdateSearchIndexResult{}, err - } - usir := UpdateSearchIndexResult{} - for _, element := range elements { - if element.Key() == "ok" { - var ok bool - usir.Ok, ok = element.Value().AsInt32OK() - if !ok { - return usir, fmt.Errorf("response field 'ok' is type int32, but received BSON type %s", element.Value().Type) - } - } - } - return usir, nil -} - -// NewUpdateSearchIndex constructs and returns a new UpdateSearchIndex. -func NewUpdateSearchIndex(index string, definition bsoncore.Document) *UpdateSearchIndex { - return &UpdateSearchIndex{ - index: index, - definition: definition, - } -} - -// Result returns the result of executing this operation. -func (usi *UpdateSearchIndex) Result() UpdateSearchIndexResult { return usi.result } - -func (usi *UpdateSearchIndex) processResponse(_ context.Context, resp bsoncore.Document, _ driver.ResponseInfo) error { - var err error - usi.result, err = buildUpdateSearchIndexResult(resp) - return err -} - -// Execute runs this operations and returns an error if the operation did not execute successfully. -func (usi *UpdateSearchIndex) Execute(ctx context.Context) error { - if usi.deployment == nil { - return errors.New("the UpdateSearchIndex operation must have a Deployment set before Execute can be called") - } - - return driver.Operation{ - CommandFn: usi.command, - ProcessResponseFn: usi.processResponse, - Client: usi.session, - Clock: usi.clock, - CommandMonitor: usi.monitor, - Crypt: usi.crypt, - Database: usi.database, - Deployment: usi.deployment, - Selector: usi.selector, - ServerAPI: usi.serverAPI, - Timeout: usi.timeout, - Authenticator: usi.authenticator, - }.Execute(ctx) -} - -func (usi *UpdateSearchIndex) command(dst []byte, _ description.SelectedServer) ([]byte, error) { - dst = bsoncore.AppendStringElement(dst, "updateSearchIndex", usi.collection) - dst = bsoncore.AppendStringElement(dst, "name", usi.index) - dst = bsoncore.AppendDocumentElement(dst, "definition", usi.definition) - return dst, nil -} - -// Index specifies the index of the document being updated. -func (usi *UpdateSearchIndex) Index(name string) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.index = name - return usi -} - -// Definition specifies the definition for the document being created. -func (usi *UpdateSearchIndex) Definition(definition bsoncore.Document) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.definition = definition - return usi -} - -// Session sets the session for this operation. -func (usi *UpdateSearchIndex) Session(session *session.Client) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.session = session - return usi -} - -// ClusterClock sets the cluster clock for this operation. -func (usi *UpdateSearchIndex) ClusterClock(clock *session.ClusterClock) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.clock = clock - return usi -} - -// Collection sets the collection that this command will run against. -func (usi *UpdateSearchIndex) Collection(collection string) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.collection = collection - return usi -} - -// CommandMonitor sets the monitor to use for APM events. -func (usi *UpdateSearchIndex) CommandMonitor(monitor *event.CommandMonitor) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.monitor = monitor - return usi -} - -// Crypt sets the Crypt object to use for automatic encryption and decryption. -func (usi *UpdateSearchIndex) Crypt(crypt driver.Crypt) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.crypt = crypt - return usi -} - -// Database sets the database to run this operation against. -func (usi *UpdateSearchIndex) Database(database string) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.database = database - return usi -} - -// Deployment sets the deployment to use for this operation. -func (usi *UpdateSearchIndex) Deployment(deployment driver.Deployment) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.deployment = deployment - return usi -} - -// ServerSelector sets the selector used to retrieve a server. -func (usi *UpdateSearchIndex) ServerSelector(selector description.ServerSelector) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.selector = selector - return usi -} - -// ServerAPI sets the server API version for this operation. -func (usi *UpdateSearchIndex) ServerAPI(serverAPI *driver.ServerAPIOptions) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.serverAPI = serverAPI - return usi -} - -// Timeout sets the timeout for this operation. -func (usi *UpdateSearchIndex) Timeout(timeout *time.Duration) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.timeout = timeout - return usi -} - -// Authenticator sets the authenticator to use for this operation. -func (usi *UpdateSearchIndex) Authenticator(authenticator driver.Authenticator) *UpdateSearchIndex { - if usi == nil { - usi = new(UpdateSearchIndex) - } - - usi.authenticator = authenticator - return usi -} diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection.go index 293985f1..46a36b41 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection.go @@ -68,13 +68,29 @@ func wrapConnectionError(connErr ConnectionError) error { // tls.RecordHeaderError is a non-I/O TLS error per the CMAP spec: the peer // sent bytes that don't form a valid TLS record. This cannot indicate // server overload. - // - // TODO(GODRIVER-3956): Make the TLS record header error check and test work - // on Windows. var tlsRecordHeaderErr tls.RecordHeaderError if errors.As(connErr.Wrapped, &tlsRecordHeaderErr) { return connErr } + // An alert sent by the peer during the TLS handshake does not get a + // backpressure labels. Per the CMAP spec, drivers MUST NOT label non-I/O TLS + // errors as server overload conditions. A remote alert is non-I/O as the + // handshake was answered and refused by the peer, nothing failed to send or + // receive. + var opErr *net.OpError + if errors.As(connErr.Wrapped, &opErr) && opErr.Op == "remote error" { + return connErr + } + // An OCSP failure is a non-I/O TLS error per the CMAP spec: revocation + // checking is certificate validation, so a retry against the same server + // would fail the same way. ocsp.Verify soft-fails when no response can be + // obtained, an unreachable responder leaves the status unknown rather than + // erroring so every error that reaches here is a validation result, which + // cannot indicate server overload. + var ocspErr *ocsp.Error + if errors.As(connErr.Wrapped, &ocspErr) { + return connErr + } return driver.Error{ Labels: []string{driver.ErrSystemOverloadedError, driver.ErrRetryableError, driver.NetworkError}, Wrapped: connErr, @@ -174,6 +190,7 @@ func configureTLS(ctx context.Context, addr address.Address, config *tls.Config, ocspOpts *ocsp.VerifyOptions, + disableCertificateRevocationCheck bool, ) (net.Conn, error) { // Ensure config.ServerName is always set for SNI. if config.ServerName == "" { @@ -192,8 +209,9 @@ func configureTLS(ctx context.Context, return nil, err } - // Only do OCSP verification if TLS verification is requested. - if !config.InsecureSkipVerify { + // Only do OCSP verification if TLS verification is requested and certificate revocation + // checking has not been disabled. + if !config.InsecureSkipVerify && !disableCertificateRevocationCheck { if ocspErr := ocsp.Verify(ctx, client.ConnectionState(), ocspOpts); ocspErr != nil { return nil, ocspErr } @@ -261,7 +279,8 @@ func (c *connection) connect(ctx context.Context) (err error) { DisableEndpointChecking: c.config.disableOCSPEndpointCheck, HTTPClient: c.config.httpClient, } - tlsNc, err := configureTLS(ctx, c.config.tlsConnectionSource, c.nc, c.addr, tlsConfig, ocspOpts) + tlsNc, err := configureTLS(ctx, c.config.tlsConnectionSource, c.nc, c.addr, tlsConfig, ocspOpts, + c.config.disableCertificateRevocationCheck) if err != nil { connErr := ConnectionError{Wrapped: err, init: true, message: fmt.Sprintf("failed to configure TLS for %s", c.addr)} return wrapConnectionError(connErr) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection_options.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection_options.go index 6a53da7b..454c7bcd 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection_options.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/connection_options.go @@ -48,20 +48,21 @@ type Handshaker = driver.Handshaker type generationNumberFn func(serviceID *bson.ObjectID) uint64 type connectionConfig struct { - dialer Dialer - handshaker Handshaker - idleTimeout time.Duration - cmdMonitor *event.CommandMonitor - tlsConfig *tls.Config - httpClient *http.Client - compressors []string - zlibLevel *int - zstdLevel *int - ocspCache ocsp.Cache - disableOCSPEndpointCheck bool - tlsConnectionSource tlsConnectionSource - loadBalanced bool - getGenerationFn generationNumberFn + dialer Dialer + handshaker Handshaker + idleTimeout time.Duration + cmdMonitor *event.CommandMonitor + tlsConfig *tls.Config + httpClient *http.Client + compressors []string + zlibLevel *int + zstdLevel *int + ocspCache ocsp.Cache + disableCertificateRevocationCheck bool + disableOCSPEndpointCheck bool + tlsConnectionSource tlsConnectionSource + loadBalanced bool + getGenerationFn generationNumberFn } func newConnectionConfig(opts ...ConnectionOption) *connectionConfig { @@ -167,6 +168,15 @@ func WithOCSPCache(fn func(ocsp.Cache) ocsp.Cache) ConnectionOption { } } +// WithDisableCertificateRevocationCheck specifies whether or not the driver should check the revocation status of +// certificates presented by the server. If set to true, the driver will not check revocation status by any +// mechanism: it will neither validate stapled OCSP responses nor contact OCSP responders. +func WithDisableCertificateRevocationCheck(fn func(bool) bool) ConnectionOption { + return func(c *connectionConfig) { + c.disableCertificateRevocationCheck = fn(c.disableCertificateRevocationCheck) + } +} + // WithDisableOCSPEndpointCheck specifies whether or the driver should perform non-stapled OCSP verification. If set // to true, the driver will only check stapled responses and will continue the connection without reaching out to // OCSP responders. diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/fsm.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/fsm.go index 7e96b3c3..753ef290 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/fsm.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/fsm.go @@ -20,7 +20,7 @@ import ( var ( // MinSupportedMongoDBVersion is the version string for the lowest MongoDB version supported by the driver. - MinSupportedMongoDBVersion = "4.2" + MinSupportedMongoDBVersion = "4.4" // SupportedWireVersions is the range of wire versions supported by the driver. SupportedWireVersions = driverutil.NewVersionRange(driverutil.MinWireVersion, driverutil.MaxWireVersion) diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/rtt_monitor.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/rtt_monitor.go index 042ca04b..7bfa87a9 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/rtt_monitor.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/rtt_monitor.go @@ -13,9 +13,9 @@ import ( "sync" "time" + "go.mongodb.org/mongo-driver/v2/internal/handshake/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/mnet" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" ) const ( @@ -223,16 +223,16 @@ func (r *rttMonitor) min() time.Duration { return 0 } - var min time.Duration + var minRTT time.Duration for e := r.movingMin.Front(); e != nil; e = e.Next() { val := e.Value.(time.Duration) - if min == 0 || val < min { - min = val + if minRTT == 0 || val < minRTT { + minRTT = val } } - return min + return minRTT } // stddev will return the current moving stddev. @@ -294,5 +294,6 @@ func (r *rttMonitor) Stats() string { "network round-trip time stats: moving avg: %v, min: %v, moving stddev: %v", r.averageRTT, r.minRTT, - r.stddevRTT) + r.stddevRTT, + ) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/server.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/server.go index ff69b60d..8c72cfdf 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/server.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/server.go @@ -18,19 +18,16 @@ import ( "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/event" "go.mongodb.org/mongo-driver/v2/internal/driverutil" + "go.mongodb.org/mongo-driver/v2/internal/handshake/operation" "go.mongodb.org/mongo-driver/v2/internal/logger" "go.mongodb.org/mongo-driver/v2/mongo/address" "go.mongodb.org/mongo-driver/v2/x/mongo/driver" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/connstring" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/mnet" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" ) -const ( - minHeartbeatInterval = 500 * time.Millisecond - wireVersion42 = 8 // Wire version for MongoDB 4.2 -) +const minHeartbeatInterval = 500 * time.Millisecond // Server state constants. const ( @@ -521,8 +518,8 @@ func (s *Server) ProcessError(err error, describer mnet.Describer) driver.Proces s.RequestImmediateCheck() res := driver.ServerMarkedUnknown - // If the node is shutting down or is older than 4.2, we synchronously clear the pool - if cerr.NodeIsShuttingDown() || wireVersion == nil || wireVersion.Max < wireVersion42 { + // If the node is shutting down or unknown, we synchronously clear the pool. + if cerr.NodeIsShuttingDown() || wireVersion == nil { res = driver.ConnectionPoolCleared s.pool.clear(err, serviceID) } @@ -540,8 +537,8 @@ func (s *Server) ProcessError(err error, describer mnet.Describer) driver.Proces s.RequestImmediateCheck() res := driver.ServerMarkedUnknown - // If the node is shutting down or is older than 4.2, we synchronously clear the pool - if wcerr.NodeIsShuttingDown() || wireVersion == nil || wireVersion.Max < wireVersion42 { + // If the node is shutting down or unknown, we synchronously clear the pool. + if wcerr.NodeIsShuttingDown() || wireVersion == nil { res = driver.ConnectionPoolCleared s.pool.clear(err, serviceID) } diff --git a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/topology_options.go b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/topology_options.go index d65fdf56..fbf4c7dd 100644 --- a/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/topology_options.go +++ b/vendor/go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology/topology_options.go @@ -15,6 +15,8 @@ import ( "time" "go.mongodb.org/mongo-driver/v2/event" + "go.mongodb.org/mongo-driver/v2/internal/credutil" + "go.mongodb.org/mongo-driver/v2/internal/handshake/operation" "go.mongodb.org/mongo-driver/v2/internal/logger" "go.mongodb.org/mongo-driver/v2/internal/optionsutil" "go.mongodb.org/mongo-driver/v2/mongo/options" @@ -22,7 +24,6 @@ import ( "go.mongodb.org/mongo-driver/v2/x/mongo/driver/auth" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/description" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/ocsp" - "go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation" "go.mongodb.org/mongo-driver/v2/x/mongo/driver/session" ) @@ -94,36 +95,44 @@ func convertOIDCArgs(args *driver.OIDCArgs) *options.OIDCArgs { // ConvertCreds takes an [options.Credential] and returns the equivalent // [driver.Cred]. -func ConvertCreds(cred *options.Credential) *driver.Cred { - if cred == nil { +func ConvertCreds(credOpts *options.Credential) *driver.Cred { + if credOpts == nil { return nil } var oidcMachineCallback auth.OIDCCallback - if cred.OIDCMachineCallback != nil { + if credOpts.OIDCMachineCallback != nil { oidcMachineCallback = func(ctx context.Context, args *driver.OIDCArgs) (*driver.OIDCCredential, error) { - cred, err := cred.OIDCMachineCallback(ctx, convertOIDCArgs(args)) - return (*driver.OIDCCredential)(cred), err + credOpts, err := credOpts.OIDCMachineCallback(ctx, convertOIDCArgs(args)) + return (*driver.OIDCCredential)(credOpts), err } } var oidcHumanCallback auth.OIDCCallback - if cred.OIDCHumanCallback != nil { + if credOpts.OIDCHumanCallback != nil { oidcHumanCallback = func(ctx context.Context, args *driver.OIDCArgs) (*driver.OIDCCredential, error) { - cred, err := cred.OIDCHumanCallback(ctx, convertOIDCArgs(args)) + cred, err := credOpts.OIDCHumanCallback(ctx, convertOIDCArgs(args)) return (*driver.OIDCCredential)(cred), err } } - return &auth.Cred{ - Source: cred.AuthSource, - Username: cred.Username, - Password: cred.Password, - PasswordSet: cred.PasswordSet, - Props: cred.AuthMechanismProperties, + cred := &auth.Cred{ + Source: credOpts.AuthSource, + Username: credOpts.Username, + Password: credOpts.Password, + PasswordSet: credOpts.PasswordSet, + Props: credOpts.AuthMechanismProperties, OIDCMachineCallback: oidcMachineCallback, OIDCHumanCallback: oidcHumanCallback, } + + if credOpts.AWSCredentialsProvider != nil { + cred.AWSCredentialsProvider = credutil.AWSOptionsProvider{ + Provider: credOpts.AWSCredentialsProvider, + } + } + + return cred } // NewConfig will translate data from client options into a topology config for @@ -142,7 +151,8 @@ func NewConfig(opts *options.ClientOptions, clock *session.ClusterClock) (*Confi return nil, fmt.Errorf("error creating authenticator: %w", err) } } - return NewAuthenticatorConfig(authenticator, + return NewAuthenticatorConfig( + authenticator, WithAuthConfigClock(clock), WithAuthConfigClientOptions(opts), ) @@ -457,6 +467,14 @@ func NewAuthenticatorConfig(authenticator driver.Authenticator, clientOpts ...Au ) } + // Disable certificate revocation checking entirely. + if opts.DisableCertificateRevocationCheck != nil { + connOpts = append( + connOpts, + WithDisableCertificateRevocationCheck(func(bool) bool { return *opts.DisableCertificateRevocationCheck }), + ) + } + // LoadBalanced if opts.LoadBalanced != nil { cfgp.LoadBalanced = *opts.LoadBalanced @@ -487,7 +505,8 @@ func NewAuthenticatorConfig(authenticator driver.Authenticator, clientOpts ...Au serverOpts = append( serverOpts, WithClock(func(*session.ClusterClock) *session.ClusterClock { return clock }), - WithConnectionOptions(func(...ConnectionOption) []ConnectionOption { return connOpts })) + WithConnectionOptions(func(...ConnectionOption) []ConnectionOption { return connOpts }), + ) cfgp.ServerOpts = serverOpts diff --git a/vendor/gopkg.in/yaml.v3/LICENSE b/vendor/go.yaml.in/yaml/v3/LICENSE similarity index 100% rename from vendor/gopkg.in/yaml.v3/LICENSE rename to vendor/go.yaml.in/yaml/v3/LICENSE diff --git a/vendor/gopkg.in/yaml.v3/NOTICE b/vendor/go.yaml.in/yaml/v3/NOTICE similarity index 100% rename from vendor/gopkg.in/yaml.v3/NOTICE rename to vendor/go.yaml.in/yaml/v3/NOTICE diff --git a/vendor/go.yaml.in/yaml/v3/README.md b/vendor/go.yaml.in/yaml/v3/README.md new file mode 100644 index 00000000..15a85a63 --- /dev/null +++ b/vendor/go.yaml.in/yaml/v3/README.md @@ -0,0 +1,171 @@ +go.yaml.in/yaml +=============== + +YAML Support for the Go Language + + +## Introduction + +The `yaml` package enables [Go](https://go.dev/) programs to comfortably encode +and decode [YAML](https://yaml.org/) values. + +It was originally developed within [Canonical](https://www.canonical.com) as +part of the [juju](https://juju.ubuntu.com) project, and is based on a pure Go +port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) C library to +parse and generate YAML data quickly and reliably. + + +## Project Status + +This project started as a fork of the extremely popular [go-yaml]( +https://github.com/go-yaml/yaml/) +project, and is being maintained by the official [YAML organization]( +https://github.com/yaml/). + +The YAML team took over ongoing maintenance and development of the project after +discussion with go-yaml's author, @niemeyer, following his decision to +[label the project repository as "unmaintained"]( +https://github.com/go-yaml/yaml/blob/944c86a7d2/README.md) in April 2025. + +We have put together a team of dedicated maintainers including representatives +of go-yaml's most important downstream projects. + +We will strive to earn the trust of the various go-yaml forks to switch back to +this repository as their upstream. + +Please [contact us](https://cloud-native.slack.com/archives/C08PPAT8PS7) if you +would like to contribute or be involved. + + +## Compatibility + +The `yaml` package supports most of YAML 1.2, but preserves some behavior from +1.1 for backwards compatibility. + +Specifically, v3 of the `yaml` package: + +* Supports YAML 1.1 bools (`yes`/`no`, `on`/`off`) as long as they are being + decoded into a typed bool value. + Otherwise they behave as a string. + Booleans in YAML 1.2 are `true`/`false` only. +* Supports octals encoded and decoded as `0777` per YAML 1.1, rather than + `0o777` as specified in YAML 1.2, because most parsers still use the old + format. + Octals in the `0o777` format are supported though, so new files work. +* Does not support base-60 floats. + These are gone from YAML 1.2, and were actually never supported by this + package as it's clearly a poor choice. + + +## Installation and Usage + +The import path for the package is *go.yaml.in/yaml/v3*. + +To install it, run: + +```bash +go get go.yaml.in/yaml/v3 +``` + + +## API Documentation + +See: + + +## API Stability + +The package API for yaml v3 will remain stable as described in [gopkg.in]( +https://gopkg.in). + + +## Example + +```go +package main + +import ( + "fmt" + "log" + + "go.yaml.in/yaml/v3" +) + +var data = ` +a: Easy! +b: + c: 2 + d: [3, 4] +` + +// Note: struct fields must be public in order for unmarshal to +// correctly populate the data. +type T struct { + A string + B struct { + RenamedC int `yaml:"c"` + D []int `yaml:",flow"` + } +} + +func main() { + t := T{} + + err := yaml.Unmarshal([]byte(data), &t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t:\n%v\n\n", t) + + d, err := yaml.Marshal(&t) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- t dump:\n%s\n\n", string(d)) + + m := make(map[interface{}]interface{}) + + err = yaml.Unmarshal([]byte(data), &m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m:\n%v\n\n", m) + + d, err = yaml.Marshal(&m) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Printf("--- m dump:\n%s\n\n", string(d)) +} +``` + +This example will generate the following output: + +``` +--- t: +{Easy! {2 [3 4]}} + +--- t dump: +a: Easy! +b: + c: 2 + d: [3, 4] + + +--- m: +map[a:Easy! b:map[c:2 d:[3 4]]] + +--- m dump: +a: Easy! +b: + c: 2 + d: + - 3 + - 4 +``` + + +## License + +The yaml package is licensed under the MIT and Apache License 2.0 licenses. +Please see the LICENSE file for details. diff --git a/vendor/gopkg.in/yaml.v3/apic.go b/vendor/go.yaml.in/yaml/v3/apic.go similarity index 99% rename from vendor/gopkg.in/yaml.v3/apic.go rename to vendor/go.yaml.in/yaml/v3/apic.go index ae7d049f..05fd305d 100644 --- a/vendor/gopkg.in/yaml.v3/apic.go +++ b/vendor/go.yaml.in/yaml/v3/apic.go @@ -1,17 +1,17 @@ -// +// // Copyright (c) 2011-2019 Canonical Ltd // Copyright (c) 2006-2010 Kirill Simonov -// +// // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to do // so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/vendor/gopkg.in/yaml.v3/decode.go b/vendor/go.yaml.in/yaml/v3/decode.go similarity index 97% rename from vendor/gopkg.in/yaml.v3/decode.go rename to vendor/go.yaml.in/yaml/v3/decode.go index 0173b698..02e2b17b 100644 --- a/vendor/gopkg.in/yaml.v3/decode.go +++ b/vendor/go.yaml.in/yaml/v3/decode.go @@ -832,10 +832,10 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { if d.unmarshal(n.Content[i], k) { if mergedFields != nil { ki := k.Interface() - if mergedFields[ki] { + if d.getPossiblyUnhashableKey(mergedFields, ki) { continue } - mergedFields[ki] = true + d.setPossiblyUnhashableKey(mergedFields, ki, true) } kkind := k.Kind() if kkind == reflect.Interface { @@ -956,6 +956,24 @@ func failWantMap() { failf("map merge requires map or sequence of maps as the value") } +func (d *decoder) setPossiblyUnhashableKey(m map[interface{}]bool, key interface{}, value bool) { + defer func() { + if err := recover(); err != nil { + failf("%v", err) + } + }() + m[key] = value +} + +func (d *decoder) getPossiblyUnhashableKey(m map[interface{}]bool, key interface{}) bool { + defer func() { + if err := recover(); err != nil { + failf("%v", err) + } + }() + return m[key] +} + func (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) { mergedFields := d.mergedFields if mergedFields == nil { @@ -963,7 +981,7 @@ func (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) { for i := 0; i < len(parent.Content); i += 2 { k := reflect.New(ifaceType).Elem() if d.unmarshal(parent.Content[i], k) { - d.mergedFields[k.Interface()] = true + d.setPossiblyUnhashableKey(d.mergedFields, k.Interface(), true) } } } diff --git a/vendor/gopkg.in/yaml.v3/emitterc.go b/vendor/go.yaml.in/yaml/v3/emitterc.go similarity index 95% rename from vendor/gopkg.in/yaml.v3/emitterc.go rename to vendor/go.yaml.in/yaml/v3/emitterc.go index 0f47c9ca..ab4e03ba 100644 --- a/vendor/gopkg.in/yaml.v3/emitterc.go +++ b/vendor/go.yaml.in/yaml/v3/emitterc.go @@ -162,10 +162,9 @@ func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { // Check if we need to accumulate more events before emitting. // // We accumulate extra -// - 1 event for DOCUMENT-START -// - 2 events for SEQUENCE-START -// - 3 events for MAPPING-START -// +// - 1 event for DOCUMENT-START +// - 2 events for SEQUENCE-START +// - 3 events for MAPPING-START func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { if emitter.events_head == len(emitter.events) { return true @@ -226,7 +225,7 @@ func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_ } // Increase the indentation level. -func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { +func yaml_emitter_increase_indent_compact(emitter *yaml_emitter_t, flow, indentless bool, compact_seq bool) bool { emitter.indents = append(emitter.indents, emitter.indent) if emitter.indent < 0 { if flow { @@ -241,7 +240,14 @@ func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool emitter.indent += 2 } else { // Everything else aligns to the chosen indentation. - emitter.indent = emitter.best_indent*((emitter.indent+emitter.best_indent)/emitter.best_indent) + emitter.indent = emitter.best_indent * ((emitter.indent + emitter.best_indent) / emitter.best_indent) + if compact_seq { + // The value compact_seq passed in is almost always set to `false` when this function is called, + // except when we are dealing with sequence nodes. So this gets triggered to subtract 2 only when we + // are increasing the indent to account for sequence nodes, which will be correct because we need to + // subtract 2 to account for the - at the beginning of the sequence node. + emitter.indent = emitter.indent - 2 + } } } return true @@ -478,6 +484,18 @@ func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") } +// yaml_emitter_increase_indent preserves the original signature and delegates to +// yaml_emitter_increase_indent_compact without compact-sequence indentation +func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { + return yaml_emitter_increase_indent_compact(emitter, flow, indentless, false) +} + +// yaml_emitter_process_line_comment preserves the original signature and delegates to +// yaml_emitter_process_line_comment_linebreak passing false for linebreak +func yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool { + return yaml_emitter_process_line_comment_linebreak(emitter, false) +} + // Expect the root node. func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) @@ -728,7 +746,16 @@ func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_e // Expect a block item node. func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { if first { - if !yaml_emitter_increase_indent(emitter, false, false) { + // emitter.mapping context tells us if we are currently in a mapping context. + // emiiter.column tells us which column we are in in the yaml output. 0 is the first char of the column. + // emitter.indentation tells us if the last character was an indentation character. + // emitter.compact_sequence_indent tells us if '- ' is considered part of the indentation for sequence elements. + // So, `seq` means that we are in a mapping context, and we are either at the first char of the column or + // the last character was not an indentation character, and we consider '- ' part of the indentation + // for sequence elements. + seq := emitter.mapping_context && (emitter.column == 0 || !emitter.indention) && + emitter.compact_sequence_indent + if !yaml_emitter_increase_indent_compact(emitter, false, false, seq) { return false } } @@ -1144,8 +1171,15 @@ func yaml_emitter_process_head_comment(emitter *yaml_emitter_t) bool { } // Write an line comment. -func yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool { +func yaml_emitter_process_line_comment_linebreak(emitter *yaml_emitter_t, linebreak bool) bool { if len(emitter.line_comment) == 0 { + // The next 3 lines are needed to resolve an issue with leading newlines + // See https://github.com/go-yaml/yaml/issues/755 + // When linebreak is set to true, put_break will be called and will add + // the needed newline. + if linebreak && !put_break(emitter) { + return false + } return true } if !emitter.whitespace { @@ -1894,7 +1928,7 @@ func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bo if !yaml_emitter_write_block_scalar_hints(emitter, value) { return false } - if !yaml_emitter_process_line_comment(emitter) { + if !yaml_emitter_process_line_comment_linebreak(emitter, true) { return false } //emitter.indention = true @@ -1931,7 +1965,7 @@ func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) boo if !yaml_emitter_write_block_scalar_hints(emitter, value) { return false } - if !yaml_emitter_process_line_comment(emitter) { + if !yaml_emitter_process_line_comment_linebreak(emitter, true) { return false } diff --git a/vendor/gopkg.in/yaml.v3/encode.go b/vendor/go.yaml.in/yaml/v3/encode.go similarity index 100% rename from vendor/gopkg.in/yaml.v3/encode.go rename to vendor/go.yaml.in/yaml/v3/encode.go diff --git a/vendor/gopkg.in/yaml.v3/parserc.go b/vendor/go.yaml.in/yaml/v3/parserc.go similarity index 90% rename from vendor/gopkg.in/yaml.v3/parserc.go rename to vendor/go.yaml.in/yaml/v3/parserc.go index 268558a0..f35829db 100644 --- a/vendor/gopkg.in/yaml.v3/parserc.go +++ b/vendor/go.yaml.in/yaml/v3/parserc.go @@ -226,8 +226,9 @@ func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool } // Parse the production: -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// ************ +// +// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END +// ************ func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -248,10 +249,11 @@ func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) } // Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// * -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// ************************* +// +// implicit_document ::= block_node DOCUMENT-END* +// * +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// ************************* func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { token := peek_token(parser) @@ -355,9 +357,9 @@ func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t } // Parse the productions: -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// *********** // +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* +// *********** func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -378,10 +380,10 @@ func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event } // Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// ************* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* // +// implicit_document ::= block_node DOCUMENT-END* +// ************* +// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -427,31 +429,32 @@ func yaml_parser_set_event_comments(parser *yaml_parser_t, event *yaml_event_t) } // Parse the productions: -// block_node_or_indentless_sequence ::= -// ALIAS -// ***** -// | properties (block_content | indentless_block_sequence)? -// ********** * -// | block_content | indentless_block_sequence -// * -// block_node ::= ALIAS -// ***** -// | properties block_content? -// ********** * -// | block_content -// * -// flow_node ::= ALIAS -// ***** -// | properties flow_content? -// ********** * -// | flow_content -// * -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// ************************* -// block_content ::= block_collection | flow_collection | SCALAR -// ****** -// flow_content ::= flow_collection | SCALAR -// ****** +// +// block_node_or_indentless_sequence ::= +// ALIAS +// ***** +// | properties (block_content | indentless_block_sequence)? +// ********** * +// | block_content | indentless_block_sequence +// * +// block_node ::= ALIAS +// ***** +// | properties block_content? +// ********** * +// | block_content +// * +// flow_node ::= ALIAS +// ***** +// | properties flow_content? +// ********** * +// | flow_content +// * +// properties ::= TAG ANCHOR? | ANCHOR TAG? +// ************************* +// block_content ::= block_collection | flow_collection | SCALAR +// ****** +// flow_content ::= flow_collection | SCALAR +// ****** func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() @@ -681,9 +684,9 @@ func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, i } // Parse the productions: -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// ******************** *********** * ********* // +// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END +// ******************** *********** * ********* func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) @@ -739,8 +742,9 @@ func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_e } // Parse the productions: -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// *********** * +// +// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ +// *********** * func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -804,15 +808,15 @@ func yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) { } // Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// ******************* -// ((KEY block_node_or_indentless_sequence?)? -// *** * -// (VALUE block_node_or_indentless_sequence?)?)* // -// BLOCK-END -// ********* +// block_mapping ::= BLOCK-MAPPING_START +// ******************* +// ((KEY block_node_or_indentless_sequence?)? +// *** * +// (VALUE block_node_or_indentless_sequence?)?)* // +// BLOCK-END +// ********* func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) @@ -879,15 +883,14 @@ func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_even } // Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// -// ((KEY block_node_or_indentless_sequence?)? // -// (VALUE block_node_or_indentless_sequence?)?)* -// ***** * -// BLOCK-END +// block_mapping ::= BLOCK-MAPPING_START // +// ((KEY block_node_or_indentless_sequence?)? // +// (VALUE block_node_or_indentless_sequence?)?)* +// ***** * +// BLOCK-END func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -914,17 +917,17 @@ func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_ev } // Parse the productions: -// flow_sequence ::= FLOW-SEQUENCE-START -// ******************* -// (flow_sequence_entry FLOW-ENTRY)* -// * ********** -// flow_sequence_entry? -// * -// FLOW-SEQUENCE-END -// ***************** -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * // +// flow_sequence ::= FLOW-SEQUENCE-START +// ******************* +// (flow_sequence_entry FLOW-ENTRY)* +// * ********** +// flow_sequence_entry? +// * +// FLOW-SEQUENCE-END +// ***************** +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) @@ -987,11 +990,10 @@ func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_ev return true } -// // Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// *** * // +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// *** * func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -1010,9 +1012,9 @@ func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, ev } // Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// ***** * // +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// ***** * func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -1034,9 +1036,9 @@ func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, } // Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * // +// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { token := peek_token(parser) if token == nil { @@ -1052,17 +1054,17 @@ func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, ev } // Parse the productions: -// flow_mapping ::= FLOW-MAPPING-START -// ****************** -// (flow_mapping_entry FLOW-ENTRY)* -// * ********** -// flow_mapping_entry? -// ****************** -// FLOW-MAPPING-END -// **************** -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * *** * // +// flow_mapping ::= FLOW-MAPPING-START +// ****************** +// (flow_mapping_entry FLOW-ENTRY)* +// * ********** +// flow_mapping_entry? +// ****************** +// FLOW-MAPPING-END +// **************** +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * *** * func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) @@ -1127,9 +1129,9 @@ func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event } // Parse the productions: -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * ***** * // +// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? +// * ***** * func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { token := peek_token(parser) if token == nil { diff --git a/vendor/gopkg.in/yaml.v3/readerc.go b/vendor/go.yaml.in/yaml/v3/readerc.go similarity index 99% rename from vendor/gopkg.in/yaml.v3/readerc.go rename to vendor/go.yaml.in/yaml/v3/readerc.go index b7de0a89..56af2453 100644 --- a/vendor/gopkg.in/yaml.v3/readerc.go +++ b/vendor/go.yaml.in/yaml/v3/readerc.go @@ -1,17 +1,17 @@ -// +// // Copyright (c) 2011-2019 Canonical Ltd // Copyright (c) 2006-2010 Kirill Simonov -// +// // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to do // so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/vendor/gopkg.in/yaml.v3/resolve.go b/vendor/go.yaml.in/yaml/v3/resolve.go similarity index 100% rename from vendor/gopkg.in/yaml.v3/resolve.go rename to vendor/go.yaml.in/yaml/v3/resolve.go diff --git a/vendor/gopkg.in/yaml.v3/scannerc.go b/vendor/go.yaml.in/yaml/v3/scannerc.go similarity index 99% rename from vendor/gopkg.in/yaml.v3/scannerc.go rename to vendor/go.yaml.in/yaml/v3/scannerc.go index ca007010..30b1f089 100644 --- a/vendor/gopkg.in/yaml.v3/scannerc.go +++ b/vendor/go.yaml.in/yaml/v3/scannerc.go @@ -1614,11 +1614,11 @@ func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { // Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. // // Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// %YAML 1.1 # a comment \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { // Eat '%'. start_mark := parser.mark @@ -1719,11 +1719,11 @@ func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool // Scan the directive name. // // Scope: -// %YAML 1.1 # a comment \n -// ^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^ // +// %YAML 1.1 # a comment \n +// ^^^^ +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^ func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { // Consume the directive name. if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { @@ -1758,8 +1758,9 @@ func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark // Scan the value of VERSION-DIRECTIVE. // // Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^ +// +// %YAML 1.1 # a comment \n +// ^^^^^^ func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { // Eat whitespaces. if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { @@ -1797,10 +1798,11 @@ const max_number_length = 2 // Scan the version number of VERSION-DIRECTIVE. // // Scope: -// %YAML 1.1 # a comment \n -// ^ -// %YAML 1.1 # a comment \n -// ^ +// +// %YAML 1.1 # a comment \n +// ^ +// %YAML 1.1 # a comment \n +// ^ func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { // Repeat while the next character is digit. @@ -1834,9 +1836,9 @@ func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark // Scan the value of a TAG-DIRECTIVE token. // // Scope: -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// %TAG !yaml! tag:yaml.org,2002: \n +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { var handle_value, prefix_value []byte @@ -2847,7 +2849,7 @@ func yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t continue } if parser.buffer[parser.buffer_pos+peek] == '#' { - seen := parser.mark.index+peek + seen := parser.mark.index + peek for { if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false @@ -2876,7 +2878,7 @@ func yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t parser.comments = append(parser.comments, yaml_comment_t{ token_mark: token_mark, start_mark: start_mark, - line: text, + line: text, }) } return true @@ -2910,7 +2912,7 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo // the foot is the line below it. var foot_line = -1 if scan_mark.line > 0 { - foot_line = parser.mark.line-parser.newlines+1 + foot_line = parser.mark.line - parser.newlines + 1 if parser.newlines == 0 && parser.mark.column > 1 { foot_line++ } @@ -2996,7 +2998,7 @@ func yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) boo recent_empty = false // Consume until after the consumed comment line. - seen := parser.mark.index+peek + seen := parser.mark.index + peek for { if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false diff --git a/vendor/gopkg.in/yaml.v3/sorter.go b/vendor/go.yaml.in/yaml/v3/sorter.go similarity index 100% rename from vendor/gopkg.in/yaml.v3/sorter.go rename to vendor/go.yaml.in/yaml/v3/sorter.go diff --git a/vendor/gopkg.in/yaml.v3/writerc.go b/vendor/go.yaml.in/yaml/v3/writerc.go similarity index 99% rename from vendor/gopkg.in/yaml.v3/writerc.go rename to vendor/go.yaml.in/yaml/v3/writerc.go index b8a116bf..266d0b09 100644 --- a/vendor/gopkg.in/yaml.v3/writerc.go +++ b/vendor/go.yaml.in/yaml/v3/writerc.go @@ -1,17 +1,17 @@ -// +// // Copyright (c) 2011-2019 Canonical Ltd // Copyright (c) 2006-2010 Kirill Simonov -// +// // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to do // so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/vendor/gopkg.in/yaml.v3/yaml.go b/vendor/go.yaml.in/yaml/v3/yaml.go similarity index 91% rename from vendor/gopkg.in/yaml.v3/yaml.go rename to vendor/go.yaml.in/yaml/v3/yaml.go index 8cec6da4..0b101cd2 100644 --- a/vendor/gopkg.in/yaml.v3/yaml.go +++ b/vendor/go.yaml.in/yaml/v3/yaml.go @@ -17,8 +17,7 @@ // // Source code and other details for the project are available at GitHub: // -// https://github.com/go-yaml/yaml -// +// https://github.com/yaml/go-yaml package yaml import ( @@ -75,16 +74,15 @@ type Marshaler interface { // // For example: // -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// var t T -// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// var t T +// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) // // See the documentation of Marshal for the format of tags and a list of // supported tag options. -// func Unmarshal(in []byte, out interface{}) (err error) { return unmarshal(in, out, false) } @@ -185,36 +183,35 @@ func unmarshal(in []byte, out interface{}, strict bool) (err error) { // // The field tag format accepted is: // -// `(...) yaml:"[][,[,]]" (...)` +// `(...) yaml:"[][,[,]]" (...)` // // The following flags are currently supported: // -// omitempty Only include the field if it's not set to the zero -// value for the type or to empty slices or maps. -// Zero valued structs will be omitted if all their public -// fields are zero, unless they implement an IsZero -// method (see the IsZeroer interface type), in which -// case the field will be excluded if IsZero returns true. +// omitempty Only include the field if it's not set to the zero +// value for the type or to empty slices or maps. +// Zero valued structs will be omitted if all their public +// fields are zero, unless they implement an IsZero +// method (see the IsZeroer interface type), in which +// case the field will be excluded if IsZero returns true. // -// flow Marshal using a flow style (useful for structs, -// sequences and maps). +// flow Marshal using a flow style (useful for structs, +// sequences and maps). // -// inline Inline the field, which must be a struct or a map, -// causing all of its fields or keys to be processed as if -// they were part of the outer struct. For maps, keys must -// not conflict with the yaml keys of other struct fields. +// inline Inline the field, which must be a struct or a map, +// causing all of its fields or keys to be processed as if +// they were part of the outer struct. For maps, keys must +// not conflict with the yaml keys of other struct fields. // // In addition, if the key is "-", the field is ignored. // // For example: // -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" -// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" -// +// type T struct { +// F int `yaml:"a,omitempty"` +// B int +// } +// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" +// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" func Marshal(in interface{}) (out []byte, err error) { defer handleErr(&err) e := newEncoder() @@ -278,6 +275,16 @@ func (e *Encoder) SetIndent(spaces int) { e.encoder.indent = spaces } +// CompactSeqIndent makes it so that '- ' is considered part of the indentation. +func (e *Encoder) CompactSeqIndent() { + e.encoder.emitter.compact_sequence_indent = true +} + +// DefaultSeqIndent makes it so that '- ' is not considered part of the indentation. +func (e *Encoder) DefaultSeqIndent() { + e.encoder.emitter.compact_sequence_indent = false +} + // Close closes the encoder by writing any remaining data. // It does not write a stream terminating string "...". func (e *Encoder) Close() (err error) { @@ -358,22 +365,21 @@ const ( // // For example: // -// var person struct { -// Name string -// Address yaml.Node -// } -// err := yaml.Unmarshal(data, &person) -// -// Or by itself: +// var person struct { +// Name string +// Address yaml.Node +// } +// err := yaml.Unmarshal(data, &person) // -// var person Node -// err := yaml.Unmarshal(data, &person) +// Or by itself: // +// var person Node +// err := yaml.Unmarshal(data, &person) type Node struct { // Kind defines whether the node is a document, a mapping, a sequence, // a scalar value, or an alias to another node. The specific data type of // scalar nodes may be obtained via the ShortTag and LongTag methods. - Kind Kind + Kind Kind // Style allows customizing the apperance of the node in the tree. Style Style @@ -421,7 +427,6 @@ func (n *Node) IsZero() bool { n.HeadComment == "" && n.LineComment == "" && n.FootComment == "" && n.Line == 0 && n.Column == 0 } - // LongTag returns the long form of the tag that indicates the data type for // the node. If the Tag field isn't explicitly defined, one will be computed // based on the node properties. diff --git a/vendor/gopkg.in/yaml.v3/yamlh.go b/vendor/go.yaml.in/yaml/v3/yamlh.go similarity index 95% rename from vendor/gopkg.in/yaml.v3/yamlh.go rename to vendor/go.yaml.in/yaml/v3/yamlh.go index 7c6d0077..07c44236 100644 --- a/vendor/gopkg.in/yaml.v3/yamlh.go +++ b/vendor/go.yaml.in/yaml/v3/yamlh.go @@ -433,19 +433,19 @@ type yaml_document_t struct { // The prototype of a read handler. // -// The read handler is called when the parser needs to read more bytes from the -// source. The handler should write not more than size bytes to the buffer. -// The number of written bytes should be set to the size_read variable. +// The read handler is called when the parser needs to read more bytes from the +// source. The handler should write not more than size bytes to the buffer. +// The number of written bytes should be set to the size_read variable. // -// [in,out] data A pointer to an application data specified by -// yaml_parser_set_input(). -// [out] buffer The buffer to write the data from the source. -// [in] size The size of the buffer. -// [out] size_read The actual number of bytes read from the source. +// [in,out] data A pointer to an application data specified by +// yaml_parser_set_input(). +// [out] buffer The buffer to write the data from the source. +// [in] size The size of the buffer. +// [out] size_read The actual number of bytes read from the source. // -// On success, the handler should return 1. If the handler failed, -// the returned value should be 0. On EOF, the handler should set the -// size_read to 0 and return 1. +// On success, the handler should return 1. If the handler failed, +// the returned value should be 0. On EOF, the handler should set the +// size_read to 0 and return 1. type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) // This structure holds information about a potential simple key. @@ -639,7 +639,6 @@ type yaml_parser_t struct { } type yaml_comment_t struct { - scan_mark yaml_mark_t // Position where scanning for comments started token_mark yaml_mark_t // Position after which tokens will be associated with this comment start_mark yaml_mark_t // Position of '#' comment mark @@ -654,18 +653,17 @@ type yaml_comment_t struct { // The prototype of a write handler. // -// The write handler is called when the emitter needs to flush the accumulated -// characters to the output. The handler should write @a size bytes of the -// @a buffer to the output. -// -// @param[in,out] data A pointer to an application data specified by -// yaml_emitter_set_output(). -// @param[in] buffer The buffer with bytes to be written. -// @param[in] size The size of the buffer. +// The write handler is called when the emitter needs to flush the accumulated +// characters to the output. The handler should write @a size bytes of the +// @a buffer to the output. // -// @returns On success, the handler should return @c 1. If the handler failed, -// the returned value should be @c 0. +// @param[in,out] data A pointer to an application data specified by +// yaml_emitter_set_output(). +// @param[in] buffer The buffer with bytes to be written. +// @param[in] size The size of the buffer. // +// @returns On success, the handler should return @c 1. If the handler failed, +// the returned value should be @c 0. type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error type yaml_emitter_state_t int @@ -742,6 +740,8 @@ type yaml_emitter_t struct { indent int // The current indentation level. + compact_sequence_indent bool // Is '- ' is considered part of the indentation for sequence elements? + flow_level int // The current flow level. root_context bool // Is it the document root context? diff --git a/vendor/gopkg.in/yaml.v3/yamlprivateh.go b/vendor/go.yaml.in/yaml/v3/yamlprivateh.go similarity index 97% rename from vendor/gopkg.in/yaml.v3/yamlprivateh.go rename to vendor/go.yaml.in/yaml/v3/yamlprivateh.go index e88f9c54..dea1ba96 100644 --- a/vendor/gopkg.in/yaml.v3/yamlprivateh.go +++ b/vendor/go.yaml.in/yaml/v3/yamlprivateh.go @@ -1,17 +1,17 @@ -// +// // Copyright (c) 2011-2019 Canonical Ltd // Copyright (c) 2006-2010 Kirill Simonov -// +// // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to do // so, subject to the following conditions: -// +// // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. -// +// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -137,8 +137,8 @@ func is_crlf(b []byte, i int) bool { func is_breakz(b []byte, i int) bool { //return is_break(b, i) || is_z(b, i) return ( - // is_break: - b[i] == '\r' || // CR (#xD) + // is_break: + b[i] == '\r' || // CR (#xD) b[i] == '\n' || // LF (#xA) b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) @@ -151,8 +151,8 @@ func is_breakz(b []byte, i int) bool { func is_spacez(b []byte, i int) bool { //return is_space(b, i) || is_breakz(b, i) return ( - // is_space: - b[i] == ' ' || + // is_space: + b[i] == ' ' || // is_breakz: b[i] == '\r' || // CR (#xD) b[i] == '\n' || // LF (#xA) @@ -166,8 +166,8 @@ func is_spacez(b []byte, i int) bool { func is_blankz(b []byte, i int) bool { //return is_blank(b, i) || is_breakz(b, i) return ( - // is_blank: - b[i] == ' ' || b[i] == '\t' || + // is_blank: + b[i] == ' ' || b[i] == '\t' || // is_breakz: b[i] == '\r' || // CR (#xD) b[i] == '\n' || // LF (#xA) diff --git a/vendor/golang.org/x/crypto/argon2/blamka_generic.go b/vendor/golang.org/x/crypto/argon2/blamka_generic.go index a481b224..4c9dabbb 100644 --- a/vendor/golang.org/x/crypto/argon2/blamka_generic.go +++ b/vendor/golang.org/x/crypto/argon2/blamka_generic.go @@ -6,6 +6,10 @@ package argon2 var useSSE4 bool +// useLSX reports whether the loong64 LSX vector implementation should be +// used. It is set from cpu.Loong64.HasLSX in blamka_loong64.go's init(). +var useLSX bool + func processBlockGeneric(out, in1, in2 *block, xor bool) { var t block for i := range t { diff --git a/vendor/golang.org/x/crypto/argon2/blamka_loong64.go b/vendor/golang.org/x/crypto/argon2/blamka_loong64.go new file mode 100644 index 00000000..e7daeb4c --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_loong64.go @@ -0,0 +1,49 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 && gc && !purego + +package argon2 + +import "golang.org/x/sys/cpu" + +func init() { + // useLSX (declared in blamka_generic.go) gates the LSX vector path. + // If the running CPU lacks LSX support, processBlockVX falls back + // to processBlockGeneric. + useLSX = cpu.Loong64.HasLSX +} + +//go:noescape +func blamkaLOONG64(b *block) + +//go:noescape +func mixBlocksVX(out, a, b, c *block) + +//go:noescape +func xorBlocksVX(out, a, b, c *block) + +func processBlock(out, in1, in2 *block) { + processBlockVX(out, in1, in2, false) +} + +func processBlockXOR(out, in1, in2 *block) { + processBlockVX(out, in1, in2, true) +} + +func processBlockVX(out, in1, in2 *block, xor bool) { + if !useLSX { + processBlockGeneric(out, in1, in2, xor) + return + } + + var t block + mixBlocksVX(&t, in1, in2, &t) + blamkaLOONG64(&t) + if xor { + xorBlocksVX(out, in1, in2, &t) + } else { + mixBlocksVX(out, in1, in2, &t) + } +} diff --git a/vendor/golang.org/x/crypto/argon2/blamka_loong64.s b/vendor/golang.org/x/crypto/argon2/blamka_loong64.s new file mode 100644 index 00000000..7843a7c2 --- /dev/null +++ b/vendor/golang.org/x/crypto/argon2/blamka_loong64.s @@ -0,0 +1,240 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 && gc && !purego + +#include "textflag.h" + +// HALF_ROUND applies one BlaMka half-round (mul-add-xor-rotate) to two +// groups of 4 columns, each packed 2-wide into V registers (v0/v2/v4/v6 +// hold one pair of columns in lane0/lane1, v1/v3/v5/v7 hold the other). +// t0, t1 are scratch registers, one per independent column group. +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, t0, t1) \ + VMULWEVVWU v0, v2, t0; \ + VADDV t0, t0, t0; \ + VADDV v0, v2, v0; \ + VADDV v0, t0, v0; \ + VXORV v6, v0, v6; \ + VROTRV $32, v6, v6; \ + VMULWEVVWU v1, v3, t1; \ + VADDV t1, t1, t1; \ + VADDV v1, v3, v1; \ + VADDV v1, t1, v1; \ + VXORV v7, v1, v7; \ + VROTRV $32, v7, v7; \ + VMULWEVVWU v4, v6, t0; \ + VADDV t0, t0, t0; \ + VADDV v4, v6, v4; \ + VADDV v4, t0, v4; \ + VXORV v2, v4, v2; \ + VROTRV $24, v2, v2; \ + VMULWEVVWU v5, v7, t1; \ + VADDV t1, t1, t1; \ + VADDV v5, v7, v5; \ + VADDV v5, t1, v5; \ + VXORV v3, v5, v3; \ + VROTRV $24, v3, v3; \ + VMULWEVVWU v0, v2, t0; \ + VADDV t0, t0, t0; \ + VADDV v0, v2, v0; \ + VADDV v0, t0, v0; \ + VXORV v6, v0, v6; \ + VROTRV $16, v6, v6; \ + VMULWEVVWU v1, v3, t1; \ + VADDV t1, t1, t1; \ + VADDV v1, v3, v1; \ + VADDV v1, t1, v1; \ + VXORV v7, v1, v7; \ + VROTRV $16, v7, v7; \ + VMULWEVVWU v4, v6, t0; \ + VADDV t0, t0, t0; \ + VADDV v4, v6, v4; \ + VADDV v4, t0, v4; \ + VXORV v2, v4, v2; \ + VROTRV $63, v2, v2; \ + VMULWEVVWU v5, v7, t1; \ + VADDV t1, t1, t1; \ + VADDV v5, v7, v5; \ + VADDV v5, t1, v5; \ + VXORV v3, v5, v3; \ + VROTRV $63, v3, v3 + +// SHUFFLE / SHUFFLE_INV: reused verbatim from blake2b_loong64.s -- amd64 +// avo source confirms argon2's SHUFFLE/SHUFFLE_INV and blake2b's SHUFFLE +// are byte-for-byte identical macros (diagonalize / undiagonalize), +// operating only on V2..V7 (V0/V1 untouched), with V13 held at zero. +#define SHUFFLE \ + VADDV V2, V13, V12; \ + VADDV V6, V13, V16; \ + VADDV V4, V13, V14; \ + VADDV V5, V13, V4; \ + VADDV V14, V13, V5; \ + VSHUF4IV $9, V3, V2; \ + VSHUF4IV $9, V12, V3; \ + VSHUF4IV $3, V7, V6; \ + VSHUF4IV $3, V16, V7 + +#define SHUFFLE_INV \ + VADDV V2, V13, V12; \ + VADDV V6, V13, V16; \ + VADDV V4, V13, V14; \ + VADDV V5, V13, V4; \ + VADDV V14, V13, V5; \ + VSHUF4IV $3, V3, V2; \ + VSHUF4IV $3, V12, V3; \ + VSHUF4IV $9, V7, V6; \ + VSHUF4IV $9, V16, V7 + +// LOAD_MSG_0 / STORE_MSG_0: row pass. `off` is the byte offset of the +// 128-byte (16-uint64) row group; within the macro the 8 loads step by +// 16B (2 uint64 per V register). Called from blamkaLOONG64 with off +// stepping by 128B across the 8 row groups -- do not confuse the two +// strides. +#define LOAD_MSG_0(off) \ + VMOVQ (off+0)(R4), V0; \ + VMOVQ (off+16)(R4), V1; \ + VMOVQ (off+32)(R4), V2; \ + VMOVQ (off+48)(R4), V3; \ + VMOVQ (off+64)(R4), V4; \ + VMOVQ (off+80)(R4), V5; \ + VMOVQ (off+96)(R4), V6; \ + VMOVQ (off+112)(R4), V7 + +#define STORE_MSG_0(off) \ + VMOVQ V0, (off+0)(R4); \ + VMOVQ V1, (off+16)(R4); \ + VMOVQ V2, (off+32)(R4); \ + VMOVQ V3, (off+48)(R4); \ + VMOVQ V4, (off+64)(R4); \ + VMOVQ V5, (off+80)(R4); \ + VMOVQ V6, (off+96)(R4); \ + VMOVQ V7, (off+112)(R4) + +// LOAD_MSG_1 / STORE_MSG_1: diagonal pass. `off` is the byte offset within +// a 128-byte row group; within the macro the 8 loads step by 128B (one +// element from each of the 8 row groups, mirroring blamka_generic.go's +// t[off], t[128+off], t[256+off], ...). Called from blamkaLOONG64 with +// off stepping by 16B (2 uint64) across the 8 diagonal groups -- the +// inner/outer strides are swapped relative to LOAD_MSG_0/STORE_MSG_0. +#define LOAD_MSG_1(off) \ + VMOVQ (off+0)(R4), V0; \ + VMOVQ (off+128)(R4), V1; \ + VMOVQ (off+256)(R4), V2; \ + VMOVQ (off+384)(R4), V3; \ + VMOVQ (off+512)(R4), V4; \ + VMOVQ (off+640)(R4), V5; \ + VMOVQ (off+768)(R4), V6; \ + VMOVQ (off+896)(R4), V7 + +#define STORE_MSG_1(off) \ + VMOVQ V0, (off+0)(R4); \ + VMOVQ V1, (off+128)(R4); \ + VMOVQ V2, (off+256)(R4); \ + VMOVQ V3, (off+384)(R4); \ + VMOVQ V4, (off+512)(R4); \ + VMOVQ V5, (off+640)(R4); \ + VMOVQ V6, (off+768)(R4); \ + VMOVQ V7, (off+896)(R4) + +// BLAMKA_ROUND_0(off): one full row pass over the 16-uint64 group at +// byte offset off -- corresponds to a single call to blamkaGeneric +// with the "row" argument order (t[off]..t[off+15]). +#define BLAMKA_ROUND_0(off) \ + LOAD_MSG_0(off); \ + HALF_ROUND(V0, V1, V2, V3, V4, V5, V6, V7, V8, V9); \ + SHUFFLE; \ + HALF_ROUND(V0, V1, V2, V3, V4, V5, V6, V7, V8, V9); \ + SHUFFLE_INV; \ + STORE_MSG_0(off) + +// BLAMKA_ROUND_1(off): one full diagonal pass over the 16 uint64s at +// diagonal offset off -- corresponds to a single call to blamkaGeneric +// with the "diagonal" argument order (t[off], t[off+1], t[16+off], ...). +#define BLAMKA_ROUND_1(off) \ + LOAD_MSG_1(off); \ + HALF_ROUND(V0, V1, V2, V3, V4, V5, V6, V7, V8, V9); \ + SHUFFLE; \ + HALF_ROUND(V0, V1, V2, V3, V4, V5, V6, V7, V8, V9); \ + SHUFFLE_INV; \ + STORE_MSG_1(off) + +// func blamkaLOONG64(b *block) +TEXT ·blamkaLOONG64(SB), NOSPLIT, $0-8 + MOVV b+0(FP), R4 + + VXORV V13, V13, V13 // V13 = 0, used by SHUFFLE/SHUFFLE_INV + + // Round 0: 8 row passes, stride 128 bytes (16 uint64s). + BLAMKA_ROUND_0(0) + BLAMKA_ROUND_0(128) + BLAMKA_ROUND_0(256) + BLAMKA_ROUND_0(384) + BLAMKA_ROUND_0(512) + BLAMKA_ROUND_0(640) + BLAMKA_ROUND_0(768) + BLAMKA_ROUND_0(896) + + // Round 1: 8 diagonal passes, stride 16 bytes (2 uint64s). + BLAMKA_ROUND_1(0) + BLAMKA_ROUND_1(16) + BLAMKA_ROUND_1(32) + BLAMKA_ROUND_1(48) + BLAMKA_ROUND_1(64) + BLAMKA_ROUND_1(80) + BLAMKA_ROUND_1(96) + BLAMKA_ROUND_1(112) + + RET + +// func mixBlocksVX(out, a, b, c *block) +TEXT ·mixBlocksVX(SB), NOSPLIT, $0-32 + MOVV out+0(FP), R4 + MOVV a+8(FP), R5 + MOVV b+16(FP), R6 + MOVV c+24(FP), R7 + MOVV $1024, R8 + + PCALIGN $16 +mixloop: + VMOVQ (R5), V0 + VMOVQ (R6), V1 + VMOVQ (R7), V2 + VXORV V0, V1, V0 + VXORV V0, V2, V0 + VMOVQ V0, (R4) + ADDV $16, R4 + ADDV $16, R5 + ADDV $16, R6 + ADDV $16, R7 + SUBV $16, R8 + BNE R8, R0, mixloop + + RET + +// func xorBlocksVX(out, a, b, c *block) +TEXT ·xorBlocksVX(SB), NOSPLIT, $0-32 + MOVV out+0(FP), R4 + MOVV a+8(FP), R5 + MOVV b+16(FP), R6 + MOVV c+24(FP), R7 + MOVV $1024, R8 + + PCALIGN $16 +xorloop: + VMOVQ (R5), V0 + VMOVQ (R6), V1 + VMOVQ (R7), V2 + VMOVQ (R4), V3 + VXORV V0, V1, V0 + VXORV V0, V2, V0 + VXORV V0, V3, V0 + VMOVQ V0, (R4) + ADDV $16, R4 + ADDV $16, R5 + ADDV $16, R6 + ADDV $16, R7 + SUBV $16, R8 + BNE R8, R0, xorloop + + RET diff --git a/vendor/golang.org/x/crypto/argon2/blamka_ref.go b/vendor/golang.org/x/crypto/argon2/blamka_ref.go index 16d58c65..cf3e1416 100644 --- a/vendor/golang.org/x/crypto/argon2/blamka_ref.go +++ b/vendor/golang.org/x/crypto/argon2/blamka_ref.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !amd64 || purego || !gc +//go:build (!amd64 && !loong64) || purego || !gc package argon2 diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_loong64.go b/vendor/golang.org/x/crypto/blake2b/blake2b_loong64.go new file mode 100644 index 00000000..5e979ebe --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_loong64.go @@ -0,0 +1,20 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 && gc && !purego + +package blake2b + +import "golang.org/x/sys/cpu" + +//go:noescape +func hashBlocksVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + if cpu.Loong64.HasLSX { + hashBlocksVX(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_loong64.s b/vendor/golang.org/x/crypto/blake2b/blake2b_loong64.s new file mode 100644 index 00000000..be9c436e --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_loong64.s @@ -0,0 +1,252 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 && gc && !purego + +#include "textflag.h" + +DATA ·iv0<>+0(SB)/8, $0x6a09e667f3bcc908 +DATA ·iv0<>+8(SB)/8, $0xbb67ae8584caa73b +GLOBL ·iv0<>(SB), RODATA|NOPTR, $16 + +DATA ·iv1<>+0(SB)/8, $0x3c6ef372fe94f82b +DATA ·iv1<>+8(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·iv1<>(SB), RODATA|NOPTR, $16 + +DATA ·iv2<>+0(SB)/8, $0x510e527fade682d1 +DATA ·iv2<>+8(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·iv2<>(SB), RODATA|NOPTR, $16 + +DATA ·iv3<>+0(SB)/8, $0x1f83d9abfb41bd6b +DATA ·iv3<>+8(SB)/8, $0x5be0cd19137e2179 +GLOBL ·iv3<>(SB), RODATA|NOPTR, $16 + +#define SHUFFLE_1 \ + VADDV V2, V13, V12; \ // V12 = V2 + VADDV V6, V13, V16; \ // V16 = V6 + VADDV V4, V13, V14; \ // V14 = V4 + VADDV V5, V13, V4; \ // V4 = V5 + VADDV V14, V13, V5; \ // V5 = V4 + VSHUF4IV $9, V3, V2; \ + VSHUF4IV $9, V12, V3; \ + VSHUF4IV $3, V7, V6; \ + VSHUF4IV $3, V16, V7; \ + +#define SHUFFLE_2 \ + VADDV V2, V13, V12; \ // V12 = V2 + VADDV V6, V13, V16; \ // V16 = V6 + VADDV V4, V13, V14; \ // V14 = V4 + VADDV V5, V13, V4; \ // V4 = V5 + VADDV V14, V13, V5; \ // V5 = V4 + VSHUF4IV $3, V3, V2; \ + VSHUF4IV $3, V12, V3; \ + VSHUF4IV $9, V7, V6; \ + VSHUF4IV $9, V16, V7; \ + +#define LOAD_M(a, b, c, d, e, f, g, h) \ + VMOVQ a, V8.V[0]; \ + VMOVQ b, V8.V[1]; \ + VMOVQ c, V9.V[0]; \ + VMOVQ d, V9.V[1]; \ + VMOVQ e, V10.V[0]; \ + VMOVQ f, V10.V[1]; \ + VMOVQ g, V11.V[0]; \ + VMOVQ h, V11.V[1]; \ + +#define ROUND_0 \ + VADDV V0, V8, V0; \ + VADDV V1, V9, V1; \ + VADDV V0, V2, V0; \ + VADDV V1, V3, V1; \ + VXORV V6, V0, V6; \ + VXORV V7, V1, V7; \ + VROTRV $32, V6, V6; \ + VROTRV $32, V7, V7; \ + VADDV V4, V6, V4; \ + VADDV V5, V7, V5; \ + VXORV V2, V4, V2; \ + VXORV V3, V5, V3; \ + VROTRV $24, V2, V2; \ + VROTRV $24, V3, V3; \ + VADDV V0, V10, V0; \ + VADDV V1, V11, V1; \ + VADDV V0, V2, V0; \ + VADDV V1, V3, V1; \ + VXORV V6, V0, V6; \ + VXORV V7, V1, V7; \ + VROTRV $16, V6, V6; \ + VROTRV $16, V7, V7; \ + VADDV V4, V6, V4; \ + VADDV V5, V7, V5; \ + VXORV V2, V4, V2; \ + VXORV V3, V5, V3; \ + VROTRV $63, V2, V2; \ + VROTRV $63, V3, V3; \ + +#define ROUND_8 ROUND_0 + +// func hashBlocksVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksVX(SB), NOSPLIT, $0-48 + MOVV h+0(FP), R4 + MOVV c+8(FP), R5 + MOVV flag+16(FP), R6 + MOVV blocks_base+24(FP), R7 + MOVV blocks_len+32(FP), R8 + MOVV (R5), R9 // c0 + MOVV 8(R5), R10 // c1 + +loop: + ADDV $0x80, R9 + SGTU $0x80, R9, R11 + ADDV R10, R11, R10 + VMOVQ R9, V8.V[0] + VMOVQ R10, V8.V[1] + + MOVV $·iv0<>(SB), R11 + MOVV $·iv1<>(SB), R12 + MOVV $·iv2<>(SB), R13 + MOVV $·iv3<>(SB), R14 + VMOVQ (R13), V6 + VMOVQ (R11), V4 + VMOVQ (R12), V5 + MOVV (R14), R15 // v14 + MOVV 8(R14), R16 + VXORV V6, V8, V6 + XOR R15, R6, R15 + VMOVQ R16, V7.V[1] + VMOVQ R15, V7.V[0] + + VMOVQ (R4), V0 + VMOVQ 16(R4), V1 + VMOVQ 32(R4), V2 + VMOVQ 48(R4), V3 + + MOVV 0(R7), R11 + MOVV 8(R7), R12 + MOVV 16(R7), R13 + MOVV 24(R7), R14 + MOVV 32(R7), R15 + MOVV 40(R7), R16 + MOVV 48(R7), R17 + MOVV 56(R7), R18 + MOVV 64(R7), R19 + MOVV 72(R7), R24 + MOVV 80(R7), R25 + MOVV 88(R7), R26 + MOVV 96(R7), R27 + MOVV 104(R7), R28 + MOVV 112(R7), R29 + MOVV 120(R7), R30 + + VXORV V13, V13, V13 // V13=0 + + LOAD_M(R11, R13, R15, R17, R12, R14, R16, R18) + ROUND_0 + SHUFFLE_1 + LOAD_M(R19, R25, R27, R29, R24, R26, R28, R30) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R29, R15, R24, R28, R25, R19, R30, R17) + ROUND_0 + SHUFFLE_1 + LOAD_M(R12, R11, R26, R16, R27, R13, R18, R14) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R26, R27, R16, R30, R19, R11, R13, R28) + ROUND_0 + SHUFFLE_1 + LOAD_M(R25, R14, R18, R24, R29, R17, R12, R15) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R18, R14, R28, R26, R24, R12, R27, R29) + ROUND_0 + SHUFFLE_1 + LOAD_M(R13, R16, R15, R30, R17, R25, R11, R19) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R24, R16, R13, R25, R11, R18, R15, R30) + ROUND_0 + SHUFFLE_1 + LOAD_M(R29, R26, R17, R14, R12, R27, R19, R28) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R13, R17, R11, R19, R27, R25, R26, R14) + ROUND_0 + SHUFFLE_1 + LOAD_M(R15, R18, R30, R12, R28, R16, R29, R24) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R27, R12, R29, R15, R16, R30, R28, R25) + ROUND_0 + SHUFFLE_1 + LOAD_M(R11, R17, R24, R19, R18, R14, R13, R26) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R28, R18, R27, R14, R26, R29, R12, R24) + ROUND_0 + SHUFFLE_1 + LOAD_M(R16, R30, R19, R13, R11, R15, R17, R25) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R17, R29, R26, R11, R30, R24, R14, R19) + ROUND_0 + SHUFFLE_1 + LOAD_M(R27, R28, R12, R25, R13, R18, R15, R16) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R25, R19, R18, R12, R13, R15, R17, R16) + ROUND_0 + SHUFFLE_1 + LOAD_M(R30, R24, R14, R28, R26, R29, R27, R11) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R11, R13, R15, R17, R12, R14, R16, R18) + ROUND_0 + SHUFFLE_1 + LOAD_M(R19, R25, R27, R29, R24, R26, R28, R30) + ROUND_8 + SHUFFLE_2 + + LOAD_M(R29, R15, R24, R28, R25, R19, R30, R17) + ROUND_0 + SHUFFLE_1 + LOAD_M(R12, R11, R26, R16, R27, R13, R18, R14) + ROUND_8 + SHUFFLE_2 + + VMOVQ (R4), V8 + VMOVQ 16(R4), V9 + VMOVQ 32(R4), V10 + VMOVQ 48(R4), V11 + VXORV V0, V4, V0 + VXORV V1, V5, V1 + VXORV V2, V6, V2 + VXORV V3, V7, V3 + VXORV V0, V8, V0 + VXORV V1, V9, V1 + VXORV V2, V10, V2 + VXORV V3, V11, V3 + VMOVQ V0, (R4) + VMOVQ V1, 16(R4) + VMOVQ V2, 32(R4) + VMOVQ V3, 48(R4) + + SUBV $128, R8 + ADDV $128, R7 + BNE R8, R0, loop + + MOVV R9, (R5) + MOVV R10, 8(R5) + + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go index 6e28668c..70852a0b 100644 --- a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !amd64 || purego || !gc +//go:build (!amd64 && !loong64) || purego || !gc package blake2b diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_loong64.go b/vendor/golang.org/x/crypto/chacha20/chacha_loong64.go new file mode 100644 index 00000000..9679f9ee --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_loong64.go @@ -0,0 +1,22 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +package chacha20 + +import "golang.org/x/sys/cpu" + +const bufSize = 256 + +//go:noescape +func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) + +func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) { + if cpu.Loong64.HasLSX { + xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter) + } else { + c.xorKeyStreamBlocksGeneric(dst, src) + } +} diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_loong64.s b/vendor/golang.org/x/crypto/chacha20/chacha_loong64.s new file mode 100644 index 00000000..e377b432 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20/chacha_loong64.s @@ -0,0 +1,342 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// derived from chacha_arm64.s + +//go:build gc && !purego + +#include "textflag.h" + +DATA ·constants+0x00(SB)/4, $0x61707865 +DATA ·constants+0x04(SB)/4, $0x3320646e +DATA ·constants+0x08(SB)/4, $0x79622d32 +DATA ·constants+0x0c(SB)/4, $0x6b206574 +GLOBL ·constants(SB), NOPTR|RODATA, $32 + +DATA ·incRotMatrix+0x00(SB)/4, $0x00000000 +DATA ·incRotMatrix+0x04(SB)/4, $0x00000001 +DATA ·incRotMatrix+0x08(SB)/4, $0x00000002 +DATA ·incRotMatrix+0x0c(SB)/4, $0x00000003 +GLOBL ·incRotMatrix(SB), NOPTR|RODATA, $32 + +#define NUM_ROUNDS 10 + +// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) +TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0 + MOVV dst+0(FP), R4 + MOVV src+24(FP), R5 + MOVV src_len+32(FP), R6 + MOVV key+48(FP), R7 + MOVV nonce+56(FP), R8 + MOVV counter+64(FP), R9 + + MOVV $·constants(SB), R10 + MOVV $·incRotMatrix(SB), R11 + + MOVW (R9), R12 + +loop: + MOVV $NUM_ROUNDS, R15 + // load 4-32bit data from incRotMatrix added to counter + VMOVQ (R11), V30 + + // load contants + VMOVQ (R10), V0.W4 + VMOVQ 4(R10), V1.W4 + VMOVQ 8(R10), V2.W4 + VMOVQ 12(R10), V3.W4 + + // load keys + VMOVQ (R7), V4.W4 + VMOVQ 4(R7), V5.W4 + VMOVQ 8(R7), V6.W4 + VMOVQ 12(R7), V7.W4 + VMOVQ 16(R7), V8.W4 + VMOVQ 20(R7), V9.W4 + VMOVQ 24(R7), V10.W4 + VMOVQ 28(R7), V11.W4 + + // load counter + nonce + VMOVQ (R9), V12.W4 + + VMOVQ (R8), V13.W4 + VMOVQ 4(R8), V14.W4 + VMOVQ 8(R8), V15.W4 + + // update counter + VADDW V30, V12, V12 + +chacha: + // V0..V3 += V4..V7 + // V12..V15 <<<= ((V12..V15 XOR V0..V3), 16) + VADDW V0, V4, V0 + VADDW V1, V5, V1 + VADDW V2, V6, V2 + VADDW V3, V7, V3 + VXORV V12, V0, V12 + VXORV V13, V1, V13 + VXORV V14, V2, V14 + VXORV V15, V3, V15 + VROTRW $16, V12, V12 + VROTRW $16, V13, V13 + VROTRW $16, V14, V14 + VROTRW $16, V15, V15 + + // V8..V11 += V12..V15 + // V4..V7 <<<= ((V4..V7 XOR V8..V11), 12) + VADDW V8, V12, V8 + VADDW V9, V13, V9 + VADDW V10, V14, V10 + VADDW V11, V15, V11 + VXORV V4, V8, V4 + VXORV V5, V9, V5 + VXORV V6, V10, V6 + VXORV V7, V11, V7 + VROTRW $20, V4, V4 + VROTRW $20, V5, V5 + VROTRW $20, V6, V6 + VROTRW $20, V7, V7 + + // V0..V3 += V4..V7 + // V12..V15 <<<= ((V12..V15 XOR V0..V3), 8) + VADDW V0, V4, V0 + VADDW V1, V5, V1 + VADDW V2, V6, V2 + VADDW V3, V7, V3 + VXORV V12, V0, V12 + VXORV V13, V1, V13 + VXORV V14, V2, V14 + VXORV V15, V3, V15 + VROTRW $24, V12, V12 + VROTRW $24, V13, V13 + VROTRW $24, V14, V14 + VROTRW $24, V15, V15 + + // V8..V11 += V12..V15 + // V4..V7 <<<= ((V4..V7 XOR V8..V11), 7) + VADDW V12, V8, V8 + VADDW V13, V9, V9 + VADDW V14, V10, V10 + VADDW V15, V11, V11 + VXORV V4, V8, V4 + VXORV V5, V9, V5 + VXORV V6, V10, V6 + VXORV V7, V11, V7 + VROTRW $25, V4, V4 + VROTRW $25, V5, V5 + VROTRW $25, V6, V6 + VROTRW $25, V7, V7 + + // V0..V3 += V5..V7, V4 + // V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 16) + VADDW V0, V5, V0 + VADDW V1, V6, V1 + VADDW V2, V7, V2 + VADDW V3, V4, V3 + VXORV V15, V0, V15 + VXORV V12, V1, V12 + VXORV V13, V2, V13 + VXORV V14, V3, V14 + VROTRW $16, V15, V15 + VROTRW $16, V12, V12 + VROTRW $16, V13, V13 + VROTRW $16, V14, V14 + + // V10,V11,V8,V9 += V15,V12,V13,V14 + // V5,V6,V7,V4 <<<= ((V5,V6,V7,V4 XOR V10,V11,V8,V9), 12) + VADDW V10, V15, V10 + VADDW V11, V12, V11 + VADDW V8, V13, V8 + VADDW V9, V14, V9 + VXORV V5, V10, V5 + VXORV V6, V11, V6 + VXORV V7, V8, V7 + VXORV V4, V9, V4 + VROTRW $20, V5, V5 + VROTRW $20, V6, V6 + VROTRW $20, V7, V7 + VROTRW $20, V4, V4 + + // V0..V3 += V5..V7, V4 + // V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 8) + VADDW V5, V0, V0 + VADDW V6, V1, V1 + VADDW V7, V2, V2 + VADDW V4, V3, V3 + VXORV V15, V0, V15 + VXORV V12, V1, V12 + VXORV V13, V2, V13 + VXORV V14, V3, V14 + VROTRW $24, V15, V15 + VROTRW $24, V12, V12 + VROTRW $24, V13, V13 + VROTRW $24, V14, V14 + + // V10,V11,V8,V9 += V15,V12,V13,V14 + // V5,V6,V7,V4 <<<= ((V5,V6,V7,V4 XOR V10,V11,V8,V9), 7) + VADDW V15, V10, V10 + VADDW V12, V11, V11 + VADDW V13, V8, V8 + VADDW V14, V9, V9 + VXORV V5, V10, V5 + VXORV V6, V11, V6 + VXORV V7, V8, V7 + VXORV V4, V9, V4 + VROTRW $25, V5, V5 + VROTRW $25, V6, V6 + VROTRW $25, V7, V7 + VROTRW $25, V4, V4 + + SUBV $1, R15 + BNE R15, R0, chacha + + // load origin contants + VMOVQ (R10), V16.W4 + VMOVQ 4(R10), V17.W4 + VMOVQ 8(R10), V18.W4 + VMOVQ 12(R10), V19.W4 + + // load origin keys + VMOVQ (R7), V20.W4 + VMOVQ 4(R7), V21.W4 + VMOVQ 8(R7), V22.W4 + VMOVQ 12(R7), V23.W4 + VMOVQ 16(R7), V24.W4 + VMOVQ 20(R7), V25.W4 + VMOVQ 24(R7), V26.W4 + VMOVQ 28(R7), V27.W4 + + // add back the initial state to generate the key stream + VADDW V30, V12, V12 // update counter in advance to prevent V30 from being overwritten + VADDW V16, V0, V0 + VADDW V17, V1, V1 + VADDW V18, V2, V2 + VADDW V19, V3, V3 + + // load origin counter + nonce + VMOVQ (R9), V28.W4 + VMOVQ (R8), V29.W4 + VMOVQ 4(R8), V30.W4 + VMOVQ 8(R8), V31.W4 + + VADDW V20, V4, V4 + VADDW V21, V5, V5 + VADDW V22, V6, V6 + VADDW V23, V7, V7 + VADDW V24, V8, V8 + VADDW V25, V9, V9 + VADDW V26, V10, V10 + VADDW V27, V11, V11 + VADDW V28, V12, V12 + VADDW V29, V13, V13 + VADDW V30, V14, V14 + VADDW V31, V15, V15 + + // shuffle + VILVLW V0, V1, V16 + VILVHW V0, V1, V17 + VILVLW V2, V3, V18 + VILVHW V2, V3, V19 + VILVLW V4, V5 ,V20 + VILVHW V4, V5, V21 + VILVLW V6, V7, V22 + VILVHW V6, V7, V23 + VILVLW V8, V9, V24 + VILVHW V8, V9, V25 + VILVLW V10, V11, V26 + VILVHW V10, V11, V27 + VILVLW V12, V13, V28 + VILVHW V12, V13, V29 + VILVLW V14, V15, V30 + VILVHW V14, V15, V31 + VILVLV V16, V18, V0 + VILVHV V16, V18, V4 + VILVLV V17, V19, V8 + VILVHV V17, V19, V12 + + // load src data from R5 + VMOVQ 0(R5), V16 + VMOVQ 16(R5), V17 + VMOVQ 32(R5), V18 + VMOVQ 48(R5), V19 + + VILVLV V20, V22, V1 + VILVHV V20, V22, V5 + VILVLV V21, V23, V9 + VILVHV V21, V23, V13 + + VMOVQ 64(R5), V20 + VMOVQ 80(R5), V21 + VMOVQ 96(R5), V22 + VMOVQ 112(R5), V23 + + VILVLV V24, V26, V2 + VILVHV V24, V26, V6 + VILVLV V25, V27, V10 + VILVHV V25, V27, V14 + + VMOVQ 128(R5), V24 + VMOVQ 144(R5), V25 + VMOVQ 160(R5), V26 + VMOVQ 176(R5), V27 + + VILVLV V28, V30, V3 + VILVHV V28, V30, V7 + VILVLV V29, V31, V11 + VILVHV V29, V31, V15 + + VMOVQ 192(R5), V28 + VMOVQ 208(R5), V29 + VMOVQ 224(R5), V30 + VMOVQ 240(R5), V31 + + VXORV V0, V16, V16 + VXORV V1, V17, V17 + VXORV V2, V18, V18 + VXORV V3, V19, V19 + + VMOVQ V16, 0(R4) + VMOVQ V17, 16(R4) + VMOVQ V18, 32(R4) + VMOVQ V19, 48(R4) + + VXORV V4, V20, V20 + VXORV V5, V21, V21 + VXORV V6, V22, V22 + VXORV V7, V23, V23 + + VMOVQ V20, 64(R4) + VMOVQ V21, 80(R4) + VMOVQ V22, 96(R4) + VMOVQ V23, 112(R4) + + VXORV V8, V24, V24 + VXORV V9, V25, V25 + VXORV V10, V26, V26 + VXORV V11, V27, V27 + + VMOVQ V24, 128(R4) + VMOVQ V25, 144(R4) + VMOVQ V26, 160(R4) + VMOVQ V27, 176(R4) + + VXORV V12, V28, V28 + VXORV V13, V29, V29 + VXORV V14, V30, V30 + VXORV V15, V31, V31 + + VMOVQ V28, 192(R4) + VMOVQ V29, 208(R4) + VMOVQ V30, 224(R4) + VMOVQ V31, 240(R4) + + ADD $4, R12, R12 + MOVW R12, (R9) // update counter + + ADDV $256, R4, R4 + ADDV $256, R5, R5 + SUBV $256, R6, R6 + BNE R6, R0, loop + + RET diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go index c709b728..3853cc0e 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego +//go:build (!arm64 && !loong64 && !s390x && !ppc64 && !ppc64le) || !gc || purego package chacha20 diff --git a/vendor/golang.org/x/crypto/ssh/certs.go b/vendor/golang.org/x/crypto/ssh/certs.go index fa848f51..8788a94b 100644 --- a/vendor/golang.org/x/crypto/ssh/certs.go +++ b/vendor/golang.org/x/crypto/ssh/certs.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "net" + "slices" "sort" "time" ) @@ -34,6 +35,15 @@ const ( CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" CertAlgoSKED25519v01 = "sk-ssh-ed25519-cert-v01@openssh.com" + // CertAlgoMLDSA44v01Go, CertAlgoMLDSA65v01Go and CertAlgoMLDSA87v01Go + // are certificate algorithms based on ML-DSA. No specification defines + // them, so these are vendor names as per RFC 4251, Section 4.2. The + // format is that of [SSH-CERTS], with the public key encoded as in + // [SSH-MLDSA], Section 4. + CertAlgoMLDSA44v01Go = "ssh-mldsa-44-cert-v01@golang.org" + CertAlgoMLDSA65v01Go = "ssh-mldsa-65-cert-v01@golang.org" + CertAlgoMLDSA87v01Go = "ssh-mldsa-87-cert-v01@golang.org" + // CertAlgoRSASHA256v01 and CertAlgoRSASHA512v01 can't appear as a // Certificate.Type (or PublicKey.Type), but only in // ClientConfig.HostKeyAlgorithms. @@ -305,8 +315,11 @@ const sourceAddressCriticalOption = "source-address" // minimally, the IsAuthority callback should be set. type CertChecker struct { // SupportedCriticalOptions lists the CriticalOptions that the - // server application layer understands. These are only used - // for user certificates. + // application layer understands. A certificate carrying a critical + // option that is not listed here is rejected. + // CertChecker.Authenticate additionally accepts the source-address + // option, which the server enforces on the Permissions that + // Authenticate returns. SupportedCriticalOptions []string // IsUserAuthority should return true if the key is recognized as an @@ -369,8 +382,9 @@ func (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) return c.CheckCert(hostname, cert) } -// Authenticate checks a user certificate. Authenticate can be used as -// a value for ServerConfig.PublicKeyCallback. +// Authenticate checks a user certificate. Authenticate can be used as a value +// for ServerConfig.PublicKeyCallback. The source-address critical option is +// allowed, as it will be enforced by the server. func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) { cert, ok := pubKey.(*Certificate) if !ok { @@ -389,8 +403,11 @@ func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permis if !c.IsUserAuthority(cert.SignatureKey) { return nil, fmt.Errorf("ssh: certificate signed by unrecognized authority") } - - if err := c.CheckCert(conn.User(), cert); err != nil { + // The source-address critical option is enforced by serverAuthenticate, + // so it is supported regardless of SupportedCriticalOptions + cc := *c + cc.SupportedCriticalOptions = append(slices.Clip(cc.SupportedCriticalOptions), sourceAddressCriticalOption) + if err := cc.CheckCert(conn.User(), cert); err != nil { return nil, err } @@ -398,27 +415,15 @@ func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permis } // CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and -// the signature of the certificate. +// the signature of the certificate. Critical options that are not listed in +// SupportedCriticalOptions are rejected. func (c *CertChecker) CheckCert(principal string, cert *Certificate) error { if c.IsRevoked != nil && c.IsRevoked(cert) { return fmt.Errorf("ssh: certificate serial %d revoked", cert.Serial) } for opt := range cert.CriticalOptions { - // sourceAddressCriticalOption will be enforced by - // serverAuthenticate - if opt == sourceAddressCriticalOption { - continue - } - - found := false - for _, supp := range c.SupportedCriticalOptions { - if supp == opt { - found = true - break - } - } - if !found { + if !slices.Contains(c.SupportedCriticalOptions, opt) { return fmt.Errorf("ssh: unsupported critical option %q in certificate", opt) } } @@ -529,6 +534,9 @@ var certKeyAlgoNames = map[string]string{ CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256, CertAlgoED25519v01: KeyAlgoED25519, CertAlgoSKED25519v01: KeyAlgoSKED25519, + CertAlgoMLDSA44v01Go: KeyAlgoMLDSA44, + CertAlgoMLDSA65v01Go: KeyAlgoMLDSA65, + CertAlgoMLDSA87v01Go: KeyAlgoMLDSA87, } // underlyingAlgo returns the signature algorithm associated with algo (which is diff --git a/vendor/golang.org/x/crypto/ssh/channel.go b/vendor/golang.org/x/crypto/ssh/channel.go index ba3279e9..d6010fd7 100644 --- a/vendor/golang.org/x/crypto/ssh/channel.go +++ b/vendor/golang.org/x/crypto/ssh/channel.go @@ -173,6 +173,12 @@ type channel struct { // (for outbound channels) or received (for inbound channels). decided bool + // established is set to true once the channel is open and may carry normal + // channel traffic: for an outbound channel when the peer's open + // confirmation is received, for an inbound channel when the local side + // accepts it. It is set and read from different goroutines. + established atomic.Bool + // direction contains either channelOutbound, for channels created // locally, or channelInbound, for channels created by the peer. direction channelDirection @@ -434,10 +440,20 @@ func (ch *channel) responseMessageReceived() error { return errors.New("ssh: duplicate response received for channel") } ch.decided = true + ch.established.Store(true) return nil } func (ch *channel) handlePacket(packet []byte) error { + // Only the open response is expected before the channel is established. + if !ch.established.Load() { + switch packet[0] { + case msgChannelOpenConfirm, msgChannelOpenFailure: + default: + return nil + } + } + switch packet[0] { case msgChannelData, msgChannelExtendedData: return ch.handleData(packet) @@ -503,7 +519,8 @@ func (ch *channel) handlePacket(packet []byte) error { default: } default: - ch.msg <- msg + // No other message type is expected on an established channel. + return fmt.Errorf("ssh: unexpected message type %d on channel %d", packet[0], ch.localId) } return nil } @@ -554,6 +571,7 @@ func (ch *channel) Accept() (Channel, <-chan *Request, error) { MaxPacketSize: ch.maxIncomingPayload, } ch.decided = true + ch.established.Store(true) if err := ch.sendMessage(confirm); err != nil { return nil, nil, err } diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go index 48d01995..d83cacfd 100644 --- a/vendor/golang.org/x/crypto/ssh/cipher.go +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -414,10 +414,34 @@ func (c *gcmCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) return plain, nil } -// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1 +// cbcCipher implements the CBC ciphers defined in RFC 4253 section 6.1, in +// MAC-then-encrypt mode and, for the *-etm@openssh.com MACs, in the +// encrypt-then-MAC mode defined in [PROTOCOL], section 1.5. +// +// 0 4 prefixLen macStart +// | | | | +// +---------------+----------------+---------+-----------------+-----------+ +// | packet_length | padding_length | payload | random padding | mac | +// +---------------+----------------+---------+-----------------+-----------+ +// |<--------- length = packet_length --------->|< macSize >| +// |< paddingLength >| +// |<-------------------------- entirePacketSize -------------------------->| +// +// MAC-then-encrypt (encStart = 0) +// |<----------------------- encLength ------------------------>| +// |<-------------- MAC'd (seqNum || plaintext) --------------->| +// +// encrypt-then-MAC (encStart = 4) +// |<--------------- encLength ---------------->| +// |<-------------- MAC'd (seqNum || ciphertext) -------------->| +// +// encLength is always a multiple of effectiveBlockSize, and in ETM mode the +// packet_length field is not part of it. The padding is only trustworthy once +// the MAC has been verified. type cbcCipher struct { mac hash.Hash macSize uint32 + etm bool decrypter cipher.BlockMode encrypter cipher.BlockMode @@ -431,16 +455,20 @@ type cbcCipher struct { oracleCamouflage uint32 } -func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { +func newCBCCipher(c cipher.Block, _, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { + macMode := macModes[algs.MAC] + if macMode == nil { + return nil, fmt.Errorf("ssh: unsupported MAC %v", algs.MAC) + } + mac := macMode.new(macKey) cbc := &cbcCipher{ - mac: macModes[algs.MAC].new(macKey), + mac: mac, + macSize: uint32(mac.Size()), + etm: macMode.etm, decrypter: cipher.NewCBCDecrypter(c, iv), encrypter: cipher.NewCBCEncrypter(c, iv), packetData: make([]byte, 1024), } - if cbc.mac != nil { - cbc.macSize = uint32(cbc.mac.Size()) - } return cbc, nil } @@ -473,13 +501,6 @@ func newTripleDESCBCCipher(key, iv, macKey []byte, algs DirectionAlgorithms) (pa return cbc, nil } -func maxUInt32(a, b int) uint32 { - if a > b { - return uint32(a) - } - return uint32(b) -} - const ( cbcMinPacketSizeMultiple = 8 cbcMinPacketSize = 16 @@ -493,25 +514,38 @@ func (e cbcError) Error() string { return string(e) } func (c *cbcCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) { p, err := c.readCipherPacketLeaky(seqNum, r) - if err != nil { - if _, ok := err.(cbcError); ok { - // Verification error: read a fixed amount of - // data, to make distinguishing between - // failing MAC and failing length check more - // difficult. - io.CopyN(io.Discard, r, int64(c.oracleCamouflage)) - } + if _, ok := err.(cbcError); ok { + // Verification error: read a fixed amount of + // data, to make distinguishing between + // failing MAC and failing length check more + // difficult. + io.CopyN(io.Discard, r, int64(c.oracleCamouflage)) } return p, err } func (c *cbcCipher) readCipherPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) { blockSize := c.decrypter.BlockSize() + // The encrypted portion of a packet is a multiple of the cipher block size + // or 8, whichever is larger. + effectiveBlockSize := uint32(max(cbcMinPacketSizeMultiple, blockSize)) + encStart := uint32(0) + // A packet is at least 16 bytes, or the cipher block size if larger. This does + // not apply to EtM (but the encrypted length still can't be zero). + minEncLength := uint32(max(cbcMinPacketSize, blockSize)) + // For EtM MACs the packet length is transmitted in the clear and is not part + // of the encrypted data, which starts after it. + if c.etm { + encStart = 4 + minEncLength = effectiveBlockSize + } // Read the header, which will include some of the subsequent data in the - // case of block ciphers - this is copied back to the payload later. - // How many bytes of payload/padding will be read with this first read. - firstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize) + // case of block ciphers - this is copied back to the payload later. The + // rounding up to the block size covers at least prefixLen bytes, so the + // padding length is always within firstBlock. + headerEncLength := prefixLen - encStart + firstBlockLength := encStart + (headerEncLength+uint32(blockSize)-1)/uint32(blockSize)*uint32(blockSize) firstBlock := c.packetData[:firstBlockLength] if _, err := io.ReadFull(r, firstBlock); err != nil { return nil, err @@ -519,30 +553,49 @@ func (c *cbcCipher) readCipherPacketLeaky(seqNum uint32, r io.Reader) ([]byte, e c.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength - c.decrypter.CryptBlocks(firstBlock, firstBlock) - length := binary.BigEndian.Uint32(firstBlock[:4]) + c.mac.Reset() + binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) + c.mac.Write(c.seqNumBytes[:]) + + var length uint32 + if c.etm { + // For EtM MACs the MAC is computed over the cleartext packet length + // followed by the ciphertext, so it is updated before decrypting. + length = binary.BigEndian.Uint32(firstBlock[:encStart]) + c.mac.Write(firstBlock[:encStart]) + c.mac.Write(firstBlock[encStart:]) + c.decrypter.CryptBlocks(firstBlock[encStart:], firstBlock[encStart:]) + } else { + c.decrypter.CryptBlocks(firstBlock, firstBlock) + length = binary.BigEndian.Uint32(firstBlock[:4]) + } + if length > maxPacket { return nil, cbcError("ssh: packet too large") } - if length+4 < maxUInt32(cbcMinPacketSize, blockSize) { - // The minimum size of a packet is 16 (or the cipher block size, whichever - // is larger) bytes. + // Length of the encrypted portion of the packet, which includes the packet + // length field only for non-EtM MACs. + encLength := 4 + length - encStart + if encLength < minEncLength { return nil, cbcError("ssh: packet too small") } - // The length of the packet (including the length field but not the MAC) must - // be a multiple of the block size or 8, whichever is larger. - if (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 { + if encLength%effectiveBlockSize != 0 { return nil, cbcError("ssh: invalid packet length multiple") } + // The padding length is part of the encrypted data. For EtM MACs it is not + // acted upon before the MAC is verified, otherwise the CBC padding would + // still be usable as an oracle, which is what EtM prevents. paddingLength := uint32(firstBlock[4]) - if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 { - return nil, cbcError("ssh: invalid packet length") + if !c.etm { + if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 { + return nil, cbcError("ssh: invalid packet length") + } } - // Positions within the c.packetData buffer: - macStart := 4 + length - paddingStart := macStart - paddingLength + // Positions within the c.packetData buffer: the MAC follows the encrypted + // data. + macStart := encStart + encLength // Entire packet size, starting before length, ending at end of mac. entirePacketSize := macStart + c.macSize @@ -564,42 +617,58 @@ func (c *cbcCipher) readCipherPacketLeaky(seqNum uint32, r io.Reader) ([]byte, e c.oracleCamouflage -= uint32(n) remainingCrypted := c.packetData[firstBlockLength:macStart] + if c.etm { + c.mac.Write(remainingCrypted) + } c.decrypter.CryptBlocks(remainingCrypted, remainingCrypted) - mac := c.packetData[macStart:] - if c.mac != nil { - c.mac.Reset() - binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) - c.mac.Write(c.seqNumBytes[:]) + if !c.etm { c.mac.Write(c.packetData[:macStart]) - c.macResult = c.mac.Sum(c.macResult[:0]) - if subtle.ConstantTimeCompare(c.macResult, mac) != 1 { - return nil, cbcError("ssh: MAC failure") + } + c.macResult = c.mac.Sum(c.macResult[:0]) + if subtle.ConstantTimeCompare(c.macResult, c.packetData[macStart:]) != 1 { + return nil, cbcError("ssh: MAC failure") + } + + if c.etm { + if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 { + return nil, cbcError("ssh: invalid packet length") } } - return c.packetData[prefixLen:paddingStart], nil + return c.packetData[prefixLen : macStart-paddingLength], nil } -func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { - effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize()) - - // Length of encrypted portion of the packet (header, payload, padding). - // Enforce minimum padding and packet size. - encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPacketSize) +func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, payload []byte) error { + blockSize := c.encrypter.BlockSize() + // The encrypted portion of a packet is a multiple of the cipher block size + // or 8, whichever is larger. + effectiveBlockSize := uint32(max(cbcMinPacketSizeMultiple, blockSize)) + // For EtM MACs the packet length is transmitted in the clear and is not part + // of the encrypted data, which starts after it. + encStart := uint32(0) + if c.etm { + encStart = 4 + } + // Length of the encrypted portion of the packet (header, payload, padding), + // enforcing the minimum padding and the minimum packet size of RFC 4253, + // Section 6: 16 bytes, or the cipher block size if larger, excluding the + // MAC. + encLength := uint32(max(prefixLen-int(encStart)+len(payload)+cbcMinPaddingSize, cbcMinPacketSize-int(encStart))) // Enforce block size. encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize - - length := encLength - 4 - paddingLength := int(length) - (1 + len(packet)) + // The packet length field covers the whole packet except the field itself. + length := encStart + encLength - 4 + paddingLength := int(length) - (1 + len(payload)) // Overall buffer contains: header, payload, padding, mac. // Space for the MAC is reserved in the capacity but not the slice length. - bufferSize := encLength + c.macSize - if uint32(cap(c.packetData)) < bufferSize { - c.packetData = make([]byte, encLength, bufferSize) + macStart := encStart + encLength + entirePacketSize := macStart + c.macSize + if uint32(cap(c.packetData)) < entirePacketSize { + c.packetData = make([]byte, macStart, entirePacketSize) } else { - c.packetData = c.packetData[:encLength] + c.packetData = c.packetData[:macStart] } p := c.packetData @@ -611,24 +680,29 @@ func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader // Payload. p = p[1:] - copy(p, packet) + copy(p, payload) // Padding. - p = p[len(packet):] + p = p[len(payload):] if _, err := io.ReadFull(rand, p); err != nil { return err } - if c.mac != nil { - c.mac.Reset() - binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) - c.mac.Write(c.seqNumBytes[:]) + c.mac.Reset() + binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) + c.mac.Write(c.seqNumBytes[:]) + if c.etm { + // For EtM MACs the MAC is computed over the cleartext packet length + // followed by the ciphertext. + c.mac.Write(c.packetData[:encStart]) + c.encrypter.CryptBlocks(c.packetData[encStart:], c.packetData[encStart:]) + c.mac.Write(c.packetData[encStart:]) + } else { c.mac.Write(c.packetData) - // The MAC is now appended into the capacity reserved for it earlier. - c.packetData = c.mac.Sum(c.packetData) + c.encrypter.CryptBlocks(c.packetData, c.packetData) } - - c.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength]) + // The MAC is now appended into the capacity reserved for it earlier. + c.packetData = c.mac.Sum(c.packetData) if _, err := w.Write(c.packetData); err != nil { return err diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go index aed0fd92..544eb93d 100644 --- a/vendor/golang.org/x/crypto/ssh/common.go +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -258,6 +258,11 @@ type Algorithms struct { } func init() { + supportedHostKeyAlgos = slices.Concat(supportedHostKeyAlgos, mldsaCertAlgos, mldsaKeyAlgos) + defaultHostKeyAlgos = slices.Concat(defaultHostKeyAlgos, mldsaCertAlgos, mldsaKeyAlgos) + supportedPubKeyAuthAlgos = slices.Concat(supportedPubKeyAuthAlgos, mldsaKeyAlgos) + defaultPubKeyAuthAlgos = slices.Concat(defaultPubKeyAuthAlgos, mldsaKeyAlgos) + if fips140.Enabled() { defaultHostKeyAlgos = slices.DeleteFunc(defaultHostKeyAlgos, func(algo string) bool { _, err := hashFunc(underlyingAlgo(algo)) @@ -281,6 +286,10 @@ func hashFunc(format string) (crypto.Hash, error) { case KeyAlgoED25519: // KeyAlgoED25519 doesn't pre-hash. return 0, nil + case KeyAlgoMLDSA44, KeyAlgoMLDSA65, KeyAlgoMLDSA87: + // ML-DSA doesn't pre-hash. This case is not build tagged, availability + // is decided by mldsaKeyAlgos. + return 0, nil case KeyAlgoRSA, InsecureKeyAlgoDSA: if fips140.Enabled() { return 0, fmt.Errorf("ssh: hash algorithm for format %q not allowed in FIPS 140 mode", format) @@ -354,7 +363,13 @@ func keyFormatForAlgorithm(sigAlgo string) string { CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, - CertAlgoSKED25519v01: + CertAlgoSKED25519v01, + KeyAlgoMLDSA44, + KeyAlgoMLDSA65, + KeyAlgoMLDSA87, + CertAlgoMLDSA44v01Go, + CertAlgoMLDSA65v01Go, + CertAlgoMLDSA87v01Go: return sigAlgo default: return "" diff --git a/vendor/golang.org/x/crypto/ssh/doc.go b/vendor/golang.org/x/crypto/ssh/doc.go index 5b4de9ef..39ac133e 100644 --- a/vendor/golang.org/x/crypto/ssh/doc.go +++ b/vendor/golang.org/x/crypto/ssh/doc.go @@ -17,6 +17,7 @@ References: [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 [SSH-CERTS]: https://datatracker.ietf.org/doc/html/draft-miller-ssh-cert-01 + [SSH-MLDSA]: https://datatracker.ietf.org/doc/html/draft-sfluhrer-ssh-mldsa-08 [FIPS 140-3 mode]: https://go.dev/doc/security/fips140 This package does not fall under the stability promise of the Go language itself, diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go index fbbfb6cf..eb052381 100644 --- a/vendor/golang.org/x/crypto/ssh/keys.go +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -51,6 +51,12 @@ const ( KeyAlgoED25519 = "ssh-ed25519" KeyAlgoSKED25519 = "sk-ssh-ed25519@openssh.com" + // KeyAlgoMLDSA44, KeyAlgoMLDSA65 and KeyAlgoMLDSA87 are the ML-DSA + // algorithms of [SSH-MLDSA]. + KeyAlgoMLDSA44 = "ssh-mldsa-44" + KeyAlgoMLDSA65 = "ssh-mldsa-65" + KeyAlgoMLDSA87 = "ssh-mldsa-87" + // KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, not // public key formats, so they can't appear as a PublicKey.Type. The // corresponding PublicKey.Type is KeyAlgoRSA. See RFC 8332, Section 2. @@ -83,7 +89,10 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err return parseED25519(in) case KeyAlgoSKED25519: return parseSKEd25519(in) - case CertAlgoRSAv01, InsecureCertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: + case KeyAlgoMLDSA44, KeyAlgoMLDSA65, KeyAlgoMLDSA87: + return parseMLDSA(in, algo) + case CertAlgoRSAv01, InsecureCertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01, + CertAlgoMLDSA44v01Go, CertAlgoMLDSA65v01Go, CertAlgoMLDSA87v01Go: cert, err := parseCert(in, certKeyAlgoNames[algo]) if err != nil { return nil, nil, err @@ -98,11 +107,30 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", algo) } +// trimSpace removes leading and trailing ASCII space and tab. +func trimSpace(in []byte) []byte { + return bytes.Trim(in, " \t") +} + +// asciiFields splits in around each run of ASCII space and tab. +func asciiFields(in []byte) [][]byte { + return bytes.FieldsFunc(in, func(r rune) bool { + return r == ' ' || r == '\t' + }) +} + +// dropCR removes a single trailing carriage return, so that an entry written +// with CRLF line endings is read like one written with LF endings. A carriage +// return anywhere else belongs to the field that holds it. +func dropCR(in []byte) []byte { + return bytes.TrimSuffix(in, []byte("\r")) +} + // parseAuthorizedKey parses a public key in OpenSSH authorized_keys format // (see sshd(8) manual page) once the options and key type fields have been // removed. func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) { - in = bytes.TrimSpace(in) + in = trimSpace(in) i := bytes.IndexAny(in, " \t") if i == -1 { @@ -120,7 +148,7 @@ func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) { if err != nil { return nil, "", err } - comment = string(bytes.TrimSpace(in[i:])) + comment = string(trimSpace(in[i:])) return out, comment, nil } @@ -149,12 +177,9 @@ func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey rest = nil } - end = bytes.IndexByte(in, '\r') - if end != -1 { - in = in[:end] - } + in = dropCR(in) - in = bytes.TrimSpace(in) + in = trimSpace(in) if len(in) == 0 || in[0] == '#' { in = rest continue @@ -168,8 +193,10 @@ func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey // Strip out the beginning of the known_host key. // This is either an optional marker or a (set of) hostname(s). - keyFields := bytes.Fields(in) - if len(keyFields) < 3 || len(keyFields) > 5 { + // The comment is not delimited, so there is no upper bound on the + // number of fields. + keyFields := asciiFields(in) + if len(keyFields) < 3 { return "", nil, nil, "", nil, errors.New("ssh: invalid entry in known_hosts data") } @@ -215,12 +242,9 @@ func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []str rest = nil } - end = bytes.IndexByte(in, '\r') - if end != -1 { - in = in[:end] - } + in = dropCR(in) - in = bytes.TrimSpace(in) + in = trimSpace(in) if len(in) == 0 || in[0] == '#' { in = rest continue @@ -334,7 +358,8 @@ func MarshalAuthorizedKey(key PublicKey) []byte { } // MarshalPrivateKey returns a PEM block with the private key serialized in the -// OpenSSH format. +// OpenSSH format. ML-DSA keys are not supported, since no OpenSSH format is +// defined for them: use [x509.MarshalPKCS8PrivateKey] instead. func MarshalPrivateKey(key crypto.PrivateKey, comment string) (*pem.Block, error) { return marshalOpenSSHPrivateKey(key, comment, unencryptedOpenSSHMarshaler) } @@ -1173,9 +1198,9 @@ func (k *skEd25519PublicKey) CryptoPublicKey() crypto.PublicKey { } // NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey, -// *ecdsa.PrivateKey or any other crypto.Signer and returns a -// corresponding Signer instance. ECDSA keys must use P-256, P-384 or -// P-521. DSA keys must use parameter size L1024N160. +// *ecdsa.PrivateKey, *mldsa.PrivateKey, or any other crypto.Signer and returns +// a corresponding Signer instance. ECDSA keys must use P-256, P-384 or P-521. +// DSA keys must use parameter size L1024N160. func NewSignerFromKey(key interface{}) (Signer, error) { switch key := key.(type) { case crypto.Signer: @@ -1285,8 +1310,8 @@ func (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm } // NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey, -// or ed25519.PublicKey returns a corresponding PublicKey instance. -// ECDSA keys must use P-256, P-384 or P-521. +// ed25519.PublicKey, or an *mldsa.PublicKey, and returns a corresponding +// PublicKey instance. ECDSA keys must use P-256, P-384 or P-521. func NewPublicKey(key interface{}) (PublicKey, error) { switch key := key.(type) { case *rsa.PublicKey: @@ -1304,7 +1329,13 @@ func NewPublicKey(key interface{}) (PublicKey, error) { } return ed25519PublicKey(key), nil default: - return nil, fmt.Errorf("ssh: unsupported key type %T", key) + pub, err := newMLDSAPublicKey(key) + if errors.Is(err, errNotMLDSAKey) { + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } else if err != nil { + return nil, err + } + return pub, nil } } diff --git a/vendor/golang.org/x/crypto/ssh/mldsa.go b/vendor/golang.org/x/crypto/ssh/mldsa.go new file mode 100644 index 00000000..09176b65 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mldsa.go @@ -0,0 +1,133 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.27 && !fips140v1.0 + +package ssh + +import ( + "crypto" + "crypto/mldsa" + "errors" + "fmt" +) + +// mldsaKeyAlgos are the ML-DSA public key algorithms implemented by this +// package. +var mldsaKeyAlgos = []string{ + KeyAlgoMLDSA44, + KeyAlgoMLDSA65, + KeyAlgoMLDSA87, +} + +// mldsaCertAlgos are the certificate algorithms for the keys in mldsaKeyAlgos. +var mldsaCertAlgos = []string{ + CertAlgoMLDSA44v01Go, + CertAlgoMLDSA65v01Go, + CertAlgoMLDSA87v01Go, +} + +var errNotMLDSAKey = errors.New("ssh: not an ML-DSA key") + +// mldsaParameters returns the ML-DSA parameter set for the given public key +// algorithm name. +func mldsaParameters(algo string) (mldsa.Parameters, error) { + switch algo { + case KeyAlgoMLDSA44: + return mldsa.MLDSA44(), nil + case KeyAlgoMLDSA65: + return mldsa.MLDSA65(), nil + case KeyAlgoMLDSA87: + return mldsa.MLDSA87(), nil + default: + return mldsa.Parameters{}, fmt.Errorf("ssh: not an ML-DSA algorithm: %q", algo) + } +} + +// mldsaKeyAlgo returns the public key algorithm name for the given ML-DSA +// parameter set. +func mldsaKeyAlgo(params mldsa.Parameters) string { + switch params { + case mldsa.MLDSA44(): + return KeyAlgoMLDSA44 + case mldsa.MLDSA65(): + return KeyAlgoMLDSA65 + case mldsa.MLDSA87(): + return KeyAlgoMLDSA87 + default: + panic("ssh: internal error: unknown ML-DSA parameter set: " + params.String()) + } +} + +// mldsaPublicKey implements PublicKey for the ML-DSA algorithms of [SSH-MLDSA]. +type mldsaPublicKey struct { + key *mldsa.PublicKey +} + +func (k *mldsaPublicKey) Type() string { + return mldsaKeyAlgo(k.key.Parameters()) +} + +func parseMLDSA(in []byte, algo string) (out PublicKey, rest []byte, err error) { + params, err := mldsaParameters(algo) + if err != nil { + return nil, nil, err + } + + var w struct { + KeyBytes []byte + Rest []byte `ssh:"rest"` + } + + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + key, err := mldsa.NewPublicKey(params, w.KeyBytes) + if err != nil { + return nil, nil, fmt.Errorf("ssh: invalid %s public key: %v", params, err) + } + + return &mldsaPublicKey{key: key}, w.Rest, nil +} + +func (k *mldsaPublicKey) Marshal() []byte { + w := struct { + Name string + KeyBytes []byte + }{ + k.Type(), + k.key.Bytes(), + } + return Marshal(&w) +} + +func (k *mldsaPublicKey) Verify(b []byte, sig *Signature) error { + if sig.Format != k.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) + } + // nil options select pure ML-DSA with an empty context, as required by + // [SSH-MLDSA], Sections 6 and 8. + if err := mldsa.Verify(k.key, b, sig.Blob, nil); err != nil { + return errors.New("ssh: signature did not verify") + } + + return nil +} + +func (k *mldsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return k.key +} + +// newMLDSAPublicKey returns a PublicKey wrapping key. +func newMLDSAPublicKey(key crypto.PublicKey) (PublicKey, error) { + k, ok := key.(*mldsa.PublicKey) + if !ok { + return nil, errNotMLDSAKey + } + if k == nil || *k == (mldsa.PublicKey{}) { + return nil, errors.New("ssh: invalid ML-DSA public key") + } + return &mldsaPublicKey{key: k}, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/mldsa_unsupported.go b/vendor/golang.org/x/crypto/ssh/mldsa_unsupported.go new file mode 100644 index 00000000..9fec354a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mldsa_unsupported.go @@ -0,0 +1,29 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.27 || fips140v1.0 + +package ssh + +import ( + "crypto" + "errors" + "fmt" +) + +var mldsaKeyAlgos, mldsaCertAlgos []string + +var errMLDSAUnsupported = fmt.Errorf("ssh: ML-DSA is not available in this build: %w", + errors.ErrUnsupported) + +var errNotMLDSAKey = errors.New("ssh: not an ML-DSA key") + +func parseMLDSA(in []byte, algo string) (out PublicKey, rest []byte, err error) { + return nil, nil, errMLDSAUnsupported +} + +func newMLDSAPublicKey(key crypto.PublicKey) (PublicKey, error) { + // In this version of Go, *mldsa.PublicKey does not exist. + return nil, errNotMLDSAKey +} diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go index fa3dd6a4..540865df 100644 --- a/vendor/golang.org/x/crypto/ssh/transport.go +++ b/vendor/golang.org/x/crypto/ssh/transport.go @@ -331,13 +331,19 @@ func exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err er // chars const maxVersionStringBytes = 255 +// maxPreVersionLines is the maximum number of lines sent by the peer +// before the version string. Each of these lines is limited to a maximum +// of maxVersionStringBytes chars. Lines sent before the version string +// are silently ignored. +const maxPreVersionLines = 1024 + // Read version string as specified by RFC 4253, section 4.2. func readVersion(r io.Reader) ([]byte, error) { versionString := make([]byte, 0, 64) var ok bool var buf [1]byte - for length := 0; length < maxVersionStringBytes; length++ { + for lines := 0; len(versionString) < maxVersionStringBytes && lines < maxPreVersionLines; { _, err := io.ReadFull(r, buf[:]) if err != nil { return nil, err @@ -347,9 +353,9 @@ func readVersion(r io.Reader) ([]byte, error) { if buf[0] == '\n' { if !bytes.HasPrefix(versionString, []byte("SSH-")) { // RFC 4253 says we need to ignore all version string lines - // except the one containing the SSH version (provided that - // all the lines do not exceed 255 bytes in total). + // except the one containing the SSH version. versionString = versionString[:0] + lines++ continue } ok = true diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go index df3edc5b..293f118d 100644 --- a/vendor/golang.org/x/net/html/escape.go +++ b/vendor/golang.org/x/net/html/escape.go @@ -154,10 +154,7 @@ func unescapeEntity(s []byte, attribute bool) (rune, rune, int) { } else if x := entity2[entityName]; x[0] != 0 { return x[0], x[1], i } else if !attribute { - maxLen := len(entityName) - 1 - if maxLen > longestEntityWithoutSemicolon { - maxLen = longestEntityWithoutSemicolon - } + maxLen := min(len(entityName)-1, longestEntityWithoutSemicolon) for j := maxLen; j > 1; j-- { if x := entity[entityName[:j]]; x != 0 { return x, 0, j + 1 diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index f1ce515d..422b139c 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -61,7 +61,11 @@ var X86 struct { HasBMI2 bool // Bit manipulation instruction set 2 HasCX16 bool // Compare and exchange 16 Bytes HasERMS bool // Enhanced REP for MOVSB and STOSB + HasF16C bool // 16-bit floating-point conversion instructions HasFMA bool // Fused-multiply-add instructions + HasLAHF bool // LAHF/SAHF available in 64-bit mode + HasLZCNT bool // Leading zeros count instruction + HasMOVBE bool // Move data after byte swap HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM HasPOPCNT bool // Hamming weight instruction POPCNT. @@ -75,6 +79,7 @@ var X86 struct { HasAVXIFMA bool // Advanced vector extension Integer Fused Multiply Add HasAVXVNNI bool // Advanced vector extension Vector Neural Network Instructions HasAVXVNNIInt8 bool // Advanced vector extension Vector Neural Network Int8 instructions + HasXSAVE bool // XSAVE/XRSTOR/XSETBV/XGETBV instructions (hardware support; see also HasOSXSAVE) _ CacheLinePad } @@ -182,12 +187,13 @@ var MIPS64X struct { // require kernel support to work (DARN, SCV), so there are feature bits for // those as well. The struct is padded to avoid false sharing. var PPC64 struct { - _ CacheLinePad - HasDARN bool // Hardware random number generator (requires kernel enablement) - HasSCV bool // Syscall vectored (requires kernel enablement) - IsPOWER8 bool // ISA v2.07 (POWER8) - IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8 - _ CacheLinePad + _ CacheLinePad + HasDARN bool // Hardware random number generator (requires kernel enablement) + HasSCV bool // Syscall vectored (requires kernel enablement) + IsPOWER8 bool // ISA v2.07 (POWER8) + IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8 + IsPOWER10 bool // ISA v3.1 (POWER10 and POWER11; POWER11 did not add a new architected level), implies IsPOWER9 + _ CacheLinePad } // S390X contains the supported CPU features of the current IBM Z @@ -248,13 +254,21 @@ var RISCV64 struct { HasZvks bool // ShangMi Algorithm Suite HasZvksc bool // ShangMi Algorithm Suite with carryless multiplication HasZvksg bool // ShangMi Algorithm Suite with GCM + VLENB uint // Vector register length in bytes, 0 if undetected _ CacheLinePad } +// doDerived, if non-nil, is called after processing GODEBUG to set "derived" +// feature flags. +var doDerived func() + func init() { archInit() initOptions() processOptions() + if doDerived != nil { + doDerived() + } } // options contains the cpu debug options that can be used in GODEBUG. diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_gc_riscv64.go new file mode 100644 index 00000000..3d660dd4 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_riscv64.go @@ -0,0 +1,11 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc + +package cpu + +// Can only be called when the vector extension is present. +// Implemented in cpu_riscv64.s. +func readVLENB() uint diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go index 197188e6..70b3dc7d 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go @@ -11,6 +11,7 @@ const ( // ISA Level _PPC_FEATURE2_ARCH_2_07 = 0x80000000 _PPC_FEATURE2_ARCH_3_00 = 0x00800000 + _PPC_FEATURE2_ARCH_3_1 = 0x00040000 // CPU features _PPC_FEATURE2_DARN = 0x00200000 @@ -21,6 +22,9 @@ func doinit() { // HWCAP2 feature bits PPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07) PPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00) + // ISA 3.1 covers both POWER10 and POWER11: POWER11 did not introduce a + // new architected HWCAP level, so there is no separate IsPOWER11. + PPC64.IsPOWER10 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_1) PPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN) PPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV) } diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go index f4fb52ee..53e90911 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go @@ -130,6 +130,9 @@ func doinit() { RISCV64.HasFastMisaligned = v == riscv_HWPROBE_MISALIGNED_FAST } } + if RISCV64.HasV { + RISCV64.VLENB = readVLENB() + } // Let's double check with HWCAP if the C extension does not appear to be supported. // This may happen if we're running on a kernel older than 6.4. @@ -137,6 +140,14 @@ func doinit() { if !RISCV64.HasC { RISCV64.HasC = isSet(hwCap, hwcap_RISCV_ISA_C) } + + doDerived = func() { + // If the vector extension is disabled by GODEBUG, then the VLENB is zero. + if !RISCV64.HasV { + RISCV64.VLENB = 0 + } + } + } func isSet(hwc uint, value uint) bool { diff --git a/vendor/golang.org/x/sys/cpu/cpu_netbsd_amd64.go b/vendor/golang.org/x/sys/cpu/cpu_netbsd_amd64.go new file mode 100644 index 00000000..4f981b1c --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_netbsd_amd64.go @@ -0,0 +1,47 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build netbsd && amd64 && gc + +package cpu + +func doinit() { + // NetBSD corrupts avx registers when receiving signals. + // See issue 80285. + // TODO: when NetBSD fixes the bug, add a version + // check and skip here. + X86.HasAVX = false + X86.HasAVX2 = false + // Set these also, just to be safe + X86.HasAVXVNNI = false + X86.HasAVX512 = false + X86.HasAVX512F = false + X86.HasAVX512CD = false + X86.HasAVX512CD = false + X86.HasAVX512ER = false + X86.HasAVX512PF = false + X86.HasAVX512VL = false + X86.HasAVX512BW = false + X86.HasAVX512DQ = false + X86.HasAVX512IFMA = false + X86.HasAVX512VBMI = false + X86.HasAVX5124VNNIW = false + X86.HasAVX5124FMAPS = false + X86.HasAVX512VPOPCNTDQ = false + X86.HasAVX512VPCLMULQDQ = false + X86.HasAVX512VNNI = false + X86.HasAVX512GFNI = false + X86.HasAVX512VAES = false + X86.HasAVX512VBMI2 = false + X86.HasAVX512BITALG = false + X86.HasAVX512BF16 = false + X86.HasAVXIFMA = false + X86.HasAVXVNNI = false + X86.HasAVXVNNIInt8 = false + +} + +func darwinSupportsAVX512() bool { + panic("only implemented for gc && amd64 && darwin") +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_x86.go b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go index a0fd7e2f..82b7580d 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_other_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build 386 || amd64p32 || (amd64 && (!darwin || !gc)) +//go:build 386 || amd64p32 || (amd64 && ((!darwin && !netbsd) || !gc)) package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.s b/vendor/golang.org/x/sys/cpu/cpu_riscv64.s new file mode 100644 index 00000000..b092fb26 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_riscv64.s @@ -0,0 +1,17 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc + +#include "textflag.h" + +// Read the vector register length in bytes from the vlenb CSR. +// May only be called when the vector extension is present. +// func readVLENB() uint +TEXT ·readVLENB(SB), NOSPLIT|NOFRAME, $0-8 + // Go 1.25's assembler does not recognize VLENB, so use its raw CSRR encoding. + // Replace WORD with CSRR VLENB, X10 once go.mod requires Go 1.27. + WORD $0xc2202573 + MOV X10, ret+0(FP) + RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_sparc64.go b/vendor/golang.org/x/sys/cpu/cpu_sparc64.go new file mode 100644 index 00000000..0199ef19 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_sparc64.go @@ -0,0 +1,12 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build sparc64 + +package cpu + +// The L1 line is 32 bytes; false sharing is governed by the 64-byte L2 line. +const cacheLineSize = 64 + +func initOptions() {} diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go index f5723d4f..7e6cead5 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -43,7 +43,11 @@ func initOptions() { {Name: "bmi2", Feature: &X86.HasBMI2}, {Name: "cx16", Feature: &X86.HasCX16}, {Name: "erms", Feature: &X86.HasERMS}, + {Name: "f16c", Feature: &X86.HasF16C}, {Name: "fma", Feature: &X86.HasFMA}, + {Name: "lahf", Feature: &X86.HasLAHF}, + {Name: "lzcnt", Feature: &X86.HasLZCNT}, + {Name: "movbe", Feature: &X86.HasMOVBE}, {Name: "osxsave", Feature: &X86.HasOSXSAVE}, {Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ}, {Name: "popcnt", Feature: &X86.HasPOPCNT}, @@ -56,6 +60,7 @@ func initOptions() { {Name: "avxifma", Feature: &X86.HasAVXIFMA}, {Name: "avxvnni", Feature: &X86.HasAVXVNNI}, {Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8}, + {Name: "xsave", Feature: &X86.HasXSAVE}, // These capabilities should always be enabled on amd64: {Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, @@ -83,10 +88,13 @@ func archInit() { cpuid_AVX512VPOPCNTDQ = 1 << 14 cpuid_SSE41 = 1 << 19 cpuid_SSE42 = 1 << 20 + cpuid_MOVBE = 1 << 22 cpuid_POPCNT = 1 << 23 cpuid_AES = 1 << 25 + cpuid_XSAVE = 1 << 26 cpuid_OSXSAVE = 1 << 27 cpuid_AVX = 1 << 28 + cpuid_F16C = 1 << 29 // "Extended Feature Flag" bits returned in EBX for CPUID EAX=0x7 ECX=0x0 cpuid_BMI1 = 1 << 3 @@ -110,6 +118,9 @@ func archInit() { // edx bits cpuid_FSRM = 1 << 4 + // ecx bits for CPUID 0x80000001 + cpuid_LAHF = 1 << 0 + cpuid_LZCNT = 1 << 5 // edx bits for CPUID 0x80000001 cpuid_RDTSCP = 1 << 27 ) @@ -158,9 +169,21 @@ func archInit() { X86.HasSSE42 = isSet(ecx1, cpuid_SSE42) X86.HasPOPCNT = isSet(ecx1, cpuid_POPCNT) X86.HasAES = isSet(ecx1, cpuid_AES) + X86.HasXSAVE = isSet(ecx1, cpuid_XSAVE) X86.HasOSXSAVE = isSet(ecx1, cpuid_OSXSAVE) + X86.HasF16C = isSet(ecx1, cpuid_F16C) + X86.HasMOVBE = isSet(ecx1, cpuid_MOVBE) X86.HasRDRAND = isSet(ecx1, cpuid_RDRAND) + // Extended processor info and feature bits, under the separate extended + // (0x8000_0000-prefixed) leaf hierarchy, so maxID (the basic leaf count) + // doesn't gate it. + if maxExtID, _, _, _ := cpuid(0x80000000, 0); maxExtID >= 0x80000001 { + _, _, ecxExt1, _ := cpuid(0x80000001, 0) + X86.HasLAHF = isSet(ecxExt1, cpuid_LAHF) + X86.HasLZCNT = isSet(ecxExt1, cpuid_LZCNT) + } + var osSupportsAVX, osSupportsAVX512 bool // For XGETBV, OSXSAVE bit is required and sufficient. if X86.HasOSXSAVE { diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s index bdfc024d..2e1f4c3e 100644 --- a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -13,6 +13,16 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. +TEXT ·Syscall(SB),NOSPLIT,$0-56 + MOVD $syscall·Syscall(SB), R31 + MOVD R31, CTR + JMP (CTR) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + MOVD $syscall·Syscall6(SB), R31 + MOVD R31, CTR + JMP (CTR) + TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 BL runtime·entersyscall(SB) MOVD a1+8(FP), R3 @@ -28,6 +38,16 @@ TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 BL runtime·exitsyscall(SB) RET +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + MOVD $syscall·RawSyscall(SB), R31 + MOVD R31, CTR + JMP (CTR) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + MOVD $syscall·RawSyscall6(SB), R31 + MOVD R31, CTR + JMP (CTR) + TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 MOVD a1+8(FP), R3 MOVD a2+16(FP), R4 diff --git a/vendor/golang.org/x/sys/unix/asm_linux_sparc64.s b/vendor/golang.org/x/sys/unix/asm_linux_sparc64.s new file mode 100644 index 00000000..77e1e327 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_sparc64.s @@ -0,0 +1,48 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && sparc64 && gc + +#include "textflag.h" + +// +// System calls for sparc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB), NOSPLIT, $0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB), NOSPLIT, $0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB), NOSPLIT, $0-48 + CALL runtime·entersyscall(SB) + MOVD trap+0(FP), R1 // syscall entry + MOVD a1+8(FP), R8 + MOVD a2+16(FP), R9 + MOVD a3+24(FP), R10 + TA $0x6d + MOVD R8, r1+32(FP) + MOVD R9, r2+40(FP) + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB), NOSPLIT, $0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB), NOSPLIT, $0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB), NOSPLIT, $0-48 + MOVD trap+0(FP), R1 // syscall entry + MOVD a1+8(FP), R8 + MOVD a2+16(FP), R9 + MOVD a3+24(FP), R10 + TA $0x6d + MOVD R8, r1+32(FP) + MOVD R9, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/asm_zos_s390x.s b/vendor/golang.org/x/sys/unix/asm_zos_s390x.s index 813dfad7..980f07a3 100644 --- a/vendor/golang.org/x/sys/unix/asm_zos_s390x.s +++ b/vendor/golang.org/x/sys/unix/asm_zos_s390x.s @@ -30,21 +30,8 @@ #define SVC_LOAD BYTE $0x0A; BYTE $0x08 // SVC 08 LOAD #define SVC_DELETE BYTE $0x0A; BYTE $0x09 // SVC 09 DELETE -DATA zosLibVec<>(SB)/8, $0 -GLOBL zosLibVec<>(SB), NOPTR, $8 - -TEXT ·initZosLibVec(SB), NOSPLIT|NOFRAME, $0-0 - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD CAA(R8), R8 - MOVD EDCHPXV(R8), R8 - MOVD R8, zosLibVec<>(SB) - RET - TEXT ·GetZosLibVec(SB), NOSPLIT|NOFRAME, $0-0 - MOVD zosLibVec<>(SB), R8 - MOVD R8, ret+0(FP) - RET + JMP runtime·GetZosLibVec(SB) TEXT ·clearErrno(SB), NOSPLIT, $0-0 BL addrerrno<>(SB) @@ -160,163 +147,13 @@ TEXT ·gettid(SB), NOSPLIT, $0 // errno and errno2 is retrieved // TEXT ·CallLeFuncWithErr(SB), NOSPLIT, $0 - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD CAA(R8), R9 - MOVD g, GOCB(R9) - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address - MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer - - MOVD parms_base+8(FP), R7 // R7 -> argument array - MOVD parms_len+16(FP), R8 // R8 number of arguments - - // arg 1 ---> R1 - CMP R8, $0 - BEQ docall - SUB $1, R8 - MOVD 0(R7), R1 - - // arg 2 ---> R2 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R2 - - // arg 3 --> R3 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R3 - - CMP R8, $0 - BEQ docall - MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument - -repeat: - ADD $8, R7 - MOVD 0(R7), R0 // advance arg pointer by 8 byte - ADD $8, R6 // advance LE argument address by 8 byte - MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame - SUB $1, R8 - CMP R8, $0 - BNE repeat - -docall: - MOVD funcdesc+0(FP), R8 // R8-> function descriptor - LMG 0(R8), R5, R6 - MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC - LE_CALL // balr R7, R6 (return #1) - NOPH - MOVD R3, ret+32(FP) - CMP R3, $-1 // compare result to -1 - BNE done - - // retrieve errno and errno2 - MOVD zosLibVec<>(SB), R8 - ADD $(__errno), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __errno (return #3) - NOPH - MOVWZ 0(R3), R3 - MOVD R3, err+48(FP) - MOVD zosLibVec<>(SB), R8 - ADD $(__err2ad), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __err2ad (return #2) - NOPH - MOVW (R3), R2 // retrieve errno2 - MOVD R2, errno2+40(FP) // store in return area - -done: - MOVD R4, 0(R9) // Save stack pointer. - RET - + JMP runtime·CallLeFuncWithErr(SB) // // Call LE function, if the return is 0 // errno and errno2 is retrieved // TEXT ·CallLeFuncWithPtrReturn(SB), NOSPLIT, $0 - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD CAA(R8), R9 - MOVD g, GOCB(R9) - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address - MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer - - MOVD parms_base+8(FP), R7 // R7 -> argument array - MOVD parms_len+16(FP), R8 // R8 number of arguments - - // arg 1 ---> R1 - CMP R8, $0 - BEQ docall - SUB $1, R8 - MOVD 0(R7), R1 - - // arg 2 ---> R2 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R2 - - // arg 3 --> R3 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R3 - - CMP R8, $0 - BEQ docall - MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument - -repeat: - ADD $8, R7 - MOVD 0(R7), R0 // advance arg pointer by 8 byte - ADD $8, R6 // advance LE argument address by 8 byte - MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame - SUB $1, R8 - CMP R8, $0 - BNE repeat - -docall: - MOVD funcdesc+0(FP), R8 // R8-> function descriptor - LMG 0(R8), R5, R6 - MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC - LE_CALL // balr R7, R6 (return #1) - NOPH - MOVD R3, ret+32(FP) - CMP R3, $0 // compare result to 0 - BNE done - - // retrieve errno and errno2 - MOVD zosLibVec<>(SB), R8 - ADD $(__errno), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __errno (return #3) - NOPH - MOVWZ 0(R3), R3 - MOVD R3, err+48(FP) - MOVD zosLibVec<>(SB), R8 - ADD $(__err2ad), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __err2ad (return #2) - NOPH - MOVW (R3), R2 // retrieve errno2 - MOVD R2, errno2+40(FP) // store in return area - XOR R2, R2 - MOVWZ R2, (R3) // clear errno2 - -done: - MOVD R4, 0(R9) // Save stack pointer. - RET - + JMP runtime·CallLeFuncWithPtrReturn(SB) // // function to test if a pointer can be safely dereferenced (content read) // return 0 for succces @@ -360,23 +197,4 @@ TEXT ·ptrtest(SB), NOSPLIT, $0-16 // // func safeload(ptr uintptr) ( value uintptr, error uintptr) TEXT ·safeload(SB), NOSPLIT, $0-24 - MOVD ptr+0(FP), R10 // test pointer in R10 - MOVD $0x0, R6 - BYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt 2,1208 - BYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22 // llgtr 2,2 - BYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF // nilh 2,32767 - BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg 2,88(2) - BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg 2,8(2) - BYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68 // la 2,872(2) - BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr 3,3 - BYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras 5,lbl1 - BYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi 3,1 - BYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1 ltgr 3,3 - BYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc b'0111',lbl2 - BYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2) - BYTE $0xE3; BYTE $0x6A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg 6,0(10) - BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99 // lbl2 xgr 9,9 - BYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 9,0(2) - MOVD R6, value+8(FP) // result in R6 - MOVD R3, error+16(FP) // error in R3 - RET + JMP runtime·ZosSafeLoad(SB) diff --git a/vendor/golang.org/x/sys/unix/bpxsvc_zos.s b/vendor/golang.org/x/sys/unix/bpxsvc_zos.s index 4bd4a179..1236e1e9 100644 --- a/vendor/golang.org/x/sys/unix/bpxsvc_zos.s +++ b/vendor/golang.org/x/sys/unix/bpxsvc_zos.s @@ -20,15 +20,15 @@ TEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0 MOVD plist_base+0(FP), R1 // r1 points to plist MOVD bpx_offset+24(FP), R2 // r2 offset to BPX vector table MOVD R14, R7 // save r14 - MOVD R15, R8 // save r15 - MOVWZ 16(R0), R9 - MOVWZ 544(R9), R9 - MOVWZ 24(R9), R9 // call vector in r9 - ADD R2, R9 // add offset to vector table - MOVWZ (R9), R9 // r9 points to entry point - BYTE $0x0D // BL R14,R9 --> basr r14,r9 - BYTE $0xE9 // clobbers 0,1,14,15 - MOVD R8, R15 // restore 15 + MOVD R15, R9 // save r15 + MOVWZ 16(R0), R15 + MOVWZ 544(R15), R15 + MOVWZ 24(R15), R15 // call vector in r15 + ADD R2, R15 // add offset to vector table + MOVWZ (R15), R15 // r15 points to entry point + BYTE $0x0D // BL R14,R15 --> basr r14,r15 + BYTE $0xEF // clobbers 0,1,14,15 + MOVD R9, R15 // restore 15 JMP R7 // return via saved return address // func A2e(arr [] byte) diff --git a/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/vendor/golang.org/x/sys/unix/fcntl_darwin.go index a9911c7c..78c28a3d 100644 --- a/vendor/golang.org/x/sys/unix/fcntl_darwin.go +++ b/vendor/golang.org/x/sys/unix/fcntl_darwin.go @@ -13,12 +13,12 @@ func FcntlInt(fd uintptr, cmd, arg int) (int, error) { // FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { - _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk)))) + _, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk)) return err } // FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command. func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error { - _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore)))) + _, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(fstore)) return err } diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go index 309f5a2b..3f7fa766 100644 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -22,7 +22,13 @@ import ( // fields can be get and set using the following methods: // - Uint16/SetUint16: flags // - Uint32/SetUint32: ifindex, metric, mtu -type Ifreq struct{ raw ifreq } +type Ifreq struct { + // Aligns the union for the accessors below, which cast it in place; + // the generated ifreq is all byte arrays, so its alignment is one. + _ [0]int64 + + raw ifreq +} // NewIfreq creates an Ifreq with the input network interface name after // validating the name does not exceed IFNAMSIZ-1 (trailing NULL required) diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go index 7ca4fa12..5589d4f6 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -332,3 +332,10 @@ func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error { func IoctlLoopConfigure(fd int, value *LoopConfig) error { return ioctlPtr(fd, LOOP_CONFIGURE, unsafe.Pointer(value)) } + +// IoctlPidfdInfo fetches information about a pidfd. +// The Mask field of the info argument indicates which +// values to fetch. +func IoctlPidfdInfo(fd int, info *PidfdInfo) error { + return ioctlPtr(fd, PIDFD_GET_INFO, unsafe.Pointer(info)) +} diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index fa74cfe9..e95eecd5 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -290,14 +290,7 @@ struct ltchars { #include #include -#if defined(__sparc__) -// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the -// definition in glibc. As only the error constants are needed here, include the -// generic termibits.h (which is included by termbits.h on sparc). -#include -#else #include -#endif #ifndef PTRACE_GETREGS #define PTRACE_GETREGS 0xc @@ -544,7 +537,7 @@ ccflags="$@" $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || $2 == "LOOP_CONFIGURE" || - $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|MLOCK|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || $2 ~ /^PTP_/ || @@ -586,7 +579,7 @@ ccflags="$@" $2 ~ /^DIOC/ || $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || - $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER|DARWIN_(THREAD|PROCESS|BG|NONUI))/ || $2 ~ /^CLONE_[A-Z_]+/ || $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ && $2 ~ /^(BPF|DLT)_/ || diff --git a/vendor/golang.org/x/sys/unix/ptrace_zos.go b/vendor/golang.org/x/sys/unix/ptrace_zos.go new file mode 100644 index 00000000..394fbd71 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ptrace_zos.go @@ -0,0 +1,537 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build zos + +package unix + +import "unsafe" + +// z/OS ptrace implementation notes: +// +// This file provides ptrace wrappers for z/OS that match the Linux API as closely +// as possible. However, there are fundamental differences in how z/OS implements +// process tracing compared to Linux: +// +// 1. SYSTEM CALL INTERFACE: +// - z/OS uses BPX4PTR (5 parameters) vs Linux ptrace syscall (4 parameters) +// - The 5th parameter (buffer) is used for block operations +// +// 2. MEMORY OPERATIONS: +// - z/OS: PT_READ_BLOCK/PT_WRITE_BLOCK for efficient block transfers +// - Linux: PTRACE_PEEKTEXT/POKETEXT for word-by-word access +// +// 3. REGISTER OPERATIONS: +// - z/OS: PT_READ_GPR/PT_WRITE_GPR with register number for 64-bit values +// - Linux: PTRACE_GETREGSET/SETREGSET with iovec structure +// +// 4. SINGLE-STEPPING: +// - z/OS: No native single-step; requires temporary breakpoints or PER +// - Linux: PTRACE_SINGLESTEP natively supported +// a) Read instruction at current PSW +// b) Calculate next instruction address (handle branches) +// c) Set temporary breakpoint (SVC 144 = 0x0A90) at next address +// d) Continue execution until breakpoint hit +// e) Restore original instruction and adjust PSW +// +// 5. SYSCALL TRACING: +// - z/OS: No PTRACE_SYSCALL equivalent; requires breakpoint-based approach +// - Linux: PTRACE_SYSCALL stops at syscall entry/exit +// a) Identify BPX syscall vector location +// b) Set breakpoints at syscall entry points +// c) Detect BASR instructions calling into syscall vector +// d) Parse arguments from registers before/after syscall +// +// 6. LIMITATIONS: +// - PtraceSetOptions: No equivalent (returns ENOSYS) +// - PtraceGetEventMsg: No equivalent (returns ENOSYS) +// - PtraceSingleStep: Requires complex implementation (returns ENOSYS) +// - PtraceInterrupt: No equivalent (returns ENOSYS) +// - PtracePokeUser: No PT_WRITE_U (returns ENOSYS) +// +// For reference implementations of single-stepping and syscall tracing on z/OS, + +// ptrace is the basic wrapper for BPX4PTR on z/OS. +// Note: z/OS ptrace (BPX4PTR) takes 5 parameters vs 4 on Linux/Darwin. +// The 5th parameter (buffer) is used for operations like PT_READ_BLOCK/PT_WRITE_BLOCK. +// +// data is an integer-valued argument (signal number, register index, byte count, +// or a target-process address). It is not a Go-managed pointer. We must not pass +// it to Bpx4ptr as unsafe.Pointer(data) because the garbage collector would treat +// that integer as a pointer and may crash trying to follow it. +// +// Instead we inline the parms array that Bpx4ptr would construct, placing &data +// at parms[3]. BPX4PTR dereferences parms[3] to obtain the data value, so it +// receives data unchanged while the GC only ever sees a valid stack pointer. +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + req32 := int32(request) + pid32 := int32(pid) + var rv, rc, rn int32 + var buffer unsafe.Pointer + parms := [8]unsafe.Pointer{ + unsafe.Pointer(&req32), + unsafe.Pointer(&pid32), + unsafe.Pointer(&addr), + unsafe.Pointer(&data), // &data, not unsafe.Pointer(data) + unsafe.Pointer(&buffer), + unsafe.Pointer(&rv), + unsafe.Pointer(&rc), + unsafe.Pointer(&rn), + } + bpxcall(parms[:], BPX4PTR) + if rv != 0 { + err = errnoErr2(Errno(rc), uintptr(rn)) + } + return +} + +// ptracePtr is a variant that accepts unsafe.Pointer for the data parameter. +// addr is a target-process address (a raw integer), not a Go-managed pointer. +// We must not pass it to Bpx4ptr as unsafe.Pointer(addr); instead we inline the +// parms array and place &addr at parms[2], exactly as ptrace() does for data. +func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) { + req32 := int32(request) + pid32 := int32(pid) + var rv, rc, rn int32 + var buffer unsafe.Pointer + parms := [8]unsafe.Pointer{ + unsafe.Pointer(&req32), + unsafe.Pointer(&pid32), + unsafe.Pointer(&addr), // &addr, not unsafe.Pointer(addr) + unsafe.Pointer(&data), + unsafe.Pointer(&buffer), + unsafe.Pointer(&rv), + unsafe.Pointer(&rc), + unsafe.Pointer(&rn), + } + bpxcall(parms[:], BPX4PTR) + if rv != 0 { + err = errnoErr2(Errno(rc), uintptr(rn)) + } + return +} + +// ptracePtrWithBuffer is used for operations that require the buffer parameter. +// addr is a target-process address; same &addr treatment as ptracePtr. +func ptracePtrWithBuffer(request int, pid int, addr uintptr, data unsafe.Pointer, buffer unsafe.Pointer) (err error) { + req32 := int32(request) + pid32 := int32(pid) + var rv, rc, rn int32 + parms := [8]unsafe.Pointer{ + unsafe.Pointer(&req32), + unsafe.Pointer(&pid32), + unsafe.Pointer(&addr), // &addr, not unsafe.Pointer(addr) + unsafe.Pointer(&data), + unsafe.Pointer(&buffer), + unsafe.Pointer(&rv), + unsafe.Pointer(&rc), + unsafe.Pointer(&rn), + } + bpxcall(parms[:], BPX4PTR) + if rv != 0 { + err = errnoErr2(Errno(rc), uintptr(rn)) + } + return +} + +// High-level convenience functions matching the Linux/Darwin API + +func PtraceAttach(pid int) (err error) { + return ptrace(PT_ATTACH, pid, 0, 0) +} + +func PtraceDetach(pid int) (err error) { + return ptrace(PT_DETACH, pid, 0, 0) +} + +func PtraceCont(pid int, signal int) (err error) { + // PT_CONTINUE can be interrupted by signals (EINTR), retry if needed + for { + err = ptrace(PT_CONTINUE, pid, 0, uintptr(signal)) + if err != EINTR { + break + } + } + return err +} + +func PtraceKill(pid int) (err error) { + return ptrace(PT_KILL, pid, 0, 0) +} + +// ptracePeek implements the peek operations using PT_READ_BLOCK. +// On z/OS, PT_READ_BLOCK can read arbitrary-length data efficiently. +// Unlike Linux which reads word-by-word, z/OS can read blocks directly. +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + if len(out) == 0 { + return 0, nil + } + + // z/OS PT_READ_BLOCK can read blocks directly without word-by-word alignment + // The buffer parameter points to the output buffer + buffer := unsafe.Pointer(&out[0]) + err = ptracePtrWithBuffer(req, pid, addr, unsafe.Pointer(uintptr(len(out))), buffer) + if err != nil { + return 0, err + } + return len(out), nil +} + +// PtracePeekText reads from the traced process's text segment. +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PT_READ_BLOCK, pid, addr, out) +} + +// PtracePeekData reads from the traced process's data segment. +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PT_READ_BLOCK, pid, addr, out) +} + +// PtracePeekUser reads from the traced process's user area. +// On z/OS, PT_READ_U reads a 32-bit word from the user area at the specified offset. +// To match Linux behavior, we implement word-by-word reading for arbitrary lengths. +func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { + if len(out) == 0 { + return 0, nil + } + + // PT_READ_U reads 32-bit words from user area + // We need to read word-by-word to handle arbitrary lengths + n := 0 + for n < len(out) { + var data uint32 + err = ptracePtr(PT_READ_U, pid, addr+uintptr(n), unsafe.Pointer(&data)) + if err != nil { + return n, err + } + + // Copy up to 4 bytes to output + remaining := len(out) - n + if remaining >= 4 { + out[n] = byte(data >> 24) + out[n+1] = byte(data >> 16) + out[n+2] = byte(data >> 8) + out[n+3] = byte(data) + n += 4 + } else { + // Handle partial word at the end + for i := 0; i < remaining; i++ { + out[n+i] = byte(data >> (24 - i*8)) + } + n += remaining + } + } + return n, nil +} + +// ptracePoke implements the poke operations using PT_WRITE_BLOCK. +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + if len(data) == 0 { + return 0, nil + } + + // z/OS PT_WRITE_BLOCK can write blocks directly + buffer := unsafe.Pointer(&data[0]) + err = ptracePtrWithBuffer(pokeReq, pid, addr, unsafe.Pointer(uintptr(len(data))), buffer) + if err != nil { + return 0, err + } + return len(data), nil +} + +// PtracePokeText writes to the traced process's text segment. +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PT_WRITE_BLOCK, PT_READ_BLOCK, pid, addr, data) +} + +// PtracePokeData writes to the traced process's data segment. +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PT_WRITE_BLOCK, PT_READ_BLOCK, pid, addr, data) +} + +// PtracePokeUser writes to the traced process's user area. +// Note: z/OS does not have a direct PT_WRITE_U equivalent. +// This function returns ENOSYS to indicate it's not supported. +// DIFFERENCE FROM LINUX: Linux supports PTRACE_POKEUSR, z/OS does not. +func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { + // z/OS doesn't have PT_WRITE_U + return 0, ENOSYS +} + +// PtraceGetRegs retrieves the general purpose registers from the traced process. +// On z/OS, PT_READ_GPR can read individual registers as 64-bit values when called +// with a register number, or read all registers when called with a buffer. +// This function reads each register individually to ensure full 64-bit values. +// DIFFERENCE FROM LINUX: Linux uses PTRACE_GETREGSET with iovec, z/OS uses PT_READ_GPR. +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + // Use PT_REGHSET to enable reading high GPRs for AMODE 64 programs + rv, rc, rn := Bpx4ptr(int32(PT_REGHSET), int32(pid), nil, nil, nil) + _ = rv + _ = rc + _ = rn + + // Use PT_BLOCKREQ to read GPRs and PSW in one call + // dbx uses 3 requests: PT_READ_GPR, PT_READ_U, PT_READ_GPRH + // PT_READ_U is required for ptrace to populate PSW in GPR block + // + // IMPORTANT: z/OS ptrace always returns 64-bit ESA/390 format PSW in the Psw field. + // The 128-bit Pswg field is never populated, even with PSWG_Req bit set. + // We convert ESA/390 to z/Architecture format in software (matching DBX behavior). + const ( + numRequests = 3 + reqSize = int(unsafe.Sizeof(PtraceBlkReqReq{})) + gprSize = int(unsafe.Sizeof(PtraceBlkGpr{})) + uareaSize = int(unsafe.Sizeof(PtraceBlkUar{})) + 6*int(unsafe.Sizeof(PtraceBlkUarOcw{})) + totalSize = int(unsafe.Sizeof(PtraceBlkReq{})) + numRequests*reqSize + gprSize*2 + uareaSize + ) + + // Allocate buffer for block request + buf := make([]byte, totalSize) + + // Setup block request header + blkReq := (*PtraceBlkReq)(unsafe.Pointer(&buf[0])) + blkReq.Numreq = numRequests + + // Setup request array + reqOffset := int(unsafe.Sizeof(PtraceBlkReq{})) + reqs := (*[3]PtraceBlkReqReq)(unsafe.Pointer(&buf[reqOffset])) + + // Setup GPR block (lower 32 bits) + gprOffset := reqOffset + numRequests*reqSize + gprBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprOffset])) + + // Setup user area block (required for PSW) + uareaOffset := gprOffset + gprSize + uareaBlock := (*PtraceBlkUar)(unsafe.Pointer(&buf[uareaOffset])) + uareaBlock.Num = 6 // Number of control info entries + + // Setup user area offset/control words + uareaOcw := (*[6]PtraceBlkUarOcw)(unsafe.Pointer(&buf[uareaOffset+int(unsafe.Sizeof(PtraceBlkUar{}))])) + uareaOcw[0].Ofs = 1025 // program interrupt code + uareaOcw[1].Ofs = 1026 // abend completion code + uareaOcw[2].Ofs = 1027 // abend reason code + uareaOcw[3].Ofs = 1028 // signal code + uareaOcw[4].Ofs = 1029 // instruction length code + uareaOcw[5].Ofs = 1030 // process flags + + // Setup high GPR block (upper 32 bits) + gprHighOffset := uareaOffset + uareaSize + gprHighBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprHighOffset])) + + // Configure requests (order matters: GPR, U, GPRH) + // reqdata contains OFFSET from buffer start, not absolute address + // dbx: brr[0].reqdata=(unsigned long)brg; where brg is the offset + reqs[0].Reqtype = PT_READ_GPR + reqs[0].Reqdata = uint32(gprOffset) + reqs[1].Reqtype = PT_READ_U + reqs[1].Reqdata = uint32(uareaOffset) + reqs[2].Reqtype = PT_READ_GPRH + reqs[2].Reqdata = uint32(gprHighOffset) + + // Execute block request + rvBlk, rcBlk, rnBlk := Bpx4ptr(int32(PT_BLOCKREQ), int32(pid), + unsafe.Pointer(&buf[0]), unsafe.Pointer(uintptr(totalSize)), nil) + if rvBlk == -1 { + return errnoErr2(Errno(rcBlk), uintptr(rnBlk)) + } + + // Extract GPRs (combine low and high 32 bits) + for i := 0; i < 16; i++ { + low := uint64(gprBlock.Gpr[i]) + high := uint64(gprHighBlock.Gpr[i]) << 32 + regsout.Gprs[i] = high | low + } + + // Extract PSW from GPR block structure + // z/OS ptrace ALWAYS returns 8-byte ESA/390 format PSW at offset 144. + // The 16-byte PSWG field at offset 152 is NEVER populated (always zero). + // We must convert ESA/390 format to z/Architecture format in software (like DBX does). + // + // ESA/390 PSW format (8 bytes): + // Word 1 (bytes 0-3): Mask with bit 12 = 1 (ECMODE31BIT) + // Word 2 (bytes 4-7): Address with bit 0 = AMODE bit (1=31-bit, 0=64-bit) + // + // z/Architecture PSW format (16 bytes): + // Mask (bytes 0-7): Extended mask with bit 12 = 0, bits 31-32 = EA+BA (AMODE) + // Addr (bytes 8-15): Full 64-bit instruction address + + // Read ESA/390 PSW as two 32-bit words + pswWord1 := uint32(gprBlock.Psw[0])<<24 | uint32(gprBlock.Psw[1])<<16 | + uint32(gprBlock.Psw[2])<<8 | uint32(gprBlock.Psw[3]) + pswWord2 := uint32(gprBlock.Psw[4])<<24 | uint32(gprBlock.Psw[5])<<16 | + uint32(gprBlock.Psw[6])<<8 | uint32(gprBlock.Psw[7]) + + // Convert ESA/390 to z/Architecture format (matching DBX psw_ESA390_to_zArchitecture) + const ECMODE31BIT = uint64(0x0000000000080000) + const AMODE31BIT = uint64(0x0000000080000000) + const ADDR_MASK_31 = uint64(0x000000007FFFFFFF) + + // Extract AMODE bit from address word (bit 0 of word 2) + amode31 := uint64(pswWord2) & AMODE31BIT + + // Mask off AMODE bit from address + addr := uint64(pswWord2) & ADDR_MASK_31 + + // Convert mask: clear ECMODE31BIT, shift left 32 bits, add AMODE bit + mask := uint64(pswWord1) & ^ECMODE31BIT + mask = (mask << 32) | amode31 + + regsout.Psw.Mask = mask + regsout.Psw.Addr = addr + + // Note: Access registers (Acrs), floating point registers (Fp_regs), + // PER info (Per_info), and other fields would require additional + // PT_READ_* calls. For now, we focus on GPRs and PSW which are + // the most commonly used registers for debugging. + + return nil +} + +// ptraceWritePSW writes only the PSW address register. +// This is a lower-level function used internally for single-stepping. +// Based on ztrace's write_psw function. +func ptraceWritePSW(pid int, pswAddr uint32) error { + const PTRACE_REG_PSWA = 41 + rv, rc, rn := Bpx4ptr(int32(PT_WRITE_GPR), int32(pid), + unsafe.Pointer(uintptr(PTRACE_REG_PSWA)), + unsafe.Pointer(uintptr(pswAddr)), + nil) + if rv == -1 { + return errnoErr2(Errno(rc), uintptr(rn)) + } + return nil +} + +// PtraceSetRegs sets the general purpose registers in the traced process. +// Uses PT_BLOCKREQ to write GPRs and PSW in a single call, matching dbx implementation. +// DIFFERENCE FROM LINUX: Linux uses PTRACE_SETREGSET with iovec, z/OS uses PT_BLOCKREQ. +// NOTE: The process must be in a stopped state for register writes to succeed. +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + // Use PT_REGHSET to enable writing high GPRs for AMODE 64 programs + rv, rc, rn := Bpx4ptr(int32(PT_REGHSET), int32(pid), nil, nil, nil) + _ = rv + _ = rc + _ = rn + + // Use PT_BLOCKREQ to write GPRs and PSW in one call + const ( + numRequests = 2 + reqSize = int(unsafe.Sizeof(PtraceBlkReqReq{})) + gprSize = int(unsafe.Sizeof(PtraceBlkGpr{})) + totalSize = int(unsafe.Sizeof(PtraceBlkReq{})) + numRequests*reqSize + gprSize*2 + ) + + // Allocate buffer for block request + buf := make([]byte, totalSize) + + // Setup block request header + blkReq := (*PtraceBlkReq)(unsafe.Pointer(&buf[0])) + blkReq.Numreq = numRequests + + // Setup request array + reqOffset := int(unsafe.Sizeof(PtraceBlkReq{})) + reqs := (*[2]PtraceBlkReqReq)(unsafe.Pointer(&buf[reqOffset])) + + // Setup GPR block (lower 32 bits) + gprOffset := reqOffset + numRequests*reqSize + gprBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprOffset])) + + // Setup high GPR block (upper 32 bits) + gprHighOffset := gprOffset + gprSize + gprHighBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprHighOffset])) + + // Mark all GPRs as modified (set all 16 bits) + gprBlock.Writebitflags = 0xFFFF + gprHighBlock.Writebitflags = 0xFFFF + + // Split 64-bit GPRs into low and high 32 bits + for i := 0; i < 16; i++ { + gprBlock.Gpr[i] = uint32(regs.Gprs[i] & 0xFFFFFFFF) + gprHighBlock.Gpr[i] = uint32(regs.Gprs[i] >> 32) + } + + // Pack PSW for 31-bit targets (current z/OS) + // Upper 32 bits = mask, lower 32 bits = address + gprBlock.Wpsw = 1 // Mark PSW as modified + // Write PSW in old format (8 bytes at offset 144) + // Word 1 (mask) at bytes 0-3, Word 2 (addr) at bytes 4-7 + pswMask := uint32(regs.Psw.Mask) + pswAddr := uint32(regs.Psw.Addr) + gprBlock.Psw[0] = byte(pswMask >> 24) + gprBlock.Psw[1] = byte(pswMask >> 16) + gprBlock.Psw[2] = byte(pswMask >> 8) + gprBlock.Psw[3] = byte(pswMask) + gprBlock.Psw[4] = byte(pswAddr >> 24) + gprBlock.Psw[5] = byte(pswAddr >> 16) + gprBlock.Psw[6] = byte(pswAddr >> 8) + gprBlock.Psw[7] = byte(pswAddr) + + // Clear extended PSWG (not used for 31-bit targets) + for i := 0; i < 16; i++ { + gprBlock.Pswg[i] = 0 + } + + // Configure requests + // reqdata contains OFFSET from buffer start, not absolute address + reqs[0].Reqtype = PT_WRITE_GPR + reqs[0].Reqdata = uint32(gprOffset) + reqs[1].Reqtype = PT_WRITE_GPRH + reqs[1].Reqdata = uint32(gprHighOffset) + + // Execute block request + rvBlk, rcBlk, rnBlk := Bpx4ptr(int32(PT_BLOCKREQ), int32(pid), + unsafe.Pointer(&buf[0]), unsafe.Pointer(uintptr(totalSize)), nil) + if rvBlk == -1 { + return errnoErr2(Errno(rcBlk), uintptr(rnBlk)) + } + + return nil +} + +// PtraceSetOptions sets ptrace options. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SETOPTIONS equivalent. +// Returns ENOSYS to indicate this is not supported on z/OS. +func PtraceSetOptions(pid int, options int) (err error) { + return ENOSYS +} + +// PtraceGetEventMsg retrieves a message about the ptrace event. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_GETEVENTMSG equivalent. +// Returns ENOSYS to indicate this is not supported on z/OS. +func PtraceGetEventMsg(pid int) (msg uint, err error) { + return 0, ENOSYS +} + +// PtraceSyscall continues execution and stops at the next syscall entry/exit. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SYSCALL equivalent. +// This function falls back to PT_CONTINUE and will NOT stop at syscalls. +// +// To trace syscalls on z/OS, applications must: +// 1. Set breakpoints at BPX syscall entry points (requires knowledge of syscall vector) +// 2. Detect BASR instructions that call into the BPX syscall vector +// 3. Use PT_LDINFO to identify loaded modules and their entry points +func PtraceSyscall(pid int, signal int) (err error) { + // z/OS doesn't have a direct PTRACE_SYSCALL equivalent + // Use PT_CONTINUE as a fallback (won't stop at syscalls) + return ptrace(PT_CONTINUE, pid, 0, uintptr(signal)) +} + +// Note: PtraceSingleStep is implemented in ptrace_zos_singlestep.go +// with full two-breakpoint emulation for branch instructions. + +// PtraceInterrupt interrupts the traced process. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_INTERRUPT equivalent. +// Returns ENOSYS to indicate this is not supported on z/OS. +func PtraceInterrupt(pid int) (err error) { + return ENOSYS +} + +// PtraceSeize attaches to a process without stopping it. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SEIZE equivalent. +// Uses PT_ATTACH as a fallback, which will stop the process. +func PtraceSeize(pid int) (err error) { + // z/OS doesn't have PTRACE_SEIZE, use PT_ATTACH + // Note: This WILL stop the process, unlike Linux PTRACE_SEIZE + return ptrace(PT_ATTACH, pid, 0, 0) +} diff --git a/vendor/golang.org/x/sys/unix/ptrace_zos_singlestep.go b/vendor/golang.org/x/sys/unix/ptrace_zos_singlestep.go new file mode 100644 index 00000000..7d7e2c8d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ptrace_zos_singlestep.go @@ -0,0 +1,425 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build zos + +package unix + +import ( + "sync" +) + +// Single-stepping emulation for z/OS +// +// z/OS does not have native single-step support like Linux's PTRACE_SINGLESTEP. +// Instead, single-stepping must be emulated using temporary breakpoints. +// +// This file provides a complete implementation of single-step emulation using +// temporary breakpoints at both the sequential next instruction and branch target. + +const ( + // NO_BRANCH_DEST indicates the instruction is not a branch or cannot branch + NO_BRANCH_DEST = 0xFFFFFFFF + + // SVC_144 is the breakpoint instruction (SVC 144 = 0x0A90) + SVC_144 = 0x0A90 + + // Maximum number of temporary breakpoints (one for next PC, one for branch dest) + MAX_TEMP_BREAKPOINTS = 2 + + // S/390 branch instruction opcodes + // RR format (Register-Register) + opBCR = 0x07 // Branch on Condition Register + opBALR = 0x05 // Branch and Link Register + opBASR = 0x0D // Branch and Save Register + opBASSM = 0x0C // Branch and Save and Set Mode + opBSM = 0x0B // Branch and Set Mode + opBCTR = 0x06 // Branch on Count Register + + // RX format (Register-Index-Storage) + opBC = 0x47 // Branch on Condition + opBAL = 0x45 // Branch and Link + opBCT = 0x46 // Branch on Count + opBAS = 0x4D // Branch and Save + + // RS format (Register-Storage) + opBXH = 0x86 // Branch on Index High + opBXLE = 0x87 // Branch on Index Low or Equal + + // Extended branch opcodes + opBA7 = 0xA7 // A7x series (BRC, BRAS, BRCT, BRCTG) + opBC0 = 0xC0 // C0x series (BRASL, BRCL) + opBEC = 0xEC // ECxx series (RIEc format: compare-and-branch) +) + +// tempBreakpoint represents a temporary breakpoint for single-stepping +type tempBreakpoint struct { + address uint64 + originalInsn [8]byte // Save up to 8 bytes (full instruction) + active bool +} + +// singleStepState manages temporary breakpoints for a process +type singleStepState struct { + mu sync.Mutex + breakpoints [MAX_TEMP_BREAKPOINTS]tempBreakpoint +} + +var ( + // Global map of process states (pid -> state) + processStates = make(map[int]*singleStepState) + processStatesMu sync.Mutex +) + +// getProcessState returns or creates the single-step state for a process +func getProcessState(pid int) *singleStepState { + processStatesMu.Lock() + defer processStatesMu.Unlock() + + state, exists := processStates[pid] + if !exists { + state = &singleStepState{} + processStates[pid] = state + } + return state +} + +// cleanupProcessState removes the state for a process (call on detach) +func cleanupProcessState(pid int) { + processStatesMu.Lock() + defer processStatesMu.Unlock() + delete(processStates, pid) +} + +// GetInstructionLength returns the length of an S/390 instruction in bytes. +func GetInstructionLength(firstByte byte) int { + switch (firstByte >> 6) & 0x03 { + case 0x00: + return 2 + case 0x01, 0x02: + return 4 + case 0x03: + return 6 + default: + return 2 + } +} + +// GetNextInstructionAddr returns the address of the next sequential instruction. +func GetNextInstructionAddr(pc uint64, instruction []byte) uint64 { + if len(instruction) < 1 { + return pc + 2 + } + insnLen := GetInstructionLength(instruction[0]) + return pc + uint64(insnLen) +} + +// CalculateBranchDest calculates the destination address for branch instructions. +func CalculateBranchDest(pid int, pc uint64, instruction []byte) uint64 { + if len(instruction) < 6 { + return NO_BRANCH_DEST + } + + inst0_15 := uint16(instruction[0])<<8 | uint16(instruction[1]) + inst16_31 := uint16(instruction[2])<<8 | uint16(instruction[3]) + inst32_47 := uint16(instruction[4])<<8 | uint16(instruction[5]) + opcode := instruction[0] + + var dest uint64 = NO_BRANCH_DEST + + // RR format branches + if opcode == opBCR || opcode == opBALR || opcode == opBASR || + opcode == opBASSM || opcode == opBSM || opcode == opBCTR { + + r2 := int(inst0_15 & 0x0F) + + if opcode == opBCR { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 || r2 == 0 { + return NO_BRANCH_DEST + } + } else { + if r2 == 0 { + return NO_BRANCH_DEST + } + } + + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err == nil { + if r2 >= 0 && r2 < 16 { + regVal := regs.Gprs[r2] + dest = regVal + } + } + } else if opcode == opBC || opcode == opBAL || opcode == opBCT || opcode == opBAS { + // RX format branches + if opcode == opBC { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 { + return NO_BRANCH_DEST + } + } + + index := int(inst0_15 & 0x0F) + base := int((inst16_31 >> 12) & 0x0F) + displacement := uint32(inst16_31 & 0x0FFF) + + var baseVal, indexVal uint64 + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err == nil { + if base != 0 && base < 16 { + baseVal = regs.Gprs[base] + } + if index != 0 && index < 16 { + indexVal = regs.Gprs[index] + } + } + + if base == 0 && index == 0 { + dest = pc + uint64(displacement) + } else { + dest = baseVal + indexVal + uint64(displacement) + } + } else if opcode == opBXH || opcode == opBXLE { + // RS format branches + base := int((inst16_31 >> 12) & 0x0F) + displacement := uint32(inst16_31 & 0x0FFF) + + var baseVal uint64 + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err == nil { + if base != 0 && base < 16 { + baseVal = regs.Gprs[base] + } + } + + dest = baseVal + uint64(displacement) + } else if opcode == opBA7 { + // RI format branches + subOp := int(inst0_15 & 0x0F) + + if subOp < 4 || subOp > 7 { + return NO_BRANCH_DEST + } + + if subOp == 0x04 { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 { + return NO_BRANCH_DEST + } + } + + relDispl := int16(inst16_31) + dest = uint64(int64(pc) + int64(relDispl)*2) + } else if opcode == opBC0 { + // RIL format branches + subOp := int(inst0_15 & 0x0F) + + if subOp == 0x04 || subOp == 0x05 { + if subOp == 0x04 { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 { + return NO_BRANCH_DEST + } + } + + inst16_47 := (uint32(inst16_31) << 16) | uint32(inst32_47) + relDispl4 := int32(inst16_47) + dest = uint64(int64(pc) + int64(relDispl4)*2) + } + } else if opcode == opBEC { + // RIEc format compare-and-branch + subOp := instruction[4] + + isCompareBranch := (subOp >= 0x64 && subOp <= 0x67) || + (subOp >= 0x76 && subOp <= 0x77) || + (subOp >= 0x7C && subOp <= 0x7F) + + if isCompareBranch { + ri4 := int16(inst16_31) + dest = uint64(int64(pc) + int64(ri4)*2) + } + } + + if dest < 0x2000 { + return NO_BRANCH_DEST + } + + return dest +} + +// setTempBreakpoint sets a temporary breakpoint at the specified address +func (s *singleStepState) setTempBreakpoint(pid int, addr uint64) error { + s.mu.Lock() + defer s.mu.Unlock() + + // Find free slot + slot := -1 + for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ { + if !s.breakpoints[i].active { + slot = i + break + } + } + + if slot == -1 { + return ENOMEM // All slots in use + } + + // Read original instruction (up to 8 bytes for safety) + _, err := PtracePeekText(pid, uintptr(addr), s.breakpoints[slot].originalInsn[:]) + if err != nil { + return err + } + + // Write SVC 144 (0x0A90) as breakpoint + svc144 := []byte{0x0A, 0x90} + _, err = PtracePokeText(pid, uintptr(addr), svc144) + if err != nil { + return err + } + + s.breakpoints[slot].address = addr + s.breakpoints[slot].active = true + + return nil +} + +// removeTempBreakpoints removes all active temporary breakpoints +func (s *singleStepState) removeTempBreakpoints(pid int) error { + s.mu.Lock() + defer s.mu.Unlock() + + var lastErr error + for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ { + if !s.breakpoints[i].active { + continue + } + + // Restore original instruction (first 2 bytes are enough for SVC 144) + _, err := PtracePokeText(pid, uintptr(s.breakpoints[i].address), s.breakpoints[i].originalInsn[:2]) + if err != nil { + lastErr = err + } + + s.breakpoints[i].active = false + } + + return lastErr +} + +// isTempBreakpoint checks if an address is a temporary breakpoint +func (s *singleStepState) isTempBreakpoint(addr uint64) bool { + s.mu.Lock() + defer s.mu.Unlock() + + for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ { + if s.breakpoints[i].active && s.breakpoints[i].address == addr { + return true + } + } + return false +} + +// PtraceSingleStep executes a single instruction using temporary breakpoints. +// +// This function: +// 1. Reads the current instruction at PSW +// 2. Calculates the next instruction address (sequential) +// 3. If branch instruction, calculates branch destination +// 4. Sets temporary breakpoints at both addresses +// 5. Continues execution until breakpoint hit +// 6. Restores original instructions and adjusts PSW +// +// Returns nil on success, error on failure. +func PtraceSingleStep(pid int) error { + state := getProcessState(pid) + + // 1. Get current PSW + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err != nil { + return err + } + pc := regs.Psw.Addr + + // 2. Read instruction at PC + insn := make([]byte, 8) + if _, err := PtracePeekText(pid, uintptr(pc), insn); err != nil { + return err + } + + // 3. Calculate next instruction addresses + nextPC := GetNextInstructionAddr(pc, insn) + branchDest := CalculateBranchDest(pid, pc, insn) + + // 4. Set temporary breakpoints + if err := state.setTempBreakpoint(pid, nextPC); err != nil { + return err + } + + // If branch instruction, set breakpoint at branch destination too + if branchDest != NO_BRANCH_DEST && branchDest != nextPC { + if err := state.setTempBreakpoint(pid, branchDest); err != nil { + state.removeTempBreakpoints(pid) // Cleanup first breakpoint + return err + } + } + + // 5. Continue execution + if err := PtraceCont(pid, 0); err != nil { + state.removeTempBreakpoints(pid) + return err + } + + // 6. Wait for breakpoint hit (retry on EINTR) + var status WaitStatus + for { + _, err := Wait4(pid, &status, 0, nil) + if err == EINTR { + continue // Retry on interrupted system call + } + if err != nil { + state.removeTempBreakpoints(pid) + return err + } + break + } + + // Check if process stopped (should be at breakpoint) + if !status.Stopped() { + state.removeTempBreakpoints(pid) + return ECHILD // Process exited or error + } + + // 7. Get current PSW (should be at breakpoint + 2) + if err := PtraceGetRegs(pid, ®s); err != nil { + state.removeTempBreakpoints(pid) + return err + } + + // 8. Remove temporary breakpoints + if err := state.removeTempBreakpoints(pid); err != nil { + return err + } + + // 9. Back up PSW by 2 bytes (to point at original instruction, not SVC 144) + // Use direct PSW write like ztrace does, not full register set + hitAddr := regs.Psw.Addr + if state.isTempBreakpoint(hitAddr - 2) { + if err := ptraceWritePSW(pid, uint32(hitAddr-2)); err != nil { + return err + } + } + + return nil +} + +// PtraceDetachWithCleanup detaches from a process and cleans up single-step state. +// Use this instead of PtraceDetach when using PtraceSingleStep. +func PtraceDetachWithCleanup(pid int) error { + state := getProcessState(pid) + state.removeTempBreakpoints(pid) + cleanupProcessState(pid) + return PtraceDetach(pid) +} diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go index 5ea74da9..8f27e7ec 100644 --- a/vendor/golang.org/x/sys/unix/syscall.go +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -76,7 +76,7 @@ func BytePtrToString(p *byte) string { // Find NUL terminator. n := 0 for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ { - ptr = unsafe.Pointer(uintptr(ptr) + 1) + ptr = unsafe.Add(ptr, 1) } return string(unsafe.Slice(p, n)) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go index a00c3e54..035c2cd9 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -188,7 +188,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { } sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { + for i := range n { sa.raw.Path[i] = int8(name[i]) } return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 38590ca8..cb9d0a18 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -369,6 +369,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { */ //sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) = SYS_FCNTL //sys kill(pid int, signum int, posix int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 2b57e0f7..49518899 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -369,6 +369,15 @@ func Dup3(oldfd, newfd, flags int) error { //sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) //sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) //sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchdir(fd int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 21e2bfa3..a31e2c71 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1991,7 +1991,24 @@ func FsconfigReconfigure(fd int) (err error) { return fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0) } -//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sys getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 + +// Getdents reads directory entries from fd into buf. +func Getdents(fd int, buf []byte) (n int, err error) { + // getdents64 stores d_ino with a 64-bit write, which faults on + // strict-alignment targets unless buf is 8-aligned. + if len(buf) > 0 { + if off := int(-uintptr(unsafe.Pointer(&buf[0])) & 7); off > 0 && off < len(buf) { + n, err = getdents(fd, buf[off:]) + if n > 0 { + copy(buf, buf[off:off+n]) + } + return n, err + } + } + return getdents(fd, buf) +} + //sysnb Getpgid(pid int) (pgid int, err error) func Getpgrp() (pid int) { @@ -2033,6 +2050,7 @@ func Getrandom(buf []byte, flags int) (n int, err error) { //sysnb Kill(pid int, sig syscall.Signal) (err error) //sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG //sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) +//sys Listns(req *NsIdReq, nsIds []uint64, flags uint) (n int, err error) //sys Listxattr(path string, dest []byte) (sz int, err error) //sys Llistxattr(path string, dest []byte) (sz int, err error) //sys Lremovexattr(path string, attr string) (err error) @@ -2046,6 +2064,7 @@ func Getrandom(buf []byte, flags int) (n int, err error) { //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys PrctlArg5Ptr(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 unsafe.Pointer) (err error) = SYS_PRCTL //sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Removexattr(path string, attr string) (err error) @@ -2363,7 +2382,7 @@ func (fh *FileHandle) Bytes() []byte { if n == 0 { return nil } - return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n) + return unsafe.Slice((*byte)(unsafe.Add(unsafe.Pointer(&fh.fileHandle.Type), 4)), n) } // NameToHandleAt wraps the name_to_handle_at system call; it obtains diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index 4964119a..cd50715c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -8,7 +8,7 @@ package unix //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) @@ -19,7 +19,7 @@ package unix //sysnb Getuid() (uid int) //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Pause() (err error) //sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 @@ -31,7 +31,7 @@ package unix //sys setfsuid(uid int) (prev int, err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys Stat(path string, stat *Stat_t) (err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Statfs(path string, buf *Statfs_t) (err error) //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 34a46769..c8badc54 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -293,6 +293,15 @@ func Getvfsstat(buf []Statvfs_t, flags int) (n int, err error) { //sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) //sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) //sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE //sys Fchdir(fd int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go index 05c95bcc..60c0d16c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc +//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc package unix diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go deleted file mode 100644 index 23f39b7a..00000000 --- a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (ppc64le || ppc64) && gc - -package unix - -import "syscall" - -func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.Syscall(trap, a1, a2, a3) -} -func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6) -} -func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.RawSyscall(trap, a1, a2, a3) -} -func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6) -} diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 7bf5c04b..edabb689 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -27,14 +27,10 @@ import ( "unsafe" ) -//go:noescape -func initZosLibVec() - //go:noescape func GetZosLibVec() uintptr func init() { - initZosLibVec() r0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte("__ZOS_XSYSTRACE\x00"))[0]))) if r0 != 0 { n, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0) diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go index e1687939..d3d12c27 100644 --- a/vendor/golang.org/x/sys/unix/xattr_bsd.go +++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go @@ -56,7 +56,7 @@ func Getxattr(file string, attr string, dest []byte) (sz int, err error) { return -1, err } - return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) + return extattrGetFile(file, nsid, a, d, destsize) } func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { @@ -68,7 +68,7 @@ func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { return -1, err } - return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) + return extattrGetFd(fd, nsid, a, d, destsize) } func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { @@ -80,7 +80,7 @@ func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { return -1, err } - return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) + return extattrGetLink(link, nsid, a, d, destsize) } // flags are unused on FreeBSD @@ -97,7 +97,7 @@ func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { return } - _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + _, err = extattrSetFd(fd, nsid, a, d, datasiz) return } @@ -113,7 +113,7 @@ func Setxattr(file string, attr string, data []byte, flags int) (err error) { return } - _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + _, err = extattrSetFile(file, nsid, a, d, datasiz) return } @@ -129,7 +129,7 @@ func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { return } - _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + _, err = extattrSetLink(link, nsid, a, d, datasiz) return } @@ -199,9 +199,9 @@ func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) { d := initxattrdest(dest, 0) destsiz := len(dest) - s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + s, e := extattrListFile(file, nsid, d, destsiz) if e != nil { - return 0, err + return 0, e } return s, nil @@ -235,9 +235,9 @@ func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) { d := initxattrdest(dest, 0) destsiz := len(dest) - s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + s, e := extattrListFd(fd, nsid, d, destsiz) if e != nil { - return 0, err + return 0, e } return s, nil @@ -271,9 +271,9 @@ func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) { d := initxattrdest(dest, 0) destsiz := len(dest) - s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + s, e := extattrListLink(link, nsid, d, destsiz) if e != nil { - return 0, err + return 0, e } return s, nil diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index d73c4652..01a39533 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1128,6 +1128,7 @@ const ( O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 + O_EXEC = 0x40000000 O_EXLOCK = 0x20 O_FSYNC = 0x80 O_NDELAY = 0x4 @@ -1138,6 +1139,7 @@ const ( O_POPUP = 0x80000000 O_RDONLY = 0x0 O_RDWR = 0x2 + O_SEARCH = 0x40100000 O_SHLOCK = 0x10 O_SYMLINK = 0x200000 O_SYNC = 0x80 @@ -1147,6 +1149,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PRIO_DARWIN_BG = 0x1000 + PRIO_DARWIN_NONUI = 0x1001 + PRIO_DARWIN_PROCESS = 0x4 + PRIO_DARWIN_THREAD = 0x3 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index 4a55a400..d80b95f6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1128,6 +1128,7 @@ const ( O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 + O_EXEC = 0x40000000 O_EXLOCK = 0x20 O_FSYNC = 0x80 O_NDELAY = 0x4 @@ -1138,6 +1139,7 @@ const ( O_POPUP = 0x80000000 O_RDONLY = 0x0 O_RDWR = 0x2 + O_SEARCH = 0x40100000 O_SHLOCK = 0x10 O_SYMLINK = 0x200000 O_SYNC = 0x80 @@ -1147,6 +1149,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PRIO_DARWIN_BG = 0x1000 + PRIO_DARWIN_NONUI = 0x1001 + PRIO_DARWIN_PROCESS = 0x4 + PRIO_DARWIN_THREAD = 0x3 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 5bb51d7a..aa68cb8d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -752,10 +752,12 @@ const ( CLONE_ARGS_SIZE_VER0 = 0x40 CLONE_ARGS_SIZE_VER1 = 0x50 CLONE_ARGS_SIZE_VER2 = 0x58 + CLONE_AUTOREAP = 0x400000000 CLONE_CHILD_CLEARTID = 0x200000 CLONE_CHILD_SETTID = 0x1000000 CLONE_CLEAR_SIGHAND = 0x100000000 CLONE_DETACHED = 0x400000 + CLONE_EMPTY_MNTNS = 0x2000000000 CLONE_FILES = 0x400 CLONE_FS = 0x200 CLONE_INTO_CGROUP = 0x200000000 @@ -768,9 +770,11 @@ const ( CLONE_NEWTIME = 0x80 CLONE_NEWUSER = 0x10000000 CLONE_NEWUTS = 0x4000000 + CLONE_NNP = 0x800000000 CLONE_PARENT = 0x8000 CLONE_PARENT_SETTID = 0x100000 CLONE_PIDFD = 0x1000 + CLONE_PIDFD_AUTOKILL = 0x1000000000 CLONE_PTRACE = 0x2000 CLONE_SETTLS = 0x80000 CLONE_SIGHAND = 0x800 @@ -803,12 +807,15 @@ const ( DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" DEVLINK_GENL_NAME = "devlink" DEVLINK_GENL_VERSION = 0x1 + DEVLINK_INDEX_BUS_NAME = "devlink_index" DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO = 0x4 DEVLINK_PORT_FN_CAP_IPSEC_PACKET = 0x8 DEVLINK_PORT_FN_CAP_MIGRATABLE = 0x2 DEVLINK_PORT_FN_CAP_ROCE = 0x1 DEVLINK_RATE_TCS_MAX = 0x8 DEVLINK_RATE_TC_INDEX_MAX = 0x7 + DEVLINK_RESOURCE_SCOPE_DEV = 0x1 + DEVLINK_RESOURCE_SCOPE_PORT = 0x2 DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 DEVMEM_MAGIC = 0x454d444d @@ -1127,6 +1134,7 @@ const ( ETHTOOL_SWOL = 0x6 ETHTOOL_TEST = 0x1a ETH_P_1588 = 0x88f7 + ETH_P_8021AC = 0x8870 ETH_P_8021AD = 0x88a8 ETH_P_8021AH = 0x88e7 ETH_P_8021Q = 0x8100 @@ -1170,6 +1178,7 @@ const ( ETH_P_ETHERCAT = 0x88a4 ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 + ETH_P_GRE_OSI = 0xfe ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f ETH_P_IBOE = 0x8915 @@ -1198,6 +1207,7 @@ const ( ETH_P_MXLGSW = 0x88c3 ETH_P_NCSI = 0x88f8 ETH_P_NSH = 0x894f + ETH_P_NXP_NETC = 0xfd3a ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -1359,6 +1369,7 @@ const ( FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 + FD_NSFS_ROOT = -0x2713 FD_PIDFS_ROOT = -0x2712 FD_SETSIZE = 0x400 FF0 = 0x0 @@ -1427,6 +1438,8 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x7 + FS_SHUTDOWN_FLAGS_LOGFLUSH = 0x1 + FS_SHUTDOWN_FLAGS_NOLOGFLUSH = 0x2 FS_VERITY_FL = 0x100000 FS_VERITY_HASH_ALG_SHA256 = 0x1 FS_VERITY_HASH_ALG_SHA512 = 0x2 @@ -1441,6 +1454,7 @@ const ( F_DUPFD_CLOEXEC = 0x406 F_DUPFD_QUERY = 0x403 F_EXLCK = 0x4 + F_GETDELEG = 0x40f F_GETFD = 0x1 F_GETFL = 0x3 F_GETLEASE = 0x401 @@ -1462,6 +1476,7 @@ const ( F_SEAL_SEAL = 0x1 F_SEAL_SHRINK = 0x2 F_SEAL_WRITE = 0x8 + F_SETDELEG = 0x410 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -1632,6 +1647,7 @@ const ( IN_UNMOUNT = 0x2000 IOCTL_MEI_CONNECT_CLIENT = 0xc0104801 IOCTL_MEI_CONNECT_CLIENT_VTAG = 0xc0144804 + IPPROTO_AGGFRAG = 0x90 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -1913,10 +1929,14 @@ const ( LANDLOCK_ACCESS_FS_REFER = 0x2000 LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 + LANDLOCK_ACCESS_FS_RESOLVE_UNIX = 0x10000 LANDLOCK_ACCESS_FS_TRUNCATE = 0x4000 LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 + LANDLOCK_ACCESS_NET_BIND_UDP = 0x4 + LANDLOCK_ACCESS_NET_CONNECT_SEND_UDP = 0x8 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 + LANDLOCK_ADD_RULE_QUIET = 0x1 LANDLOCK_CREATE_RULESET_ERRATA = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 @@ -2048,6 +2068,7 @@ const ( MINIX3_SUPER_MAGIC = 0x4d5a MINIX_SUPER_MAGIC = 0x137f MINIX_SUPER_MAGIC2 = 0x138f + MLOCK_ONFAULT = 0x1 MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 @@ -3407,6 +3428,7 @@ const ( SCHED_FLAG_UTIL_CLAMP = 0x60 SCHED_FLAG_UTIL_CLAMP_MAX = 0x40 SCHED_FLAG_UTIL_CLAMP_MIN = 0x20 + SCHED_GETATTR_FLAG_DL_DYNAMIC = 0x1 SCHED_IDLE = 0x5 SCHED_NORMAL = 0x0 SCHED_RESET_ON_FORK = 0x40000000 @@ -3789,6 +3811,14 @@ const ( TCPOPT_TIMESTAMP = 0x8 TCPOPT_TSTAMP_HDR = 0x101080a TCPOPT_WINDOW = 0x3 + TCP_ACCECN_ACE_FAIL_RECV = 0x2 + TCP_ACCECN_ACE_FAIL_SEND = 0x1 + TCP_ACCECN_OPT_COUNTER_SEEN = 0x2 + TCP_ACCECN_OPT_EMPTY_SEEN = 0x1 + TCP_ACCECN_OPT_FAIL_RECV = 0x8 + TCP_ACCECN_OPT_FAIL_SEEN = 0x3 + TCP_ACCECN_OPT_FAIL_SEND = 0x4 + TCP_ACCECN_OPT_NOT_SEEN = 0x0 TCP_AO_KEYF_EXCLUDE_OPT = 0x2 TCP_AO_KEYF_IFINDEX = 0x1 TCP_AO_MAXKEYLEN = 0x50 @@ -3803,6 +3833,7 @@ const ( TCP_COOKIE_TRANSACTIONS = 0xf TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 + TCP_DELACK_MAX_US = 0x2e TCP_FASTOPEN = 0x17 TCP_FASTOPEN_CONNECT = 0x1e TCP_FASTOPEN_KEY = 0x21 @@ -3835,6 +3866,8 @@ const ( TCP_REPAIR_OPTIONS = 0x16 TCP_REPAIR_QUEUE = 0x14 TCP_REPAIR_WINDOW = 0x1d + TCP_RTO_MAX_MS = 0x2c + TCP_RTO_MIN_US = 0x2d TCP_SAVED_SYN = 0x1c TCP_SAVE_SYN = 0x1b TCP_SYNCNT = 0x7 @@ -3862,6 +3895,7 @@ const ( TIOCPKT_NOSTOP = 0x10 TIOCPKT_START = 0x8 TIOCPKT_STOP = 0x4 + TIOCSER_TEMT = 0x1 TIPC_ADDR_ID = 0x3 TIPC_ADDR_MCAST = 0x1 TIPC_ADDR_NAME = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index c0a8ea1d..5aaf4bc7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -483,7 +483,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -601,6 +600,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -841,6 +841,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index ff927c83..b8e6287a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -484,7 +484,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -601,6 +600,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -841,6 +841,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 55294eda..464f8218 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -489,7 +489,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -606,6 +605,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -846,6 +846,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 5dac54c3..735265b6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -483,7 +483,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -603,6 +602,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -843,6 +843,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 46ac1fcb..1970ce82 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -476,7 +476,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -593,6 +592,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -833,6 +833,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index b55483e8..56de9aeb 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -481,7 +481,6 @@ const ( TIOCSERGWILD = 0x5489 TIOCSERSETMULTI = 0x5490 TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 TIOCSETD = 0x7401 TIOCSETN = 0x740a TIOCSETP = 0x7409 @@ -602,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -846,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 71890c98..26ca1cac 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -481,7 +481,6 @@ const ( TIOCSERGWILD = 0x5489 TIOCSERSETMULTI = 0x5490 TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 TIOCSETD = 0x7401 TIOCSETN = 0x740a TIOCSETP = 0x7409 @@ -602,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -846,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index a78b6cc1..b19df234 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -481,7 +481,6 @@ const ( TIOCSERGWILD = 0x5489 TIOCSERSETMULTI = 0x5490 TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 TIOCSETD = 0x7401 TIOCSETN = 0x740a TIOCSETP = 0x7409 @@ -602,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -846,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index d0e38ca7..9ba3c950 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -481,7 +481,6 @@ const ( TIOCSERGWILD = 0x5489 TIOCSERSETMULTI = 0x5490 TIOCSERSWILD = 0x548a - TIOCSER_TEMT = 0x1 TIOCSETD = 0x7401 TIOCSETN = 0x740a TIOCSETP = 0x7409 @@ -602,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -846,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index c883e14c..62da59f9 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -535,7 +535,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETC = 0x80067411 TIOCSETD = 0x5423 TIOCSETN = 0x8006740a @@ -658,6 +657,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -899,6 +899,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 1834273d..d18d4dae 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -539,7 +539,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETC = 0x80067411 TIOCSETD = 0x5423 TIOCSETN = 0x8006740a @@ -662,6 +661,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -903,6 +903,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 39945dd9..ba7767db 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -539,7 +539,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETC = 0x80067411 TIOCSETD = 0x5423 TIOCSETN = 0x8006740a @@ -662,6 +661,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -903,6 +903,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index bc0f3724..76cb2211 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -486,7 +486,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -603,6 +602,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -843,6 +843,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 6e87bd65..ffd12a97 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -545,7 +545,6 @@ const ( TIOCSERGWILD = 0x5454 TIOCSERSETMULTI = 0x545b TIOCSERSWILD = 0x5455 - TIOCSER_TEMT = 0x1 TIOCSETD = 0x5423 TIOCSIG = 0x40045436 TIOCSISO7816 = 0xc0285443 @@ -662,6 +661,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -902,6 +902,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 7e2b2e8a..f372aed3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -14,21 +14,21 @@ const ( ASI_LEON_DFLUSH = 0x11 ASI_LEON_IFLUSH = 0x10 ASI_LEON_MMUFLUSH = 0x18 - B1000000 = 0x1008 + B1000000 = 0x100c B115200 = 0x1002 - B1152000 = 0x1009 - B1500000 = 0x100a - B2000000 = 0x100b + B1152000 = 0x100d + B1500000 = 0x100e + B153600 = 0x1006 + B2000000 = 0x100f B230400 = 0x1003 - B2500000 = 0x100c - B3000000 = 0x100d - B3500000 = 0x100e - B4000000 = 0x100f + B307200 = 0x1007 B460800 = 0x1004 - B500000 = 0x1005 + B500000 = 0x100a B57600 = 0x1001 - B576000 = 0x1006 - B921600 = 0x1007 + B576000 = 0x100b + B614400 = 0x1008 + B76800 = 0x1005 + B921600 = 0x1009 BLKALIGNOFF = 0x2000127a BLKBSZGET = 0x40081270 BLKBSZSET = 0x80081271 @@ -91,7 +91,7 @@ const ( FFDLY = 0x8000 FICLONE = 0x80049409 FICLONERANGE = 0x8020940d - FLUSHO = 0x1000 + FLUSHO = 0x2000 FS_IOC_ENABLE_VERITY = 0x80806685 FS_IOC_GETFLAGS = 0x40086601 FS_IOC_GET_ENCRYPTION_NONCE = 0x4010661b @@ -563,6 +563,9 @@ const ( TIOCM_CD = 0x40 TIOCM_CTS = 0x20 TIOCM_DSR = 0x100 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 TIOCM_RI = 0x80 TIOCM_RNG = 0x80 TIOCM_SR = 0x10 @@ -641,10 +644,11 @@ const ( UBI_IOCVOLRMBLK = 0x20004f08 UBI_IOCVOLUP = 0x80084f00 VDISCARD = 0xd + VDSUSP = 0xb VEOF = 0x4 - VEOL = 0xb - VEOL2 = 0x10 - VMIN = 0x6 + VEOL = 0x5 + VEOL2 = 0x6 + VMIN = 0x4 VREPRINT = 0xc VSTART = 0x8 VSTOP = 0x9 @@ -664,6 +668,7 @@ const ( WDIOC_KEEPALIVE = 0x40045705 WDIOC_SETOPTIONS = 0x40045704 WORDSIZE = 0x40 + WRAP = 0x20000 XCASE = 0x4 XTABS = 0x1800 _HIDIOCGRAWNAME = 0x40804804 @@ -699,6 +704,7 @@ const ( EDQUOT = syscall.Errno(0x45) EFSBADCRC = syscall.Errno(0x4c) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x88) EHOSTDOWN = syscall.Errno(0x40) EHOSTUNREACH = syscall.Errno(0x41) EHWPOISON = syscall.Errno(0x87) @@ -945,6 +951,7 @@ var errorList = [...]struct { {133, "ENOTRECOVERABLE", "state not recoverable"}, {134, "ERFKILL", "operation not possible due to RF-kill"}, {135, "EHWPOISON", "memory page has hardware error"}, + {136, "EFTYPE", "unknown error 136"}, } // Signal table diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 813c05b6..7db9bf5f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -702,6 +702,17 @@ var libc_fcntl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func kill(pid int, signum int, posix int) (err error) { _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index e6f58f3c..2a658059 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -702,6 +702,17 @@ var libc_fcntl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func kill(pid int, signum int, posix int) (err error) { _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index c0096391..10b57ffb 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index 7664df74..6a6fc3cc 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index ae099182..4a15b4ab 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index 11fd5d45..f15331fb 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go index c3d2d653..faa56264 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 5788c2a5..4c63b976 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -943,7 +943,7 @@ func fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getdents(fd int, buf []byte) (n int, err error) { +func getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) @@ -1167,6 +1167,23 @@ func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Listns(req *NsIdReq, nsIds []uint64, flags uint) (n int, err error) { + var _p0 unsafe.Pointer + if len(nsIds) > 0 { + _p0 = unsafe.Pointer(&nsIds[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LISTNS, uintptr(unsafe.Pointer(req)), uintptr(_p0), uintptr(len(nsIds)), uintptr(flags), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1390,6 +1407,16 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func PrctlArg5Ptr(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 unsafe.Pointer) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) { r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) n = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 52763762..b7aca545 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -66,7 +66,7 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -183,7 +183,7 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -338,7 +338,7 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index e91ebc14..1e136d12 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index be28babb..440db6ec 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index fb587e82..db963000 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index d576438b..c4bea6c8 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go index 5e8c263c..f09f8447 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go @@ -2848,5 +2848,18 @@ const ( SYS_____CHATTRAT64_A = 0xE39 // 3641 SYS_MADVISE = 0xE3A // 3642 SYS___AUTHENTICATE = 0xE3B // 3643 + SYS_GETPWENT_R = 0xE3C // 3644 + SYS___GETPWENT_R_A = 0xE3D // 3645 + SYS_STRNLEN = 0xE3E // 3646 + SYS_STPCPY = 0xE3F // 3647 + SYS_STPNCPY = 0xE40 // 3648 + SYS_STRSIGNAL = 0xE41 // 3649 + SYS_WCPCPY = 0xE42 // 3650 + SYS_WCPNCPY = 0xE43 // 3651 + SYS_WCSNLEN = 0xE44 // 3652 + SYS___STRSIGNAL_A = 0xE45 // 3653 + SYS_FDOPENDIR = 0xE46 // 3654 + SYS_FDCLOSEDIR = 0xE47 // 3655 + SYS_SYSCALL = 0xE48 // 3656 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 526a0d5f..2b3c00b9 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -933,6 +933,29 @@ type OpenHow struct { const SizeofOpenHow = 0x18 +type NsIdReq struct { + Size uint32 + Spare uint32 + Ns_id uint64 + Ns_type uint32 + Spare2 uint32 + User_ns_id uint64 +} + +const ( + NS_ID_REQ_SIZE_VER0 = 0x20 + LISTNS_CURRENT_USER = 0xffffffffffffffff + + TIME_NS = 0x80 + MNT_NS = 0x20000 + CGROUP_NS = 0x2000000 + UTS_NS = 0x4000000 + IPC_NS = 0x8000000 + USER_NS = 0x10000000 + PID_NS = 0x20000000 + NET_NS = 0x40000000 +) + const ( RESOLVE_BENEATH = 0x8 RESOLVE_IN_ROOT = 0x10 @@ -3579,7 +3602,7 @@ const ( DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 0xae DEVLINK_ATTR_NESTED_DEVLINK = 0xaf DEVLINK_ATTR_SELFTESTS = 0xb0 - DEVLINK_ATTR_MAX = 0xb7 + DEVLINK_ATTR_MAX = 0xb9 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 @@ -4101,7 +4124,7 @@ const ( ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x1e + ETHTOOL_A_COALESCE_MAX = 0x20 ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 @@ -4113,7 +4136,7 @@ const ( ETHTOOL_A_PAUSE_STAT_PAD = 0x1 ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3 - ETHTOOL_A_PAUSE_STAT_MAX = 0x3 + ETHTOOL_A_PAUSE_STAT_MAX = 0x4 ETHTOOL_A_EEE_UNSPEC = 0x0 ETHTOOL_A_EEE_HEADER = 0x1 ETHTOOL_A_EEE_MODES_OURS = 0x2 @@ -4264,19 +4287,29 @@ type HwTstampConfig struct { } const ( - HWTSTAMP_FILTER_NONE = 0x0 - HWTSTAMP_FILTER_ALL = 0x1 - HWTSTAMP_FILTER_SOME = 0x2 - HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3 - HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6 - HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9 - HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc + HWTSTAMP_FILTER_NONE = 0x0 + HWTSTAMP_FILTER_ALL = 0x1 + HWTSTAMP_FILTER_SOME = 0x2 + HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3 + HWTSTAMP_FILTER_PTP_V1_L4_SYNC = 0x4 + HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 0x5 + HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6 + HWTSTAMP_FILTER_PTP_V2_L4_SYNC = 0x7 + HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 0x8 + HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9 + HWTSTAMP_FILTER_PTP_V2_L2_SYNC = 0xa + HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 0xb + HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc + HWTSTAMP_FILTER_PTP_V2_SYNC = 0xd + HWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 0xe + HWTSTAMP_FILTER_NTP_ALL = 0xf ) const ( HWTSTAMP_TX_OFF = 0x0 HWTSTAMP_TX_ON = 0x1 HWTSTAMP_TX_ONESTEP_SYNC = 0x2 + HWTSTAMP_TX_ONESTEP_P2P = 0x3 ) type ( @@ -4527,9 +4560,12 @@ const ( ) type LandlockRulesetAttr struct { - Access_fs uint64 - Access_net uint64 - Scoped uint64 + Handled_access_fs uint64 + Handled_access_net uint64 + Scoped uint64 + Quiet_access_fs uint64 + Quiet_access_net uint64 + Quiet_scoped uint64 } type LandlockPathBeneathAttr struct { @@ -4541,6 +4577,51 @@ const ( LANDLOCK_RULE_PATH_BENEATH = 0x1 ) +const ( + PIDFD_SIGNAL_THREAD = 0x1 + PIDFD_SIGNAL_THREAD_GROUP = 0x2 + PIDFD_SIGNAL_PROCESS_GROUP = 0x4 + PIDFD_SELF_THREAD = -0x2710 + PIDFD_SELF_THREAD_GROUP = -0x2711 + PIDFD_SELF = -0x2710 + PIDFD_SELF_PROCESS = -0x2711 + PIDFD_INFO_PID = 0x1 + PIDFD_INFO_CREDS = 0x2 + PIDFD_INFO_CGROUPID = 0x4 + PIDFD_INFO_EXIT = 0x8 + PIDFD_INFO_COREDUMP = 0x10 + PIDFD_COREDUMPED = 0x1 + PIDFD_COREDUMP_SKIP = 0x2 + PIDFD_COREDUMP_USER = 0x4 + PIDFD_COREDUMP_ROOT = 0x8 + PIDFD_INFO_SIZE_VER0 = 0x40 + PIDFD_GET_INFO = 0xc058ff0b +) + +const SizeofPidfdInfo = 0x58 + +type PidfdInfo struct { + Mask uint64 + Cgroupid uint64 + Pid uint32 + Tgid uint32 + Ppid uint32 + Ruid uint32 + Rgid uint32 + Euid uint32 + Egid uint32 + Suid uint32 + Sgid uint32 + Fsuid uint32 + Fsgid uint32 + Exit_code int32 + Coredump_mask uint32 + Coredump_signal uint32 + Coredump_code uint32 + Coredump_pad uint32 + Supported_mask uint64 +} + const ( IPC_CREAT = 0x200 IPC_EXCL = 0x400 @@ -4880,7 +4961,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x15c + NL80211_ATTR_MAX = 0x16e NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 @@ -5095,12 +5176,12 @@ const ( NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 NL80211_ATTR_WPA_VERSIONS = 0x4b - NL80211_AUTHTYPE_AUTOMATIC = 0x9 + NL80211_AUTHTYPE_AUTOMATIC = 0xa NL80211_AUTHTYPE_FILS_PK = 0x7 NL80211_AUTHTYPE_FILS_SK = 0x5 NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 NL80211_AUTHTYPE_FT = 0x2 - NL80211_AUTHTYPE_MAX = 0x8 + NL80211_AUTHTYPE_MAX = 0x9 NL80211_AUTHTYPE_NETWORK_EAP = 0x3 NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 NL80211_AUTHTYPE_SAE = 0x4 @@ -5268,7 +5349,7 @@ const ( NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d NL80211_CMD_LINKS_REMOVED = 0x9a - NL80211_CMD_MAX = 0x9f + NL80211_CMD_MAX = 0xa7 NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5514,7 +5595,7 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x27 + NL80211_FREQUENCY_ATTR_MAX = 0x29 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc @@ -5587,7 +5668,7 @@ const ( NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2 NL80211_IFTYPE_AP = 0x3 NL80211_IFTYPE_AP_VLAN = 0x4 - NL80211_IFTYPE_MAX = 0xc + NL80211_IFTYPE_MAX = 0xe NL80211_IFTYPE_MESH_POINT = 0x7 NL80211_IFTYPE_MONITOR = 0x6 NL80211_IFTYPE_NAN = 0xc @@ -5612,7 +5693,7 @@ const ( NL80211_KEY_DEFAULT_TYPES = 0x8 NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1 NL80211_KEY_IDX = 0x2 - NL80211_KEY_MAX = 0xa + NL80211_KEY_MAX = 0xb NL80211_KEY_MODE = 0x9 NL80211_KEY_NO_TX = 0x1 NL80211_KEY_RX_TX = 0x0 @@ -5770,7 +5851,7 @@ const ( NL80211_PMKSA_CANDIDATE_BSSID = 0x2 NL80211_PMKSA_CANDIDATE_INDEX = 0x1 NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3 - NL80211_PMSR_ATTR_MAX = 0x5 + NL80211_PMSR_ATTR_MAX = 0x7 NL80211_PMSR_ATTR_MAX_PEERS = 0x1 NL80211_PMSR_ATTR_PEERS = 0x5 NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3 @@ -5779,7 +5860,7 @@ const ( NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 - NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x12 + NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x1f NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa @@ -5801,7 +5882,7 @@ const ( NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc - NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xe + NL80211_PMSR_FTM_REQ_ATTR_MAX = 0x17 NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 @@ -5819,7 +5900,7 @@ const ( NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 - NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x16 + NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x21 NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 @@ -5833,7 +5914,7 @@ const ( NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb NL80211_PMSR_PEER_ATTR_ADDR = 0x1 NL80211_PMSR_PEER_ATTR_CHAN = 0x2 - NL80211_PMSR_PEER_ATTR_MAX = 0x4 + NL80211_PMSR_PEER_ATTR_MAX = 0x5 NL80211_PMSR_PEER_ATTR_REQ = 0x3 NL80211_PMSR_PEER_ATTR_RESP = 0x4 NL80211_PMSR_REQ_ATTR_DATA = 0x1 @@ -6473,3 +6554,23 @@ type GPIOV2LineEvent struct { Line_seqno uint32 _ [6]uint32 } + +const ( + IPMI_MAX_ADDR_SIZE = 0x20 + IPMI_SYSTEM_INTERFACE_ADDR_TYPE = 0xc + IPMI_BMC_CHANNEL = 0xf + IPMI_RESPONSE_RECV_TYPE = 0x1 +) + +type IPMISystemInterfaceAddr struct { + Type int32 + Channel int16 + Lun uint8 + _ [1]byte +} +type IPMIMsg struct { + Netfn uint8 + Cmd uint8 + Len uint16 + Data *uint8 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index aede1de7..c7ec66dc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -163,6 +163,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -178,6 +183,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) @@ -680,7 +686,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -715,3 +732,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8014690d + IPMICTL_RECEIVE_MSG = 0xc018690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int32 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int32 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index bb3bc4dc..abe072e8 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -166,6 +166,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -181,6 +187,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -697,7 +704,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -729,3 +747,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 1fdf4c51..4ba7cea0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -169,6 +169,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -184,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) @@ -674,7 +680,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -709,3 +726,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8014690d + IPMICTL_RECEIVE_MSG = 0xc018690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int32 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int32 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 063e6f0b..3f55ca4a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -676,7 +683,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -708,3 +726,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 9cf836c7..445b2a2e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -677,7 +684,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -709,3 +727,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 1d222fcb..6a52e254 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -168,6 +168,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -183,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) @@ -680,7 +686,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x80 + PIDFD_NONBLOCK = 0x80 + PIDFD_THREAD = 0x400 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -714,3 +731,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4014690d + IPMICTL_RECEIVE_MSG = 0xc018690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int32 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int32 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 912cc4ab..fafd89de 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -679,7 +686,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x80 + PIDFD_NONBLOCK = 0x80 + PIDFD_THREAD = 0x400 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -711,3 +729,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 1e358ef3..5fb6f4cf 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -679,7 +686,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x80 + PIDFD_NONBLOCK = 0x80 + PIDFD_THREAD = 0x400 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -711,3 +729,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index df59f32f..a50187bc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -168,6 +168,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -183,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) @@ -680,7 +686,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x80 + PIDFD_NONBLOCK = 0x80 + PIDFD_THREAD = 0x400 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -714,3 +731,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4014690d + IPMICTL_RECEIVE_MSG = 0xc018690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int32 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int32 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 29355aa0..777b0228 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -169,6 +169,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -184,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) @@ -686,7 +692,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -722,3 +739,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4014690d + IPMICTL_RECEIVE_MSG = 0xc018690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int32 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int32 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index c6083a15..48a6a5ac 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -168,6 +168,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -183,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -686,7 +693,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -717,3 +735,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 6321cc76..1972c012 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -168,6 +168,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -183,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -686,7 +693,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -717,3 +735,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index b44f402f..87572ee0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -704,7 +711,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -796,3 +814,22 @@ const ( const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index b22c795a..f6a33e68 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -166,6 +166,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -181,6 +187,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -700,7 +707,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x800 + PIDFD_NONBLOCK = 0x800 + PIDFD_THREAD = 0x80 + PIDFD_GET_CGROUP_NAMESPACE = 0xff01 + PIDFD_GET_IPC_NAMESPACE = 0xff02 + PIDFD_GET_MNT_NAMESPACE = 0xff03 + PIDFD_GET_NET_NAMESPACE = 0xff04 + PIDFD_GET_PID_NAMESPACE = 0xff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0xff06 + PIDFD_GET_TIME_NAMESPACE = 0xff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0xff08 + PIDFD_GET_USER_NAMESPACE = 0xff09 + PIDFD_GET_UTS_NAMESPACE = 0xff0a ) type SysvIpcPerm struct { @@ -731,3 +749,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x8044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x8028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 0b18075b..8b726145 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -84,22 +84,20 @@ type Rusage struct { type Stat_t struct { Dev uint64 - _ uint16 Ino uint64 + Nlink uint64 Mode uint32 - Nlink uint32 Uid uint32 Gid uint32 + _ uint32 Rdev uint64 - _ uint16 Size int64 Blksize int64 Blocks int64 Atim Timespec Mtim Timespec Ctim Timespec - _ uint64 - _ uint64 + _ [3]int64 } type Dirent struct { @@ -170,6 +168,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -185,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) @@ -681,7 +686,18 @@ const ( ) const ( - PIDFD_NONBLOCK = 0x4000 + PIDFD_NONBLOCK = 0x4000 + PIDFD_THREAD = 0x800 + PIDFD_GET_CGROUP_NAMESPACE = 0x2000ff01 + PIDFD_GET_IPC_NAMESPACE = 0x2000ff02 + PIDFD_GET_MNT_NAMESPACE = 0x2000ff03 + PIDFD_GET_NET_NAMESPACE = 0x2000ff04 + PIDFD_GET_PID_NAMESPACE = 0x2000ff05 + PIDFD_GET_PID_FOR_CHILDREN_NAMESPACE = 0x2000ff06 + PIDFD_GET_TIME_NAMESPACE = 0x2000ff07 + PIDFD_GET_TIME_FOR_CHILDREN_NAMESPACE = 0x2000ff08 + PIDFD_GET_USER_NAMESPACE = 0x2000ff09 + PIDFD_GET_UTS_NAMESPACE = 0x2000ff0a ) type SysvIpcPerm struct { @@ -712,3 +728,22 @@ type SysvShmDesc struct { const ( GPIO_GET_CHIPINFO_IOCTL = 0x4044b401 ) + +const ( + IPMICTL_SEND_COMMAND = 0x4028690d + IPMICTL_RECEIVE_MSG = 0xc030690c +) + +type IPMIReq struct { + Addr *uint8 + Len uint32 + Msgid int64 + Msg IPMIMsg +} +type IPMIRecv struct { + Recv_type int32 + Addr *uint8 + Addr_len uint32 + Msgid int64 + Msg IPMIMsg +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go index 2e5d5a44..80d4c953 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -209,6 +209,84 @@ type TCPInfo struct { Total_retrans uint32 } +// Ptrace structures for z/OS + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + Fprs [16]float64 +} + +type PtracePer struct { + Control_regs [3]uint64 + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + Address uint64 + Access_id uint8 + _ [7]byte +} + +// PT_BLOCKREQ structures for block ptrace requests +// Layout matches BPXYPTRC HLASM macro (PtBR_GPR + PtBR_GPR_EXT): +// +// Offset 0-1: Writebitflags (PtBR_GPR_CntlGPR, 2 bytes) +// Offset 2-3: Wpsw (PtBR_GPR_CntlMisc, 2 bytes with WPSW bit flag) +// Offset 4-15: Reserved (12 bytes) +// Offset 16-79: Gpr (64 bytes, 16 GPRs) +// Offset 80-143: Ctl (64 bytes, 16 CRs) +// Offset 144-151: Psw old format (8 bytes, PtBR_GPR_PSW) +// Offset 152-167: Pswg extended (16 bytes, PtBR_GPR_PSWG for 64-bit) +// Total: 168 bytes (base 152 + extended 16) +type PtraceBlkGpr struct { + Writebitflags uint16 // 2 bytes at offset 0 (PtBR_GPR_CntlGPR) + Wpsw uint16 // 2 bytes at offset 2 (PtBR_GPR_CntlMisc with WPSW flag) + _ [12]byte // 12 bytes reserved (offset 4-15) + Gpr [16]uint32 // 64 bytes at offset 16 (GPRs) + Ctl [16]uint32 // 64 bytes at offset 80 (CRs) + Psw [8]byte // 8 bytes at offset 144 (old PSW format) + Pswg [16]byte // 16 bytes at offset 152 (extended PSWG) + // Total: 2+2+12+64+64+8+16 = 168 bytes +} + +type PtraceBlkReqReq struct { + Reqtype int32 + Reqstat int32 + Reqdata uint32 + _ [4]byte +} + +type PtraceBlkReq struct { + Numreq int32 + _ [12]byte +} + +// PT_READ_U structures for reading user area (control info) +type PtraceBlkUarOcw struct { + Ofs uint32 // Control information offset + Ctl uint32 // Control information +} + +type PtraceBlkUar struct { + Num uint32 // Number of entries + _ [4]byte +} + type _Gid_t uint32 type rusage_zos struct { diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 75a50b31..643737d4 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -1065,6 +1065,7 @@ const ( SO_BROADCAST = 32 SO_LINGER = 128 SO_RCVBUF = 0x1002 + SO_SNDTIMEO = 0x1005 SO_RCVTIMEO = 0x1006 SO_SNDBUF = 0x1001 SO_UPDATE_ACCEPT_CONTEXT = 0x700b diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm.go b/vendor/golang.org/x/sys/windows/types_windows_arm.go deleted file mode 100644 index 321872c3..00000000 --- a/vendor/golang.org/x/sys/windows/types_windows_arm.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -type WSAData struct { - Version uint16 - HighVersion uint16 - Description [WSADESCRIPTION_LEN + 1]byte - SystemStatus [WSASYS_STATUS_LEN + 1]byte - MaxSockets uint16 - MaxUdpDg uint16 - VendorInfo *byte -} - -type Servent struct { - Name *byte - Aliases **byte - Port uint16 - Proto *byte -} - -type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { - PerProcessUserTimeLimit int64 - PerJobUserTimeLimit int64 - LimitFlags uint32 - MinimumWorkingSetSize uintptr - MaximumWorkingSetSize uintptr - ActiveProcessLimit uint32 - Affinity uintptr - PriorityClass uint32 - SchedulingClass uint32 - _ uint32 // pad to 8 byte boundary -} diff --git a/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go index 6f7bd460..10fbd86b 100644 --- a/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go +++ b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go @@ -14,6 +14,16 @@ import ( ) // ISO2022JP is the ISO-2022-JP encoding. +// +// Decoding accepts ISO-2022-JP as specified in RFC 2237, +// which includes support for inputs which are not supported by +// the intentionally more restrictive WHATWG Encoding Standard, +// such as JIS X 0212 and half-width Katakana characters. +// +// Encoding always produces output that is valid according to WHATWG. +// +// Programs which forward inputs after parsing should take care to +// re-encode the parsed input for forwarding. var ISO2022JP encoding.Encoding = &iso2022JP var iso2022JP = internal.Encoding{ diff --git a/vendor/golang.org/x/text/unicode/norm/composition.go b/vendor/golang.org/x/text/unicode/norm/composition.go index e2087bce..e024e74b 100644 --- a/vendor/golang.org/x/text/unicode/norm/composition.go +++ b/vendor/golang.org/x/text/unicode/norm/composition.go @@ -449,6 +449,16 @@ func (rb *reorderBuffer) combineHangul(s, i, k int) { // ACxx plus 11Ax to LVT rb.assignRune(s, l+v-jamoTBase) default: + // Not a Hangul composition. The segment may still + // contain regular canonical compositions, such as + // combining marks following a Hangul syllable, so + // fall back to the composition table. + if b[i].combinesBackward() { + if combined := combine(l, v); combined != 0 { + rb.assignRune(s, combined) + continue + } + } b[k] = b[i] k++ } @@ -484,25 +494,27 @@ func (rb *reorderBuffer) compose() { return } ii := b[i] + // Track the last starter unconditionally: b[i] must be blocked by + // any starter between it and s, even one that b[i] itself cannot + // combine with, and even if the runes in between never enter the + // combinesBackward branch below. + cccB := b[k-1].ccc + cccC := ii.ccc + blocked := false // b[i] blocked by starter or greater or equal CCC? + if cccB == 0 { + s = k - 1 + } else { + blocked = s != k-1 && cccB >= cccC + } // We can only use combineForward as a filter if we later // get the info for the combined character. This is more // expensive than using the filter. Using combinesBackward() // is safe. - if ii.combinesBackward() { - cccB := b[k-1].ccc - cccC := ii.ccc - blocked := false // b[i] blocked by starter or greater or equal CCC? - if cccB == 0 { - s = k - 1 - } else { - blocked = s != k-1 && cccB >= cccC - } - if !blocked { - combined := combine(rb.runeAt(s), rb.runeAt(i)) - if combined != 0 { - rb.assignRune(s, combined) - continue - } + if ii.combinesBackward() && !blocked { + combined := combine(rb.runeAt(s), rb.runeAt(i)) + if combined != 0 { + rb.assignRune(s, combined) + continue } } b[k] = b[i] diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go index b3cf5d9b..956708ee 100644 --- a/vendor/golang.org/x/text/unicode/norm/forminfo.go +++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go @@ -191,30 +191,30 @@ func (p Properties) TrailCCC() uint8 { return ccc[p.tccc] } +// Recomposition +// Each entry of recompMapPacked holds the two runes of the key and the +// composed rune of the value packed into a big-endian uint64 as three +// 21-bit fields, which is wide enough for any rune. +// Note that the recomposition map for NFC and NFKC are identical. + +const recompShift = 21 + func buildRecompMap() { - recompMap = make(map[uint32]rune, len(recompMapPacked)/8) + recompMap = make(map[uint64]rune, len(recompMapPacked)/8) var buf [8]byte for i := 0; i < len(recompMapPacked); i += 8 { copy(buf[:], recompMapPacked[i:i+8]) - key := binary.BigEndian.Uint32(buf[:4]) - val := binary.BigEndian.Uint32(buf[4:]) - recompMap[key] = rune(val) + e := binary.BigEndian.Uint64(buf[:]) + recompMap[e>>recompShift] = rune(e & (1<" + // 0x006C030C: 0x0000013E - "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 - "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 - "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 - "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 - "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 - "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 - "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C - "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D - "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E - "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F - "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 - "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 - "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 - "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 - "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 - "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 - "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 - "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 - "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A - "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B - "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C - "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D - "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E - "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F - "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 - "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 - "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 - "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 - "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 - "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 - "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 - "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 - "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A - "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B - "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C - "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D - "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E - "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F - "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 - "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 - "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 - "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 - "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 - "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 - "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 - "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 - "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 - "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 - "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A - "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B - "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C - "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D - "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E - "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 - "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 - "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF - "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 - "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD - "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE - "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF - "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 - "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 - "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 - "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 - "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 - "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 - "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 - "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 - "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 - "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 - "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA - "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB - "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC - "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE - "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF - "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 - "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 - "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 - "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 - "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 - "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 - "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 - "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 - "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA - "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB - "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC - "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED - "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE - "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF - "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 - "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 - "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 - "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 - "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 - "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA - "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB - "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC - "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD - "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE - "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF - "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 - "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 - "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 - "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 - "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 - "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 - "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 - "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 - "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 - "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 - "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A - "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B - "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C - "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D - "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E - "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F - "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 - "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 - "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 - "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 - "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 - "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 - "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 - "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 - "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 - "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 - "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A - "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B - "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E - "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F - "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 - "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 - "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 - "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 - "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A - "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B - "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C - "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D - "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E - "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F - "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 - "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 - "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 - "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 - "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 - "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 - "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 - "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 - "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A - "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C - "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E - "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F - "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 - "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA - "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB - "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC - "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD - "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE - "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF - "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 - "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA - "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB - "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC - "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD - "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE - "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 - "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 - "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 - "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 - "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 - "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 - "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C - "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D - "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E - "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 - "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 - "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 - "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 - "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 - "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 - "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C - "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D - "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E - "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 - "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 - "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 - "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 - "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 - "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 - "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 - "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 - "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 - "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 - "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA - "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB - "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC - "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD - "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE - "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF - "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 - "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 - "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 - "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 - "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 - "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 - "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA - "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB - "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC - "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED - "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE - "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF - "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 - "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 - "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 - "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 - "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 - "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 - "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 - "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 - "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 - "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 - "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 - "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 - "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 - "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 - "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 - "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 - "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 - "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 - "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 - "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB - "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC - "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 - "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B - "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C - "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 - "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA - "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB - "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC - "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 - "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 - "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 - "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 - "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA - "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB - "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A - "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B - "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C - "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA - "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC - "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD - "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE - "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 - "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 - "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 - "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A - "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C - "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E - "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 - "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B - "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D - "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 - "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 - "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 - "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 - "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 - "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 - "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 - "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 - "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 - "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 - "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 - "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 - "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 - "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A - "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B - "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C - "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D - "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E - "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F - "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 - "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 - "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 - "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 - "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 - "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 - "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 - "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 - "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 - "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 - "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A - "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B - "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C - "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D - "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E - "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F - "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 - "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 - "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 - "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 - "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 - "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 - "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 - "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 - "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 - "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 - "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A - "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B - "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C - "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D - "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E - "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F - "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 - "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 - "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 - "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 - "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 - "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 - "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 - "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 - "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 - "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 - "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A - "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B - "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C - "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D - "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E - "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F - "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 - "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 - "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 - "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 - "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 - "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 - "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 - "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 - "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 - "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 - "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A - "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B - "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C - "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D - "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E - "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F - "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 - "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 - "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 - "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 - "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 - "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 - "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 - "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 - "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 - "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 - "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A - "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B - "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C - "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D - "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E - "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F - "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 - "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 - "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 - "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 - "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 - "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 - "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 - "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 - "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 - "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 - "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A - "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B - "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C - "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D - "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E - "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F - "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 - "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 - "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 - "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 - "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 - "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 - "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 - "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 - "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 - "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 - "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A - "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B - "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C - "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D - "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E - "\x00v\x03#\x00\x00\x1e\x7f" + // 0x00760323: 0x00001E7F - "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 - "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 - "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 - "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 - "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 - "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 - "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 - "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 - "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 - "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 - "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A - "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B - "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C - "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D - "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E - "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F - "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 - "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 - "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 - "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 - "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 - "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 - "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 - "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 - "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 - "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 - "\x01\x7f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B - "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 - "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 - "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 - "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 - "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 - "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 - "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 - "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 - "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 - "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 - "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA - "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB - "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC - "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD - "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE - "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF - "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 - "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 - "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 - "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 - "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 - "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 - "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 - "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 - "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 - "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 - "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA - "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB - "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC - "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD - "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE - "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF - "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 - "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 - "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 - "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 - "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 - "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 - "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 - "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 - "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 - "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 - "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA - "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB - "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC - "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD - "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE - "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF - "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 - "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 - "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 - "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 - "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 - "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 - "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 - "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 - "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 - "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 - "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA - "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB - "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC - "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD - "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE - "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF - "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 - "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 - "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 - "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 - "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 - "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 - "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 - "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 - "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 - "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 - "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA - "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB - "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC - "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED - "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE - "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF - "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 - "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 - "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 - "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 - "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 - "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 - "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 - "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 - "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 - "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 - "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 - "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 - "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 - "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 - "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 - "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 - "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 - "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 - "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 - "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 - "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A - "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B - "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C - "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D - "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E - "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F - "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 - "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 - "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 - "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 - "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 - "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 - "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 - "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 - "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A - "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B - "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C - "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D - "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 - "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 - "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 - "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 - "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 - "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 - "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 - "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 - "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 - "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 - "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A - "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B - "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C - "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D - "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E - "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F - "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 - "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 - "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 - "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 - "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 - "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 - "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 - "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 - "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 - "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 - "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A - "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B - "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C - "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D - "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E - "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F - "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 - "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 - "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 - "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 - "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 - "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 - "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 - "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 - "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A - "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B - "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C - "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D - "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 - "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 - "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 - "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 - "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 - "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 - "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 - "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 - "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 - "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B - "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D - "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F - "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 - "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 - "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 - "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 - "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 - "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 - "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 - "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 - "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 - "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 - "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A - "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B - "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C - "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D - "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E - "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F - "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 - "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 - "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 - "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 - "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 - "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A - "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C - "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 - "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 - "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 - "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 - "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 - "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 - "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 - "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 - "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 - "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 - "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A - "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B - "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C - "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D - "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E - "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F - "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 - "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 - "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 - "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 - "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 - "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 - "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 - "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 - "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 - "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 - "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A - "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B - "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C - "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D - "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E - "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F - "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 - "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 - "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 - "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 - "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 - "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 - "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 - "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 - "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 - "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 - "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA - "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB - "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC - "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD - "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE - "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF - "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 - "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 - "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 - "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 - "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 - "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 - "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 - "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 - "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 - "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA - "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC - "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 - "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 - "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 - "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 - "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 - "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 - "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 - "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA - "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC - "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD - "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE - "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF - "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 - "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 - "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 - "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 - "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 - "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 - "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 - "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA - "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD - "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE - "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF - "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 - "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 - "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 - "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 - "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 - "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 - "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 - "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 - "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 - "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA - "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC - "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED - "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 - "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 - "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 - "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 - "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 - "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 - "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA - "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC - "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A - "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B - "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE - "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD - "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE - "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF - "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 - "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 - "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C - "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 - "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 - "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 - "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 - "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 - "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 - "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 - "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 - "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D - "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E - "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F - "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 - "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 - "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 - "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 - "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 - "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 - "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 - "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 - "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 - "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 - "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 - "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 - "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC - "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD - "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE - "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF - "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 - "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 - "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 - "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 - "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA - "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB - "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC - "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED - "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C - "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E - "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 - "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 - "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 - "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 - "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 - "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A - "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C - "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E - "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 - "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 - "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 - "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 - "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 - "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 - "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 - "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 - "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 - "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 - "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 - "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 - "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A - "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C - "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D - "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 - "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E - "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC - "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE - "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 - "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 - "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 - "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 - "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 - "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA - "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC - "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE - "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 - "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 - "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 - "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 - "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 - "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 - "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 - "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 - "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 - "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 - "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 - "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 - "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA - "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC - "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD - "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 - "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 - "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 - "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 - "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA - "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE - "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A - "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C - "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB - "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E - "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F - "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B - "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C - "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB - "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC - "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE - "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA - "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB - "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 + "\x00\x01\x04\x00`\x00\x00\xc0" + // 0x00041 0x00300: 0x000C0 + "\x00\x01\x04\x00` \x00\xc1" + // 0x00041 0x00301: 0x000C1 + "\x00\x01\x04\x00`@\x00\xc2" + // 0x00041 0x00302: 0x000C2 + "\x00\x01\x04\x00``\x00\xc3" + // 0x00041 0x00303: 0x000C3 + "\x00\x01\x04\x00a\x00\x00\xc4" + // 0x00041 0x00308: 0x000C4 + "\x00\x01\x04\x00a@\x00\xc5" + // 0x00041 0x0030A: 0x000C5 + "\x00\x01\f\x00d\xe0\x00\xc7" + // 0x00043 0x00327: 0x000C7 + "\x00\x01\x14\x00`\x00\x00\xc8" + // 0x00045 0x00300: 0x000C8 + "\x00\x01\x14\x00` \x00\xc9" + // 0x00045 0x00301: 0x000C9 + "\x00\x01\x14\x00`@\x00\xca" + // 0x00045 0x00302: 0x000CA + "\x00\x01\x14\x00a\x00\x00\xcb" + // 0x00045 0x00308: 0x000CB + "\x00\x01$\x00`\x00\x00\xcc" + // 0x00049 0x00300: 0x000CC + "\x00\x01$\x00` \x00\xcd" + // 0x00049 0x00301: 0x000CD + "\x00\x01$\x00`@\x00\xce" + // 0x00049 0x00302: 0x000CE + "\x00\x01$\x00a\x00\x00\xcf" + // 0x00049 0x00308: 0x000CF + "\x00\x018\x00``\x00\xd1" + // 0x0004E 0x00303: 0x000D1 + "\x00\x01<\x00`\x00\x00\xd2" + // 0x0004F 0x00300: 0x000D2 + "\x00\x01<\x00` \x00\xd3" + // 0x0004F 0x00301: 0x000D3 + "\x00\x01<\x00`@\x00\xd4" + // 0x0004F 0x00302: 0x000D4 + "\x00\x01<\x00``\x00\xd5" + // 0x0004F 0x00303: 0x000D5 + "\x00\x01<\x00a\x00\x00\xd6" + // 0x0004F 0x00308: 0x000D6 + "\x00\x01T\x00`\x00\x00\xd9" + // 0x00055 0x00300: 0x000D9 + "\x00\x01T\x00` \x00\xda" + // 0x00055 0x00301: 0x000DA + "\x00\x01T\x00`@\x00\xdb" + // 0x00055 0x00302: 0x000DB + "\x00\x01T\x00a\x00\x00\xdc" + // 0x00055 0x00308: 0x000DC + "\x00\x01d\x00` \x00\xdd" + // 0x00059 0x00301: 0x000DD + "\x00\x01\x84\x00`\x00\x00\xe0" + // 0x00061 0x00300: 0x000E0 + "\x00\x01\x84\x00` \x00\xe1" + // 0x00061 0x00301: 0x000E1 + "\x00\x01\x84\x00`@\x00\xe2" + // 0x00061 0x00302: 0x000E2 + "\x00\x01\x84\x00``\x00\xe3" + // 0x00061 0x00303: 0x000E3 + "\x00\x01\x84\x00a\x00\x00\xe4" + // 0x00061 0x00308: 0x000E4 + "\x00\x01\x84\x00a@\x00\xe5" + // 0x00061 0x0030A: 0x000E5 + "\x00\x01\x8c\x00d\xe0\x00\xe7" + // 0x00063 0x00327: 0x000E7 + "\x00\x01\x94\x00`\x00\x00\xe8" + // 0x00065 0x00300: 0x000E8 + "\x00\x01\x94\x00` \x00\xe9" + // 0x00065 0x00301: 0x000E9 + "\x00\x01\x94\x00`@\x00\xea" + // 0x00065 0x00302: 0x000EA + "\x00\x01\x94\x00a\x00\x00\xeb" + // 0x00065 0x00308: 0x000EB + "\x00\x01\xa4\x00`\x00\x00\xec" + // 0x00069 0x00300: 0x000EC + "\x00\x01\xa4\x00` \x00\xed" + // 0x00069 0x00301: 0x000ED + "\x00\x01\xa4\x00`@\x00\xee" + // 0x00069 0x00302: 0x000EE + "\x00\x01\xa4\x00a\x00\x00\xef" + // 0x00069 0x00308: 0x000EF + "\x00\x01\xb8\x00``\x00\xf1" + // 0x0006E 0x00303: 0x000F1 + "\x00\x01\xbc\x00`\x00\x00\xf2" + // 0x0006F 0x00300: 0x000F2 + "\x00\x01\xbc\x00` \x00\xf3" + // 0x0006F 0x00301: 0x000F3 + "\x00\x01\xbc\x00`@\x00\xf4" + // 0x0006F 0x00302: 0x000F4 + "\x00\x01\xbc\x00``\x00\xf5" + // 0x0006F 0x00303: 0x000F5 + "\x00\x01\xbc\x00a\x00\x00\xf6" + // 0x0006F 0x00308: 0x000F6 + "\x00\x01\xd4\x00`\x00\x00\xf9" + // 0x00075 0x00300: 0x000F9 + "\x00\x01\xd4\x00` \x00\xfa" + // 0x00075 0x00301: 0x000FA + "\x00\x01\xd4\x00`@\x00\xfb" + // 0x00075 0x00302: 0x000FB + "\x00\x01\xd4\x00a\x00\x00\xfc" + // 0x00075 0x00308: 0x000FC + "\x00\x01\xe4\x00` \x00\xfd" + // 0x00079 0x00301: 0x000FD + "\x00\x01\xe4\x00a\x00\x00\xff" + // 0x00079 0x00308: 0x000FF + "\x00\x01\x04\x00`\x80\x01\x00" + // 0x00041 0x00304: 0x00100 + "\x00\x01\x84\x00`\x80\x01\x01" + // 0x00061 0x00304: 0x00101 + "\x00\x01\x04\x00`\xc0\x01\x02" + // 0x00041 0x00306: 0x00102 + "\x00\x01\x84\x00`\xc0\x01\x03" + // 0x00061 0x00306: 0x00103 + "\x00\x01\x04\x00e\x00\x01\x04" + // 0x00041 0x00328: 0x00104 + "\x00\x01\x84\x00e\x00\x01\x05" + // 0x00061 0x00328: 0x00105 + "\x00\x01\f\x00` \x01\x06" + // 0x00043 0x00301: 0x00106 + "\x00\x01\x8c\x00` \x01\a" + // 0x00063 0x00301: 0x00107 + "\x00\x01\f\x00`@\x01\b" + // 0x00043 0x00302: 0x00108 + "\x00\x01\x8c\x00`@\x01\t" + // 0x00063 0x00302: 0x00109 + "\x00\x01\f\x00`\xe0\x01\n" + // 0x00043 0x00307: 0x0010A + "\x00\x01\x8c\x00`\xe0\x01\v" + // 0x00063 0x00307: 0x0010B + "\x00\x01\f\x00a\x80\x01\f" + // 0x00043 0x0030C: 0x0010C + "\x00\x01\x8c\x00a\x80\x01\r" + // 0x00063 0x0030C: 0x0010D + "\x00\x01\x10\x00a\x80\x01\x0e" + // 0x00044 0x0030C: 0x0010E + "\x00\x01\x90\x00a\x80\x01\x0f" + // 0x00064 0x0030C: 0x0010F + "\x00\x01\x14\x00`\x80\x01\x12" + // 0x00045 0x00304: 0x00112 + "\x00\x01\x94\x00`\x80\x01\x13" + // 0x00065 0x00304: 0x00113 + "\x00\x01\x14\x00`\xc0\x01\x14" + // 0x00045 0x00306: 0x00114 + "\x00\x01\x94\x00`\xc0\x01\x15" + // 0x00065 0x00306: 0x00115 + "\x00\x01\x14\x00`\xe0\x01\x16" + // 0x00045 0x00307: 0x00116 + "\x00\x01\x94\x00`\xe0\x01\x17" + // 0x00065 0x00307: 0x00117 + "\x00\x01\x14\x00e\x00\x01\x18" + // 0x00045 0x00328: 0x00118 + "\x00\x01\x94\x00e\x00\x01\x19" + // 0x00065 0x00328: 0x00119 + "\x00\x01\x14\x00a\x80\x01\x1a" + // 0x00045 0x0030C: 0x0011A + "\x00\x01\x94\x00a\x80\x01\x1b" + // 0x00065 0x0030C: 0x0011B + "\x00\x01\x1c\x00`@\x01\x1c" + // 0x00047 0x00302: 0x0011C + "\x00\x01\x9c\x00`@\x01\x1d" + // 0x00067 0x00302: 0x0011D + "\x00\x01\x1c\x00`\xc0\x01\x1e" + // 0x00047 0x00306: 0x0011E + "\x00\x01\x9c\x00`\xc0\x01\x1f" + // 0x00067 0x00306: 0x0011F + "\x00\x01\x1c\x00`\xe0\x01 " + // 0x00047 0x00307: 0x00120 + "\x00\x01\x9c\x00`\xe0\x01!" + // 0x00067 0x00307: 0x00121 + "\x00\x01\x1c\x00d\xe0\x01\"" + // 0x00047 0x00327: 0x00122 + "\x00\x01\x9c\x00d\xe0\x01#" + // 0x00067 0x00327: 0x00123 + "\x00\x01 \x00`@\x01$" + // 0x00048 0x00302: 0x00124 + "\x00\x01\xa0\x00`@\x01%" + // 0x00068 0x00302: 0x00125 + "\x00\x01$\x00``\x01(" + // 0x00049 0x00303: 0x00128 + "\x00\x01\xa4\x00``\x01)" + // 0x00069 0x00303: 0x00129 + "\x00\x01$\x00`\x80\x01*" + // 0x00049 0x00304: 0x0012A + "\x00\x01\xa4\x00`\x80\x01+" + // 0x00069 0x00304: 0x0012B + "\x00\x01$\x00`\xc0\x01," + // 0x00049 0x00306: 0x0012C + "\x00\x01\xa4\x00`\xc0\x01-" + // 0x00069 0x00306: 0x0012D + "\x00\x01$\x00e\x00\x01." + // 0x00049 0x00328: 0x0012E + "\x00\x01\xa4\x00e\x00\x01/" + // 0x00069 0x00328: 0x0012F + "\x00\x01$\x00`\xe0\x010" + // 0x00049 0x00307: 0x00130 + "\x00\x01(\x00`@\x014" + // 0x0004A 0x00302: 0x00134 + "\x00\x01\xa8\x00`@\x015" + // 0x0006A 0x00302: 0x00135 + "\x00\x01,\x00d\xe0\x016" + // 0x0004B 0x00327: 0x00136 + "\x00\x01\xac\x00d\xe0\x017" + // 0x0006B 0x00327: 0x00137 + "\x00\x010\x00` \x019" + // 0x0004C 0x00301: 0x00139 + "\x00\x01\xb0\x00` \x01:" + // 0x0006C 0x00301: 0x0013A + "\x00\x010\x00d\xe0\x01;" + // 0x0004C 0x00327: 0x0013B + "\x00\x01\xb0\x00d\xe0\x01<" + // 0x0006C 0x00327: 0x0013C + "\x00\x010\x00a\x80\x01=" + // 0x0004C 0x0030C: 0x0013D + "\x00\x01\xb0\x00a\x80\x01>" + // 0x0006C 0x0030C: 0x0013E + "\x00\x018\x00` \x01C" + // 0x0004E 0x00301: 0x00143 + "\x00\x01\xb8\x00` \x01D" + // 0x0006E 0x00301: 0x00144 + "\x00\x018\x00d\xe0\x01E" + // 0x0004E 0x00327: 0x00145 + "\x00\x01\xb8\x00d\xe0\x01F" + // 0x0006E 0x00327: 0x00146 + "\x00\x018\x00a\x80\x01G" + // 0x0004E 0x0030C: 0x00147 + "\x00\x01\xb8\x00a\x80\x01H" + // 0x0006E 0x0030C: 0x00148 + "\x00\x01<\x00`\x80\x01L" + // 0x0004F 0x00304: 0x0014C + "\x00\x01\xbc\x00`\x80\x01M" + // 0x0006F 0x00304: 0x0014D + "\x00\x01<\x00`\xc0\x01N" + // 0x0004F 0x00306: 0x0014E + "\x00\x01\xbc\x00`\xc0\x01O" + // 0x0006F 0x00306: 0x0014F + "\x00\x01<\x00a`\x01P" + // 0x0004F 0x0030B: 0x00150 + "\x00\x01\xbc\x00a`\x01Q" + // 0x0006F 0x0030B: 0x00151 + "\x00\x01H\x00` \x01T" + // 0x00052 0x00301: 0x00154 + "\x00\x01\xc8\x00` \x01U" + // 0x00072 0x00301: 0x00155 + "\x00\x01H\x00d\xe0\x01V" + // 0x00052 0x00327: 0x00156 + "\x00\x01\xc8\x00d\xe0\x01W" + // 0x00072 0x00327: 0x00157 + "\x00\x01H\x00a\x80\x01X" + // 0x00052 0x0030C: 0x00158 + "\x00\x01\xc8\x00a\x80\x01Y" + // 0x00072 0x0030C: 0x00159 + "\x00\x01L\x00` \x01Z" + // 0x00053 0x00301: 0x0015A + "\x00\x01\xcc\x00` \x01[" + // 0x00073 0x00301: 0x0015B + "\x00\x01L\x00`@\x01\\" + // 0x00053 0x00302: 0x0015C + "\x00\x01\xcc\x00`@\x01]" + // 0x00073 0x00302: 0x0015D + "\x00\x01L\x00d\xe0\x01^" + // 0x00053 0x00327: 0x0015E + "\x00\x01\xcc\x00d\xe0\x01_" + // 0x00073 0x00327: 0x0015F + "\x00\x01L\x00a\x80\x01`" + // 0x00053 0x0030C: 0x00160 + "\x00\x01\xcc\x00a\x80\x01a" + // 0x00073 0x0030C: 0x00161 + "\x00\x01P\x00d\xe0\x01b" + // 0x00054 0x00327: 0x00162 + "\x00\x01\xd0\x00d\xe0\x01c" + // 0x00074 0x00327: 0x00163 + "\x00\x01P\x00a\x80\x01d" + // 0x00054 0x0030C: 0x00164 + "\x00\x01\xd0\x00a\x80\x01e" + // 0x00074 0x0030C: 0x00165 + "\x00\x01T\x00``\x01h" + // 0x00055 0x00303: 0x00168 + "\x00\x01\xd4\x00``\x01i" + // 0x00075 0x00303: 0x00169 + "\x00\x01T\x00`\x80\x01j" + // 0x00055 0x00304: 0x0016A + "\x00\x01\xd4\x00`\x80\x01k" + // 0x00075 0x00304: 0x0016B + "\x00\x01T\x00`\xc0\x01l" + // 0x00055 0x00306: 0x0016C + "\x00\x01\xd4\x00`\xc0\x01m" + // 0x00075 0x00306: 0x0016D + "\x00\x01T\x00a@\x01n" + // 0x00055 0x0030A: 0x0016E + "\x00\x01\xd4\x00a@\x01o" + // 0x00075 0x0030A: 0x0016F + "\x00\x01T\x00a`\x01p" + // 0x00055 0x0030B: 0x00170 + "\x00\x01\xd4\x00a`\x01q" + // 0x00075 0x0030B: 0x00171 + "\x00\x01T\x00e\x00\x01r" + // 0x00055 0x00328: 0x00172 + "\x00\x01\xd4\x00e\x00\x01s" + // 0x00075 0x00328: 0x00173 + "\x00\x01\\\x00`@\x01t" + // 0x00057 0x00302: 0x00174 + "\x00\x01\xdc\x00`@\x01u" + // 0x00077 0x00302: 0x00175 + "\x00\x01d\x00`@\x01v" + // 0x00059 0x00302: 0x00176 + "\x00\x01\xe4\x00`@\x01w" + // 0x00079 0x00302: 0x00177 + "\x00\x01d\x00a\x00\x01x" + // 0x00059 0x00308: 0x00178 + "\x00\x01h\x00` \x01y" + // 0x0005A 0x00301: 0x00179 + "\x00\x01\xe8\x00` \x01z" + // 0x0007A 0x00301: 0x0017A + "\x00\x01h\x00`\xe0\x01{" + // 0x0005A 0x00307: 0x0017B + "\x00\x01\xe8\x00`\xe0\x01|" + // 0x0007A 0x00307: 0x0017C + "\x00\x01h\x00a\x80\x01}" + // 0x0005A 0x0030C: 0x0017D + "\x00\x01\xe8\x00a\x80\x01~" + // 0x0007A 0x0030C: 0x0017E + "\x00\x01<\x00c`\x01\xa0" + // 0x0004F 0x0031B: 0x001A0 + "\x00\x01\xbc\x00c`\x01\xa1" + // 0x0006F 0x0031B: 0x001A1 + "\x00\x01T\x00c`\x01\xaf" + // 0x00055 0x0031B: 0x001AF + "\x00\x01\xd4\x00c`\x01\xb0" + // 0x00075 0x0031B: 0x001B0 + "\x00\x01\x04\x00a\x80\x01\xcd" + // 0x00041 0x0030C: 0x001CD + "\x00\x01\x84\x00a\x80\x01\xce" + // 0x00061 0x0030C: 0x001CE + "\x00\x01$\x00a\x80\x01\xcf" + // 0x00049 0x0030C: 0x001CF + "\x00\x01\xa4\x00a\x80\x01\xd0" + // 0x00069 0x0030C: 0x001D0 + "\x00\x01<\x00a\x80\x01\xd1" + // 0x0004F 0x0030C: 0x001D1 + "\x00\x01\xbc\x00a\x80\x01\xd2" + // 0x0006F 0x0030C: 0x001D2 + "\x00\x01T\x00a\x80\x01\xd3" + // 0x00055 0x0030C: 0x001D3 + "\x00\x01\xd4\x00a\x80\x01\xd4" + // 0x00075 0x0030C: 0x001D4 + "\x00\x03p\x00`\x80\x01\xd5" + // 0x000DC 0x00304: 0x001D5 + "\x00\x03\xf0\x00`\x80\x01\xd6" + // 0x000FC 0x00304: 0x001D6 + "\x00\x03p\x00` \x01\xd7" + // 0x000DC 0x00301: 0x001D7 + "\x00\x03\xf0\x00` \x01\xd8" + // 0x000FC 0x00301: 0x001D8 + "\x00\x03p\x00a\x80\x01\xd9" + // 0x000DC 0x0030C: 0x001D9 + "\x00\x03\xf0\x00a\x80\x01\xda" + // 0x000FC 0x0030C: 0x001DA + "\x00\x03p\x00`\x00\x01\xdb" + // 0x000DC 0x00300: 0x001DB + "\x00\x03\xf0\x00`\x00\x01\xdc" + // 0x000FC 0x00300: 0x001DC + "\x00\x03\x10\x00`\x80\x01\xde" + // 0x000C4 0x00304: 0x001DE + "\x00\x03\x90\x00`\x80\x01\xdf" + // 0x000E4 0x00304: 0x001DF + "\x00\b\x98\x00`\x80\x01\xe0" + // 0x00226 0x00304: 0x001E0 + "\x00\b\x9c\x00`\x80\x01\xe1" + // 0x00227 0x00304: 0x001E1 + "\x00\x03\x18\x00`\x80\x01\xe2" + // 0x000C6 0x00304: 0x001E2 + "\x00\x03\x98\x00`\x80\x01\xe3" + // 0x000E6 0x00304: 0x001E3 + "\x00\x01\x1c\x00a\x80\x01\xe6" + // 0x00047 0x0030C: 0x001E6 + "\x00\x01\x9c\x00a\x80\x01\xe7" + // 0x00067 0x0030C: 0x001E7 + "\x00\x01,\x00a\x80\x01\xe8" + // 0x0004B 0x0030C: 0x001E8 + "\x00\x01\xac\x00a\x80\x01\xe9" + // 0x0006B 0x0030C: 0x001E9 + "\x00\x01<\x00e\x00\x01\xea" + // 0x0004F 0x00328: 0x001EA + "\x00\x01\xbc\x00e\x00\x01\xeb" + // 0x0006F 0x00328: 0x001EB + "\x00\a\xa8\x00`\x80\x01\xec" + // 0x001EA 0x00304: 0x001EC + "\x00\a\xac\x00`\x80\x01\xed" + // 0x001EB 0x00304: 0x001ED + "\x00\x06\xdc\x00a\x80\x01\xee" + // 0x001B7 0x0030C: 0x001EE + "\x00\nH\x00a\x80\x01\xef" + // 0x00292 0x0030C: 0x001EF + "\x00\x01\xa8\x00a\x80\x01\xf0" + // 0x0006A 0x0030C: 0x001F0 + "\x00\x01\x1c\x00` \x01\xf4" + // 0x00047 0x00301: 0x001F4 + "\x00\x01\x9c\x00` \x01\xf5" + // 0x00067 0x00301: 0x001F5 + "\x00\x018\x00`\x00\x01\xf8" + // 0x0004E 0x00300: 0x001F8 + "\x00\x01\xb8\x00`\x00\x01\xf9" + // 0x0006E 0x00300: 0x001F9 + "\x00\x03\x14\x00` \x01\xfa" + // 0x000C5 0x00301: 0x001FA + "\x00\x03\x94\x00` \x01\xfb" + // 0x000E5 0x00301: 0x001FB + "\x00\x03\x18\x00` \x01\xfc" + // 0x000C6 0x00301: 0x001FC + "\x00\x03\x98\x00` \x01\xfd" + // 0x000E6 0x00301: 0x001FD + "\x00\x03`\x00` \x01\xfe" + // 0x000D8 0x00301: 0x001FE + "\x00\x03\xe0\x00` \x01\xff" + // 0x000F8 0x00301: 0x001FF + "\x00\x01\x04\x00a\xe0\x02\x00" + // 0x00041 0x0030F: 0x00200 + "\x00\x01\x84\x00a\xe0\x02\x01" + // 0x00061 0x0030F: 0x00201 + "\x00\x01\x04\x00b \x02\x02" + // 0x00041 0x00311: 0x00202 + "\x00\x01\x84\x00b \x02\x03" + // 0x00061 0x00311: 0x00203 + "\x00\x01\x14\x00a\xe0\x02\x04" + // 0x00045 0x0030F: 0x00204 + "\x00\x01\x94\x00a\xe0\x02\x05" + // 0x00065 0x0030F: 0x00205 + "\x00\x01\x14\x00b \x02\x06" + // 0x00045 0x00311: 0x00206 + "\x00\x01\x94\x00b \x02\a" + // 0x00065 0x00311: 0x00207 + "\x00\x01$\x00a\xe0\x02\b" + // 0x00049 0x0030F: 0x00208 + "\x00\x01\xa4\x00a\xe0\x02\t" + // 0x00069 0x0030F: 0x00209 + "\x00\x01$\x00b \x02\n" + // 0x00049 0x00311: 0x0020A + "\x00\x01\xa4\x00b \x02\v" + // 0x00069 0x00311: 0x0020B + "\x00\x01<\x00a\xe0\x02\f" + // 0x0004F 0x0030F: 0x0020C + "\x00\x01\xbc\x00a\xe0\x02\r" + // 0x0006F 0x0030F: 0x0020D + "\x00\x01<\x00b \x02\x0e" + // 0x0004F 0x00311: 0x0020E + "\x00\x01\xbc\x00b \x02\x0f" + // 0x0006F 0x00311: 0x0020F + "\x00\x01H\x00a\xe0\x02\x10" + // 0x00052 0x0030F: 0x00210 + "\x00\x01\xc8\x00a\xe0\x02\x11" + // 0x00072 0x0030F: 0x00211 + "\x00\x01H\x00b \x02\x12" + // 0x00052 0x00311: 0x00212 + "\x00\x01\xc8\x00b \x02\x13" + // 0x00072 0x00311: 0x00213 + "\x00\x01T\x00a\xe0\x02\x14" + // 0x00055 0x0030F: 0x00214 + "\x00\x01\xd4\x00a\xe0\x02\x15" + // 0x00075 0x0030F: 0x00215 + "\x00\x01T\x00b \x02\x16" + // 0x00055 0x00311: 0x00216 + "\x00\x01\xd4\x00b \x02\x17" + // 0x00075 0x00311: 0x00217 + "\x00\x01L\x00d\xc0\x02\x18" + // 0x00053 0x00326: 0x00218 + "\x00\x01\xcc\x00d\xc0\x02\x19" + // 0x00073 0x00326: 0x00219 + "\x00\x01P\x00d\xc0\x02\x1a" + // 0x00054 0x00326: 0x0021A + "\x00\x01\xd0\x00d\xc0\x02\x1b" + // 0x00074 0x00326: 0x0021B + "\x00\x01 \x00a\x80\x02\x1e" + // 0x00048 0x0030C: 0x0021E + "\x00\x01\xa0\x00a\x80\x02\x1f" + // 0x00068 0x0030C: 0x0021F + "\x00\x01\x04\x00`\xe0\x02&" + // 0x00041 0x00307: 0x00226 + "\x00\x01\x84\x00`\xe0\x02'" + // 0x00061 0x00307: 0x00227 + "\x00\x01\x14\x00d\xe0\x02(" + // 0x00045 0x00327: 0x00228 + "\x00\x01\x94\x00d\xe0\x02)" + // 0x00065 0x00327: 0x00229 + "\x00\x03X\x00`\x80\x02*" + // 0x000D6 0x00304: 0x0022A + "\x00\x03\xd8\x00`\x80\x02+" + // 0x000F6 0x00304: 0x0022B + "\x00\x03T\x00`\x80\x02," + // 0x000D5 0x00304: 0x0022C + "\x00\x03\xd4\x00`\x80\x02-" + // 0x000F5 0x00304: 0x0022D + "\x00\x01<\x00`\xe0\x02." + // 0x0004F 0x00307: 0x0022E + "\x00\x01\xbc\x00`\xe0\x02/" + // 0x0006F 0x00307: 0x0022F + "\x00\b\xb8\x00`\x80\x020" + // 0x0022E 0x00304: 0x00230 + "\x00\b\xbc\x00`\x80\x021" + // 0x0022F 0x00304: 0x00231 + "\x00\x01d\x00`\x80\x022" + // 0x00059 0x00304: 0x00232 + "\x00\x01\xe4\x00`\x80\x023" + // 0x00079 0x00304: 0x00233 + "\x00\x02\xa0\x00` \x03\x85" + // 0x000A8 0x00301: 0x00385 + "\x00\x0eD\x00` \x03\x86" + // 0x00391 0x00301: 0x00386 + "\x00\x0eT\x00` \x03\x88" + // 0x00395 0x00301: 0x00388 + "\x00\x0e\\\x00` \x03\x89" + // 0x00397 0x00301: 0x00389 + "\x00\x0ed\x00` \x03\x8a" + // 0x00399 0x00301: 0x0038A + "\x00\x0e|\x00` \x03\x8c" + // 0x0039F 0x00301: 0x0038C + "\x00\x0e\x94\x00` \x03\x8e" + // 0x003A5 0x00301: 0x0038E + "\x00\x0e\xa4\x00` \x03\x8f" + // 0x003A9 0x00301: 0x0038F + "\x00\x0f(\x00` \x03\x90" + // 0x003CA 0x00301: 0x00390 + "\x00\x0ed\x00a\x00\x03\xaa" + // 0x00399 0x00308: 0x003AA + "\x00\x0e\x94\x00a\x00\x03\xab" + // 0x003A5 0x00308: 0x003AB + "\x00\x0e\xc4\x00` \x03\xac" + // 0x003B1 0x00301: 0x003AC + "\x00\x0e\xd4\x00` \x03\xad" + // 0x003B5 0x00301: 0x003AD + "\x00\x0e\xdc\x00` \x03\xae" + // 0x003B7 0x00301: 0x003AE + "\x00\x0e\xe4\x00` \x03\xaf" + // 0x003B9 0x00301: 0x003AF + "\x00\x0f,\x00` \x03\xb0" + // 0x003CB 0x00301: 0x003B0 + "\x00\x0e\xe4\x00a\x00\x03\xca" + // 0x003B9 0x00308: 0x003CA + "\x00\x0f\x14\x00a\x00\x03\xcb" + // 0x003C5 0x00308: 0x003CB + "\x00\x0e\xfc\x00` \x03\xcc" + // 0x003BF 0x00301: 0x003CC + "\x00\x0f\x14\x00` \x03\xcd" + // 0x003C5 0x00301: 0x003CD + "\x00\x0f$\x00` \x03\xce" + // 0x003C9 0x00301: 0x003CE + "\x00\x0fH\x00` \x03\xd3" + // 0x003D2 0x00301: 0x003D3 + "\x00\x0fH\x00a\x00\x03\xd4" + // 0x003D2 0x00308: 0x003D4 + "\x00\x10T\x00`\x00\x04\x00" + // 0x00415 0x00300: 0x00400 + "\x00\x10T\x00a\x00\x04\x01" + // 0x00415 0x00308: 0x00401 + "\x00\x10L\x00` \x04\x03" + // 0x00413 0x00301: 0x00403 + "\x00\x10\x18\x00a\x00\x04\a" + // 0x00406 0x00308: 0x00407 + "\x00\x10h\x00` \x04\f" + // 0x0041A 0x00301: 0x0040C + "\x00\x10`\x00`\x00\x04\r" + // 0x00418 0x00300: 0x0040D + "\x00\x10\x8c\x00`\xc0\x04\x0e" + // 0x00423 0x00306: 0x0040E + "\x00\x10`\x00`\xc0\x04\x19" + // 0x00418 0x00306: 0x00419 + "\x00\x10\xe0\x00`\xc0\x049" + // 0x00438 0x00306: 0x00439 + "\x00\x10\xd4\x00`\x00\x04P" + // 0x00435 0x00300: 0x00450 + "\x00\x10\xd4\x00a\x00\x04Q" + // 0x00435 0x00308: 0x00451 + "\x00\x10\xcc\x00` \x04S" + // 0x00433 0x00301: 0x00453 + "\x00\x11X\x00a\x00\x04W" + // 0x00456 0x00308: 0x00457 + "\x00\x10\xe8\x00` \x04\\" + // 0x0043A 0x00301: 0x0045C + "\x00\x10\xe0\x00`\x00\x04]" + // 0x00438 0x00300: 0x0045D + "\x00\x11\f\x00`\xc0\x04^" + // 0x00443 0x00306: 0x0045E + "\x00\x11\xd0\x00a\xe0\x04v" + // 0x00474 0x0030F: 0x00476 + "\x00\x11\xd4\x00a\xe0\x04w" + // 0x00475 0x0030F: 0x00477 + "\x00\x10X\x00`\xc0\x04\xc1" + // 0x00416 0x00306: 0x004C1 + "\x00\x10\xd8\x00`\xc0\x04\xc2" + // 0x00436 0x00306: 0x004C2 + "\x00\x10@\x00`\xc0\x04\xd0" + // 0x00410 0x00306: 0x004D0 + "\x00\x10\xc0\x00`\xc0\x04\xd1" + // 0x00430 0x00306: 0x004D1 + "\x00\x10@\x00a\x00\x04\xd2" + // 0x00410 0x00308: 0x004D2 + "\x00\x10\xc0\x00a\x00\x04\xd3" + // 0x00430 0x00308: 0x004D3 + "\x00\x10T\x00`\xc0\x04\xd6" + // 0x00415 0x00306: 0x004D6 + "\x00\x10\xd4\x00`\xc0\x04\xd7" + // 0x00435 0x00306: 0x004D7 + "\x00\x13`\x00a\x00\x04\xda" + // 0x004D8 0x00308: 0x004DA + "\x00\x13d\x00a\x00\x04\xdb" + // 0x004D9 0x00308: 0x004DB + "\x00\x10X\x00a\x00\x04\xdc" + // 0x00416 0x00308: 0x004DC + "\x00\x10\xd8\x00a\x00\x04\xdd" + // 0x00436 0x00308: 0x004DD + "\x00\x10\\\x00a\x00\x04\xde" + // 0x00417 0x00308: 0x004DE + "\x00\x10\xdc\x00a\x00\x04\xdf" + // 0x00437 0x00308: 0x004DF + "\x00\x10`\x00`\x80\x04\xe2" + // 0x00418 0x00304: 0x004E2 + "\x00\x10\xe0\x00`\x80\x04\xe3" + // 0x00438 0x00304: 0x004E3 + "\x00\x10`\x00a\x00\x04\xe4" + // 0x00418 0x00308: 0x004E4 + "\x00\x10\xe0\x00a\x00\x04\xe5" + // 0x00438 0x00308: 0x004E5 + "\x00\x10x\x00a\x00\x04\xe6" + // 0x0041E 0x00308: 0x004E6 + "\x00\x10\xf8\x00a\x00\x04\xe7" + // 0x0043E 0x00308: 0x004E7 + "\x00\x13\xa0\x00a\x00\x04\xea" + // 0x004E8 0x00308: 0x004EA + "\x00\x13\xa4\x00a\x00\x04\xeb" + // 0x004E9 0x00308: 0x004EB + "\x00\x10\xb4\x00a\x00\x04\xec" + // 0x0042D 0x00308: 0x004EC + "\x00\x114\x00a\x00\x04\xed" + // 0x0044D 0x00308: 0x004ED + "\x00\x10\x8c\x00`\x80\x04\xee" + // 0x00423 0x00304: 0x004EE + "\x00\x11\f\x00`\x80\x04\xef" + // 0x00443 0x00304: 0x004EF + "\x00\x10\x8c\x00a\x00\x04\xf0" + // 0x00423 0x00308: 0x004F0 + "\x00\x11\f\x00a\x00\x04\xf1" + // 0x00443 0x00308: 0x004F1 + "\x00\x10\x8c\x00a`\x04\xf2" + // 0x00423 0x0030B: 0x004F2 + "\x00\x11\f\x00a`\x04\xf3" + // 0x00443 0x0030B: 0x004F3 + "\x00\x10\x9c\x00a\x00\x04\xf4" + // 0x00427 0x00308: 0x004F4 + "\x00\x11\x1c\x00a\x00\x04\xf5" + // 0x00447 0x00308: 0x004F5 + "\x00\x10\xac\x00a\x00\x04\xf8" + // 0x0042B 0x00308: 0x004F8 + "\x00\x11,\x00a\x00\x04\xf9" + // 0x0044B 0x00308: 0x004F9 + "\x00\x18\x9c\x00\xca`\x06\"" + // 0x00627 0x00653: 0x00622 + "\x00\x18\x9c\x00ʀ\x06#" + // 0x00627 0x00654: 0x00623 + "\x00\x19 \x00ʀ\x06$" + // 0x00648 0x00654: 0x00624 + "\x00\x18\x9c\x00ʠ\x06%" + // 0x00627 0x00655: 0x00625 + "\x00\x19(\x00ʀ\x06&" + // 0x0064A 0x00654: 0x00626 + "\x00\x1bT\x00ʀ\x06\xc0" + // 0x006D5 0x00654: 0x006C0 + "\x00\x1b\x04\x00ʀ\x06\xc2" + // 0x006C1 0x00654: 0x006C2 + "\x00\x1bH\x00ʀ\x06\xd3" + // 0x006D2 0x00654: 0x006D3 + "\x00$\xa0\x01'\x80\t)" + // 0x00928 0x0093C: 0x00929 + "\x00$\xc0\x01'\x80\t1" + // 0x00930 0x0093C: 0x00931 + "\x00$\xcc\x01'\x80\t4" + // 0x00933 0x0093C: 0x00934 + "\x00'\x1c\x017\xc0\t\xcb" + // 0x009C7 0x009BE: 0x009CB + "\x00'\x1c\x01:\xe0\t\xcc" + // 0x009C7 0x009D7: 0x009CC + "\x00-\x1c\x01j\xc0\vH" + // 0x00B47 0x00B56: 0x00B48 + "\x00-\x1c\x01g\xc0\vK" + // 0x00B47 0x00B3E: 0x00B4B + "\x00-\x1c\x01j\xe0\vL" + // 0x00B47 0x00B57: 0x00B4C + "\x00.H\x01z\xe0\v\x94" + // 0x00B92 0x00BD7: 0x00B94 + "\x00/\x18\x01w\xc0\v\xca" + // 0x00BC6 0x00BBE: 0x00BCA + "\x00/\x1c\x01w\xc0\v\xcb" + // 0x00BC7 0x00BBE: 0x00BCB + "\x00/\x18\x01z\xe0\v\xcc" + // 0x00BC6 0x00BD7: 0x00BCC + "\x001\x18\x01\x8a\xc0\fH" + // 0x00C46 0x00C56: 0x00C48 + "\x002\xfc\x01\x9a\xa0\f\xc0" + // 0x00CBF 0x00CD5: 0x00CC0 + "\x003\x18\x01\x9a\xa0\f\xc7" + // 0x00CC6 0x00CD5: 0x00CC7 + "\x003\x18\x01\x9a\xc0\f\xc8" + // 0x00CC6 0x00CD6: 0x00CC8 + "\x003\x18\x01\x98@\f\xca" + // 0x00CC6 0x00CC2: 0x00CCA + "\x003(\x01\x9a\xa0\f\xcb" + // 0x00CCA 0x00CD5: 0x00CCB + "\x005\x18\x01\xa7\xc0\rJ" + // 0x00D46 0x00D3E: 0x00D4A + "\x005\x1c\x01\xa7\xc0\rK" + // 0x00D47 0x00D3E: 0x00D4B + "\x005\x18\x01\xaa\xe0\rL" + // 0x00D46 0x00D57: 0x00D4C + "\x007d\x01\xb9@\r\xda" + // 0x00DD9 0x00DCA: 0x00DDA + "\x007d\x01\xb9\xe0\r\xdc" + // 0x00DD9 0x00DCF: 0x00DDC + "\x007p\x01\xb9@\r\xdd" + // 0x00DDC 0x00DCA: 0x00DDD + "\x007d\x01\xbb\xe0\r\xde" + // 0x00DD9 0x00DDF: 0x00DDE + "\x00@\x94\x02\x05\xc0\x10&" + // 0x01025 0x0102E: 0x01026 + "\x00l\x14\x03f\xa0\x1b\x06" + // 0x01B05 0x01B35: 0x01B06 + "\x00l\x1c\x03f\xa0\x1b\b" + // 0x01B07 0x01B35: 0x01B08 + "\x00l$\x03f\xa0\x1b\n" + // 0x01B09 0x01B35: 0x01B0A + "\x00l,\x03f\xa0\x1b\f" + // 0x01B0B 0x01B35: 0x01B0C + "\x00l4\x03f\xa0\x1b\x0e" + // 0x01B0D 0x01B35: 0x01B0E + "\x00lD\x03f\xa0\x1b\x12" + // 0x01B11 0x01B35: 0x01B12 + "\x00l\xe8\x03f\xa0\x1b;" + // 0x01B3A 0x01B35: 0x01B3B + "\x00l\xf0\x03f\xa0\x1b=" + // 0x01B3C 0x01B35: 0x01B3D + "\x00l\xf8\x03f\xa0\x1b@" + // 0x01B3E 0x01B35: 0x01B40 + "\x00l\xfc\x03f\xa0\x1bA" + // 0x01B3F 0x01B35: 0x01B41 + "\x00m\b\x03f\xa0\x1bC" + // 0x01B42 0x01B35: 0x01B43 + "\x00\x01\x04\x00d\xa0\x1e\x00" + // 0x00041 0x00325: 0x01E00 + "\x00\x01\x84\x00d\xa0\x1e\x01" + // 0x00061 0x00325: 0x01E01 + "\x00\x01\b\x00`\xe0\x1e\x02" + // 0x00042 0x00307: 0x01E02 + "\x00\x01\x88\x00`\xe0\x1e\x03" + // 0x00062 0x00307: 0x01E03 + "\x00\x01\b\x00d`\x1e\x04" + // 0x00042 0x00323: 0x01E04 + "\x00\x01\x88\x00d`\x1e\x05" + // 0x00062 0x00323: 0x01E05 + "\x00\x01\b\x00f \x1e\x06" + // 0x00042 0x00331: 0x01E06 + "\x00\x01\x88\x00f \x1e\a" + // 0x00062 0x00331: 0x01E07 + "\x00\x03\x1c\x00` \x1e\b" + // 0x000C7 0x00301: 0x01E08 + "\x00\x03\x9c\x00` \x1e\t" + // 0x000E7 0x00301: 0x01E09 + "\x00\x01\x10\x00`\xe0\x1e\n" + // 0x00044 0x00307: 0x01E0A + "\x00\x01\x90\x00`\xe0\x1e\v" + // 0x00064 0x00307: 0x01E0B + "\x00\x01\x10\x00d`\x1e\f" + // 0x00044 0x00323: 0x01E0C + "\x00\x01\x90\x00d`\x1e\r" + // 0x00064 0x00323: 0x01E0D + "\x00\x01\x10\x00f \x1e\x0e" + // 0x00044 0x00331: 0x01E0E + "\x00\x01\x90\x00f \x1e\x0f" + // 0x00064 0x00331: 0x01E0F + "\x00\x01\x10\x00d\xe0\x1e\x10" + // 0x00044 0x00327: 0x01E10 + "\x00\x01\x90\x00d\xe0\x1e\x11" + // 0x00064 0x00327: 0x01E11 + "\x00\x01\x10\x00e\xa0\x1e\x12" + // 0x00044 0x0032D: 0x01E12 + "\x00\x01\x90\x00e\xa0\x1e\x13" + // 0x00064 0x0032D: 0x01E13 + "\x00\x04H\x00`\x00\x1e\x14" + // 0x00112 0x00300: 0x01E14 + "\x00\x04L\x00`\x00\x1e\x15" + // 0x00113 0x00300: 0x01E15 + "\x00\x04H\x00` \x1e\x16" + // 0x00112 0x00301: 0x01E16 + "\x00\x04L\x00` \x1e\x17" + // 0x00113 0x00301: 0x01E17 + "\x00\x01\x14\x00e\xa0\x1e\x18" + // 0x00045 0x0032D: 0x01E18 + "\x00\x01\x94\x00e\xa0\x1e\x19" + // 0x00065 0x0032D: 0x01E19 + "\x00\x01\x14\x00f\x00\x1e\x1a" + // 0x00045 0x00330: 0x01E1A + "\x00\x01\x94\x00f\x00\x1e\x1b" + // 0x00065 0x00330: 0x01E1B + "\x00\b\xa0\x00`\xc0\x1e\x1c" + // 0x00228 0x00306: 0x01E1C + "\x00\b\xa4\x00`\xc0\x1e\x1d" + // 0x00229 0x00306: 0x01E1D + "\x00\x01\x18\x00`\xe0\x1e\x1e" + // 0x00046 0x00307: 0x01E1E + "\x00\x01\x98\x00`\xe0\x1e\x1f" + // 0x00066 0x00307: 0x01E1F + "\x00\x01\x1c\x00`\x80\x1e " + // 0x00047 0x00304: 0x01E20 + "\x00\x01\x9c\x00`\x80\x1e!" + // 0x00067 0x00304: 0x01E21 + "\x00\x01 \x00`\xe0\x1e\"" + // 0x00048 0x00307: 0x01E22 + "\x00\x01\xa0\x00`\xe0\x1e#" + // 0x00068 0x00307: 0x01E23 + "\x00\x01 \x00d`\x1e$" + // 0x00048 0x00323: 0x01E24 + "\x00\x01\xa0\x00d`\x1e%" + // 0x00068 0x00323: 0x01E25 + "\x00\x01 \x00a\x00\x1e&" + // 0x00048 0x00308: 0x01E26 + "\x00\x01\xa0\x00a\x00\x1e'" + // 0x00068 0x00308: 0x01E27 + "\x00\x01 \x00d\xe0\x1e(" + // 0x00048 0x00327: 0x01E28 + "\x00\x01\xa0\x00d\xe0\x1e)" + // 0x00068 0x00327: 0x01E29 + "\x00\x01 \x00e\xc0\x1e*" + // 0x00048 0x0032E: 0x01E2A + "\x00\x01\xa0\x00e\xc0\x1e+" + // 0x00068 0x0032E: 0x01E2B + "\x00\x01$\x00f\x00\x1e," + // 0x00049 0x00330: 0x01E2C + "\x00\x01\xa4\x00f\x00\x1e-" + // 0x00069 0x00330: 0x01E2D + "\x00\x03<\x00` \x1e." + // 0x000CF 0x00301: 0x01E2E + "\x00\x03\xbc\x00` \x1e/" + // 0x000EF 0x00301: 0x01E2F + "\x00\x01,\x00` \x1e0" + // 0x0004B 0x00301: 0x01E30 + "\x00\x01\xac\x00` \x1e1" + // 0x0006B 0x00301: 0x01E31 + "\x00\x01,\x00d`\x1e2" + // 0x0004B 0x00323: 0x01E32 + "\x00\x01\xac\x00d`\x1e3" + // 0x0006B 0x00323: 0x01E33 + "\x00\x01,\x00f \x1e4" + // 0x0004B 0x00331: 0x01E34 + "\x00\x01\xac\x00f \x1e5" + // 0x0006B 0x00331: 0x01E35 + "\x00\x010\x00d`\x1e6" + // 0x0004C 0x00323: 0x01E36 + "\x00\x01\xb0\x00d`\x1e7" + // 0x0006C 0x00323: 0x01E37 + "\x00x\xd8\x00`\x80\x1e8" + // 0x01E36 0x00304: 0x01E38 + "\x00x\xdc\x00`\x80\x1e9" + // 0x01E37 0x00304: 0x01E39 + "\x00\x010\x00f \x1e:" + // 0x0004C 0x00331: 0x01E3A + "\x00\x01\xb0\x00f \x1e;" + // 0x0006C 0x00331: 0x01E3B + "\x00\x010\x00e\xa0\x1e<" + // 0x0004C 0x0032D: 0x01E3C + "\x00\x01\xb0\x00e\xa0\x1e=" + // 0x0006C 0x0032D: 0x01E3D + "\x00\x014\x00` \x1e>" + // 0x0004D 0x00301: 0x01E3E + "\x00\x01\xb4\x00` \x1e?" + // 0x0006D 0x00301: 0x01E3F + "\x00\x014\x00`\xe0\x1e@" + // 0x0004D 0x00307: 0x01E40 + "\x00\x01\xb4\x00`\xe0\x1eA" + // 0x0006D 0x00307: 0x01E41 + "\x00\x014\x00d`\x1eB" + // 0x0004D 0x00323: 0x01E42 + "\x00\x01\xb4\x00d`\x1eC" + // 0x0006D 0x00323: 0x01E43 + "\x00\x018\x00`\xe0\x1eD" + // 0x0004E 0x00307: 0x01E44 + "\x00\x01\xb8\x00`\xe0\x1eE" + // 0x0006E 0x00307: 0x01E45 + "\x00\x018\x00d`\x1eF" + // 0x0004E 0x00323: 0x01E46 + "\x00\x01\xb8\x00d`\x1eG" + // 0x0006E 0x00323: 0x01E47 + "\x00\x018\x00f \x1eH" + // 0x0004E 0x00331: 0x01E48 + "\x00\x01\xb8\x00f \x1eI" + // 0x0006E 0x00331: 0x01E49 + "\x00\x018\x00e\xa0\x1eJ" + // 0x0004E 0x0032D: 0x01E4A + "\x00\x01\xb8\x00e\xa0\x1eK" + // 0x0006E 0x0032D: 0x01E4B + "\x00\x03T\x00` \x1eL" + // 0x000D5 0x00301: 0x01E4C + "\x00\x03\xd4\x00` \x1eM" + // 0x000F5 0x00301: 0x01E4D + "\x00\x03T\x00a\x00\x1eN" + // 0x000D5 0x00308: 0x01E4E + "\x00\x03\xd4\x00a\x00\x1eO" + // 0x000F5 0x00308: 0x01E4F + "\x00\x050\x00`\x00\x1eP" + // 0x0014C 0x00300: 0x01E50 + "\x00\x054\x00`\x00\x1eQ" + // 0x0014D 0x00300: 0x01E51 + "\x00\x050\x00` \x1eR" + // 0x0014C 0x00301: 0x01E52 + "\x00\x054\x00` \x1eS" + // 0x0014D 0x00301: 0x01E53 + "\x00\x01@\x00` \x1eT" + // 0x00050 0x00301: 0x01E54 + "\x00\x01\xc0\x00` \x1eU" + // 0x00070 0x00301: 0x01E55 + "\x00\x01@\x00`\xe0\x1eV" + // 0x00050 0x00307: 0x01E56 + "\x00\x01\xc0\x00`\xe0\x1eW" + // 0x00070 0x00307: 0x01E57 + "\x00\x01H\x00`\xe0\x1eX" + // 0x00052 0x00307: 0x01E58 + "\x00\x01\xc8\x00`\xe0\x1eY" + // 0x00072 0x00307: 0x01E59 + "\x00\x01H\x00d`\x1eZ" + // 0x00052 0x00323: 0x01E5A + "\x00\x01\xc8\x00d`\x1e[" + // 0x00072 0x00323: 0x01E5B + "\x00yh\x00`\x80\x1e\\" + // 0x01E5A 0x00304: 0x01E5C + "\x00yl\x00`\x80\x1e]" + // 0x01E5B 0x00304: 0x01E5D + "\x00\x01H\x00f \x1e^" + // 0x00052 0x00331: 0x01E5E + "\x00\x01\xc8\x00f \x1e_" + // 0x00072 0x00331: 0x01E5F + "\x00\x01L\x00`\xe0\x1e`" + // 0x00053 0x00307: 0x01E60 + "\x00\x01\xcc\x00`\xe0\x1ea" + // 0x00073 0x00307: 0x01E61 + "\x00\x01L\x00d`\x1eb" + // 0x00053 0x00323: 0x01E62 + "\x00\x01\xcc\x00d`\x1ec" + // 0x00073 0x00323: 0x01E63 + "\x00\x05h\x00`\xe0\x1ed" + // 0x0015A 0x00307: 0x01E64 + "\x00\x05l\x00`\xe0\x1ee" + // 0x0015B 0x00307: 0x01E65 + "\x00\x05\x80\x00`\xe0\x1ef" + // 0x00160 0x00307: 0x01E66 + "\x00\x05\x84\x00`\xe0\x1eg" + // 0x00161 0x00307: 0x01E67 + "\x00y\x88\x00`\xe0\x1eh" + // 0x01E62 0x00307: 0x01E68 + "\x00y\x8c\x00`\xe0\x1ei" + // 0x01E63 0x00307: 0x01E69 + "\x00\x01P\x00`\xe0\x1ej" + // 0x00054 0x00307: 0x01E6A + "\x00\x01\xd0\x00`\xe0\x1ek" + // 0x00074 0x00307: 0x01E6B + "\x00\x01P\x00d`\x1el" + // 0x00054 0x00323: 0x01E6C + "\x00\x01\xd0\x00d`\x1em" + // 0x00074 0x00323: 0x01E6D + "\x00\x01P\x00f \x1en" + // 0x00054 0x00331: 0x01E6E + "\x00\x01\xd0\x00f \x1eo" + // 0x00074 0x00331: 0x01E6F + "\x00\x01P\x00e\xa0\x1ep" + // 0x00054 0x0032D: 0x01E70 + "\x00\x01\xd0\x00e\xa0\x1eq" + // 0x00074 0x0032D: 0x01E71 + "\x00\x01T\x00d\x80\x1er" + // 0x00055 0x00324: 0x01E72 + "\x00\x01\xd4\x00d\x80\x1es" + // 0x00075 0x00324: 0x01E73 + "\x00\x01T\x00f\x00\x1et" + // 0x00055 0x00330: 0x01E74 + "\x00\x01\xd4\x00f\x00\x1eu" + // 0x00075 0x00330: 0x01E75 + "\x00\x01T\x00e\xa0\x1ev" + // 0x00055 0x0032D: 0x01E76 + "\x00\x01\xd4\x00e\xa0\x1ew" + // 0x00075 0x0032D: 0x01E77 + "\x00\x05\xa0\x00` \x1ex" + // 0x00168 0x00301: 0x01E78 + "\x00\x05\xa4\x00` \x1ey" + // 0x00169 0x00301: 0x01E79 + "\x00\x05\xa8\x00a\x00\x1ez" + // 0x0016A 0x00308: 0x01E7A + "\x00\x05\xac\x00a\x00\x1e{" + // 0x0016B 0x00308: 0x01E7B + "\x00\x01X\x00``\x1e|" + // 0x00056 0x00303: 0x01E7C + "\x00\x01\xd8\x00``\x1e}" + // 0x00076 0x00303: 0x01E7D + "\x00\x01X\x00d`\x1e~" + // 0x00056 0x00323: 0x01E7E + "\x00\x01\xd8\x00d`\x1e\x7f" + // 0x00076 0x00323: 0x01E7F + "\x00\x01\\\x00`\x00\x1e\x80" + // 0x00057 0x00300: 0x01E80 + "\x00\x01\xdc\x00`\x00\x1e\x81" + // 0x00077 0x00300: 0x01E81 + "\x00\x01\\\x00` \x1e\x82" + // 0x00057 0x00301: 0x01E82 + "\x00\x01\xdc\x00` \x1e\x83" + // 0x00077 0x00301: 0x01E83 + "\x00\x01\\\x00a\x00\x1e\x84" + // 0x00057 0x00308: 0x01E84 + "\x00\x01\xdc\x00a\x00\x1e\x85" + // 0x00077 0x00308: 0x01E85 + "\x00\x01\\\x00`\xe0\x1e\x86" + // 0x00057 0x00307: 0x01E86 + "\x00\x01\xdc\x00`\xe0\x1e\x87" + // 0x00077 0x00307: 0x01E87 + "\x00\x01\\\x00d`\x1e\x88" + // 0x00057 0x00323: 0x01E88 + "\x00\x01\xdc\x00d`\x1e\x89" + // 0x00077 0x00323: 0x01E89 + "\x00\x01`\x00`\xe0\x1e\x8a" + // 0x00058 0x00307: 0x01E8A + "\x00\x01\xe0\x00`\xe0\x1e\x8b" + // 0x00078 0x00307: 0x01E8B + "\x00\x01`\x00a\x00\x1e\x8c" + // 0x00058 0x00308: 0x01E8C + "\x00\x01\xe0\x00a\x00\x1e\x8d" + // 0x00078 0x00308: 0x01E8D + "\x00\x01d\x00`\xe0\x1e\x8e" + // 0x00059 0x00307: 0x01E8E + "\x00\x01\xe4\x00`\xe0\x1e\x8f" + // 0x00079 0x00307: 0x01E8F + "\x00\x01h\x00`@\x1e\x90" + // 0x0005A 0x00302: 0x01E90 + "\x00\x01\xe8\x00`@\x1e\x91" + // 0x0007A 0x00302: 0x01E91 + "\x00\x01h\x00d`\x1e\x92" + // 0x0005A 0x00323: 0x01E92 + "\x00\x01\xe8\x00d`\x1e\x93" + // 0x0007A 0x00323: 0x01E93 + "\x00\x01h\x00f \x1e\x94" + // 0x0005A 0x00331: 0x01E94 + "\x00\x01\xe8\x00f \x1e\x95" + // 0x0007A 0x00331: 0x01E95 + "\x00\x01\xa0\x00f \x1e\x96" + // 0x00068 0x00331: 0x01E96 + "\x00\x01\xd0\x00a\x00\x1e\x97" + // 0x00074 0x00308: 0x01E97 + "\x00\x01\xdc\x00a@\x1e\x98" + // 0x00077 0x0030A: 0x01E98 + "\x00\x01\xe4\x00a@\x1e\x99" + // 0x00079 0x0030A: 0x01E99 + "\x00\x05\xfc\x00`\xe0\x1e\x9b" + // 0x0017F 0x00307: 0x01E9B + "\x00\x01\x04\x00d`\x1e\xa0" + // 0x00041 0x00323: 0x01EA0 + "\x00\x01\x84\x00d`\x1e\xa1" + // 0x00061 0x00323: 0x01EA1 + "\x00\x01\x04\x00a \x1e\xa2" + // 0x00041 0x00309: 0x01EA2 + "\x00\x01\x84\x00a \x1e\xa3" + // 0x00061 0x00309: 0x01EA3 + "\x00\x03\b\x00` \x1e\xa4" + // 0x000C2 0x00301: 0x01EA4 + "\x00\x03\x88\x00` \x1e\xa5" + // 0x000E2 0x00301: 0x01EA5 + "\x00\x03\b\x00`\x00\x1e\xa6" + // 0x000C2 0x00300: 0x01EA6 + "\x00\x03\x88\x00`\x00\x1e\xa7" + // 0x000E2 0x00300: 0x01EA7 + "\x00\x03\b\x00a \x1e\xa8" + // 0x000C2 0x00309: 0x01EA8 + "\x00\x03\x88\x00a \x1e\xa9" + // 0x000E2 0x00309: 0x01EA9 + "\x00\x03\b\x00``\x1e\xaa" + // 0x000C2 0x00303: 0x01EAA + "\x00\x03\x88\x00``\x1e\xab" + // 0x000E2 0x00303: 0x01EAB + "\x00z\x80\x00`@\x1e\xac" + // 0x01EA0 0x00302: 0x01EAC + "\x00z\x84\x00`@\x1e\xad" + // 0x01EA1 0x00302: 0x01EAD + "\x00\x04\b\x00` \x1e\xae" + // 0x00102 0x00301: 0x01EAE + "\x00\x04\f\x00` \x1e\xaf" + // 0x00103 0x00301: 0x01EAF + "\x00\x04\b\x00`\x00\x1e\xb0" + // 0x00102 0x00300: 0x01EB0 + "\x00\x04\f\x00`\x00\x1e\xb1" + // 0x00103 0x00300: 0x01EB1 + "\x00\x04\b\x00a \x1e\xb2" + // 0x00102 0x00309: 0x01EB2 + "\x00\x04\f\x00a \x1e\xb3" + // 0x00103 0x00309: 0x01EB3 + "\x00\x04\b\x00``\x1e\xb4" + // 0x00102 0x00303: 0x01EB4 + "\x00\x04\f\x00``\x1e\xb5" + // 0x00103 0x00303: 0x01EB5 + "\x00z\x80\x00`\xc0\x1e\xb6" + // 0x01EA0 0x00306: 0x01EB6 + "\x00z\x84\x00`\xc0\x1e\xb7" + // 0x01EA1 0x00306: 0x01EB7 + "\x00\x01\x14\x00d`\x1e\xb8" + // 0x00045 0x00323: 0x01EB8 + "\x00\x01\x94\x00d`\x1e\xb9" + // 0x00065 0x00323: 0x01EB9 + "\x00\x01\x14\x00a \x1e\xba" + // 0x00045 0x00309: 0x01EBA + "\x00\x01\x94\x00a \x1e\xbb" + // 0x00065 0x00309: 0x01EBB + "\x00\x01\x14\x00``\x1e\xbc" + // 0x00045 0x00303: 0x01EBC + "\x00\x01\x94\x00``\x1e\xbd" + // 0x00065 0x00303: 0x01EBD + "\x00\x03(\x00` \x1e\xbe" + // 0x000CA 0x00301: 0x01EBE + "\x00\x03\xa8\x00` \x1e\xbf" + // 0x000EA 0x00301: 0x01EBF + "\x00\x03(\x00`\x00\x1e\xc0" + // 0x000CA 0x00300: 0x01EC0 + "\x00\x03\xa8\x00`\x00\x1e\xc1" + // 0x000EA 0x00300: 0x01EC1 + "\x00\x03(\x00a \x1e\xc2" + // 0x000CA 0x00309: 0x01EC2 + "\x00\x03\xa8\x00a \x1e\xc3" + // 0x000EA 0x00309: 0x01EC3 + "\x00\x03(\x00``\x1e\xc4" + // 0x000CA 0x00303: 0x01EC4 + "\x00\x03\xa8\x00``\x1e\xc5" + // 0x000EA 0x00303: 0x01EC5 + "\x00z\xe0\x00`@\x1e\xc6" + // 0x01EB8 0x00302: 0x01EC6 + "\x00z\xe4\x00`@\x1e\xc7" + // 0x01EB9 0x00302: 0x01EC7 + "\x00\x01$\x00a \x1e\xc8" + // 0x00049 0x00309: 0x01EC8 + "\x00\x01\xa4\x00a \x1e\xc9" + // 0x00069 0x00309: 0x01EC9 + "\x00\x01$\x00d`\x1e\xca" + // 0x00049 0x00323: 0x01ECA + "\x00\x01\xa4\x00d`\x1e\xcb" + // 0x00069 0x00323: 0x01ECB + "\x00\x01<\x00d`\x1e\xcc" + // 0x0004F 0x00323: 0x01ECC + "\x00\x01\xbc\x00d`\x1e\xcd" + // 0x0006F 0x00323: 0x01ECD + "\x00\x01<\x00a \x1e\xce" + // 0x0004F 0x00309: 0x01ECE + "\x00\x01\xbc\x00a \x1e\xcf" + // 0x0006F 0x00309: 0x01ECF + "\x00\x03P\x00` \x1e\xd0" + // 0x000D4 0x00301: 0x01ED0 + "\x00\x03\xd0\x00` \x1e\xd1" + // 0x000F4 0x00301: 0x01ED1 + "\x00\x03P\x00`\x00\x1e\xd2" + // 0x000D4 0x00300: 0x01ED2 + "\x00\x03\xd0\x00`\x00\x1e\xd3" + // 0x000F4 0x00300: 0x01ED3 + "\x00\x03P\x00a \x1e\xd4" + // 0x000D4 0x00309: 0x01ED4 + "\x00\x03\xd0\x00a \x1e\xd5" + // 0x000F4 0x00309: 0x01ED5 + "\x00\x03P\x00``\x1e\xd6" + // 0x000D4 0x00303: 0x01ED6 + "\x00\x03\xd0\x00``\x1e\xd7" + // 0x000F4 0x00303: 0x01ED7 + "\x00{0\x00`@\x1e\xd8" + // 0x01ECC 0x00302: 0x01ED8 + "\x00{4\x00`@\x1e\xd9" + // 0x01ECD 0x00302: 0x01ED9 + "\x00\x06\x80\x00` \x1e\xda" + // 0x001A0 0x00301: 0x01EDA + "\x00\x06\x84\x00` \x1e\xdb" + // 0x001A1 0x00301: 0x01EDB + "\x00\x06\x80\x00`\x00\x1e\xdc" + // 0x001A0 0x00300: 0x01EDC + "\x00\x06\x84\x00`\x00\x1e\xdd" + // 0x001A1 0x00300: 0x01EDD + "\x00\x06\x80\x00a \x1e\xde" + // 0x001A0 0x00309: 0x01EDE + "\x00\x06\x84\x00a \x1e\xdf" + // 0x001A1 0x00309: 0x01EDF + "\x00\x06\x80\x00``\x1e\xe0" + // 0x001A0 0x00303: 0x01EE0 + "\x00\x06\x84\x00``\x1e\xe1" + // 0x001A1 0x00303: 0x01EE1 + "\x00\x06\x80\x00d`\x1e\xe2" + // 0x001A0 0x00323: 0x01EE2 + "\x00\x06\x84\x00d`\x1e\xe3" + // 0x001A1 0x00323: 0x01EE3 + "\x00\x01T\x00d`\x1e\xe4" + // 0x00055 0x00323: 0x01EE4 + "\x00\x01\xd4\x00d`\x1e\xe5" + // 0x00075 0x00323: 0x01EE5 + "\x00\x01T\x00a \x1e\xe6" + // 0x00055 0x00309: 0x01EE6 + "\x00\x01\xd4\x00a \x1e\xe7" + // 0x00075 0x00309: 0x01EE7 + "\x00\x06\xbc\x00` \x1e\xe8" + // 0x001AF 0x00301: 0x01EE8 + "\x00\x06\xc0\x00` \x1e\xe9" + // 0x001B0 0x00301: 0x01EE9 + "\x00\x06\xbc\x00`\x00\x1e\xea" + // 0x001AF 0x00300: 0x01EEA + "\x00\x06\xc0\x00`\x00\x1e\xeb" + // 0x001B0 0x00300: 0x01EEB + "\x00\x06\xbc\x00a \x1e\xec" + // 0x001AF 0x00309: 0x01EEC + "\x00\x06\xc0\x00a \x1e\xed" + // 0x001B0 0x00309: 0x01EED + "\x00\x06\xbc\x00``\x1e\xee" + // 0x001AF 0x00303: 0x01EEE + "\x00\x06\xc0\x00``\x1e\xef" + // 0x001B0 0x00303: 0x01EEF + "\x00\x06\xbc\x00d`\x1e\xf0" + // 0x001AF 0x00323: 0x01EF0 + "\x00\x06\xc0\x00d`\x1e\xf1" + // 0x001B0 0x00323: 0x01EF1 + "\x00\x01d\x00`\x00\x1e\xf2" + // 0x00059 0x00300: 0x01EF2 + "\x00\x01\xe4\x00`\x00\x1e\xf3" + // 0x00079 0x00300: 0x01EF3 + "\x00\x01d\x00d`\x1e\xf4" + // 0x00059 0x00323: 0x01EF4 + "\x00\x01\xe4\x00d`\x1e\xf5" + // 0x00079 0x00323: 0x01EF5 + "\x00\x01d\x00a \x1e\xf6" + // 0x00059 0x00309: 0x01EF6 + "\x00\x01\xe4\x00a \x1e\xf7" + // 0x00079 0x00309: 0x01EF7 + "\x00\x01d\x00``\x1e\xf8" + // 0x00059 0x00303: 0x01EF8 + "\x00\x01\xe4\x00``\x1e\xf9" + // 0x00079 0x00303: 0x01EF9 + "\x00\x0e\xc4\x00b`\x1f\x00" + // 0x003B1 0x00313: 0x01F00 + "\x00\x0e\xc4\x00b\x80\x1f\x01" + // 0x003B1 0x00314: 0x01F01 + "\x00|\x00\x00`\x00\x1f\x02" + // 0x01F00 0x00300: 0x01F02 + "\x00|\x04\x00`\x00\x1f\x03" + // 0x01F01 0x00300: 0x01F03 + "\x00|\x00\x00` \x1f\x04" + // 0x01F00 0x00301: 0x01F04 + "\x00|\x04\x00` \x1f\x05" + // 0x01F01 0x00301: 0x01F05 + "\x00|\x00\x00h@\x1f\x06" + // 0x01F00 0x00342: 0x01F06 + "\x00|\x04\x00h@\x1f\a" + // 0x01F01 0x00342: 0x01F07 + "\x00\x0eD\x00b`\x1f\b" + // 0x00391 0x00313: 0x01F08 + "\x00\x0eD\x00b\x80\x1f\t" + // 0x00391 0x00314: 0x01F09 + "\x00| \x00`\x00\x1f\n" + // 0x01F08 0x00300: 0x01F0A + "\x00|$\x00`\x00\x1f\v" + // 0x01F09 0x00300: 0x01F0B + "\x00| \x00` \x1f\f" + // 0x01F08 0x00301: 0x01F0C + "\x00|$\x00` \x1f\r" + // 0x01F09 0x00301: 0x01F0D + "\x00| \x00h@\x1f\x0e" + // 0x01F08 0x00342: 0x01F0E + "\x00|$\x00h@\x1f\x0f" + // 0x01F09 0x00342: 0x01F0F + "\x00\x0e\xd4\x00b`\x1f\x10" + // 0x003B5 0x00313: 0x01F10 + "\x00\x0e\xd4\x00b\x80\x1f\x11" + // 0x003B5 0x00314: 0x01F11 + "\x00|@\x00`\x00\x1f\x12" + // 0x01F10 0x00300: 0x01F12 + "\x00|D\x00`\x00\x1f\x13" + // 0x01F11 0x00300: 0x01F13 + "\x00|@\x00` \x1f\x14" + // 0x01F10 0x00301: 0x01F14 + "\x00|D\x00` \x1f\x15" + // 0x01F11 0x00301: 0x01F15 + "\x00\x0eT\x00b`\x1f\x18" + // 0x00395 0x00313: 0x01F18 + "\x00\x0eT\x00b\x80\x1f\x19" + // 0x00395 0x00314: 0x01F19 + "\x00|`\x00`\x00\x1f\x1a" + // 0x01F18 0x00300: 0x01F1A + "\x00|d\x00`\x00\x1f\x1b" + // 0x01F19 0x00300: 0x01F1B + "\x00|`\x00` \x1f\x1c" + // 0x01F18 0x00301: 0x01F1C + "\x00|d\x00` \x1f\x1d" + // 0x01F19 0x00301: 0x01F1D + "\x00\x0e\xdc\x00b`\x1f " + // 0x003B7 0x00313: 0x01F20 + "\x00\x0e\xdc\x00b\x80\x1f!" + // 0x003B7 0x00314: 0x01F21 + "\x00|\x80\x00`\x00\x1f\"" + // 0x01F20 0x00300: 0x01F22 + "\x00|\x84\x00`\x00\x1f#" + // 0x01F21 0x00300: 0x01F23 + "\x00|\x80\x00` \x1f$" + // 0x01F20 0x00301: 0x01F24 + "\x00|\x84\x00` \x1f%" + // 0x01F21 0x00301: 0x01F25 + "\x00|\x80\x00h@\x1f&" + // 0x01F20 0x00342: 0x01F26 + "\x00|\x84\x00h@\x1f'" + // 0x01F21 0x00342: 0x01F27 + "\x00\x0e\\\x00b`\x1f(" + // 0x00397 0x00313: 0x01F28 + "\x00\x0e\\\x00b\x80\x1f)" + // 0x00397 0x00314: 0x01F29 + "\x00|\xa0\x00`\x00\x1f*" + // 0x01F28 0x00300: 0x01F2A + "\x00|\xa4\x00`\x00\x1f+" + // 0x01F29 0x00300: 0x01F2B + "\x00|\xa0\x00` \x1f," + // 0x01F28 0x00301: 0x01F2C + "\x00|\xa4\x00` \x1f-" + // 0x01F29 0x00301: 0x01F2D + "\x00|\xa0\x00h@\x1f." + // 0x01F28 0x00342: 0x01F2E + "\x00|\xa4\x00h@\x1f/" + // 0x01F29 0x00342: 0x01F2F + "\x00\x0e\xe4\x00b`\x1f0" + // 0x003B9 0x00313: 0x01F30 + "\x00\x0e\xe4\x00b\x80\x1f1" + // 0x003B9 0x00314: 0x01F31 + "\x00|\xc0\x00`\x00\x1f2" + // 0x01F30 0x00300: 0x01F32 + "\x00|\xc4\x00`\x00\x1f3" + // 0x01F31 0x00300: 0x01F33 + "\x00|\xc0\x00` \x1f4" + // 0x01F30 0x00301: 0x01F34 + "\x00|\xc4\x00` \x1f5" + // 0x01F31 0x00301: 0x01F35 + "\x00|\xc0\x00h@\x1f6" + // 0x01F30 0x00342: 0x01F36 + "\x00|\xc4\x00h@\x1f7" + // 0x01F31 0x00342: 0x01F37 + "\x00\x0ed\x00b`\x1f8" + // 0x00399 0x00313: 0x01F38 + "\x00\x0ed\x00b\x80\x1f9" + // 0x00399 0x00314: 0x01F39 + "\x00|\xe0\x00`\x00\x1f:" + // 0x01F38 0x00300: 0x01F3A + "\x00|\xe4\x00`\x00\x1f;" + // 0x01F39 0x00300: 0x01F3B + "\x00|\xe0\x00` \x1f<" + // 0x01F38 0x00301: 0x01F3C + "\x00|\xe4\x00` \x1f=" + // 0x01F39 0x00301: 0x01F3D + "\x00|\xe0\x00h@\x1f>" + // 0x01F38 0x00342: 0x01F3E + "\x00|\xe4\x00h@\x1f?" + // 0x01F39 0x00342: 0x01F3F + "\x00\x0e\xfc\x00b`\x1f@" + // 0x003BF 0x00313: 0x01F40 + "\x00\x0e\xfc\x00b\x80\x1fA" + // 0x003BF 0x00314: 0x01F41 + "\x00}\x00\x00`\x00\x1fB" + // 0x01F40 0x00300: 0x01F42 + "\x00}\x04\x00`\x00\x1fC" + // 0x01F41 0x00300: 0x01F43 + "\x00}\x00\x00` \x1fD" + // 0x01F40 0x00301: 0x01F44 + "\x00}\x04\x00` \x1fE" + // 0x01F41 0x00301: 0x01F45 + "\x00\x0e|\x00b`\x1fH" + // 0x0039F 0x00313: 0x01F48 + "\x00\x0e|\x00b\x80\x1fI" + // 0x0039F 0x00314: 0x01F49 + "\x00} \x00`\x00\x1fJ" + // 0x01F48 0x00300: 0x01F4A + "\x00}$\x00`\x00\x1fK" + // 0x01F49 0x00300: 0x01F4B + "\x00} \x00` \x1fL" + // 0x01F48 0x00301: 0x01F4C + "\x00}$\x00` \x1fM" + // 0x01F49 0x00301: 0x01F4D + "\x00\x0f\x14\x00b`\x1fP" + // 0x003C5 0x00313: 0x01F50 + "\x00\x0f\x14\x00b\x80\x1fQ" + // 0x003C5 0x00314: 0x01F51 + "\x00}@\x00`\x00\x1fR" + // 0x01F50 0x00300: 0x01F52 + "\x00}D\x00`\x00\x1fS" + // 0x01F51 0x00300: 0x01F53 + "\x00}@\x00` \x1fT" + // 0x01F50 0x00301: 0x01F54 + "\x00}D\x00` \x1fU" + // 0x01F51 0x00301: 0x01F55 + "\x00}@\x00h@\x1fV" + // 0x01F50 0x00342: 0x01F56 + "\x00}D\x00h@\x1fW" + // 0x01F51 0x00342: 0x01F57 + "\x00\x0e\x94\x00b\x80\x1fY" + // 0x003A5 0x00314: 0x01F59 + "\x00}d\x00`\x00\x1f[" + // 0x01F59 0x00300: 0x01F5B + "\x00}d\x00` \x1f]" + // 0x01F59 0x00301: 0x01F5D + "\x00}d\x00h@\x1f_" + // 0x01F59 0x00342: 0x01F5F + "\x00\x0f$\x00b`\x1f`" + // 0x003C9 0x00313: 0x01F60 + "\x00\x0f$\x00b\x80\x1fa" + // 0x003C9 0x00314: 0x01F61 + "\x00}\x80\x00`\x00\x1fb" + // 0x01F60 0x00300: 0x01F62 + "\x00}\x84\x00`\x00\x1fc" + // 0x01F61 0x00300: 0x01F63 + "\x00}\x80\x00` \x1fd" + // 0x01F60 0x00301: 0x01F64 + "\x00}\x84\x00` \x1fe" + // 0x01F61 0x00301: 0x01F65 + "\x00}\x80\x00h@\x1ff" + // 0x01F60 0x00342: 0x01F66 + "\x00}\x84\x00h@\x1fg" + // 0x01F61 0x00342: 0x01F67 + "\x00\x0e\xa4\x00b`\x1fh" + // 0x003A9 0x00313: 0x01F68 + "\x00\x0e\xa4\x00b\x80\x1fi" + // 0x003A9 0x00314: 0x01F69 + "\x00}\xa0\x00`\x00\x1fj" + // 0x01F68 0x00300: 0x01F6A + "\x00}\xa4\x00`\x00\x1fk" + // 0x01F69 0x00300: 0x01F6B + "\x00}\xa0\x00` \x1fl" + // 0x01F68 0x00301: 0x01F6C + "\x00}\xa4\x00` \x1fm" + // 0x01F69 0x00301: 0x01F6D + "\x00}\xa0\x00h@\x1fn" + // 0x01F68 0x00342: 0x01F6E + "\x00}\xa4\x00h@\x1fo" + // 0x01F69 0x00342: 0x01F6F + "\x00\x0e\xc4\x00`\x00\x1fp" + // 0x003B1 0x00300: 0x01F70 + "\x00\x0e\xd4\x00`\x00\x1fr" + // 0x003B5 0x00300: 0x01F72 + "\x00\x0e\xdc\x00`\x00\x1ft" + // 0x003B7 0x00300: 0x01F74 + "\x00\x0e\xe4\x00`\x00\x1fv" + // 0x003B9 0x00300: 0x01F76 + "\x00\x0e\xfc\x00`\x00\x1fx" + // 0x003BF 0x00300: 0x01F78 + "\x00\x0f\x14\x00`\x00\x1fz" + // 0x003C5 0x00300: 0x01F7A + "\x00\x0f$\x00`\x00\x1f|" + // 0x003C9 0x00300: 0x01F7C + "\x00|\x00\x00h\xa0\x1f\x80" + // 0x01F00 0x00345: 0x01F80 + "\x00|\x04\x00h\xa0\x1f\x81" + // 0x01F01 0x00345: 0x01F81 + "\x00|\b\x00h\xa0\x1f\x82" + // 0x01F02 0x00345: 0x01F82 + "\x00|\f\x00h\xa0\x1f\x83" + // 0x01F03 0x00345: 0x01F83 + "\x00|\x10\x00h\xa0\x1f\x84" + // 0x01F04 0x00345: 0x01F84 + "\x00|\x14\x00h\xa0\x1f\x85" + // 0x01F05 0x00345: 0x01F85 + "\x00|\x18\x00h\xa0\x1f\x86" + // 0x01F06 0x00345: 0x01F86 + "\x00|\x1c\x00h\xa0\x1f\x87" + // 0x01F07 0x00345: 0x01F87 + "\x00| \x00h\xa0\x1f\x88" + // 0x01F08 0x00345: 0x01F88 + "\x00|$\x00h\xa0\x1f\x89" + // 0x01F09 0x00345: 0x01F89 + "\x00|(\x00h\xa0\x1f\x8a" + // 0x01F0A 0x00345: 0x01F8A + "\x00|,\x00h\xa0\x1f\x8b" + // 0x01F0B 0x00345: 0x01F8B + "\x00|0\x00h\xa0\x1f\x8c" + // 0x01F0C 0x00345: 0x01F8C + "\x00|4\x00h\xa0\x1f\x8d" + // 0x01F0D 0x00345: 0x01F8D + "\x00|8\x00h\xa0\x1f\x8e" + // 0x01F0E 0x00345: 0x01F8E + "\x00|<\x00h\xa0\x1f\x8f" + // 0x01F0F 0x00345: 0x01F8F + "\x00|\x80\x00h\xa0\x1f\x90" + // 0x01F20 0x00345: 0x01F90 + "\x00|\x84\x00h\xa0\x1f\x91" + // 0x01F21 0x00345: 0x01F91 + "\x00|\x88\x00h\xa0\x1f\x92" + // 0x01F22 0x00345: 0x01F92 + "\x00|\x8c\x00h\xa0\x1f\x93" + // 0x01F23 0x00345: 0x01F93 + "\x00|\x90\x00h\xa0\x1f\x94" + // 0x01F24 0x00345: 0x01F94 + "\x00|\x94\x00h\xa0\x1f\x95" + // 0x01F25 0x00345: 0x01F95 + "\x00|\x98\x00h\xa0\x1f\x96" + // 0x01F26 0x00345: 0x01F96 + "\x00|\x9c\x00h\xa0\x1f\x97" + // 0x01F27 0x00345: 0x01F97 + "\x00|\xa0\x00h\xa0\x1f\x98" + // 0x01F28 0x00345: 0x01F98 + "\x00|\xa4\x00h\xa0\x1f\x99" + // 0x01F29 0x00345: 0x01F99 + "\x00|\xa8\x00h\xa0\x1f\x9a" + // 0x01F2A 0x00345: 0x01F9A + "\x00|\xac\x00h\xa0\x1f\x9b" + // 0x01F2B 0x00345: 0x01F9B + "\x00|\xb0\x00h\xa0\x1f\x9c" + // 0x01F2C 0x00345: 0x01F9C + "\x00|\xb4\x00h\xa0\x1f\x9d" + // 0x01F2D 0x00345: 0x01F9D + "\x00|\xb8\x00h\xa0\x1f\x9e" + // 0x01F2E 0x00345: 0x01F9E + "\x00|\xbc\x00h\xa0\x1f\x9f" + // 0x01F2F 0x00345: 0x01F9F + "\x00}\x80\x00h\xa0\x1f\xa0" + // 0x01F60 0x00345: 0x01FA0 + "\x00}\x84\x00h\xa0\x1f\xa1" + // 0x01F61 0x00345: 0x01FA1 + "\x00}\x88\x00h\xa0\x1f\xa2" + // 0x01F62 0x00345: 0x01FA2 + "\x00}\x8c\x00h\xa0\x1f\xa3" + // 0x01F63 0x00345: 0x01FA3 + "\x00}\x90\x00h\xa0\x1f\xa4" + // 0x01F64 0x00345: 0x01FA4 + "\x00}\x94\x00h\xa0\x1f\xa5" + // 0x01F65 0x00345: 0x01FA5 + "\x00}\x98\x00h\xa0\x1f\xa6" + // 0x01F66 0x00345: 0x01FA6 + "\x00}\x9c\x00h\xa0\x1f\xa7" + // 0x01F67 0x00345: 0x01FA7 + "\x00}\xa0\x00h\xa0\x1f\xa8" + // 0x01F68 0x00345: 0x01FA8 + "\x00}\xa4\x00h\xa0\x1f\xa9" + // 0x01F69 0x00345: 0x01FA9 + "\x00}\xa8\x00h\xa0\x1f\xaa" + // 0x01F6A 0x00345: 0x01FAA + "\x00}\xac\x00h\xa0\x1f\xab" + // 0x01F6B 0x00345: 0x01FAB + "\x00}\xb0\x00h\xa0\x1f\xac" + // 0x01F6C 0x00345: 0x01FAC + "\x00}\xb4\x00h\xa0\x1f\xad" + // 0x01F6D 0x00345: 0x01FAD + "\x00}\xb8\x00h\xa0\x1f\xae" + // 0x01F6E 0x00345: 0x01FAE + "\x00}\xbc\x00h\xa0\x1f\xaf" + // 0x01F6F 0x00345: 0x01FAF + "\x00\x0e\xc4\x00`\xc0\x1f\xb0" + // 0x003B1 0x00306: 0x01FB0 + "\x00\x0e\xc4\x00`\x80\x1f\xb1" + // 0x003B1 0x00304: 0x01FB1 + "\x00}\xc0\x00h\xa0\x1f\xb2" + // 0x01F70 0x00345: 0x01FB2 + "\x00\x0e\xc4\x00h\xa0\x1f\xb3" + // 0x003B1 0x00345: 0x01FB3 + "\x00\x0e\xb0\x00h\xa0\x1f\xb4" + // 0x003AC 0x00345: 0x01FB4 + "\x00\x0e\xc4\x00h@\x1f\xb6" + // 0x003B1 0x00342: 0x01FB6 + "\x00~\xd8\x00h\xa0\x1f\xb7" + // 0x01FB6 0x00345: 0x01FB7 + "\x00\x0eD\x00`\xc0\x1f\xb8" + // 0x00391 0x00306: 0x01FB8 + "\x00\x0eD\x00`\x80\x1f\xb9" + // 0x00391 0x00304: 0x01FB9 + "\x00\x0eD\x00`\x00\x1f\xba" + // 0x00391 0x00300: 0x01FBA + "\x00\x0eD\x00h\xa0\x1f\xbc" + // 0x00391 0x00345: 0x01FBC + "\x00\x02\xa0\x00h@\x1f\xc1" + // 0x000A8 0x00342: 0x01FC1 + "\x00}\xd0\x00h\xa0\x1f\xc2" + // 0x01F74 0x00345: 0x01FC2 + "\x00\x0e\xdc\x00h\xa0\x1f\xc3" + // 0x003B7 0x00345: 0x01FC3 + "\x00\x0e\xb8\x00h\xa0\x1f\xc4" + // 0x003AE 0x00345: 0x01FC4 + "\x00\x0e\xdc\x00h@\x1f\xc6" + // 0x003B7 0x00342: 0x01FC6 + "\x00\x7f\x18\x00h\xa0\x1f\xc7" + // 0x01FC6 0x00345: 0x01FC7 + "\x00\x0eT\x00`\x00\x1f\xc8" + // 0x00395 0x00300: 0x01FC8 + "\x00\x0e\\\x00`\x00\x1f\xca" + // 0x00397 0x00300: 0x01FCA + "\x00\x0e\\\x00h\xa0\x1f\xcc" + // 0x00397 0x00345: 0x01FCC + "\x00~\xfc\x00`\x00\x1f\xcd" + // 0x01FBF 0x00300: 0x01FCD + "\x00~\xfc\x00` \x1f\xce" + // 0x01FBF 0x00301: 0x01FCE + "\x00~\xfc\x00h@\x1f\xcf" + // 0x01FBF 0x00342: 0x01FCF + "\x00\x0e\xe4\x00`\xc0\x1f\xd0" + // 0x003B9 0x00306: 0x01FD0 + "\x00\x0e\xe4\x00`\x80\x1f\xd1" + // 0x003B9 0x00304: 0x01FD1 + "\x00\x0f(\x00`\x00\x1f\xd2" + // 0x003CA 0x00300: 0x01FD2 + "\x00\x0e\xe4\x00h@\x1f\xd6" + // 0x003B9 0x00342: 0x01FD6 + "\x00\x0f(\x00h@\x1f\xd7" + // 0x003CA 0x00342: 0x01FD7 + "\x00\x0ed\x00`\xc0\x1f\xd8" + // 0x00399 0x00306: 0x01FD8 + "\x00\x0ed\x00`\x80\x1f\xd9" + // 0x00399 0x00304: 0x01FD9 + "\x00\x0ed\x00`\x00\x1f\xda" + // 0x00399 0x00300: 0x01FDA + "\x00\x7f\xf8\x00`\x00\x1f\xdd" + // 0x01FFE 0x00300: 0x01FDD + "\x00\x7f\xf8\x00` \x1f\xde" + // 0x01FFE 0x00301: 0x01FDE + "\x00\x7f\xf8\x00h@\x1f\xdf" + // 0x01FFE 0x00342: 0x01FDF + "\x00\x0f\x14\x00`\xc0\x1f\xe0" + // 0x003C5 0x00306: 0x01FE0 + "\x00\x0f\x14\x00`\x80\x1f\xe1" + // 0x003C5 0x00304: 0x01FE1 + "\x00\x0f,\x00`\x00\x1f\xe2" + // 0x003CB 0x00300: 0x01FE2 + "\x00\x0f\x04\x00b`\x1f\xe4" + // 0x003C1 0x00313: 0x01FE4 + "\x00\x0f\x04\x00b\x80\x1f\xe5" + // 0x003C1 0x00314: 0x01FE5 + "\x00\x0f\x14\x00h@\x1f\xe6" + // 0x003C5 0x00342: 0x01FE6 + "\x00\x0f,\x00h@\x1f\xe7" + // 0x003CB 0x00342: 0x01FE7 + "\x00\x0e\x94\x00`\xc0\x1f\xe8" + // 0x003A5 0x00306: 0x01FE8 + "\x00\x0e\x94\x00`\x80\x1f\xe9" + // 0x003A5 0x00304: 0x01FE9 + "\x00\x0e\x94\x00`\x00\x1f\xea" + // 0x003A5 0x00300: 0x01FEA + "\x00\x0e\x84\x00b\x80\x1f\xec" + // 0x003A1 0x00314: 0x01FEC + "\x00\x02\xa0\x00`\x00\x1f\xed" + // 0x000A8 0x00300: 0x01FED + "\x00}\xf0\x00h\xa0\x1f\xf2" + // 0x01F7C 0x00345: 0x01FF2 + "\x00\x0f$\x00h\xa0\x1f\xf3" + // 0x003C9 0x00345: 0x01FF3 + "\x00\x0f8\x00h\xa0\x1f\xf4" + // 0x003CE 0x00345: 0x01FF4 + "\x00\x0f$\x00h@\x1f\xf6" + // 0x003C9 0x00342: 0x01FF6 + "\x00\x7f\xd8\x00h\xa0\x1f\xf7" + // 0x01FF6 0x00345: 0x01FF7 + "\x00\x0e|\x00`\x00\x1f\xf8" + // 0x0039F 0x00300: 0x01FF8 + "\x00\x0e\xa4\x00`\x00\x1f\xfa" + // 0x003A9 0x00300: 0x01FFA + "\x00\x0e\xa4\x00h\xa0\x1f\xfc" + // 0x003A9 0x00345: 0x01FFC + "\x00\x86@\x00g\x00!\x9a" + // 0x02190 0x00338: 0x0219A + "\x00\x86H\x00g\x00!\x9b" + // 0x02192 0x00338: 0x0219B + "\x00\x86P\x00g\x00!\xae" + // 0x02194 0x00338: 0x021AE + "\x00\x87@\x00g\x00!\xcd" + // 0x021D0 0x00338: 0x021CD + "\x00\x87P\x00g\x00!\xce" + // 0x021D4 0x00338: 0x021CE + "\x00\x87H\x00g\x00!\xcf" + // 0x021D2 0x00338: 0x021CF + "\x00\x88\f\x00g\x00\"\x04" + // 0x02203 0x00338: 0x02204 + "\x00\x88 \x00g\x00\"\t" + // 0x02208 0x00338: 0x02209 + "\x00\x88,\x00g\x00\"\f" + // 0x0220B 0x00338: 0x0220C + "\x00\x88\x8c\x00g\x00\"$" + // 0x02223 0x00338: 0x02224 + "\x00\x88\x94\x00g\x00\"&" + // 0x02225 0x00338: 0x02226 + "\x00\x88\xf0\x00g\x00\"A" + // 0x0223C 0x00338: 0x02241 + "\x00\x89\f\x00g\x00\"D" + // 0x02243 0x00338: 0x02244 + "\x00\x89\x14\x00g\x00\"G" + // 0x02245 0x00338: 0x02247 + "\x00\x89 \x00g\x00\"I" + // 0x02248 0x00338: 0x02249 + "\x00\x00\xf4\x00g\x00\"`" + // 0x0003D 0x00338: 0x02260 + "\x00\x89\x84\x00g\x00\"b" + // 0x02261 0x00338: 0x02262 + "\x00\x894\x00g\x00\"m" + // 0x0224D 0x00338: 0x0226D + "\x00\x00\xf0\x00g\x00\"n" + // 0x0003C 0x00338: 0x0226E + "\x00\x00\xf8\x00g\x00\"o" + // 0x0003E 0x00338: 0x0226F + "\x00\x89\x90\x00g\x00\"p" + // 0x02264 0x00338: 0x02270 + "\x00\x89\x94\x00g\x00\"q" + // 0x02265 0x00338: 0x02271 + "\x00\x89\xc8\x00g\x00\"t" + // 0x02272 0x00338: 0x02274 + "\x00\x89\xcc\x00g\x00\"u" + // 0x02273 0x00338: 0x02275 + "\x00\x89\xd8\x00g\x00\"x" + // 0x02276 0x00338: 0x02278 + "\x00\x89\xdc\x00g\x00\"y" + // 0x02277 0x00338: 0x02279 + "\x00\x89\xe8\x00g\x00\"\x80" + // 0x0227A 0x00338: 0x02280 + "\x00\x89\xec\x00g\x00\"\x81" + // 0x0227B 0x00338: 0x02281 + "\x00\x8a\b\x00g\x00\"\x84" + // 0x02282 0x00338: 0x02284 + "\x00\x8a\f\x00g\x00\"\x85" + // 0x02283 0x00338: 0x02285 + "\x00\x8a\x18\x00g\x00\"\x88" + // 0x02286 0x00338: 0x02288 + "\x00\x8a\x1c\x00g\x00\"\x89" + // 0x02287 0x00338: 0x02289 + "\x00\x8a\x88\x00g\x00\"\xac" + // 0x022A2 0x00338: 0x022AC + "\x00\x8a\xa0\x00g\x00\"\xad" + // 0x022A8 0x00338: 0x022AD + "\x00\x8a\xa4\x00g\x00\"\xae" + // 0x022A9 0x00338: 0x022AE + "\x00\x8a\xac\x00g\x00\"\xaf" + // 0x022AB 0x00338: 0x022AF + "\x00\x89\xf0\x00g\x00\"\xe0" + // 0x0227C 0x00338: 0x022E0 + "\x00\x89\xf4\x00g\x00\"\xe1" + // 0x0227D 0x00338: 0x022E1 + "\x00\x8aD\x00g\x00\"\xe2" + // 0x02291 0x00338: 0x022E2 + "\x00\x8aH\x00g\x00\"\xe3" + // 0x02292 0x00338: 0x022E3 + "\x00\x8a\xc8\x00g\x00\"\xea" + // 0x022B2 0x00338: 0x022EA + "\x00\x8a\xcc\x00g\x00\"\xeb" + // 0x022B3 0x00338: 0x022EB + "\x00\x8a\xd0\x00g\x00\"\xec" + // 0x022B4 0x00338: 0x022EC + "\x00\x8a\xd4\x00g\x00\"\xed" + // 0x022B5 0x00338: 0x022ED + "\x00\xc1,\x06\x13 0L" + // 0x0304B 0x03099: 0x0304C + "\x00\xc14\x06\x13 0N" + // 0x0304D 0x03099: 0x0304E + "\x00\xc1<\x06\x13 0P" + // 0x0304F 0x03099: 0x03050 + "\x00\xc1D\x06\x13 0R" + // 0x03051 0x03099: 0x03052 + "\x00\xc1L\x06\x13 0T" + // 0x03053 0x03099: 0x03054 + "\x00\xc1T\x06\x13 0V" + // 0x03055 0x03099: 0x03056 + "\x00\xc1\\\x06\x13 0X" + // 0x03057 0x03099: 0x03058 + "\x00\xc1d\x06\x13 0Z" + // 0x03059 0x03099: 0x0305A + "\x00\xc1l\x06\x13 0\\" + // 0x0305B 0x03099: 0x0305C + "\x00\xc1t\x06\x13 0^" + // 0x0305D 0x03099: 0x0305E + "\x00\xc1|\x06\x13 0`" + // 0x0305F 0x03099: 0x03060 + "\x00\xc1\x84\x06\x13 0b" + // 0x03061 0x03099: 0x03062 + "\x00\xc1\x90\x06\x13 0e" + // 0x03064 0x03099: 0x03065 + "\x00\xc1\x98\x06\x13 0g" + // 0x03066 0x03099: 0x03067 + "\x00\xc1\xa0\x06\x13 0i" + // 0x03068 0x03099: 0x03069 + "\x00\xc1\xbc\x06\x13 0p" + // 0x0306F 0x03099: 0x03070 + "\x00\xc1\xbc\x06\x13@0q" + // 0x0306F 0x0309A: 0x03071 + "\x00\xc1\xc8\x06\x13 0s" + // 0x03072 0x03099: 0x03073 + "\x00\xc1\xc8\x06\x13@0t" + // 0x03072 0x0309A: 0x03074 + "\x00\xc1\xd4\x06\x13 0v" + // 0x03075 0x03099: 0x03076 + "\x00\xc1\xd4\x06\x13@0w" + // 0x03075 0x0309A: 0x03077 + "\x00\xc1\xe0\x06\x13 0y" + // 0x03078 0x03099: 0x03079 + "\x00\xc1\xe0\x06\x13@0z" + // 0x03078 0x0309A: 0x0307A + "\x00\xc1\xec\x06\x13 0|" + // 0x0307B 0x03099: 0x0307C + "\x00\xc1\xec\x06\x13@0}" + // 0x0307B 0x0309A: 0x0307D + "\x00\xc1\x18\x06\x13 0\x94" + // 0x03046 0x03099: 0x03094 + "\x00\xc2t\x06\x13 0\x9e" + // 0x0309D 0x03099: 0x0309E + "\x00¬\x06\x13 0\xac" + // 0x030AB 0x03099: 0x030AC + "\x00´\x06\x13 0\xae" + // 0x030AD 0x03099: 0x030AE + "\x00¼\x06\x13 0\xb0" + // 0x030AF 0x03099: 0x030B0 + "\x00\xc2\xc4\x06\x13 0\xb2" + // 0x030B1 0x03099: 0x030B2 + "\x00\xc2\xcc\x06\x13 0\xb4" + // 0x030B3 0x03099: 0x030B4 + "\x00\xc2\xd4\x06\x13 0\xb6" + // 0x030B5 0x03099: 0x030B6 + "\x00\xc2\xdc\x06\x13 0\xb8" + // 0x030B7 0x03099: 0x030B8 + "\x00\xc2\xe4\x06\x13 0\xba" + // 0x030B9 0x03099: 0x030BA + "\x00\xc2\xec\x06\x13 0\xbc" + // 0x030BB 0x03099: 0x030BC + "\x00\xc2\xf4\x06\x13 0\xbe" + // 0x030BD 0x03099: 0x030BE + "\x00\xc2\xfc\x06\x13 0\xc0" + // 0x030BF 0x03099: 0x030C0 + "\x00\xc3\x04\x06\x13 0\xc2" + // 0x030C1 0x03099: 0x030C2 + "\x00\xc3\x10\x06\x13 0\xc5" + // 0x030C4 0x03099: 0x030C5 + "\x00\xc3\x18\x06\x13 0\xc7" + // 0x030C6 0x03099: 0x030C7 + "\x00\xc3 \x06\x13 0\xc9" + // 0x030C8 0x03099: 0x030C9 + "\x00\xc3<\x06\x13 0\xd0" + // 0x030CF 0x03099: 0x030D0 + "\x00\xc3<\x06\x13@0\xd1" + // 0x030CF 0x0309A: 0x030D1 + "\x00\xc3H\x06\x13 0\xd3" + // 0x030D2 0x03099: 0x030D3 + "\x00\xc3H\x06\x13@0\xd4" + // 0x030D2 0x0309A: 0x030D4 + "\x00\xc3T\x06\x13 0\xd6" + // 0x030D5 0x03099: 0x030D6 + "\x00\xc3T\x06\x13@0\xd7" + // 0x030D5 0x0309A: 0x030D7 + "\x00\xc3`\x06\x13 0\xd9" + // 0x030D8 0x03099: 0x030D9 + "\x00\xc3`\x06\x13@0\xda" + // 0x030D8 0x0309A: 0x030DA + "\x00\xc3l\x06\x13 0\xdc" + // 0x030DB 0x03099: 0x030DC + "\x00\xc3l\x06\x13@0\xdd" + // 0x030DB 0x0309A: 0x030DD + "\x00\u0098\x06\x13 0\xf4" + // 0x030A6 0x03099: 0x030F4 + "\x00ü\x06\x13 0\xf7" + // 0x030EF 0x03099: 0x030F7 + "\x00\xc3\xc0\x06\x13 0\xf8" + // 0x030F0 0x03099: 0x030F8 + "\x00\xc3\xc4\x06\x13 0\xf9" + // 0x030F1 0x03099: 0x030F9 + "\x00\xc3\xc8\x06\x13 0\xfa" + // 0x030F2 0x03099: 0x030FA + "\x00\xc3\xf4\x06\x13 0\xfe" + // 0x030FD 0x03099: 0x030FE + "\x04Bd\"\x17A\x10\x9a" + // 0x11099 0x110BA: 0x1109A + "\x04Bl\"\x17A\x10\x9c" + // 0x1109B 0x110BA: 0x1109C + "\x04B\x94\"\x17A\x10\xab" + // 0x110A5 0x110BA: 0x110AB + "\x04D\xc4\"$\xe1\x11." + // 0x11131 0x11127: 0x1112E + "\x04D\xc8\"$\xe1\x11/" + // 0x11132 0x11127: 0x1112F + "\x04M\x1c\"g\xc1\x13K" + // 0x11347 0x1133E: 0x1134B + "\x04M\x1c\"j\xe1\x13L" + // 0x11347 0x11357: 0x1134C + "\x04R\xe4\"\x97A\x14\xbb" + // 0x114B9 0x114BA: 0x114BB + "\x04R\xe4\"\x96\x01\x14\xbc" + // 0x114B9 0x114B0: 0x114BC + "\x04R\xe4\"\x97\xa1\x14\xbe" + // 0x114B9 0x114BD: 0x114BE + "\x04V\xe0\"\xb5\xe1\x15\xba" + // 0x115B8 0x115AF: 0x115BA + "\x04V\xe4\"\xb5\xe1\x15\xbb" + // 0x115B9 0x115AF: 0x115BB + "\x04d\xd4#&\x01\x198" + // 0x11935 0x11930: 0x11938 "" // Total size of tables: 56KB (57068 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go index dfd555fc..c3231891 100644 --- a/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go +++ b/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go @@ -7135,970 +7135,970 @@ var nfkcSparseValues = [980]valueRange{ } // recompMap: 7688 bytes (entries only) -var recompMap map[uint32]rune +var recompMap map[uint64]rune var recompMapOnce sync.Once const recompMapPacked = "" + - "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 - "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 - "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 - "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 - "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 - "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 - "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 - "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 - "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 - "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA - "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB - "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC - "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD - "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE - "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF - "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 - "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 - "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 - "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 - "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 - "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 - "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 - "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA - "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB - "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC - "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD - "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 - "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 - "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 - "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 - "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 - "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 - "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 - "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 - "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 - "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA - "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB - "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC - "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED - "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE - "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF - "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 - "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 - "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 - "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 - "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 - "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 - "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 - "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA - "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB - "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC - "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD - "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF - "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 - "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 - "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 - "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 - "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 - "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 - "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 - "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 - "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 - "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 - "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A - "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B - "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C - "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D - "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E - "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F - "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 - "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 - "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 - "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 - "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 - "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 - "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 - "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 - "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A - "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B - "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C - "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D - "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E - "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F - "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 - "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 - "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 - "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 - "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 - "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 - "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 - "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 - "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A - "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B - "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C - "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D - "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E - "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F - "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 - "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 - "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 - "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 - "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 - "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 - "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A - "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B - "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C - "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D - "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E - "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 - "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 - "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 - "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 - "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 - "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 - "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C - "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D - "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E - "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F - "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 - "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 - "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 - "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 - "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 - "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 - "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 - "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 - "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A - "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B - "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C - "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D - "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E - "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F - "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 - "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 - "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 - "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 - "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 - "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 - "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 - "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 - "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A - "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B - "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C - "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D - "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E - "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F - "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 - "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 - "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 - "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 - "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 - "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 - "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 - "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 - "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 - "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 - "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A - "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B - "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C - "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D - "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E - "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 - "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 - "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF - "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 - "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD - "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE - "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF - "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 - "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 - "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 - "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 - "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 - "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 - "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 - "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 - "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 - "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 - "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA - "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB - "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC - "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE - "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF - "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 - "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 - "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 - "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 - "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 - "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 - "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 - "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 - "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA - "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB - "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC - "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED - "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE - "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF - "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 - "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 - "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 - "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 - "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 - "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA - "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB - "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC - "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD - "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE - "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF - "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 - "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 - "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 - "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 - "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 - "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 - "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 - "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 - "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 - "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 - "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A - "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B - "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C - "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D - "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E - "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F - "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 - "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 - "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 - "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 - "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 - "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 - "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 - "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 - "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 - "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 - "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A - "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B - "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E - "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F - "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 - "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 - "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 - "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 - "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A - "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B - "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C - "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D - "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E - "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F - "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 - "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 - "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 - "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 - "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 - "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 - "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 - "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 - "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A - "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C - "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E - "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F - "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 - "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA - "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB - "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC - "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD - "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE - "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF - "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 - "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA - "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB - "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC - "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD - "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE - "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 - "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 - "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 - "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 - "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 - "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 - "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C - "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D - "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E - "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 - "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 - "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 - "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 - "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 - "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 - "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C - "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D - "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E - "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 - "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 - "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 - "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 - "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 - "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 - "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 - "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 - "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 - "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 - "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA - "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB - "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC - "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD - "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE - "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF - "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 - "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 - "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 - "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 - "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 - "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 - "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA - "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB - "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC - "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED - "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE - "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF - "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 - "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 - "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 - "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 - "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 - "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 - "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 - "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 - "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 - "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 - "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 - "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 - "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 - "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 - "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 - "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 - "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 - "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 - "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 - "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB - "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC - "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 - "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B - "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C - "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 - "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA - "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB - "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC - "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 - "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 - "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 - "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 - "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA - "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB - "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A - "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B - "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C - "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA - "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC - "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD - "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE - "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 - "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 - "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 - "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A - "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C - "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E - "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 - "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B - "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D - "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 - "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 - "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 - "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 - "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 - "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 - "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 - "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 - "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 - "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 - "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 - "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 - "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 - "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A - "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B - "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C - "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D - "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E - "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F - "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 - "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 - "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 - "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 - "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 - "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 - "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 - "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 - "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 - "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 - "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A - "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B - "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C - "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D - "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E - "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F - "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 - "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 - "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 - "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 - "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 - "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 - "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 - "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 - "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 - "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 - "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A - "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B - "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C - "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D - "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E - "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F - "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 - "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 - "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 - "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 - "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 - "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 - "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 - "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 - "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 - "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 - "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A - "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B - "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C - "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D - "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E - "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F - "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 - "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 - "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 - "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 - "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 - "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 - "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 - "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 - "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 - "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 - "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A - "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B - "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C - "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D - "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E - "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F - "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 - "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 - "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 - "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 - "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 - "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 - "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 - "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 - "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 - "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 - "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A - "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B - "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C - "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D - "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E - "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F - "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 - "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 - "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 - "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 - "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 - "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 - "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 - "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 - "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 - "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 - "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A - "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B - "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C - "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D - "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E - "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F - "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 - "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 - "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 - "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 - "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 - "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 - "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 - "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 - "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 - "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 - "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A - "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B - "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C - "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D - "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E - "\x00v\x03#\x00\x00\x1e\x7f" + // 0x00760323: 0x00001E7F - "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 - "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 - "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 - "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 - "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 - "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 - "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 - "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 - "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 - "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 - "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A - "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B - "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C - "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D - "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E - "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F - "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 - "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 - "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 - "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 - "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 - "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 - "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 - "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 - "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 - "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 - "\x01\x7f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B - "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 - "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 - "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 - "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 - "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 - "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 - "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 - "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 - "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 - "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 - "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA - "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB - "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC - "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD - "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE - "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF - "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 - "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 - "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 - "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 - "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 - "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 - "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 - "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 - "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 - "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 - "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA - "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB - "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC - "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD - "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE - "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF - "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 - "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 - "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 - "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 - "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 - "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 - "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 - "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 - "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 - "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 - "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA - "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB - "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC - "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD - "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE - "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF - "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 - "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 - "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 - "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 - "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 - "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 - "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 - "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 - "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 - "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 - "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA - "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB - "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC - "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD - "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE - "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF - "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 - "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 - "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 - "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 - "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 - "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 - "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 - "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 - "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 - "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 - "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA - "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB - "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC - "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED - "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE - "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF - "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 - "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 - "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 - "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 - "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 - "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 - "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 - "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 - "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 - "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 - "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 - "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 - "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 - "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 - "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 - "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 - "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 - "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 - "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 - "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 - "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A - "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B - "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C - "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D - "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E - "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F - "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 - "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 - "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 - "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 - "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 - "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 - "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 - "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 - "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A - "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B - "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C - "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D - "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 - "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 - "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 - "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 - "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 - "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 - "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 - "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 - "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 - "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 - "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A - "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B - "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C - "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D - "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E - "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F - "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 - "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 - "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 - "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 - "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 - "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 - "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 - "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 - "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 - "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 - "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A - "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B - "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C - "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D - "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E - "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F - "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 - "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 - "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 - "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 - "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 - "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 - "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 - "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 - "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A - "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B - "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C - "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D - "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 - "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 - "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 - "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 - "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 - "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 - "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 - "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 - "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 - "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B - "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D - "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F - "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 - "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 - "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 - "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 - "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 - "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 - "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 - "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 - "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 - "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 - "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A - "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B - "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C - "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D - "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E - "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F - "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 - "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 - "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 - "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 - "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 - "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A - "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C - "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 - "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 - "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 - "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 - "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 - "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 - "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 - "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 - "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 - "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 - "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A - "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B - "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C - "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D - "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E - "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F - "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 - "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 - "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 - "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 - "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 - "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 - "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 - "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 - "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 - "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 - "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A - "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B - "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C - "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D - "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E - "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F - "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 - "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 - "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 - "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 - "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 - "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 - "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 - "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 - "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 - "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 - "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA - "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB - "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC - "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD - "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE - "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF - "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 - "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 - "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 - "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 - "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 - "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 - "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 - "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 - "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 - "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA - "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC - "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 - "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 - "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 - "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 - "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 - "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 - "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 - "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA - "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC - "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD - "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE - "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF - "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 - "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 - "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 - "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 - "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 - "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 - "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 - "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA - "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD - "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE - "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF - "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 - "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 - "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 - "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 - "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 - "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 - "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 - "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 - "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 - "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA - "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC - "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED - "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 - "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 - "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 - "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 - "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 - "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 - "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA - "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC - "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A - "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B - "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE - "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD - "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE - "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF - "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 - "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 - "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C - "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 - "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 - "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 - "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 - "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 - "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 - "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 - "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 - "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D - "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E - "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F - "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 - "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 - "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 - "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 - "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 - "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 - "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 - "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 - "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 - "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 - "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 - "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 - "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC - "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD - "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE - "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF - "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 - "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 - "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 - "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 - "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA - "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB - "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC - "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED - "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C - "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E - "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 - "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 - "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 - "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 - "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 - "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A - "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C - "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E - "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 - "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 - "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 - "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 - "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 - "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 - "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 - "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 - "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 - "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 - "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 - "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 - "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A - "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C - "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D - "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 - "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E - "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC - "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE - "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 - "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 - "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 - "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 - "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 - "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA - "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC - "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE - "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 - "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 - "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 - "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 - "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 - "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 - "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 - "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 - "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 - "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 - "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 - "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 - "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA - "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC - "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD - "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 - "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 - "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 - "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 - "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA - "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE - "\x05\xd2\x03\a\x00\x01\x05\xc9" + // 0x05D20307: 0x000105C9 - "\x05\xda\x03\a\x00\x01\x05\xe4" + // 0x05DA0307: 0x000105E4 - "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A - "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C - "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB - "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E - "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F - "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B - "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C - "\x13\x82\x13\xc9\x00\x01\x13\x83" + // 0x138213C9: 0x00011383 - "\x13\x84\x13\xbb\x00\x01\x13\x85" + // 0x138413BB: 0x00011385 - "\x13\x8b\x13\xc2\x00\x01\x13\x8e" + // 0x138B13C2: 0x0001138E - "\x13\x90\x13\xc9\x00\x01\x13\x91" + // 0x139013C9: 0x00011391 - "\x13\xc2\x13\xc2\x00\x01\x13\xc5" + // 0x13C213C2: 0x000113C5 - "\x13\xc2\x13\xb8\x00\x01\x13\xc7" + // 0x13C213B8: 0x000113C7 - "\x13\xc2\x13\xc9\x00\x01\x13\xc8" + // 0x13C213C9: 0x000113C8 - "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB - "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC - "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE - "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA - "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB - "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 - "a\x1ea\x1e\x00\x01a!" + // 0x611E611E: 0x00016121 - "a\x1ea)\x00\x01a\"" + // 0x611E6129: 0x00016122 - "a\x1ea\x1f\x00\x01a#" + // 0x611E611F: 0x00016123 - "a)a\x1f\x00\x01a$" + // 0x6129611F: 0x00016124 - "a\x1ea \x00\x01a%" + // 0x611E6120: 0x00016125 - "a!a\x1f\x00\x01a&" + // 0x6121611F: 0x00016126 - "a\"a\x1f\x00\x01a'" + // 0x6122611F: 0x00016127 - "a!a \x00\x01a(" + // 0x61216120: 0x00016128 - "mgmg\x00\x01mh" + // 0x6D676D67: 0x00016D68 - "mcmg\x00\x01mi" + // 0x6D636D67: 0x00016D69 - "mimg\x00\x01mj" + // 0x6D696D67: 0x00016D6A + "\x00\x01\x04\x00`\x00\x00\xc0" + // 0x00041 0x00300: 0x000C0 + "\x00\x01\x04\x00` \x00\xc1" + // 0x00041 0x00301: 0x000C1 + "\x00\x01\x04\x00`@\x00\xc2" + // 0x00041 0x00302: 0x000C2 + "\x00\x01\x04\x00``\x00\xc3" + // 0x00041 0x00303: 0x000C3 + "\x00\x01\x04\x00a\x00\x00\xc4" + // 0x00041 0x00308: 0x000C4 + "\x00\x01\x04\x00a@\x00\xc5" + // 0x00041 0x0030A: 0x000C5 + "\x00\x01\f\x00d\xe0\x00\xc7" + // 0x00043 0x00327: 0x000C7 + "\x00\x01\x14\x00`\x00\x00\xc8" + // 0x00045 0x00300: 0x000C8 + "\x00\x01\x14\x00` \x00\xc9" + // 0x00045 0x00301: 0x000C9 + "\x00\x01\x14\x00`@\x00\xca" + // 0x00045 0x00302: 0x000CA + "\x00\x01\x14\x00a\x00\x00\xcb" + // 0x00045 0x00308: 0x000CB + "\x00\x01$\x00`\x00\x00\xcc" + // 0x00049 0x00300: 0x000CC + "\x00\x01$\x00` \x00\xcd" + // 0x00049 0x00301: 0x000CD + "\x00\x01$\x00`@\x00\xce" + // 0x00049 0x00302: 0x000CE + "\x00\x01$\x00a\x00\x00\xcf" + // 0x00049 0x00308: 0x000CF + "\x00\x018\x00``\x00\xd1" + // 0x0004E 0x00303: 0x000D1 + "\x00\x01<\x00`\x00\x00\xd2" + // 0x0004F 0x00300: 0x000D2 + "\x00\x01<\x00` \x00\xd3" + // 0x0004F 0x00301: 0x000D3 + "\x00\x01<\x00`@\x00\xd4" + // 0x0004F 0x00302: 0x000D4 + "\x00\x01<\x00``\x00\xd5" + // 0x0004F 0x00303: 0x000D5 + "\x00\x01<\x00a\x00\x00\xd6" + // 0x0004F 0x00308: 0x000D6 + "\x00\x01T\x00`\x00\x00\xd9" + // 0x00055 0x00300: 0x000D9 + "\x00\x01T\x00` \x00\xda" + // 0x00055 0x00301: 0x000DA + "\x00\x01T\x00`@\x00\xdb" + // 0x00055 0x00302: 0x000DB + "\x00\x01T\x00a\x00\x00\xdc" + // 0x00055 0x00308: 0x000DC + "\x00\x01d\x00` \x00\xdd" + // 0x00059 0x00301: 0x000DD + "\x00\x01\x84\x00`\x00\x00\xe0" + // 0x00061 0x00300: 0x000E0 + "\x00\x01\x84\x00` \x00\xe1" + // 0x00061 0x00301: 0x000E1 + "\x00\x01\x84\x00`@\x00\xe2" + // 0x00061 0x00302: 0x000E2 + "\x00\x01\x84\x00``\x00\xe3" + // 0x00061 0x00303: 0x000E3 + "\x00\x01\x84\x00a\x00\x00\xe4" + // 0x00061 0x00308: 0x000E4 + "\x00\x01\x84\x00a@\x00\xe5" + // 0x00061 0x0030A: 0x000E5 + "\x00\x01\x8c\x00d\xe0\x00\xe7" + // 0x00063 0x00327: 0x000E7 + "\x00\x01\x94\x00`\x00\x00\xe8" + // 0x00065 0x00300: 0x000E8 + "\x00\x01\x94\x00` \x00\xe9" + // 0x00065 0x00301: 0x000E9 + "\x00\x01\x94\x00`@\x00\xea" + // 0x00065 0x00302: 0x000EA + "\x00\x01\x94\x00a\x00\x00\xeb" + // 0x00065 0x00308: 0x000EB + "\x00\x01\xa4\x00`\x00\x00\xec" + // 0x00069 0x00300: 0x000EC + "\x00\x01\xa4\x00` \x00\xed" + // 0x00069 0x00301: 0x000ED + "\x00\x01\xa4\x00`@\x00\xee" + // 0x00069 0x00302: 0x000EE + "\x00\x01\xa4\x00a\x00\x00\xef" + // 0x00069 0x00308: 0x000EF + "\x00\x01\xb8\x00``\x00\xf1" + // 0x0006E 0x00303: 0x000F1 + "\x00\x01\xbc\x00`\x00\x00\xf2" + // 0x0006F 0x00300: 0x000F2 + "\x00\x01\xbc\x00` \x00\xf3" + // 0x0006F 0x00301: 0x000F3 + "\x00\x01\xbc\x00`@\x00\xf4" + // 0x0006F 0x00302: 0x000F4 + "\x00\x01\xbc\x00``\x00\xf5" + // 0x0006F 0x00303: 0x000F5 + "\x00\x01\xbc\x00a\x00\x00\xf6" + // 0x0006F 0x00308: 0x000F6 + "\x00\x01\xd4\x00`\x00\x00\xf9" + // 0x00075 0x00300: 0x000F9 + "\x00\x01\xd4\x00` \x00\xfa" + // 0x00075 0x00301: 0x000FA + "\x00\x01\xd4\x00`@\x00\xfb" + // 0x00075 0x00302: 0x000FB + "\x00\x01\xd4\x00a\x00\x00\xfc" + // 0x00075 0x00308: 0x000FC + "\x00\x01\xe4\x00` \x00\xfd" + // 0x00079 0x00301: 0x000FD + "\x00\x01\xe4\x00a\x00\x00\xff" + // 0x00079 0x00308: 0x000FF + "\x00\x01\x04\x00`\x80\x01\x00" + // 0x00041 0x00304: 0x00100 + "\x00\x01\x84\x00`\x80\x01\x01" + // 0x00061 0x00304: 0x00101 + "\x00\x01\x04\x00`\xc0\x01\x02" + // 0x00041 0x00306: 0x00102 + "\x00\x01\x84\x00`\xc0\x01\x03" + // 0x00061 0x00306: 0x00103 + "\x00\x01\x04\x00e\x00\x01\x04" + // 0x00041 0x00328: 0x00104 + "\x00\x01\x84\x00e\x00\x01\x05" + // 0x00061 0x00328: 0x00105 + "\x00\x01\f\x00` \x01\x06" + // 0x00043 0x00301: 0x00106 + "\x00\x01\x8c\x00` \x01\a" + // 0x00063 0x00301: 0x00107 + "\x00\x01\f\x00`@\x01\b" + // 0x00043 0x00302: 0x00108 + "\x00\x01\x8c\x00`@\x01\t" + // 0x00063 0x00302: 0x00109 + "\x00\x01\f\x00`\xe0\x01\n" + // 0x00043 0x00307: 0x0010A + "\x00\x01\x8c\x00`\xe0\x01\v" + // 0x00063 0x00307: 0x0010B + "\x00\x01\f\x00a\x80\x01\f" + // 0x00043 0x0030C: 0x0010C + "\x00\x01\x8c\x00a\x80\x01\r" + // 0x00063 0x0030C: 0x0010D + "\x00\x01\x10\x00a\x80\x01\x0e" + // 0x00044 0x0030C: 0x0010E + "\x00\x01\x90\x00a\x80\x01\x0f" + // 0x00064 0x0030C: 0x0010F + "\x00\x01\x14\x00`\x80\x01\x12" + // 0x00045 0x00304: 0x00112 + "\x00\x01\x94\x00`\x80\x01\x13" + // 0x00065 0x00304: 0x00113 + "\x00\x01\x14\x00`\xc0\x01\x14" + // 0x00045 0x00306: 0x00114 + "\x00\x01\x94\x00`\xc0\x01\x15" + // 0x00065 0x00306: 0x00115 + "\x00\x01\x14\x00`\xe0\x01\x16" + // 0x00045 0x00307: 0x00116 + "\x00\x01\x94\x00`\xe0\x01\x17" + // 0x00065 0x00307: 0x00117 + "\x00\x01\x14\x00e\x00\x01\x18" + // 0x00045 0x00328: 0x00118 + "\x00\x01\x94\x00e\x00\x01\x19" + // 0x00065 0x00328: 0x00119 + "\x00\x01\x14\x00a\x80\x01\x1a" + // 0x00045 0x0030C: 0x0011A + "\x00\x01\x94\x00a\x80\x01\x1b" + // 0x00065 0x0030C: 0x0011B + "\x00\x01\x1c\x00`@\x01\x1c" + // 0x00047 0x00302: 0x0011C + "\x00\x01\x9c\x00`@\x01\x1d" + // 0x00067 0x00302: 0x0011D + "\x00\x01\x1c\x00`\xc0\x01\x1e" + // 0x00047 0x00306: 0x0011E + "\x00\x01\x9c\x00`\xc0\x01\x1f" + // 0x00067 0x00306: 0x0011F + "\x00\x01\x1c\x00`\xe0\x01 " + // 0x00047 0x00307: 0x00120 + "\x00\x01\x9c\x00`\xe0\x01!" + // 0x00067 0x00307: 0x00121 + "\x00\x01\x1c\x00d\xe0\x01\"" + // 0x00047 0x00327: 0x00122 + "\x00\x01\x9c\x00d\xe0\x01#" + // 0x00067 0x00327: 0x00123 + "\x00\x01 \x00`@\x01$" + // 0x00048 0x00302: 0x00124 + "\x00\x01\xa0\x00`@\x01%" + // 0x00068 0x00302: 0x00125 + "\x00\x01$\x00``\x01(" + // 0x00049 0x00303: 0x00128 + "\x00\x01\xa4\x00``\x01)" + // 0x00069 0x00303: 0x00129 + "\x00\x01$\x00`\x80\x01*" + // 0x00049 0x00304: 0x0012A + "\x00\x01\xa4\x00`\x80\x01+" + // 0x00069 0x00304: 0x0012B + "\x00\x01$\x00`\xc0\x01," + // 0x00049 0x00306: 0x0012C + "\x00\x01\xa4\x00`\xc0\x01-" + // 0x00069 0x00306: 0x0012D + "\x00\x01$\x00e\x00\x01." + // 0x00049 0x00328: 0x0012E + "\x00\x01\xa4\x00e\x00\x01/" + // 0x00069 0x00328: 0x0012F + "\x00\x01$\x00`\xe0\x010" + // 0x00049 0x00307: 0x00130 + "\x00\x01(\x00`@\x014" + // 0x0004A 0x00302: 0x00134 + "\x00\x01\xa8\x00`@\x015" + // 0x0006A 0x00302: 0x00135 + "\x00\x01,\x00d\xe0\x016" + // 0x0004B 0x00327: 0x00136 + "\x00\x01\xac\x00d\xe0\x017" + // 0x0006B 0x00327: 0x00137 + "\x00\x010\x00` \x019" + // 0x0004C 0x00301: 0x00139 + "\x00\x01\xb0\x00` \x01:" + // 0x0006C 0x00301: 0x0013A + "\x00\x010\x00d\xe0\x01;" + // 0x0004C 0x00327: 0x0013B + "\x00\x01\xb0\x00d\xe0\x01<" + // 0x0006C 0x00327: 0x0013C + "\x00\x010\x00a\x80\x01=" + // 0x0004C 0x0030C: 0x0013D + "\x00\x01\xb0\x00a\x80\x01>" + // 0x0006C 0x0030C: 0x0013E + "\x00\x018\x00` \x01C" + // 0x0004E 0x00301: 0x00143 + "\x00\x01\xb8\x00` \x01D" + // 0x0006E 0x00301: 0x00144 + "\x00\x018\x00d\xe0\x01E" + // 0x0004E 0x00327: 0x00145 + "\x00\x01\xb8\x00d\xe0\x01F" + // 0x0006E 0x00327: 0x00146 + "\x00\x018\x00a\x80\x01G" + // 0x0004E 0x0030C: 0x00147 + "\x00\x01\xb8\x00a\x80\x01H" + // 0x0006E 0x0030C: 0x00148 + "\x00\x01<\x00`\x80\x01L" + // 0x0004F 0x00304: 0x0014C + "\x00\x01\xbc\x00`\x80\x01M" + // 0x0006F 0x00304: 0x0014D + "\x00\x01<\x00`\xc0\x01N" + // 0x0004F 0x00306: 0x0014E + "\x00\x01\xbc\x00`\xc0\x01O" + // 0x0006F 0x00306: 0x0014F + "\x00\x01<\x00a`\x01P" + // 0x0004F 0x0030B: 0x00150 + "\x00\x01\xbc\x00a`\x01Q" + // 0x0006F 0x0030B: 0x00151 + "\x00\x01H\x00` \x01T" + // 0x00052 0x00301: 0x00154 + "\x00\x01\xc8\x00` \x01U" + // 0x00072 0x00301: 0x00155 + "\x00\x01H\x00d\xe0\x01V" + // 0x00052 0x00327: 0x00156 + "\x00\x01\xc8\x00d\xe0\x01W" + // 0x00072 0x00327: 0x00157 + "\x00\x01H\x00a\x80\x01X" + // 0x00052 0x0030C: 0x00158 + "\x00\x01\xc8\x00a\x80\x01Y" + // 0x00072 0x0030C: 0x00159 + "\x00\x01L\x00` \x01Z" + // 0x00053 0x00301: 0x0015A + "\x00\x01\xcc\x00` \x01[" + // 0x00073 0x00301: 0x0015B + "\x00\x01L\x00`@\x01\\" + // 0x00053 0x00302: 0x0015C + "\x00\x01\xcc\x00`@\x01]" + // 0x00073 0x00302: 0x0015D + "\x00\x01L\x00d\xe0\x01^" + // 0x00053 0x00327: 0x0015E + "\x00\x01\xcc\x00d\xe0\x01_" + // 0x00073 0x00327: 0x0015F + "\x00\x01L\x00a\x80\x01`" + // 0x00053 0x0030C: 0x00160 + "\x00\x01\xcc\x00a\x80\x01a" + // 0x00073 0x0030C: 0x00161 + "\x00\x01P\x00d\xe0\x01b" + // 0x00054 0x00327: 0x00162 + "\x00\x01\xd0\x00d\xe0\x01c" + // 0x00074 0x00327: 0x00163 + "\x00\x01P\x00a\x80\x01d" + // 0x00054 0x0030C: 0x00164 + "\x00\x01\xd0\x00a\x80\x01e" + // 0x00074 0x0030C: 0x00165 + "\x00\x01T\x00``\x01h" + // 0x00055 0x00303: 0x00168 + "\x00\x01\xd4\x00``\x01i" + // 0x00075 0x00303: 0x00169 + "\x00\x01T\x00`\x80\x01j" + // 0x00055 0x00304: 0x0016A + "\x00\x01\xd4\x00`\x80\x01k" + // 0x00075 0x00304: 0x0016B + "\x00\x01T\x00`\xc0\x01l" + // 0x00055 0x00306: 0x0016C + "\x00\x01\xd4\x00`\xc0\x01m" + // 0x00075 0x00306: 0x0016D + "\x00\x01T\x00a@\x01n" + // 0x00055 0x0030A: 0x0016E + "\x00\x01\xd4\x00a@\x01o" + // 0x00075 0x0030A: 0x0016F + "\x00\x01T\x00a`\x01p" + // 0x00055 0x0030B: 0x00170 + "\x00\x01\xd4\x00a`\x01q" + // 0x00075 0x0030B: 0x00171 + "\x00\x01T\x00e\x00\x01r" + // 0x00055 0x00328: 0x00172 + "\x00\x01\xd4\x00e\x00\x01s" + // 0x00075 0x00328: 0x00173 + "\x00\x01\\\x00`@\x01t" + // 0x00057 0x00302: 0x00174 + "\x00\x01\xdc\x00`@\x01u" + // 0x00077 0x00302: 0x00175 + "\x00\x01d\x00`@\x01v" + // 0x00059 0x00302: 0x00176 + "\x00\x01\xe4\x00`@\x01w" + // 0x00079 0x00302: 0x00177 + "\x00\x01d\x00a\x00\x01x" + // 0x00059 0x00308: 0x00178 + "\x00\x01h\x00` \x01y" + // 0x0005A 0x00301: 0x00179 + "\x00\x01\xe8\x00` \x01z" + // 0x0007A 0x00301: 0x0017A + "\x00\x01h\x00`\xe0\x01{" + // 0x0005A 0x00307: 0x0017B + "\x00\x01\xe8\x00`\xe0\x01|" + // 0x0007A 0x00307: 0x0017C + "\x00\x01h\x00a\x80\x01}" + // 0x0005A 0x0030C: 0x0017D + "\x00\x01\xe8\x00a\x80\x01~" + // 0x0007A 0x0030C: 0x0017E + "\x00\x01<\x00c`\x01\xa0" + // 0x0004F 0x0031B: 0x001A0 + "\x00\x01\xbc\x00c`\x01\xa1" + // 0x0006F 0x0031B: 0x001A1 + "\x00\x01T\x00c`\x01\xaf" + // 0x00055 0x0031B: 0x001AF + "\x00\x01\xd4\x00c`\x01\xb0" + // 0x00075 0x0031B: 0x001B0 + "\x00\x01\x04\x00a\x80\x01\xcd" + // 0x00041 0x0030C: 0x001CD + "\x00\x01\x84\x00a\x80\x01\xce" + // 0x00061 0x0030C: 0x001CE + "\x00\x01$\x00a\x80\x01\xcf" + // 0x00049 0x0030C: 0x001CF + "\x00\x01\xa4\x00a\x80\x01\xd0" + // 0x00069 0x0030C: 0x001D0 + "\x00\x01<\x00a\x80\x01\xd1" + // 0x0004F 0x0030C: 0x001D1 + "\x00\x01\xbc\x00a\x80\x01\xd2" + // 0x0006F 0x0030C: 0x001D2 + "\x00\x01T\x00a\x80\x01\xd3" + // 0x00055 0x0030C: 0x001D3 + "\x00\x01\xd4\x00a\x80\x01\xd4" + // 0x00075 0x0030C: 0x001D4 + "\x00\x03p\x00`\x80\x01\xd5" + // 0x000DC 0x00304: 0x001D5 + "\x00\x03\xf0\x00`\x80\x01\xd6" + // 0x000FC 0x00304: 0x001D6 + "\x00\x03p\x00` \x01\xd7" + // 0x000DC 0x00301: 0x001D7 + "\x00\x03\xf0\x00` \x01\xd8" + // 0x000FC 0x00301: 0x001D8 + "\x00\x03p\x00a\x80\x01\xd9" + // 0x000DC 0x0030C: 0x001D9 + "\x00\x03\xf0\x00a\x80\x01\xda" + // 0x000FC 0x0030C: 0x001DA + "\x00\x03p\x00`\x00\x01\xdb" + // 0x000DC 0x00300: 0x001DB + "\x00\x03\xf0\x00`\x00\x01\xdc" + // 0x000FC 0x00300: 0x001DC + "\x00\x03\x10\x00`\x80\x01\xde" + // 0x000C4 0x00304: 0x001DE + "\x00\x03\x90\x00`\x80\x01\xdf" + // 0x000E4 0x00304: 0x001DF + "\x00\b\x98\x00`\x80\x01\xe0" + // 0x00226 0x00304: 0x001E0 + "\x00\b\x9c\x00`\x80\x01\xe1" + // 0x00227 0x00304: 0x001E1 + "\x00\x03\x18\x00`\x80\x01\xe2" + // 0x000C6 0x00304: 0x001E2 + "\x00\x03\x98\x00`\x80\x01\xe3" + // 0x000E6 0x00304: 0x001E3 + "\x00\x01\x1c\x00a\x80\x01\xe6" + // 0x00047 0x0030C: 0x001E6 + "\x00\x01\x9c\x00a\x80\x01\xe7" + // 0x00067 0x0030C: 0x001E7 + "\x00\x01,\x00a\x80\x01\xe8" + // 0x0004B 0x0030C: 0x001E8 + "\x00\x01\xac\x00a\x80\x01\xe9" + // 0x0006B 0x0030C: 0x001E9 + "\x00\x01<\x00e\x00\x01\xea" + // 0x0004F 0x00328: 0x001EA + "\x00\x01\xbc\x00e\x00\x01\xeb" + // 0x0006F 0x00328: 0x001EB + "\x00\a\xa8\x00`\x80\x01\xec" + // 0x001EA 0x00304: 0x001EC + "\x00\a\xac\x00`\x80\x01\xed" + // 0x001EB 0x00304: 0x001ED + "\x00\x06\xdc\x00a\x80\x01\xee" + // 0x001B7 0x0030C: 0x001EE + "\x00\nH\x00a\x80\x01\xef" + // 0x00292 0x0030C: 0x001EF + "\x00\x01\xa8\x00a\x80\x01\xf0" + // 0x0006A 0x0030C: 0x001F0 + "\x00\x01\x1c\x00` \x01\xf4" + // 0x00047 0x00301: 0x001F4 + "\x00\x01\x9c\x00` \x01\xf5" + // 0x00067 0x00301: 0x001F5 + "\x00\x018\x00`\x00\x01\xf8" + // 0x0004E 0x00300: 0x001F8 + "\x00\x01\xb8\x00`\x00\x01\xf9" + // 0x0006E 0x00300: 0x001F9 + "\x00\x03\x14\x00` \x01\xfa" + // 0x000C5 0x00301: 0x001FA + "\x00\x03\x94\x00` \x01\xfb" + // 0x000E5 0x00301: 0x001FB + "\x00\x03\x18\x00` \x01\xfc" + // 0x000C6 0x00301: 0x001FC + "\x00\x03\x98\x00` \x01\xfd" + // 0x000E6 0x00301: 0x001FD + "\x00\x03`\x00` \x01\xfe" + // 0x000D8 0x00301: 0x001FE + "\x00\x03\xe0\x00` \x01\xff" + // 0x000F8 0x00301: 0x001FF + "\x00\x01\x04\x00a\xe0\x02\x00" + // 0x00041 0x0030F: 0x00200 + "\x00\x01\x84\x00a\xe0\x02\x01" + // 0x00061 0x0030F: 0x00201 + "\x00\x01\x04\x00b \x02\x02" + // 0x00041 0x00311: 0x00202 + "\x00\x01\x84\x00b \x02\x03" + // 0x00061 0x00311: 0x00203 + "\x00\x01\x14\x00a\xe0\x02\x04" + // 0x00045 0x0030F: 0x00204 + "\x00\x01\x94\x00a\xe0\x02\x05" + // 0x00065 0x0030F: 0x00205 + "\x00\x01\x14\x00b \x02\x06" + // 0x00045 0x00311: 0x00206 + "\x00\x01\x94\x00b \x02\a" + // 0x00065 0x00311: 0x00207 + "\x00\x01$\x00a\xe0\x02\b" + // 0x00049 0x0030F: 0x00208 + "\x00\x01\xa4\x00a\xe0\x02\t" + // 0x00069 0x0030F: 0x00209 + "\x00\x01$\x00b \x02\n" + // 0x00049 0x00311: 0x0020A + "\x00\x01\xa4\x00b \x02\v" + // 0x00069 0x00311: 0x0020B + "\x00\x01<\x00a\xe0\x02\f" + // 0x0004F 0x0030F: 0x0020C + "\x00\x01\xbc\x00a\xe0\x02\r" + // 0x0006F 0x0030F: 0x0020D + "\x00\x01<\x00b \x02\x0e" + // 0x0004F 0x00311: 0x0020E + "\x00\x01\xbc\x00b \x02\x0f" + // 0x0006F 0x00311: 0x0020F + "\x00\x01H\x00a\xe0\x02\x10" + // 0x00052 0x0030F: 0x00210 + "\x00\x01\xc8\x00a\xe0\x02\x11" + // 0x00072 0x0030F: 0x00211 + "\x00\x01H\x00b \x02\x12" + // 0x00052 0x00311: 0x00212 + "\x00\x01\xc8\x00b \x02\x13" + // 0x00072 0x00311: 0x00213 + "\x00\x01T\x00a\xe0\x02\x14" + // 0x00055 0x0030F: 0x00214 + "\x00\x01\xd4\x00a\xe0\x02\x15" + // 0x00075 0x0030F: 0x00215 + "\x00\x01T\x00b \x02\x16" + // 0x00055 0x00311: 0x00216 + "\x00\x01\xd4\x00b \x02\x17" + // 0x00075 0x00311: 0x00217 + "\x00\x01L\x00d\xc0\x02\x18" + // 0x00053 0x00326: 0x00218 + "\x00\x01\xcc\x00d\xc0\x02\x19" + // 0x00073 0x00326: 0x00219 + "\x00\x01P\x00d\xc0\x02\x1a" + // 0x00054 0x00326: 0x0021A + "\x00\x01\xd0\x00d\xc0\x02\x1b" + // 0x00074 0x00326: 0x0021B + "\x00\x01 \x00a\x80\x02\x1e" + // 0x00048 0x0030C: 0x0021E + "\x00\x01\xa0\x00a\x80\x02\x1f" + // 0x00068 0x0030C: 0x0021F + "\x00\x01\x04\x00`\xe0\x02&" + // 0x00041 0x00307: 0x00226 + "\x00\x01\x84\x00`\xe0\x02'" + // 0x00061 0x00307: 0x00227 + "\x00\x01\x14\x00d\xe0\x02(" + // 0x00045 0x00327: 0x00228 + "\x00\x01\x94\x00d\xe0\x02)" + // 0x00065 0x00327: 0x00229 + "\x00\x03X\x00`\x80\x02*" + // 0x000D6 0x00304: 0x0022A + "\x00\x03\xd8\x00`\x80\x02+" + // 0x000F6 0x00304: 0x0022B + "\x00\x03T\x00`\x80\x02," + // 0x000D5 0x00304: 0x0022C + "\x00\x03\xd4\x00`\x80\x02-" + // 0x000F5 0x00304: 0x0022D + "\x00\x01<\x00`\xe0\x02." + // 0x0004F 0x00307: 0x0022E + "\x00\x01\xbc\x00`\xe0\x02/" + // 0x0006F 0x00307: 0x0022F + "\x00\b\xb8\x00`\x80\x020" + // 0x0022E 0x00304: 0x00230 + "\x00\b\xbc\x00`\x80\x021" + // 0x0022F 0x00304: 0x00231 + "\x00\x01d\x00`\x80\x022" + // 0x00059 0x00304: 0x00232 + "\x00\x01\xe4\x00`\x80\x023" + // 0x00079 0x00304: 0x00233 + "\x00\x02\xa0\x00` \x03\x85" + // 0x000A8 0x00301: 0x00385 + "\x00\x0eD\x00` \x03\x86" + // 0x00391 0x00301: 0x00386 + "\x00\x0eT\x00` \x03\x88" + // 0x00395 0x00301: 0x00388 + "\x00\x0e\\\x00` \x03\x89" + // 0x00397 0x00301: 0x00389 + "\x00\x0ed\x00` \x03\x8a" + // 0x00399 0x00301: 0x0038A + "\x00\x0e|\x00` \x03\x8c" + // 0x0039F 0x00301: 0x0038C + "\x00\x0e\x94\x00` \x03\x8e" + // 0x003A5 0x00301: 0x0038E + "\x00\x0e\xa4\x00` \x03\x8f" + // 0x003A9 0x00301: 0x0038F + "\x00\x0f(\x00` \x03\x90" + // 0x003CA 0x00301: 0x00390 + "\x00\x0ed\x00a\x00\x03\xaa" + // 0x00399 0x00308: 0x003AA + "\x00\x0e\x94\x00a\x00\x03\xab" + // 0x003A5 0x00308: 0x003AB + "\x00\x0e\xc4\x00` \x03\xac" + // 0x003B1 0x00301: 0x003AC + "\x00\x0e\xd4\x00` \x03\xad" + // 0x003B5 0x00301: 0x003AD + "\x00\x0e\xdc\x00` \x03\xae" + // 0x003B7 0x00301: 0x003AE + "\x00\x0e\xe4\x00` \x03\xaf" + // 0x003B9 0x00301: 0x003AF + "\x00\x0f,\x00` \x03\xb0" + // 0x003CB 0x00301: 0x003B0 + "\x00\x0e\xe4\x00a\x00\x03\xca" + // 0x003B9 0x00308: 0x003CA + "\x00\x0f\x14\x00a\x00\x03\xcb" + // 0x003C5 0x00308: 0x003CB + "\x00\x0e\xfc\x00` \x03\xcc" + // 0x003BF 0x00301: 0x003CC + "\x00\x0f\x14\x00` \x03\xcd" + // 0x003C5 0x00301: 0x003CD + "\x00\x0f$\x00` \x03\xce" + // 0x003C9 0x00301: 0x003CE + "\x00\x0fH\x00` \x03\xd3" + // 0x003D2 0x00301: 0x003D3 + "\x00\x0fH\x00a\x00\x03\xd4" + // 0x003D2 0x00308: 0x003D4 + "\x00\x10T\x00`\x00\x04\x00" + // 0x00415 0x00300: 0x00400 + "\x00\x10T\x00a\x00\x04\x01" + // 0x00415 0x00308: 0x00401 + "\x00\x10L\x00` \x04\x03" + // 0x00413 0x00301: 0x00403 + "\x00\x10\x18\x00a\x00\x04\a" + // 0x00406 0x00308: 0x00407 + "\x00\x10h\x00` \x04\f" + // 0x0041A 0x00301: 0x0040C + "\x00\x10`\x00`\x00\x04\r" + // 0x00418 0x00300: 0x0040D + "\x00\x10\x8c\x00`\xc0\x04\x0e" + // 0x00423 0x00306: 0x0040E + "\x00\x10`\x00`\xc0\x04\x19" + // 0x00418 0x00306: 0x00419 + "\x00\x10\xe0\x00`\xc0\x049" + // 0x00438 0x00306: 0x00439 + "\x00\x10\xd4\x00`\x00\x04P" + // 0x00435 0x00300: 0x00450 + "\x00\x10\xd4\x00a\x00\x04Q" + // 0x00435 0x00308: 0x00451 + "\x00\x10\xcc\x00` \x04S" + // 0x00433 0x00301: 0x00453 + "\x00\x11X\x00a\x00\x04W" + // 0x00456 0x00308: 0x00457 + "\x00\x10\xe8\x00` \x04\\" + // 0x0043A 0x00301: 0x0045C + "\x00\x10\xe0\x00`\x00\x04]" + // 0x00438 0x00300: 0x0045D + "\x00\x11\f\x00`\xc0\x04^" + // 0x00443 0x00306: 0x0045E + "\x00\x11\xd0\x00a\xe0\x04v" + // 0x00474 0x0030F: 0x00476 + "\x00\x11\xd4\x00a\xe0\x04w" + // 0x00475 0x0030F: 0x00477 + "\x00\x10X\x00`\xc0\x04\xc1" + // 0x00416 0x00306: 0x004C1 + "\x00\x10\xd8\x00`\xc0\x04\xc2" + // 0x00436 0x00306: 0x004C2 + "\x00\x10@\x00`\xc0\x04\xd0" + // 0x00410 0x00306: 0x004D0 + "\x00\x10\xc0\x00`\xc0\x04\xd1" + // 0x00430 0x00306: 0x004D1 + "\x00\x10@\x00a\x00\x04\xd2" + // 0x00410 0x00308: 0x004D2 + "\x00\x10\xc0\x00a\x00\x04\xd3" + // 0x00430 0x00308: 0x004D3 + "\x00\x10T\x00`\xc0\x04\xd6" + // 0x00415 0x00306: 0x004D6 + "\x00\x10\xd4\x00`\xc0\x04\xd7" + // 0x00435 0x00306: 0x004D7 + "\x00\x13`\x00a\x00\x04\xda" + // 0x004D8 0x00308: 0x004DA + "\x00\x13d\x00a\x00\x04\xdb" + // 0x004D9 0x00308: 0x004DB + "\x00\x10X\x00a\x00\x04\xdc" + // 0x00416 0x00308: 0x004DC + "\x00\x10\xd8\x00a\x00\x04\xdd" + // 0x00436 0x00308: 0x004DD + "\x00\x10\\\x00a\x00\x04\xde" + // 0x00417 0x00308: 0x004DE + "\x00\x10\xdc\x00a\x00\x04\xdf" + // 0x00437 0x00308: 0x004DF + "\x00\x10`\x00`\x80\x04\xe2" + // 0x00418 0x00304: 0x004E2 + "\x00\x10\xe0\x00`\x80\x04\xe3" + // 0x00438 0x00304: 0x004E3 + "\x00\x10`\x00a\x00\x04\xe4" + // 0x00418 0x00308: 0x004E4 + "\x00\x10\xe0\x00a\x00\x04\xe5" + // 0x00438 0x00308: 0x004E5 + "\x00\x10x\x00a\x00\x04\xe6" + // 0x0041E 0x00308: 0x004E6 + "\x00\x10\xf8\x00a\x00\x04\xe7" + // 0x0043E 0x00308: 0x004E7 + "\x00\x13\xa0\x00a\x00\x04\xea" + // 0x004E8 0x00308: 0x004EA + "\x00\x13\xa4\x00a\x00\x04\xeb" + // 0x004E9 0x00308: 0x004EB + "\x00\x10\xb4\x00a\x00\x04\xec" + // 0x0042D 0x00308: 0x004EC + "\x00\x114\x00a\x00\x04\xed" + // 0x0044D 0x00308: 0x004ED + "\x00\x10\x8c\x00`\x80\x04\xee" + // 0x00423 0x00304: 0x004EE + "\x00\x11\f\x00`\x80\x04\xef" + // 0x00443 0x00304: 0x004EF + "\x00\x10\x8c\x00a\x00\x04\xf0" + // 0x00423 0x00308: 0x004F0 + "\x00\x11\f\x00a\x00\x04\xf1" + // 0x00443 0x00308: 0x004F1 + "\x00\x10\x8c\x00a`\x04\xf2" + // 0x00423 0x0030B: 0x004F2 + "\x00\x11\f\x00a`\x04\xf3" + // 0x00443 0x0030B: 0x004F3 + "\x00\x10\x9c\x00a\x00\x04\xf4" + // 0x00427 0x00308: 0x004F4 + "\x00\x11\x1c\x00a\x00\x04\xf5" + // 0x00447 0x00308: 0x004F5 + "\x00\x10\xac\x00a\x00\x04\xf8" + // 0x0042B 0x00308: 0x004F8 + "\x00\x11,\x00a\x00\x04\xf9" + // 0x0044B 0x00308: 0x004F9 + "\x00\x18\x9c\x00\xca`\x06\"" + // 0x00627 0x00653: 0x00622 + "\x00\x18\x9c\x00ʀ\x06#" + // 0x00627 0x00654: 0x00623 + "\x00\x19 \x00ʀ\x06$" + // 0x00648 0x00654: 0x00624 + "\x00\x18\x9c\x00ʠ\x06%" + // 0x00627 0x00655: 0x00625 + "\x00\x19(\x00ʀ\x06&" + // 0x0064A 0x00654: 0x00626 + "\x00\x1bT\x00ʀ\x06\xc0" + // 0x006D5 0x00654: 0x006C0 + "\x00\x1b\x04\x00ʀ\x06\xc2" + // 0x006C1 0x00654: 0x006C2 + "\x00\x1bH\x00ʀ\x06\xd3" + // 0x006D2 0x00654: 0x006D3 + "\x00$\xa0\x01'\x80\t)" + // 0x00928 0x0093C: 0x00929 + "\x00$\xc0\x01'\x80\t1" + // 0x00930 0x0093C: 0x00931 + "\x00$\xcc\x01'\x80\t4" + // 0x00933 0x0093C: 0x00934 + "\x00'\x1c\x017\xc0\t\xcb" + // 0x009C7 0x009BE: 0x009CB + "\x00'\x1c\x01:\xe0\t\xcc" + // 0x009C7 0x009D7: 0x009CC + "\x00-\x1c\x01j\xc0\vH" + // 0x00B47 0x00B56: 0x00B48 + "\x00-\x1c\x01g\xc0\vK" + // 0x00B47 0x00B3E: 0x00B4B + "\x00-\x1c\x01j\xe0\vL" + // 0x00B47 0x00B57: 0x00B4C + "\x00.H\x01z\xe0\v\x94" + // 0x00B92 0x00BD7: 0x00B94 + "\x00/\x18\x01w\xc0\v\xca" + // 0x00BC6 0x00BBE: 0x00BCA + "\x00/\x1c\x01w\xc0\v\xcb" + // 0x00BC7 0x00BBE: 0x00BCB + "\x00/\x18\x01z\xe0\v\xcc" + // 0x00BC6 0x00BD7: 0x00BCC + "\x001\x18\x01\x8a\xc0\fH" + // 0x00C46 0x00C56: 0x00C48 + "\x002\xfc\x01\x9a\xa0\f\xc0" + // 0x00CBF 0x00CD5: 0x00CC0 + "\x003\x18\x01\x9a\xa0\f\xc7" + // 0x00CC6 0x00CD5: 0x00CC7 + "\x003\x18\x01\x9a\xc0\f\xc8" + // 0x00CC6 0x00CD6: 0x00CC8 + "\x003\x18\x01\x98@\f\xca" + // 0x00CC6 0x00CC2: 0x00CCA + "\x003(\x01\x9a\xa0\f\xcb" + // 0x00CCA 0x00CD5: 0x00CCB + "\x005\x18\x01\xa7\xc0\rJ" + // 0x00D46 0x00D3E: 0x00D4A + "\x005\x1c\x01\xa7\xc0\rK" + // 0x00D47 0x00D3E: 0x00D4B + "\x005\x18\x01\xaa\xe0\rL" + // 0x00D46 0x00D57: 0x00D4C + "\x007d\x01\xb9@\r\xda" + // 0x00DD9 0x00DCA: 0x00DDA + "\x007d\x01\xb9\xe0\r\xdc" + // 0x00DD9 0x00DCF: 0x00DDC + "\x007p\x01\xb9@\r\xdd" + // 0x00DDC 0x00DCA: 0x00DDD + "\x007d\x01\xbb\xe0\r\xde" + // 0x00DD9 0x00DDF: 0x00DDE + "\x00@\x94\x02\x05\xc0\x10&" + // 0x01025 0x0102E: 0x01026 + "\x00l\x14\x03f\xa0\x1b\x06" + // 0x01B05 0x01B35: 0x01B06 + "\x00l\x1c\x03f\xa0\x1b\b" + // 0x01B07 0x01B35: 0x01B08 + "\x00l$\x03f\xa0\x1b\n" + // 0x01B09 0x01B35: 0x01B0A + "\x00l,\x03f\xa0\x1b\f" + // 0x01B0B 0x01B35: 0x01B0C + "\x00l4\x03f\xa0\x1b\x0e" + // 0x01B0D 0x01B35: 0x01B0E + "\x00lD\x03f\xa0\x1b\x12" + // 0x01B11 0x01B35: 0x01B12 + "\x00l\xe8\x03f\xa0\x1b;" + // 0x01B3A 0x01B35: 0x01B3B + "\x00l\xf0\x03f\xa0\x1b=" + // 0x01B3C 0x01B35: 0x01B3D + "\x00l\xf8\x03f\xa0\x1b@" + // 0x01B3E 0x01B35: 0x01B40 + "\x00l\xfc\x03f\xa0\x1bA" + // 0x01B3F 0x01B35: 0x01B41 + "\x00m\b\x03f\xa0\x1bC" + // 0x01B42 0x01B35: 0x01B43 + "\x00\x01\x04\x00d\xa0\x1e\x00" + // 0x00041 0x00325: 0x01E00 + "\x00\x01\x84\x00d\xa0\x1e\x01" + // 0x00061 0x00325: 0x01E01 + "\x00\x01\b\x00`\xe0\x1e\x02" + // 0x00042 0x00307: 0x01E02 + "\x00\x01\x88\x00`\xe0\x1e\x03" + // 0x00062 0x00307: 0x01E03 + "\x00\x01\b\x00d`\x1e\x04" + // 0x00042 0x00323: 0x01E04 + "\x00\x01\x88\x00d`\x1e\x05" + // 0x00062 0x00323: 0x01E05 + "\x00\x01\b\x00f \x1e\x06" + // 0x00042 0x00331: 0x01E06 + "\x00\x01\x88\x00f \x1e\a" + // 0x00062 0x00331: 0x01E07 + "\x00\x03\x1c\x00` \x1e\b" + // 0x000C7 0x00301: 0x01E08 + "\x00\x03\x9c\x00` \x1e\t" + // 0x000E7 0x00301: 0x01E09 + "\x00\x01\x10\x00`\xe0\x1e\n" + // 0x00044 0x00307: 0x01E0A + "\x00\x01\x90\x00`\xe0\x1e\v" + // 0x00064 0x00307: 0x01E0B + "\x00\x01\x10\x00d`\x1e\f" + // 0x00044 0x00323: 0x01E0C + "\x00\x01\x90\x00d`\x1e\r" + // 0x00064 0x00323: 0x01E0D + "\x00\x01\x10\x00f \x1e\x0e" + // 0x00044 0x00331: 0x01E0E + "\x00\x01\x90\x00f \x1e\x0f" + // 0x00064 0x00331: 0x01E0F + "\x00\x01\x10\x00d\xe0\x1e\x10" + // 0x00044 0x00327: 0x01E10 + "\x00\x01\x90\x00d\xe0\x1e\x11" + // 0x00064 0x00327: 0x01E11 + "\x00\x01\x10\x00e\xa0\x1e\x12" + // 0x00044 0x0032D: 0x01E12 + "\x00\x01\x90\x00e\xa0\x1e\x13" + // 0x00064 0x0032D: 0x01E13 + "\x00\x04H\x00`\x00\x1e\x14" + // 0x00112 0x00300: 0x01E14 + "\x00\x04L\x00`\x00\x1e\x15" + // 0x00113 0x00300: 0x01E15 + "\x00\x04H\x00` \x1e\x16" + // 0x00112 0x00301: 0x01E16 + "\x00\x04L\x00` \x1e\x17" + // 0x00113 0x00301: 0x01E17 + "\x00\x01\x14\x00e\xa0\x1e\x18" + // 0x00045 0x0032D: 0x01E18 + "\x00\x01\x94\x00e\xa0\x1e\x19" + // 0x00065 0x0032D: 0x01E19 + "\x00\x01\x14\x00f\x00\x1e\x1a" + // 0x00045 0x00330: 0x01E1A + "\x00\x01\x94\x00f\x00\x1e\x1b" + // 0x00065 0x00330: 0x01E1B + "\x00\b\xa0\x00`\xc0\x1e\x1c" + // 0x00228 0x00306: 0x01E1C + "\x00\b\xa4\x00`\xc0\x1e\x1d" + // 0x00229 0x00306: 0x01E1D + "\x00\x01\x18\x00`\xe0\x1e\x1e" + // 0x00046 0x00307: 0x01E1E + "\x00\x01\x98\x00`\xe0\x1e\x1f" + // 0x00066 0x00307: 0x01E1F + "\x00\x01\x1c\x00`\x80\x1e " + // 0x00047 0x00304: 0x01E20 + "\x00\x01\x9c\x00`\x80\x1e!" + // 0x00067 0x00304: 0x01E21 + "\x00\x01 \x00`\xe0\x1e\"" + // 0x00048 0x00307: 0x01E22 + "\x00\x01\xa0\x00`\xe0\x1e#" + // 0x00068 0x00307: 0x01E23 + "\x00\x01 \x00d`\x1e$" + // 0x00048 0x00323: 0x01E24 + "\x00\x01\xa0\x00d`\x1e%" + // 0x00068 0x00323: 0x01E25 + "\x00\x01 \x00a\x00\x1e&" + // 0x00048 0x00308: 0x01E26 + "\x00\x01\xa0\x00a\x00\x1e'" + // 0x00068 0x00308: 0x01E27 + "\x00\x01 \x00d\xe0\x1e(" + // 0x00048 0x00327: 0x01E28 + "\x00\x01\xa0\x00d\xe0\x1e)" + // 0x00068 0x00327: 0x01E29 + "\x00\x01 \x00e\xc0\x1e*" + // 0x00048 0x0032E: 0x01E2A + "\x00\x01\xa0\x00e\xc0\x1e+" + // 0x00068 0x0032E: 0x01E2B + "\x00\x01$\x00f\x00\x1e," + // 0x00049 0x00330: 0x01E2C + "\x00\x01\xa4\x00f\x00\x1e-" + // 0x00069 0x00330: 0x01E2D + "\x00\x03<\x00` \x1e." + // 0x000CF 0x00301: 0x01E2E + "\x00\x03\xbc\x00` \x1e/" + // 0x000EF 0x00301: 0x01E2F + "\x00\x01,\x00` \x1e0" + // 0x0004B 0x00301: 0x01E30 + "\x00\x01\xac\x00` \x1e1" + // 0x0006B 0x00301: 0x01E31 + "\x00\x01,\x00d`\x1e2" + // 0x0004B 0x00323: 0x01E32 + "\x00\x01\xac\x00d`\x1e3" + // 0x0006B 0x00323: 0x01E33 + "\x00\x01,\x00f \x1e4" + // 0x0004B 0x00331: 0x01E34 + "\x00\x01\xac\x00f \x1e5" + // 0x0006B 0x00331: 0x01E35 + "\x00\x010\x00d`\x1e6" + // 0x0004C 0x00323: 0x01E36 + "\x00\x01\xb0\x00d`\x1e7" + // 0x0006C 0x00323: 0x01E37 + "\x00x\xd8\x00`\x80\x1e8" + // 0x01E36 0x00304: 0x01E38 + "\x00x\xdc\x00`\x80\x1e9" + // 0x01E37 0x00304: 0x01E39 + "\x00\x010\x00f \x1e:" + // 0x0004C 0x00331: 0x01E3A + "\x00\x01\xb0\x00f \x1e;" + // 0x0006C 0x00331: 0x01E3B + "\x00\x010\x00e\xa0\x1e<" + // 0x0004C 0x0032D: 0x01E3C + "\x00\x01\xb0\x00e\xa0\x1e=" + // 0x0006C 0x0032D: 0x01E3D + "\x00\x014\x00` \x1e>" + // 0x0004D 0x00301: 0x01E3E + "\x00\x01\xb4\x00` \x1e?" + // 0x0006D 0x00301: 0x01E3F + "\x00\x014\x00`\xe0\x1e@" + // 0x0004D 0x00307: 0x01E40 + "\x00\x01\xb4\x00`\xe0\x1eA" + // 0x0006D 0x00307: 0x01E41 + "\x00\x014\x00d`\x1eB" + // 0x0004D 0x00323: 0x01E42 + "\x00\x01\xb4\x00d`\x1eC" + // 0x0006D 0x00323: 0x01E43 + "\x00\x018\x00`\xe0\x1eD" + // 0x0004E 0x00307: 0x01E44 + "\x00\x01\xb8\x00`\xe0\x1eE" + // 0x0006E 0x00307: 0x01E45 + "\x00\x018\x00d`\x1eF" + // 0x0004E 0x00323: 0x01E46 + "\x00\x01\xb8\x00d`\x1eG" + // 0x0006E 0x00323: 0x01E47 + "\x00\x018\x00f \x1eH" + // 0x0004E 0x00331: 0x01E48 + "\x00\x01\xb8\x00f \x1eI" + // 0x0006E 0x00331: 0x01E49 + "\x00\x018\x00e\xa0\x1eJ" + // 0x0004E 0x0032D: 0x01E4A + "\x00\x01\xb8\x00e\xa0\x1eK" + // 0x0006E 0x0032D: 0x01E4B + "\x00\x03T\x00` \x1eL" + // 0x000D5 0x00301: 0x01E4C + "\x00\x03\xd4\x00` \x1eM" + // 0x000F5 0x00301: 0x01E4D + "\x00\x03T\x00a\x00\x1eN" + // 0x000D5 0x00308: 0x01E4E + "\x00\x03\xd4\x00a\x00\x1eO" + // 0x000F5 0x00308: 0x01E4F + "\x00\x050\x00`\x00\x1eP" + // 0x0014C 0x00300: 0x01E50 + "\x00\x054\x00`\x00\x1eQ" + // 0x0014D 0x00300: 0x01E51 + "\x00\x050\x00` \x1eR" + // 0x0014C 0x00301: 0x01E52 + "\x00\x054\x00` \x1eS" + // 0x0014D 0x00301: 0x01E53 + "\x00\x01@\x00` \x1eT" + // 0x00050 0x00301: 0x01E54 + "\x00\x01\xc0\x00` \x1eU" + // 0x00070 0x00301: 0x01E55 + "\x00\x01@\x00`\xe0\x1eV" + // 0x00050 0x00307: 0x01E56 + "\x00\x01\xc0\x00`\xe0\x1eW" + // 0x00070 0x00307: 0x01E57 + "\x00\x01H\x00`\xe0\x1eX" + // 0x00052 0x00307: 0x01E58 + "\x00\x01\xc8\x00`\xe0\x1eY" + // 0x00072 0x00307: 0x01E59 + "\x00\x01H\x00d`\x1eZ" + // 0x00052 0x00323: 0x01E5A + "\x00\x01\xc8\x00d`\x1e[" + // 0x00072 0x00323: 0x01E5B + "\x00yh\x00`\x80\x1e\\" + // 0x01E5A 0x00304: 0x01E5C + "\x00yl\x00`\x80\x1e]" + // 0x01E5B 0x00304: 0x01E5D + "\x00\x01H\x00f \x1e^" + // 0x00052 0x00331: 0x01E5E + "\x00\x01\xc8\x00f \x1e_" + // 0x00072 0x00331: 0x01E5F + "\x00\x01L\x00`\xe0\x1e`" + // 0x00053 0x00307: 0x01E60 + "\x00\x01\xcc\x00`\xe0\x1ea" + // 0x00073 0x00307: 0x01E61 + "\x00\x01L\x00d`\x1eb" + // 0x00053 0x00323: 0x01E62 + "\x00\x01\xcc\x00d`\x1ec" + // 0x00073 0x00323: 0x01E63 + "\x00\x05h\x00`\xe0\x1ed" + // 0x0015A 0x00307: 0x01E64 + "\x00\x05l\x00`\xe0\x1ee" + // 0x0015B 0x00307: 0x01E65 + "\x00\x05\x80\x00`\xe0\x1ef" + // 0x00160 0x00307: 0x01E66 + "\x00\x05\x84\x00`\xe0\x1eg" + // 0x00161 0x00307: 0x01E67 + "\x00y\x88\x00`\xe0\x1eh" + // 0x01E62 0x00307: 0x01E68 + "\x00y\x8c\x00`\xe0\x1ei" + // 0x01E63 0x00307: 0x01E69 + "\x00\x01P\x00`\xe0\x1ej" + // 0x00054 0x00307: 0x01E6A + "\x00\x01\xd0\x00`\xe0\x1ek" + // 0x00074 0x00307: 0x01E6B + "\x00\x01P\x00d`\x1el" + // 0x00054 0x00323: 0x01E6C + "\x00\x01\xd0\x00d`\x1em" + // 0x00074 0x00323: 0x01E6D + "\x00\x01P\x00f \x1en" + // 0x00054 0x00331: 0x01E6E + "\x00\x01\xd0\x00f \x1eo" + // 0x00074 0x00331: 0x01E6F + "\x00\x01P\x00e\xa0\x1ep" + // 0x00054 0x0032D: 0x01E70 + "\x00\x01\xd0\x00e\xa0\x1eq" + // 0x00074 0x0032D: 0x01E71 + "\x00\x01T\x00d\x80\x1er" + // 0x00055 0x00324: 0x01E72 + "\x00\x01\xd4\x00d\x80\x1es" + // 0x00075 0x00324: 0x01E73 + "\x00\x01T\x00f\x00\x1et" + // 0x00055 0x00330: 0x01E74 + "\x00\x01\xd4\x00f\x00\x1eu" + // 0x00075 0x00330: 0x01E75 + "\x00\x01T\x00e\xa0\x1ev" + // 0x00055 0x0032D: 0x01E76 + "\x00\x01\xd4\x00e\xa0\x1ew" + // 0x00075 0x0032D: 0x01E77 + "\x00\x05\xa0\x00` \x1ex" + // 0x00168 0x00301: 0x01E78 + "\x00\x05\xa4\x00` \x1ey" + // 0x00169 0x00301: 0x01E79 + "\x00\x05\xa8\x00a\x00\x1ez" + // 0x0016A 0x00308: 0x01E7A + "\x00\x05\xac\x00a\x00\x1e{" + // 0x0016B 0x00308: 0x01E7B + "\x00\x01X\x00``\x1e|" + // 0x00056 0x00303: 0x01E7C + "\x00\x01\xd8\x00``\x1e}" + // 0x00076 0x00303: 0x01E7D + "\x00\x01X\x00d`\x1e~" + // 0x00056 0x00323: 0x01E7E + "\x00\x01\xd8\x00d`\x1e\x7f" + // 0x00076 0x00323: 0x01E7F + "\x00\x01\\\x00`\x00\x1e\x80" + // 0x00057 0x00300: 0x01E80 + "\x00\x01\xdc\x00`\x00\x1e\x81" + // 0x00077 0x00300: 0x01E81 + "\x00\x01\\\x00` \x1e\x82" + // 0x00057 0x00301: 0x01E82 + "\x00\x01\xdc\x00` \x1e\x83" + // 0x00077 0x00301: 0x01E83 + "\x00\x01\\\x00a\x00\x1e\x84" + // 0x00057 0x00308: 0x01E84 + "\x00\x01\xdc\x00a\x00\x1e\x85" + // 0x00077 0x00308: 0x01E85 + "\x00\x01\\\x00`\xe0\x1e\x86" + // 0x00057 0x00307: 0x01E86 + "\x00\x01\xdc\x00`\xe0\x1e\x87" + // 0x00077 0x00307: 0x01E87 + "\x00\x01\\\x00d`\x1e\x88" + // 0x00057 0x00323: 0x01E88 + "\x00\x01\xdc\x00d`\x1e\x89" + // 0x00077 0x00323: 0x01E89 + "\x00\x01`\x00`\xe0\x1e\x8a" + // 0x00058 0x00307: 0x01E8A + "\x00\x01\xe0\x00`\xe0\x1e\x8b" + // 0x00078 0x00307: 0x01E8B + "\x00\x01`\x00a\x00\x1e\x8c" + // 0x00058 0x00308: 0x01E8C + "\x00\x01\xe0\x00a\x00\x1e\x8d" + // 0x00078 0x00308: 0x01E8D + "\x00\x01d\x00`\xe0\x1e\x8e" + // 0x00059 0x00307: 0x01E8E + "\x00\x01\xe4\x00`\xe0\x1e\x8f" + // 0x00079 0x00307: 0x01E8F + "\x00\x01h\x00`@\x1e\x90" + // 0x0005A 0x00302: 0x01E90 + "\x00\x01\xe8\x00`@\x1e\x91" + // 0x0007A 0x00302: 0x01E91 + "\x00\x01h\x00d`\x1e\x92" + // 0x0005A 0x00323: 0x01E92 + "\x00\x01\xe8\x00d`\x1e\x93" + // 0x0007A 0x00323: 0x01E93 + "\x00\x01h\x00f \x1e\x94" + // 0x0005A 0x00331: 0x01E94 + "\x00\x01\xe8\x00f \x1e\x95" + // 0x0007A 0x00331: 0x01E95 + "\x00\x01\xa0\x00f \x1e\x96" + // 0x00068 0x00331: 0x01E96 + "\x00\x01\xd0\x00a\x00\x1e\x97" + // 0x00074 0x00308: 0x01E97 + "\x00\x01\xdc\x00a@\x1e\x98" + // 0x00077 0x0030A: 0x01E98 + "\x00\x01\xe4\x00a@\x1e\x99" + // 0x00079 0x0030A: 0x01E99 + "\x00\x05\xfc\x00`\xe0\x1e\x9b" + // 0x0017F 0x00307: 0x01E9B + "\x00\x01\x04\x00d`\x1e\xa0" + // 0x00041 0x00323: 0x01EA0 + "\x00\x01\x84\x00d`\x1e\xa1" + // 0x00061 0x00323: 0x01EA1 + "\x00\x01\x04\x00a \x1e\xa2" + // 0x00041 0x00309: 0x01EA2 + "\x00\x01\x84\x00a \x1e\xa3" + // 0x00061 0x00309: 0x01EA3 + "\x00\x03\b\x00` \x1e\xa4" + // 0x000C2 0x00301: 0x01EA4 + "\x00\x03\x88\x00` \x1e\xa5" + // 0x000E2 0x00301: 0x01EA5 + "\x00\x03\b\x00`\x00\x1e\xa6" + // 0x000C2 0x00300: 0x01EA6 + "\x00\x03\x88\x00`\x00\x1e\xa7" + // 0x000E2 0x00300: 0x01EA7 + "\x00\x03\b\x00a \x1e\xa8" + // 0x000C2 0x00309: 0x01EA8 + "\x00\x03\x88\x00a \x1e\xa9" + // 0x000E2 0x00309: 0x01EA9 + "\x00\x03\b\x00``\x1e\xaa" + // 0x000C2 0x00303: 0x01EAA + "\x00\x03\x88\x00``\x1e\xab" + // 0x000E2 0x00303: 0x01EAB + "\x00z\x80\x00`@\x1e\xac" + // 0x01EA0 0x00302: 0x01EAC + "\x00z\x84\x00`@\x1e\xad" + // 0x01EA1 0x00302: 0x01EAD + "\x00\x04\b\x00` \x1e\xae" + // 0x00102 0x00301: 0x01EAE + "\x00\x04\f\x00` \x1e\xaf" + // 0x00103 0x00301: 0x01EAF + "\x00\x04\b\x00`\x00\x1e\xb0" + // 0x00102 0x00300: 0x01EB0 + "\x00\x04\f\x00`\x00\x1e\xb1" + // 0x00103 0x00300: 0x01EB1 + "\x00\x04\b\x00a \x1e\xb2" + // 0x00102 0x00309: 0x01EB2 + "\x00\x04\f\x00a \x1e\xb3" + // 0x00103 0x00309: 0x01EB3 + "\x00\x04\b\x00``\x1e\xb4" + // 0x00102 0x00303: 0x01EB4 + "\x00\x04\f\x00``\x1e\xb5" + // 0x00103 0x00303: 0x01EB5 + "\x00z\x80\x00`\xc0\x1e\xb6" + // 0x01EA0 0x00306: 0x01EB6 + "\x00z\x84\x00`\xc0\x1e\xb7" + // 0x01EA1 0x00306: 0x01EB7 + "\x00\x01\x14\x00d`\x1e\xb8" + // 0x00045 0x00323: 0x01EB8 + "\x00\x01\x94\x00d`\x1e\xb9" + // 0x00065 0x00323: 0x01EB9 + "\x00\x01\x14\x00a \x1e\xba" + // 0x00045 0x00309: 0x01EBA + "\x00\x01\x94\x00a \x1e\xbb" + // 0x00065 0x00309: 0x01EBB + "\x00\x01\x14\x00``\x1e\xbc" + // 0x00045 0x00303: 0x01EBC + "\x00\x01\x94\x00``\x1e\xbd" + // 0x00065 0x00303: 0x01EBD + "\x00\x03(\x00` \x1e\xbe" + // 0x000CA 0x00301: 0x01EBE + "\x00\x03\xa8\x00` \x1e\xbf" + // 0x000EA 0x00301: 0x01EBF + "\x00\x03(\x00`\x00\x1e\xc0" + // 0x000CA 0x00300: 0x01EC0 + "\x00\x03\xa8\x00`\x00\x1e\xc1" + // 0x000EA 0x00300: 0x01EC1 + "\x00\x03(\x00a \x1e\xc2" + // 0x000CA 0x00309: 0x01EC2 + "\x00\x03\xa8\x00a \x1e\xc3" + // 0x000EA 0x00309: 0x01EC3 + "\x00\x03(\x00``\x1e\xc4" + // 0x000CA 0x00303: 0x01EC4 + "\x00\x03\xa8\x00``\x1e\xc5" + // 0x000EA 0x00303: 0x01EC5 + "\x00z\xe0\x00`@\x1e\xc6" + // 0x01EB8 0x00302: 0x01EC6 + "\x00z\xe4\x00`@\x1e\xc7" + // 0x01EB9 0x00302: 0x01EC7 + "\x00\x01$\x00a \x1e\xc8" + // 0x00049 0x00309: 0x01EC8 + "\x00\x01\xa4\x00a \x1e\xc9" + // 0x00069 0x00309: 0x01EC9 + "\x00\x01$\x00d`\x1e\xca" + // 0x00049 0x00323: 0x01ECA + "\x00\x01\xa4\x00d`\x1e\xcb" + // 0x00069 0x00323: 0x01ECB + "\x00\x01<\x00d`\x1e\xcc" + // 0x0004F 0x00323: 0x01ECC + "\x00\x01\xbc\x00d`\x1e\xcd" + // 0x0006F 0x00323: 0x01ECD + "\x00\x01<\x00a \x1e\xce" + // 0x0004F 0x00309: 0x01ECE + "\x00\x01\xbc\x00a \x1e\xcf" + // 0x0006F 0x00309: 0x01ECF + "\x00\x03P\x00` \x1e\xd0" + // 0x000D4 0x00301: 0x01ED0 + "\x00\x03\xd0\x00` \x1e\xd1" + // 0x000F4 0x00301: 0x01ED1 + "\x00\x03P\x00`\x00\x1e\xd2" + // 0x000D4 0x00300: 0x01ED2 + "\x00\x03\xd0\x00`\x00\x1e\xd3" + // 0x000F4 0x00300: 0x01ED3 + "\x00\x03P\x00a \x1e\xd4" + // 0x000D4 0x00309: 0x01ED4 + "\x00\x03\xd0\x00a \x1e\xd5" + // 0x000F4 0x00309: 0x01ED5 + "\x00\x03P\x00``\x1e\xd6" + // 0x000D4 0x00303: 0x01ED6 + "\x00\x03\xd0\x00``\x1e\xd7" + // 0x000F4 0x00303: 0x01ED7 + "\x00{0\x00`@\x1e\xd8" + // 0x01ECC 0x00302: 0x01ED8 + "\x00{4\x00`@\x1e\xd9" + // 0x01ECD 0x00302: 0x01ED9 + "\x00\x06\x80\x00` \x1e\xda" + // 0x001A0 0x00301: 0x01EDA + "\x00\x06\x84\x00` \x1e\xdb" + // 0x001A1 0x00301: 0x01EDB + "\x00\x06\x80\x00`\x00\x1e\xdc" + // 0x001A0 0x00300: 0x01EDC + "\x00\x06\x84\x00`\x00\x1e\xdd" + // 0x001A1 0x00300: 0x01EDD + "\x00\x06\x80\x00a \x1e\xde" + // 0x001A0 0x00309: 0x01EDE + "\x00\x06\x84\x00a \x1e\xdf" + // 0x001A1 0x00309: 0x01EDF + "\x00\x06\x80\x00``\x1e\xe0" + // 0x001A0 0x00303: 0x01EE0 + "\x00\x06\x84\x00``\x1e\xe1" + // 0x001A1 0x00303: 0x01EE1 + "\x00\x06\x80\x00d`\x1e\xe2" + // 0x001A0 0x00323: 0x01EE2 + "\x00\x06\x84\x00d`\x1e\xe3" + // 0x001A1 0x00323: 0x01EE3 + "\x00\x01T\x00d`\x1e\xe4" + // 0x00055 0x00323: 0x01EE4 + "\x00\x01\xd4\x00d`\x1e\xe5" + // 0x00075 0x00323: 0x01EE5 + "\x00\x01T\x00a \x1e\xe6" + // 0x00055 0x00309: 0x01EE6 + "\x00\x01\xd4\x00a \x1e\xe7" + // 0x00075 0x00309: 0x01EE7 + "\x00\x06\xbc\x00` \x1e\xe8" + // 0x001AF 0x00301: 0x01EE8 + "\x00\x06\xc0\x00` \x1e\xe9" + // 0x001B0 0x00301: 0x01EE9 + "\x00\x06\xbc\x00`\x00\x1e\xea" + // 0x001AF 0x00300: 0x01EEA + "\x00\x06\xc0\x00`\x00\x1e\xeb" + // 0x001B0 0x00300: 0x01EEB + "\x00\x06\xbc\x00a \x1e\xec" + // 0x001AF 0x00309: 0x01EEC + "\x00\x06\xc0\x00a \x1e\xed" + // 0x001B0 0x00309: 0x01EED + "\x00\x06\xbc\x00``\x1e\xee" + // 0x001AF 0x00303: 0x01EEE + "\x00\x06\xc0\x00``\x1e\xef" + // 0x001B0 0x00303: 0x01EEF + "\x00\x06\xbc\x00d`\x1e\xf0" + // 0x001AF 0x00323: 0x01EF0 + "\x00\x06\xc0\x00d`\x1e\xf1" + // 0x001B0 0x00323: 0x01EF1 + "\x00\x01d\x00`\x00\x1e\xf2" + // 0x00059 0x00300: 0x01EF2 + "\x00\x01\xe4\x00`\x00\x1e\xf3" + // 0x00079 0x00300: 0x01EF3 + "\x00\x01d\x00d`\x1e\xf4" + // 0x00059 0x00323: 0x01EF4 + "\x00\x01\xe4\x00d`\x1e\xf5" + // 0x00079 0x00323: 0x01EF5 + "\x00\x01d\x00a \x1e\xf6" + // 0x00059 0x00309: 0x01EF6 + "\x00\x01\xe4\x00a \x1e\xf7" + // 0x00079 0x00309: 0x01EF7 + "\x00\x01d\x00``\x1e\xf8" + // 0x00059 0x00303: 0x01EF8 + "\x00\x01\xe4\x00``\x1e\xf9" + // 0x00079 0x00303: 0x01EF9 + "\x00\x0e\xc4\x00b`\x1f\x00" + // 0x003B1 0x00313: 0x01F00 + "\x00\x0e\xc4\x00b\x80\x1f\x01" + // 0x003B1 0x00314: 0x01F01 + "\x00|\x00\x00`\x00\x1f\x02" + // 0x01F00 0x00300: 0x01F02 + "\x00|\x04\x00`\x00\x1f\x03" + // 0x01F01 0x00300: 0x01F03 + "\x00|\x00\x00` \x1f\x04" + // 0x01F00 0x00301: 0x01F04 + "\x00|\x04\x00` \x1f\x05" + // 0x01F01 0x00301: 0x01F05 + "\x00|\x00\x00h@\x1f\x06" + // 0x01F00 0x00342: 0x01F06 + "\x00|\x04\x00h@\x1f\a" + // 0x01F01 0x00342: 0x01F07 + "\x00\x0eD\x00b`\x1f\b" + // 0x00391 0x00313: 0x01F08 + "\x00\x0eD\x00b\x80\x1f\t" + // 0x00391 0x00314: 0x01F09 + "\x00| \x00`\x00\x1f\n" + // 0x01F08 0x00300: 0x01F0A + "\x00|$\x00`\x00\x1f\v" + // 0x01F09 0x00300: 0x01F0B + "\x00| \x00` \x1f\f" + // 0x01F08 0x00301: 0x01F0C + "\x00|$\x00` \x1f\r" + // 0x01F09 0x00301: 0x01F0D + "\x00| \x00h@\x1f\x0e" + // 0x01F08 0x00342: 0x01F0E + "\x00|$\x00h@\x1f\x0f" + // 0x01F09 0x00342: 0x01F0F + "\x00\x0e\xd4\x00b`\x1f\x10" + // 0x003B5 0x00313: 0x01F10 + "\x00\x0e\xd4\x00b\x80\x1f\x11" + // 0x003B5 0x00314: 0x01F11 + "\x00|@\x00`\x00\x1f\x12" + // 0x01F10 0x00300: 0x01F12 + "\x00|D\x00`\x00\x1f\x13" + // 0x01F11 0x00300: 0x01F13 + "\x00|@\x00` \x1f\x14" + // 0x01F10 0x00301: 0x01F14 + "\x00|D\x00` \x1f\x15" + // 0x01F11 0x00301: 0x01F15 + "\x00\x0eT\x00b`\x1f\x18" + // 0x00395 0x00313: 0x01F18 + "\x00\x0eT\x00b\x80\x1f\x19" + // 0x00395 0x00314: 0x01F19 + "\x00|`\x00`\x00\x1f\x1a" + // 0x01F18 0x00300: 0x01F1A + "\x00|d\x00`\x00\x1f\x1b" + // 0x01F19 0x00300: 0x01F1B + "\x00|`\x00` \x1f\x1c" + // 0x01F18 0x00301: 0x01F1C + "\x00|d\x00` \x1f\x1d" + // 0x01F19 0x00301: 0x01F1D + "\x00\x0e\xdc\x00b`\x1f " + // 0x003B7 0x00313: 0x01F20 + "\x00\x0e\xdc\x00b\x80\x1f!" + // 0x003B7 0x00314: 0x01F21 + "\x00|\x80\x00`\x00\x1f\"" + // 0x01F20 0x00300: 0x01F22 + "\x00|\x84\x00`\x00\x1f#" + // 0x01F21 0x00300: 0x01F23 + "\x00|\x80\x00` \x1f$" + // 0x01F20 0x00301: 0x01F24 + "\x00|\x84\x00` \x1f%" + // 0x01F21 0x00301: 0x01F25 + "\x00|\x80\x00h@\x1f&" + // 0x01F20 0x00342: 0x01F26 + "\x00|\x84\x00h@\x1f'" + // 0x01F21 0x00342: 0x01F27 + "\x00\x0e\\\x00b`\x1f(" + // 0x00397 0x00313: 0x01F28 + "\x00\x0e\\\x00b\x80\x1f)" + // 0x00397 0x00314: 0x01F29 + "\x00|\xa0\x00`\x00\x1f*" + // 0x01F28 0x00300: 0x01F2A + "\x00|\xa4\x00`\x00\x1f+" + // 0x01F29 0x00300: 0x01F2B + "\x00|\xa0\x00` \x1f," + // 0x01F28 0x00301: 0x01F2C + "\x00|\xa4\x00` \x1f-" + // 0x01F29 0x00301: 0x01F2D + "\x00|\xa0\x00h@\x1f." + // 0x01F28 0x00342: 0x01F2E + "\x00|\xa4\x00h@\x1f/" + // 0x01F29 0x00342: 0x01F2F + "\x00\x0e\xe4\x00b`\x1f0" + // 0x003B9 0x00313: 0x01F30 + "\x00\x0e\xe4\x00b\x80\x1f1" + // 0x003B9 0x00314: 0x01F31 + "\x00|\xc0\x00`\x00\x1f2" + // 0x01F30 0x00300: 0x01F32 + "\x00|\xc4\x00`\x00\x1f3" + // 0x01F31 0x00300: 0x01F33 + "\x00|\xc0\x00` \x1f4" + // 0x01F30 0x00301: 0x01F34 + "\x00|\xc4\x00` \x1f5" + // 0x01F31 0x00301: 0x01F35 + "\x00|\xc0\x00h@\x1f6" + // 0x01F30 0x00342: 0x01F36 + "\x00|\xc4\x00h@\x1f7" + // 0x01F31 0x00342: 0x01F37 + "\x00\x0ed\x00b`\x1f8" + // 0x00399 0x00313: 0x01F38 + "\x00\x0ed\x00b\x80\x1f9" + // 0x00399 0x00314: 0x01F39 + "\x00|\xe0\x00`\x00\x1f:" + // 0x01F38 0x00300: 0x01F3A + "\x00|\xe4\x00`\x00\x1f;" + // 0x01F39 0x00300: 0x01F3B + "\x00|\xe0\x00` \x1f<" + // 0x01F38 0x00301: 0x01F3C + "\x00|\xe4\x00` \x1f=" + // 0x01F39 0x00301: 0x01F3D + "\x00|\xe0\x00h@\x1f>" + // 0x01F38 0x00342: 0x01F3E + "\x00|\xe4\x00h@\x1f?" + // 0x01F39 0x00342: 0x01F3F + "\x00\x0e\xfc\x00b`\x1f@" + // 0x003BF 0x00313: 0x01F40 + "\x00\x0e\xfc\x00b\x80\x1fA" + // 0x003BF 0x00314: 0x01F41 + "\x00}\x00\x00`\x00\x1fB" + // 0x01F40 0x00300: 0x01F42 + "\x00}\x04\x00`\x00\x1fC" + // 0x01F41 0x00300: 0x01F43 + "\x00}\x00\x00` \x1fD" + // 0x01F40 0x00301: 0x01F44 + "\x00}\x04\x00` \x1fE" + // 0x01F41 0x00301: 0x01F45 + "\x00\x0e|\x00b`\x1fH" + // 0x0039F 0x00313: 0x01F48 + "\x00\x0e|\x00b\x80\x1fI" + // 0x0039F 0x00314: 0x01F49 + "\x00} \x00`\x00\x1fJ" + // 0x01F48 0x00300: 0x01F4A + "\x00}$\x00`\x00\x1fK" + // 0x01F49 0x00300: 0x01F4B + "\x00} \x00` \x1fL" + // 0x01F48 0x00301: 0x01F4C + "\x00}$\x00` \x1fM" + // 0x01F49 0x00301: 0x01F4D + "\x00\x0f\x14\x00b`\x1fP" + // 0x003C5 0x00313: 0x01F50 + "\x00\x0f\x14\x00b\x80\x1fQ" + // 0x003C5 0x00314: 0x01F51 + "\x00}@\x00`\x00\x1fR" + // 0x01F50 0x00300: 0x01F52 + "\x00}D\x00`\x00\x1fS" + // 0x01F51 0x00300: 0x01F53 + "\x00}@\x00` \x1fT" + // 0x01F50 0x00301: 0x01F54 + "\x00}D\x00` \x1fU" + // 0x01F51 0x00301: 0x01F55 + "\x00}@\x00h@\x1fV" + // 0x01F50 0x00342: 0x01F56 + "\x00}D\x00h@\x1fW" + // 0x01F51 0x00342: 0x01F57 + "\x00\x0e\x94\x00b\x80\x1fY" + // 0x003A5 0x00314: 0x01F59 + "\x00}d\x00`\x00\x1f[" + // 0x01F59 0x00300: 0x01F5B + "\x00}d\x00` \x1f]" + // 0x01F59 0x00301: 0x01F5D + "\x00}d\x00h@\x1f_" + // 0x01F59 0x00342: 0x01F5F + "\x00\x0f$\x00b`\x1f`" + // 0x003C9 0x00313: 0x01F60 + "\x00\x0f$\x00b\x80\x1fa" + // 0x003C9 0x00314: 0x01F61 + "\x00}\x80\x00`\x00\x1fb" + // 0x01F60 0x00300: 0x01F62 + "\x00}\x84\x00`\x00\x1fc" + // 0x01F61 0x00300: 0x01F63 + "\x00}\x80\x00` \x1fd" + // 0x01F60 0x00301: 0x01F64 + "\x00}\x84\x00` \x1fe" + // 0x01F61 0x00301: 0x01F65 + "\x00}\x80\x00h@\x1ff" + // 0x01F60 0x00342: 0x01F66 + "\x00}\x84\x00h@\x1fg" + // 0x01F61 0x00342: 0x01F67 + "\x00\x0e\xa4\x00b`\x1fh" + // 0x003A9 0x00313: 0x01F68 + "\x00\x0e\xa4\x00b\x80\x1fi" + // 0x003A9 0x00314: 0x01F69 + "\x00}\xa0\x00`\x00\x1fj" + // 0x01F68 0x00300: 0x01F6A + "\x00}\xa4\x00`\x00\x1fk" + // 0x01F69 0x00300: 0x01F6B + "\x00}\xa0\x00` \x1fl" + // 0x01F68 0x00301: 0x01F6C + "\x00}\xa4\x00` \x1fm" + // 0x01F69 0x00301: 0x01F6D + "\x00}\xa0\x00h@\x1fn" + // 0x01F68 0x00342: 0x01F6E + "\x00}\xa4\x00h@\x1fo" + // 0x01F69 0x00342: 0x01F6F + "\x00\x0e\xc4\x00`\x00\x1fp" + // 0x003B1 0x00300: 0x01F70 + "\x00\x0e\xd4\x00`\x00\x1fr" + // 0x003B5 0x00300: 0x01F72 + "\x00\x0e\xdc\x00`\x00\x1ft" + // 0x003B7 0x00300: 0x01F74 + "\x00\x0e\xe4\x00`\x00\x1fv" + // 0x003B9 0x00300: 0x01F76 + "\x00\x0e\xfc\x00`\x00\x1fx" + // 0x003BF 0x00300: 0x01F78 + "\x00\x0f\x14\x00`\x00\x1fz" + // 0x003C5 0x00300: 0x01F7A + "\x00\x0f$\x00`\x00\x1f|" + // 0x003C9 0x00300: 0x01F7C + "\x00|\x00\x00h\xa0\x1f\x80" + // 0x01F00 0x00345: 0x01F80 + "\x00|\x04\x00h\xa0\x1f\x81" + // 0x01F01 0x00345: 0x01F81 + "\x00|\b\x00h\xa0\x1f\x82" + // 0x01F02 0x00345: 0x01F82 + "\x00|\f\x00h\xa0\x1f\x83" + // 0x01F03 0x00345: 0x01F83 + "\x00|\x10\x00h\xa0\x1f\x84" + // 0x01F04 0x00345: 0x01F84 + "\x00|\x14\x00h\xa0\x1f\x85" + // 0x01F05 0x00345: 0x01F85 + "\x00|\x18\x00h\xa0\x1f\x86" + // 0x01F06 0x00345: 0x01F86 + "\x00|\x1c\x00h\xa0\x1f\x87" + // 0x01F07 0x00345: 0x01F87 + "\x00| \x00h\xa0\x1f\x88" + // 0x01F08 0x00345: 0x01F88 + "\x00|$\x00h\xa0\x1f\x89" + // 0x01F09 0x00345: 0x01F89 + "\x00|(\x00h\xa0\x1f\x8a" + // 0x01F0A 0x00345: 0x01F8A + "\x00|,\x00h\xa0\x1f\x8b" + // 0x01F0B 0x00345: 0x01F8B + "\x00|0\x00h\xa0\x1f\x8c" + // 0x01F0C 0x00345: 0x01F8C + "\x00|4\x00h\xa0\x1f\x8d" + // 0x01F0D 0x00345: 0x01F8D + "\x00|8\x00h\xa0\x1f\x8e" + // 0x01F0E 0x00345: 0x01F8E + "\x00|<\x00h\xa0\x1f\x8f" + // 0x01F0F 0x00345: 0x01F8F + "\x00|\x80\x00h\xa0\x1f\x90" + // 0x01F20 0x00345: 0x01F90 + "\x00|\x84\x00h\xa0\x1f\x91" + // 0x01F21 0x00345: 0x01F91 + "\x00|\x88\x00h\xa0\x1f\x92" + // 0x01F22 0x00345: 0x01F92 + "\x00|\x8c\x00h\xa0\x1f\x93" + // 0x01F23 0x00345: 0x01F93 + "\x00|\x90\x00h\xa0\x1f\x94" + // 0x01F24 0x00345: 0x01F94 + "\x00|\x94\x00h\xa0\x1f\x95" + // 0x01F25 0x00345: 0x01F95 + "\x00|\x98\x00h\xa0\x1f\x96" + // 0x01F26 0x00345: 0x01F96 + "\x00|\x9c\x00h\xa0\x1f\x97" + // 0x01F27 0x00345: 0x01F97 + "\x00|\xa0\x00h\xa0\x1f\x98" + // 0x01F28 0x00345: 0x01F98 + "\x00|\xa4\x00h\xa0\x1f\x99" + // 0x01F29 0x00345: 0x01F99 + "\x00|\xa8\x00h\xa0\x1f\x9a" + // 0x01F2A 0x00345: 0x01F9A + "\x00|\xac\x00h\xa0\x1f\x9b" + // 0x01F2B 0x00345: 0x01F9B + "\x00|\xb0\x00h\xa0\x1f\x9c" + // 0x01F2C 0x00345: 0x01F9C + "\x00|\xb4\x00h\xa0\x1f\x9d" + // 0x01F2D 0x00345: 0x01F9D + "\x00|\xb8\x00h\xa0\x1f\x9e" + // 0x01F2E 0x00345: 0x01F9E + "\x00|\xbc\x00h\xa0\x1f\x9f" + // 0x01F2F 0x00345: 0x01F9F + "\x00}\x80\x00h\xa0\x1f\xa0" + // 0x01F60 0x00345: 0x01FA0 + "\x00}\x84\x00h\xa0\x1f\xa1" + // 0x01F61 0x00345: 0x01FA1 + "\x00}\x88\x00h\xa0\x1f\xa2" + // 0x01F62 0x00345: 0x01FA2 + "\x00}\x8c\x00h\xa0\x1f\xa3" + // 0x01F63 0x00345: 0x01FA3 + "\x00}\x90\x00h\xa0\x1f\xa4" + // 0x01F64 0x00345: 0x01FA4 + "\x00}\x94\x00h\xa0\x1f\xa5" + // 0x01F65 0x00345: 0x01FA5 + "\x00}\x98\x00h\xa0\x1f\xa6" + // 0x01F66 0x00345: 0x01FA6 + "\x00}\x9c\x00h\xa0\x1f\xa7" + // 0x01F67 0x00345: 0x01FA7 + "\x00}\xa0\x00h\xa0\x1f\xa8" + // 0x01F68 0x00345: 0x01FA8 + "\x00}\xa4\x00h\xa0\x1f\xa9" + // 0x01F69 0x00345: 0x01FA9 + "\x00}\xa8\x00h\xa0\x1f\xaa" + // 0x01F6A 0x00345: 0x01FAA + "\x00}\xac\x00h\xa0\x1f\xab" + // 0x01F6B 0x00345: 0x01FAB + "\x00}\xb0\x00h\xa0\x1f\xac" + // 0x01F6C 0x00345: 0x01FAC + "\x00}\xb4\x00h\xa0\x1f\xad" + // 0x01F6D 0x00345: 0x01FAD + "\x00}\xb8\x00h\xa0\x1f\xae" + // 0x01F6E 0x00345: 0x01FAE + "\x00}\xbc\x00h\xa0\x1f\xaf" + // 0x01F6F 0x00345: 0x01FAF + "\x00\x0e\xc4\x00`\xc0\x1f\xb0" + // 0x003B1 0x00306: 0x01FB0 + "\x00\x0e\xc4\x00`\x80\x1f\xb1" + // 0x003B1 0x00304: 0x01FB1 + "\x00}\xc0\x00h\xa0\x1f\xb2" + // 0x01F70 0x00345: 0x01FB2 + "\x00\x0e\xc4\x00h\xa0\x1f\xb3" + // 0x003B1 0x00345: 0x01FB3 + "\x00\x0e\xb0\x00h\xa0\x1f\xb4" + // 0x003AC 0x00345: 0x01FB4 + "\x00\x0e\xc4\x00h@\x1f\xb6" + // 0x003B1 0x00342: 0x01FB6 + "\x00~\xd8\x00h\xa0\x1f\xb7" + // 0x01FB6 0x00345: 0x01FB7 + "\x00\x0eD\x00`\xc0\x1f\xb8" + // 0x00391 0x00306: 0x01FB8 + "\x00\x0eD\x00`\x80\x1f\xb9" + // 0x00391 0x00304: 0x01FB9 + "\x00\x0eD\x00`\x00\x1f\xba" + // 0x00391 0x00300: 0x01FBA + "\x00\x0eD\x00h\xa0\x1f\xbc" + // 0x00391 0x00345: 0x01FBC + "\x00\x02\xa0\x00h@\x1f\xc1" + // 0x000A8 0x00342: 0x01FC1 + "\x00}\xd0\x00h\xa0\x1f\xc2" + // 0x01F74 0x00345: 0x01FC2 + "\x00\x0e\xdc\x00h\xa0\x1f\xc3" + // 0x003B7 0x00345: 0x01FC3 + "\x00\x0e\xb8\x00h\xa0\x1f\xc4" + // 0x003AE 0x00345: 0x01FC4 + "\x00\x0e\xdc\x00h@\x1f\xc6" + // 0x003B7 0x00342: 0x01FC6 + "\x00\x7f\x18\x00h\xa0\x1f\xc7" + // 0x01FC6 0x00345: 0x01FC7 + "\x00\x0eT\x00`\x00\x1f\xc8" + // 0x00395 0x00300: 0x01FC8 + "\x00\x0e\\\x00`\x00\x1f\xca" + // 0x00397 0x00300: 0x01FCA + "\x00\x0e\\\x00h\xa0\x1f\xcc" + // 0x00397 0x00345: 0x01FCC + "\x00~\xfc\x00`\x00\x1f\xcd" + // 0x01FBF 0x00300: 0x01FCD + "\x00~\xfc\x00` \x1f\xce" + // 0x01FBF 0x00301: 0x01FCE + "\x00~\xfc\x00h@\x1f\xcf" + // 0x01FBF 0x00342: 0x01FCF + "\x00\x0e\xe4\x00`\xc0\x1f\xd0" + // 0x003B9 0x00306: 0x01FD0 + "\x00\x0e\xe4\x00`\x80\x1f\xd1" + // 0x003B9 0x00304: 0x01FD1 + "\x00\x0f(\x00`\x00\x1f\xd2" + // 0x003CA 0x00300: 0x01FD2 + "\x00\x0e\xe4\x00h@\x1f\xd6" + // 0x003B9 0x00342: 0x01FD6 + "\x00\x0f(\x00h@\x1f\xd7" + // 0x003CA 0x00342: 0x01FD7 + "\x00\x0ed\x00`\xc0\x1f\xd8" + // 0x00399 0x00306: 0x01FD8 + "\x00\x0ed\x00`\x80\x1f\xd9" + // 0x00399 0x00304: 0x01FD9 + "\x00\x0ed\x00`\x00\x1f\xda" + // 0x00399 0x00300: 0x01FDA + "\x00\x7f\xf8\x00`\x00\x1f\xdd" + // 0x01FFE 0x00300: 0x01FDD + "\x00\x7f\xf8\x00` \x1f\xde" + // 0x01FFE 0x00301: 0x01FDE + "\x00\x7f\xf8\x00h@\x1f\xdf" + // 0x01FFE 0x00342: 0x01FDF + "\x00\x0f\x14\x00`\xc0\x1f\xe0" + // 0x003C5 0x00306: 0x01FE0 + "\x00\x0f\x14\x00`\x80\x1f\xe1" + // 0x003C5 0x00304: 0x01FE1 + "\x00\x0f,\x00`\x00\x1f\xe2" + // 0x003CB 0x00300: 0x01FE2 + "\x00\x0f\x04\x00b`\x1f\xe4" + // 0x003C1 0x00313: 0x01FE4 + "\x00\x0f\x04\x00b\x80\x1f\xe5" + // 0x003C1 0x00314: 0x01FE5 + "\x00\x0f\x14\x00h@\x1f\xe6" + // 0x003C5 0x00342: 0x01FE6 + "\x00\x0f,\x00h@\x1f\xe7" + // 0x003CB 0x00342: 0x01FE7 + "\x00\x0e\x94\x00`\xc0\x1f\xe8" + // 0x003A5 0x00306: 0x01FE8 + "\x00\x0e\x94\x00`\x80\x1f\xe9" + // 0x003A5 0x00304: 0x01FE9 + "\x00\x0e\x94\x00`\x00\x1f\xea" + // 0x003A5 0x00300: 0x01FEA + "\x00\x0e\x84\x00b\x80\x1f\xec" + // 0x003A1 0x00314: 0x01FEC + "\x00\x02\xa0\x00`\x00\x1f\xed" + // 0x000A8 0x00300: 0x01FED + "\x00}\xf0\x00h\xa0\x1f\xf2" + // 0x01F7C 0x00345: 0x01FF2 + "\x00\x0f$\x00h\xa0\x1f\xf3" + // 0x003C9 0x00345: 0x01FF3 + "\x00\x0f8\x00h\xa0\x1f\xf4" + // 0x003CE 0x00345: 0x01FF4 + "\x00\x0f$\x00h@\x1f\xf6" + // 0x003C9 0x00342: 0x01FF6 + "\x00\x7f\xd8\x00h\xa0\x1f\xf7" + // 0x01FF6 0x00345: 0x01FF7 + "\x00\x0e|\x00`\x00\x1f\xf8" + // 0x0039F 0x00300: 0x01FF8 + "\x00\x0e\xa4\x00`\x00\x1f\xfa" + // 0x003A9 0x00300: 0x01FFA + "\x00\x0e\xa4\x00h\xa0\x1f\xfc" + // 0x003A9 0x00345: 0x01FFC + "\x00\x86@\x00g\x00!\x9a" + // 0x02190 0x00338: 0x0219A + "\x00\x86H\x00g\x00!\x9b" + // 0x02192 0x00338: 0x0219B + "\x00\x86P\x00g\x00!\xae" + // 0x02194 0x00338: 0x021AE + "\x00\x87@\x00g\x00!\xcd" + // 0x021D0 0x00338: 0x021CD + "\x00\x87P\x00g\x00!\xce" + // 0x021D4 0x00338: 0x021CE + "\x00\x87H\x00g\x00!\xcf" + // 0x021D2 0x00338: 0x021CF + "\x00\x88\f\x00g\x00\"\x04" + // 0x02203 0x00338: 0x02204 + "\x00\x88 \x00g\x00\"\t" + // 0x02208 0x00338: 0x02209 + "\x00\x88,\x00g\x00\"\f" + // 0x0220B 0x00338: 0x0220C + "\x00\x88\x8c\x00g\x00\"$" + // 0x02223 0x00338: 0x02224 + "\x00\x88\x94\x00g\x00\"&" + // 0x02225 0x00338: 0x02226 + "\x00\x88\xf0\x00g\x00\"A" + // 0x0223C 0x00338: 0x02241 + "\x00\x89\f\x00g\x00\"D" + // 0x02243 0x00338: 0x02244 + "\x00\x89\x14\x00g\x00\"G" + // 0x02245 0x00338: 0x02247 + "\x00\x89 \x00g\x00\"I" + // 0x02248 0x00338: 0x02249 + "\x00\x00\xf4\x00g\x00\"`" + // 0x0003D 0x00338: 0x02260 + "\x00\x89\x84\x00g\x00\"b" + // 0x02261 0x00338: 0x02262 + "\x00\x894\x00g\x00\"m" + // 0x0224D 0x00338: 0x0226D + "\x00\x00\xf0\x00g\x00\"n" + // 0x0003C 0x00338: 0x0226E + "\x00\x00\xf8\x00g\x00\"o" + // 0x0003E 0x00338: 0x0226F + "\x00\x89\x90\x00g\x00\"p" + // 0x02264 0x00338: 0x02270 + "\x00\x89\x94\x00g\x00\"q" + // 0x02265 0x00338: 0x02271 + "\x00\x89\xc8\x00g\x00\"t" + // 0x02272 0x00338: 0x02274 + "\x00\x89\xcc\x00g\x00\"u" + // 0x02273 0x00338: 0x02275 + "\x00\x89\xd8\x00g\x00\"x" + // 0x02276 0x00338: 0x02278 + "\x00\x89\xdc\x00g\x00\"y" + // 0x02277 0x00338: 0x02279 + "\x00\x89\xe8\x00g\x00\"\x80" + // 0x0227A 0x00338: 0x02280 + "\x00\x89\xec\x00g\x00\"\x81" + // 0x0227B 0x00338: 0x02281 + "\x00\x8a\b\x00g\x00\"\x84" + // 0x02282 0x00338: 0x02284 + "\x00\x8a\f\x00g\x00\"\x85" + // 0x02283 0x00338: 0x02285 + "\x00\x8a\x18\x00g\x00\"\x88" + // 0x02286 0x00338: 0x02288 + "\x00\x8a\x1c\x00g\x00\"\x89" + // 0x02287 0x00338: 0x02289 + "\x00\x8a\x88\x00g\x00\"\xac" + // 0x022A2 0x00338: 0x022AC + "\x00\x8a\xa0\x00g\x00\"\xad" + // 0x022A8 0x00338: 0x022AD + "\x00\x8a\xa4\x00g\x00\"\xae" + // 0x022A9 0x00338: 0x022AE + "\x00\x8a\xac\x00g\x00\"\xaf" + // 0x022AB 0x00338: 0x022AF + "\x00\x89\xf0\x00g\x00\"\xe0" + // 0x0227C 0x00338: 0x022E0 + "\x00\x89\xf4\x00g\x00\"\xe1" + // 0x0227D 0x00338: 0x022E1 + "\x00\x8aD\x00g\x00\"\xe2" + // 0x02291 0x00338: 0x022E2 + "\x00\x8aH\x00g\x00\"\xe3" + // 0x02292 0x00338: 0x022E3 + "\x00\x8a\xc8\x00g\x00\"\xea" + // 0x022B2 0x00338: 0x022EA + "\x00\x8a\xcc\x00g\x00\"\xeb" + // 0x022B3 0x00338: 0x022EB + "\x00\x8a\xd0\x00g\x00\"\xec" + // 0x022B4 0x00338: 0x022EC + "\x00\x8a\xd4\x00g\x00\"\xed" + // 0x022B5 0x00338: 0x022ED + "\x00\xc1,\x06\x13 0L" + // 0x0304B 0x03099: 0x0304C + "\x00\xc14\x06\x13 0N" + // 0x0304D 0x03099: 0x0304E + "\x00\xc1<\x06\x13 0P" + // 0x0304F 0x03099: 0x03050 + "\x00\xc1D\x06\x13 0R" + // 0x03051 0x03099: 0x03052 + "\x00\xc1L\x06\x13 0T" + // 0x03053 0x03099: 0x03054 + "\x00\xc1T\x06\x13 0V" + // 0x03055 0x03099: 0x03056 + "\x00\xc1\\\x06\x13 0X" + // 0x03057 0x03099: 0x03058 + "\x00\xc1d\x06\x13 0Z" + // 0x03059 0x03099: 0x0305A + "\x00\xc1l\x06\x13 0\\" + // 0x0305B 0x03099: 0x0305C + "\x00\xc1t\x06\x13 0^" + // 0x0305D 0x03099: 0x0305E + "\x00\xc1|\x06\x13 0`" + // 0x0305F 0x03099: 0x03060 + "\x00\xc1\x84\x06\x13 0b" + // 0x03061 0x03099: 0x03062 + "\x00\xc1\x90\x06\x13 0e" + // 0x03064 0x03099: 0x03065 + "\x00\xc1\x98\x06\x13 0g" + // 0x03066 0x03099: 0x03067 + "\x00\xc1\xa0\x06\x13 0i" + // 0x03068 0x03099: 0x03069 + "\x00\xc1\xbc\x06\x13 0p" + // 0x0306F 0x03099: 0x03070 + "\x00\xc1\xbc\x06\x13@0q" + // 0x0306F 0x0309A: 0x03071 + "\x00\xc1\xc8\x06\x13 0s" + // 0x03072 0x03099: 0x03073 + "\x00\xc1\xc8\x06\x13@0t" + // 0x03072 0x0309A: 0x03074 + "\x00\xc1\xd4\x06\x13 0v" + // 0x03075 0x03099: 0x03076 + "\x00\xc1\xd4\x06\x13@0w" + // 0x03075 0x0309A: 0x03077 + "\x00\xc1\xe0\x06\x13 0y" + // 0x03078 0x03099: 0x03079 + "\x00\xc1\xe0\x06\x13@0z" + // 0x03078 0x0309A: 0x0307A + "\x00\xc1\xec\x06\x13 0|" + // 0x0307B 0x03099: 0x0307C + "\x00\xc1\xec\x06\x13@0}" + // 0x0307B 0x0309A: 0x0307D + "\x00\xc1\x18\x06\x13 0\x94" + // 0x03046 0x03099: 0x03094 + "\x00\xc2t\x06\x13 0\x9e" + // 0x0309D 0x03099: 0x0309E + "\x00¬\x06\x13 0\xac" + // 0x030AB 0x03099: 0x030AC + "\x00´\x06\x13 0\xae" + // 0x030AD 0x03099: 0x030AE + "\x00¼\x06\x13 0\xb0" + // 0x030AF 0x03099: 0x030B0 + "\x00\xc2\xc4\x06\x13 0\xb2" + // 0x030B1 0x03099: 0x030B2 + "\x00\xc2\xcc\x06\x13 0\xb4" + // 0x030B3 0x03099: 0x030B4 + "\x00\xc2\xd4\x06\x13 0\xb6" + // 0x030B5 0x03099: 0x030B6 + "\x00\xc2\xdc\x06\x13 0\xb8" + // 0x030B7 0x03099: 0x030B8 + "\x00\xc2\xe4\x06\x13 0\xba" + // 0x030B9 0x03099: 0x030BA + "\x00\xc2\xec\x06\x13 0\xbc" + // 0x030BB 0x03099: 0x030BC + "\x00\xc2\xf4\x06\x13 0\xbe" + // 0x030BD 0x03099: 0x030BE + "\x00\xc2\xfc\x06\x13 0\xc0" + // 0x030BF 0x03099: 0x030C0 + "\x00\xc3\x04\x06\x13 0\xc2" + // 0x030C1 0x03099: 0x030C2 + "\x00\xc3\x10\x06\x13 0\xc5" + // 0x030C4 0x03099: 0x030C5 + "\x00\xc3\x18\x06\x13 0\xc7" + // 0x030C6 0x03099: 0x030C7 + "\x00\xc3 \x06\x13 0\xc9" + // 0x030C8 0x03099: 0x030C9 + "\x00\xc3<\x06\x13 0\xd0" + // 0x030CF 0x03099: 0x030D0 + "\x00\xc3<\x06\x13@0\xd1" + // 0x030CF 0x0309A: 0x030D1 + "\x00\xc3H\x06\x13 0\xd3" + // 0x030D2 0x03099: 0x030D3 + "\x00\xc3H\x06\x13@0\xd4" + // 0x030D2 0x0309A: 0x030D4 + "\x00\xc3T\x06\x13 0\xd6" + // 0x030D5 0x03099: 0x030D6 + "\x00\xc3T\x06\x13@0\xd7" + // 0x030D5 0x0309A: 0x030D7 + "\x00\xc3`\x06\x13 0\xd9" + // 0x030D8 0x03099: 0x030D9 + "\x00\xc3`\x06\x13@0\xda" + // 0x030D8 0x0309A: 0x030DA + "\x00\xc3l\x06\x13 0\xdc" + // 0x030DB 0x03099: 0x030DC + "\x00\xc3l\x06\x13@0\xdd" + // 0x030DB 0x0309A: 0x030DD + "\x00\u0098\x06\x13 0\xf4" + // 0x030A6 0x03099: 0x030F4 + "\x00ü\x06\x13 0\xf7" + // 0x030EF 0x03099: 0x030F7 + "\x00\xc3\xc0\x06\x13 0\xf8" + // 0x030F0 0x03099: 0x030F8 + "\x00\xc3\xc4\x06\x13 0\xf9" + // 0x030F1 0x03099: 0x030F9 + "\x00\xc3\xc8\x06\x13 0\xfa" + // 0x030F2 0x03099: 0x030FA + "\x00\xc3\xf4\x06\x13 0\xfe" + // 0x030FD 0x03099: 0x030FE + "\x04\x17H\x00`\xe1\x05\xc9" + // 0x105D2 0x00307: 0x105C9 + "\x04\x17h\x00`\xe1\x05\xe4" + // 0x105DA 0x00307: 0x105E4 + "\x04Bd\"\x17A\x10\x9a" + // 0x11099 0x110BA: 0x1109A + "\x04Bl\"\x17A\x10\x9c" + // 0x1109B 0x110BA: 0x1109C + "\x04B\x94\"\x17A\x10\xab" + // 0x110A5 0x110BA: 0x110AB + "\x04D\xc4\"$\xe1\x11." + // 0x11131 0x11127: 0x1112E + "\x04D\xc8\"$\xe1\x11/" + // 0x11132 0x11127: 0x1112F + "\x04M\x1c\"g\xc1\x13K" + // 0x11347 0x1133E: 0x1134B + "\x04M\x1c\"j\xe1\x13L" + // 0x11347 0x11357: 0x1134C + "\x04N\b\"y!\x13\x83" + // 0x11382 0x113C9: 0x11383 + "\x04N\x10\"wa\x13\x85" + // 0x11384 0x113BB: 0x11385 + "\x04N,\"xA\x13\x8e" + // 0x1138B 0x113C2: 0x1138E + "\x04N@\"y!\x13\x91" + // 0x11390 0x113C9: 0x11391 + "\x04O\b\"xA\x13\xc5" + // 0x113C2 0x113C2: 0x113C5 + "\x04O\b\"w\x01\x13\xc7" + // 0x113C2 0x113B8: 0x113C7 + "\x04O\b\"y!\x13\xc8" + // 0x113C2 0x113C9: 0x113C8 + "\x04R\xe4\"\x97A\x14\xbb" + // 0x114B9 0x114BA: 0x114BB + "\x04R\xe4\"\x96\x01\x14\xbc" + // 0x114B9 0x114B0: 0x114BC + "\x04R\xe4\"\x97\xa1\x14\xbe" + // 0x114B9 0x114BD: 0x114BE + "\x04V\xe0\"\xb5\xe1\x15\xba" + // 0x115B8 0x115AF: 0x115BA + "\x04V\xe4\"\xb5\xe1\x15\xbb" + // 0x115B9 0x115AF: 0x115BB + "\x04d\xd4#&\x01\x198" + // 0x11935 0x11930: 0x11938 + "\x05\x84x,#\xc1a!" + // 0x1611E 0x1611E: 0x16121 + "\x05\x84x,%!a\"" + // 0x1611E 0x16129: 0x16122 + "\x05\x84x,#\xe1a#" + // 0x1611E 0x1611F: 0x16123 + "\x05\x84\xa4,#\xe1a$" + // 0x16129 0x1611F: 0x16124 + "\x05\x84x,$\x01a%" + // 0x1611E 0x16120: 0x16125 + "\x05\x84\x84,#\xe1a&" + // 0x16121 0x1611F: 0x16126 + "\x05\x84\x88,#\xe1a'" + // 0x16122 0x1611F: 0x16127 + "\x05\x84\x84,$\x01a(" + // 0x16121 0x16120: 0x16128 + "\x05\xb5\x9c-\xac\xe1mh" + // 0x16D67 0x16D67: 0x16D68 + "\x05\xb5\x8c-\xac\xe1mi" + // 0x16D63 0x16D67: 0x16D69 + "\x05\xb5\xa4-\xac\xe1mj" + // 0x16D69 0x16D67: 0x16D6A "" // Total size of tables: 57KB (58086 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/transform.go b/vendor/golang.org/x/text/unicode/norm/transform.go index a1d366ae..583230d4 100644 --- a/vendor/golang.org/x/text/unicode/norm/transform.go +++ b/vendor/golang.org/x/text/unicode/norm/transform.go @@ -33,7 +33,7 @@ func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) return nDst + n, nSrc + n, err } - if err == nil && n < len(src) && !atEOF { + if err == nil && n < len(src) { err = transform.ErrShortSrc } return n, n, err @@ -67,6 +67,7 @@ func (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) nSrc = end // Next quickSpan. + var err error end = rb.nsrc eof := atEOF if n := nSrc + len(dst) - nDst; n < end { @@ -79,7 +80,7 @@ func (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) nSrc += n nDst += n if ok { - if err == nil && n < rb.nsrc && !atEOF { + if err == nil && nSrc < rb.nsrc { err = transform.ErrShortSrc } return nDst, nSrc, err diff --git a/vendor/gopkg.in/yaml.v3/README.md b/vendor/gopkg.in/yaml.v3/README.md deleted file mode 100644 index 08eb1bab..00000000 --- a/vendor/gopkg.in/yaml.v3/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# YAML support for the Go language - -Introduction ------------- - -The yaml package enables Go programs to comfortably encode and decode YAML -values. It was developed within [Canonical](https://www.canonical.com) as -part of the [juju](https://juju.ubuntu.com) project, and is based on a -pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) -C library to parse and generate YAML data quickly and reliably. - -Compatibility -------------- - -The yaml package supports most of YAML 1.2, but preserves some behavior -from 1.1 for backwards compatibility. - -Specifically, as of v3 of the yaml package: - - - YAML 1.1 bools (_yes/no, on/off_) are supported as long as they are being - decoded into a typed bool value. Otherwise they behave as a string. Booleans - in YAML 1.2 are _true/false_ only. - - Octals encode and decode as _0777_ per YAML 1.1, rather than _0o777_ - as specified in YAML 1.2, because most parsers still use the old format. - Octals in the _0o777_ format are supported though, so new files work. - - Does not support base-60 floats. These are gone from YAML 1.2, and were - actually never supported by this package as it's clearly a poor choice. - -and offers backwards -compatibility with YAML 1.1 in some cases. -1.2, including support for -anchors, tags, map merging, etc. Multi-document unmarshalling is not yet -implemented, and base-60 floats from YAML 1.1 are purposefully not -supported since they're a poor design and are gone in YAML 1.2. - -Installation and usage ----------------------- - -The import path for the package is *gopkg.in/yaml.v3*. - -To install it, run: - - go get gopkg.in/yaml.v3 - -API documentation ------------------ - -If opened in a browser, the import path itself leads to the API documentation: - - - [https://gopkg.in/yaml.v3](https://gopkg.in/yaml.v3) - -API stability -------------- - -The package API for yaml v3 will remain stable as described in [gopkg.in](https://gopkg.in). - - -License -------- - -The yaml package is licensed under the MIT and Apache License 2.0 licenses. -Please see the LICENSE file for details. - - -Example -------- - -```Go -package main - -import ( - "fmt" - "log" - - "gopkg.in/yaml.v3" -) - -var data = ` -a: Easy! -b: - c: 2 - d: [3, 4] -` - -// Note: struct fields must be public in order for unmarshal to -// correctly populate the data. -type T struct { - A string - B struct { - RenamedC int `yaml:"c"` - D []int `yaml:",flow"` - } -} - -func main() { - t := T{} - - err := yaml.Unmarshal([]byte(data), &t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t:\n%v\n\n", t) - - d, err := yaml.Marshal(&t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t dump:\n%s\n\n", string(d)) - - m := make(map[interface{}]interface{}) - - err = yaml.Unmarshal([]byte(data), &m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m:\n%v\n\n", m) - - d, err = yaml.Marshal(&m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m dump:\n%s\n\n", string(d)) -} -``` - -This example will generate the following output: - -``` ---- t: -{Easy! {2 [3 4]}} - ---- t dump: -a: Easy! -b: - c: 2 - d: [3, 4] - - ---- m: -map[a:Easy! b:map[c:2 d:[3 4]]] - ---- m dump: -a: Easy! -b: - c: 2 - d: - - 3 - - 4 -``` - diff --git a/vendor/modules.txt b/vendor/modules.txt index a61e2f81..b521313e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -201,7 +201,7 @@ github.com/go-logr/stdr ## explicit; go 1.12 github.com/go-ole/go-ole github.com/go-ole/go-ole/oleutil -# github.com/go-pkgz/lgr v0.12.4 +# github.com/go-pkgz/lgr v0.13.0 ## explicit; go 1.21 github.com/go-pkgz/lgr # github.com/go-pkgz/rest v1.24.0 @@ -236,7 +236,7 @@ github.com/jlaffaye/ftp # github.com/kennygrant/sanitize v1.2.4 ## explicit github.com/kennygrant/sanitize -# github.com/klauspost/compress v1.18.7 +# github.com/klauspost/compress v1.19.2 ## explicit; go 1.24 github.com/klauspost/compress github.com/klauspost/compress/fse @@ -348,7 +348,7 @@ github.com/shirou/gopsutil/v4/process # github.com/sirupsen/logrus v1.9.4 ## explicit; go 1.17 github.com/sirupsen/logrus -# github.com/stretchr/testify v1.12.0 +# github.com/stretchr/testify v1.12.1 ## explicit; go 1.17 github.com/stretchr/testify/assert github.com/stretchr/testify/assert/yaml @@ -435,8 +435,8 @@ go.mongodb.org/mongo-driver/x/mongo/driver/operation go.mongodb.org/mongo-driver/x/mongo/driver/session go.mongodb.org/mongo-driver/x/mongo/driver/topology go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage -# go.mongodb.org/mongo-driver/v2 v2.8.2 -## explicit; go 1.19 +# go.mongodb.org/mongo-driver/v2 v2.9.2 +## explicit; go 1.25.0 go.mongodb.org/mongo-driver/v2/bson go.mongodb.org/mongo-driver/v2/event go.mongodb.org/mongo-driver/v2/internal/aws @@ -448,11 +448,13 @@ go.mongodb.org/mongo-driver/v2/internal/bsoncoreutil go.mongodb.org/mongo-driver/v2/internal/bsonutil go.mongodb.org/mongo-driver/v2/internal/codecutil go.mongodb.org/mongo-driver/v2/internal/credproviders +go.mongodb.org/mongo-driver/v2/internal/credutil go.mongodb.org/mongo-driver/v2/internal/csfle go.mongodb.org/mongo-driver/v2/internal/csot go.mongodb.org/mongo-driver/v2/internal/decimal128 go.mongodb.org/mongo-driver/v2/internal/driverutil go.mongodb.org/mongo-driver/v2/internal/handshake +go.mongodb.org/mongo-driver/v2/internal/handshake/operation go.mongodb.org/mongo-driver/v2/internal/httputil go.mongodb.org/mongo-driver/v2/internal/logger go.mongodb.org/mongo-driver/v2/internal/mongoutil @@ -482,7 +484,6 @@ go.mongodb.org/mongo-driver/v2/x/mongo/driver/mnet go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt go.mongodb.org/mongo-driver/v2/x/mongo/driver/mongocrypt/options go.mongodb.org/mongo-driver/v2/x/mongo/driver/ocsp -go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation go.mongodb.org/mongo-driver/v2/x/mongo/driver/session go.mongodb.org/mongo-driver/v2/x/mongo/driver/topology go.mongodb.org/mongo-driver/v2/x/mongo/driver/wiremessage @@ -521,8 +522,11 @@ go.opentelemetry.io/otel/trace go.opentelemetry.io/otel/trace/embedded go.opentelemetry.io/otel/trace/internal/telemetry go.opentelemetry.io/otel/trace/noop -# golang.org/x/crypto v0.55.0 -## explicit; go 1.25.0 +# go.yaml.in/yaml/v3 v3.0.5 +## explicit; go 1.16 +go.yaml.in/yaml/v3 +# golang.org/x/crypto v0.58.0 +## explicit; go 1.26.0 golang.org/x/crypto/argon2 golang.org/x/crypto/bcrypt golang.org/x/crypto/blake2b @@ -538,23 +542,23 @@ golang.org/x/crypto/pbkdf2 golang.org/x/crypto/scrypt golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/net v0.58.0 -## explicit; go 1.25.0 +# golang.org/x/net v0.61.0 +## explicit; go 1.26.0 golang.org/x/net/html golang.org/x/net/html/atom golang.org/x/net/html/charset -# golang.org/x/sync v0.22.0 -## explicit; go 1.25.0 +# golang.org/x/sync v0.24.0 +## explicit; go 1.26.0 golang.org/x/sync/errgroup golang.org/x/sync/singleflight -# golang.org/x/sys v0.47.0 -## explicit; go 1.25.0 +# golang.org/x/sys v0.49.0 +## explicit; go 1.26.0 golang.org/x/sys/cpu golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/text v0.41.0 -## explicit; go 1.25.0 +# golang.org/x/text v0.43.0 +## explicit; go 1.26.0 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/htmlindex @@ -573,6 +577,3 @@ golang.org/x/text/language golang.org/x/text/runes golang.org/x/text/transform golang.org/x/text/unicode/norm -# gopkg.in/yaml.v3 v3.0.1 -## explicit -gopkg.in/yaml.v3