Coverage for cuda/core/_device.pyx: 92.95%
482 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context, Context_check_open
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._resource_handles cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 get_primary_context,
27 get_last_error,
28 as_cu,
29)
31from cuda.core._stream import IsStreamType, Stream, StreamOptions
32from cuda.core._utils.clear_error_support import assert_type
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport default_stream
42from typing import TYPE_CHECKING
44if TYPE_CHECKING:
45 import cuda.core.system # no-cython-lint
46 from cuda.core.graph import GraphBuilder
47 from cuda.core.texture import (
48 MipmappedArray,
49 MipmappedArrayOptions,
50 OpaqueArray,
51 OpaqueArrayOptions,
52 ResourceDescriptor,
53 SurfaceObject,
54 TextureObject,
55 TextureObjectOptions,
56 )
58# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
59# but it seems it is very convenient to expose them for testing purposes...
60_tls = threading.local()
61_lock = threading.Lock()
62cdef bint _is_cuInit = False
64__all__ = ['Device']
67cdef class DeviceProperties:
68 """
69 A class to query various attributes of a CUDA device.
71 Attributes are read-only and provide information about the device.
72 """
73 cdef:
74 int _handle
75 dict _cache
77 def __init__(self, *args, **kwargs) -> None:
78 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2a ~O
80 @classmethod
81 def _init(cls, handle: int) -> DeviceProperties:
82 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
83 self._handle = handle 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
84 self._cache = {} 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
85 return self 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
87 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
88 """Retrieve the attribute value directly from the driver."""
89 cdef int val
90 cdef cydriver.CUresult err
91 with nogil: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
92 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
93 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
94 return <int>default
95 HANDLE_RETURN(err) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
96 return val 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
98 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
99 """Retrieve the attribute value, using cache if applicable."""
100 cached = self._cache.get(attr) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
101 if cached is not None: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
102 return cached 2!f#f$f%f'f(f~mRfUpVpWp(stFPm0nInMmbncndnMcenKmTb@mNcLegn'sOc0G1G2GThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h3G
103 cdef int value = self._get_attribute(attr, default) 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
104 self._cache[attr] = value # setdefault not needed for ints 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
105 return value 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)s:F;F=FnmrF7lsFomtFpmuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeGrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGGHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVFWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR PmbcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`c{c|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
107 @property
108 def max_threads_per_block(self) -> int:
109 """int: Maximum number of threads per block."""
110 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2lGZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E0GrHsHtHuHvHwH1GxHyHzHAHBHCH2GDHEHFHGHHHIH
112 @property
113 def max_block_dim_x(self) -> int:
114 """int: Maximum block dimension X."""
115 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2a tm
117 @property
118 def max_block_dim_y(self) -> int:
119 """int: Maximum block dimension Y."""
120 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2hG
122 @property
123 def max_block_dim_z(self) -> int:
124 """int: Maximum block dimension Z."""
125 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2um
127 @property
128 def max_grid_dim_x(self) -> int:
129 """int: Maximum grid dimension X."""
130 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2wmPm
132 @property
133 def max_grid_dim_y(self) -> int:
134 """int: Maximum grid dimension Y."""
135 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2xm
137 @property
138 def max_grid_dim_z(self) -> int:
139 """int: Maximum grid dimension Z."""
140 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2iG
142 @property
143 def max_shared_memory_per_block(self) -> int:
144 """int: Maximum shared memory available per block in bytes."""
145 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2kGZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E0GrHsHtHuHvHwH1GxHyHzHAHBHCH2GDHEHFHGHHHIH
147 @property
148 def total_constant_memory(self) -> int:
149 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
150 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2VG
152 @property
153 def warp_size(self) -> int:
154 """int: Warp size in threads."""
155 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2ZG
157 @property
158 def max_pitch(self) -> int:
159 """int: Maximum pitch in bytes allowed by memory copies."""
160 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2zm
162 @property
163 def maximum_texture1d_width(self) -> int:
164 """int: Maximum 1D texture width."""
165 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2vG
167 @property
168 def maximum_texture1d_linear_width(self) -> int:
169 """int: Maximum width for a 1D texture bound to linear memory."""
170 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2uG
172 @property
173 def maximum_texture1d_mipmapped_width(self) -> int:
174 """int: Maximum mipmapped 1D texture width."""
175 return self._get_cached_attribute( 2LF
176 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2LF
177 )
179 @property
180 def maximum_texture2d_width(self) -> int:
181 """int: Maximum 2D texture width."""
182 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2CG
184 @property
185 def maximum_texture2d_height(self) -> int:
186 """int: Maximum 2D texture height."""
187 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2yG
189 @property
190 def maximum_texture2d_linear_width(self) -> int:
191 """int: Maximum width for a 2D texture bound to linear memory."""
192 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2BG
194 @property
195 def maximum_texture2d_linear_height(self) -> int:
196 """int: Maximum height for a 2D texture bound to linear memory."""
197 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2zG
199 @property
200 def maximum_texture2d_linear_pitch(self) -> int:
201 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
202 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2AG
204 @property
205 def maximum_texture2d_mipmapped_width(self) -> int:
206 """int: Maximum mipmapped 2D texture width."""
207 return self._get_cached_attribute( 2PF
208 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2PF
209 )
211 @property
212 def maximum_texture2d_mipmapped_height(self) -> int:
213 """int: Maximum mipmapped 2D texture height."""
214 return self._get_cached_attribute( 2OF
215 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2OF
216 )
218 @property
219 def maximum_texture3d_width(self) -> int:
220 """int: Maximum 3D texture width."""
221 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2Em
223 @property
224 def maximum_texture3d_height(self) -> int:
225 """int: Maximum 3D texture height."""
226 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2EG
228 @property
229 def maximum_texture3d_depth(self) -> int:
230 """int: Maximum 3D texture depth."""
231 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2DG
233 @property
234 def maximum_texture3d_width_alternate(self) -> int:
235 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
236 return self._get_cached_attribute( 2SF
237 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2SF
238 )
240 @property
241 def maximum_texture3d_height_alternate(self) -> int:
242 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
243 return self._get_cached_attribute( 2RF
244 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2RF
245 )
247 @property
248 def maximum_texture3d_depth_alternate(self) -> int:
249 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
250 return self._get_cached_attribute( 2QF
251 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2QF
252 )
254 @property
255 def maximum_texturecubemap_width(self) -> int:
256 """int: Maximum cubemap texture width or height."""
257 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2Fm
259 @property
260 def maximum_texture1d_layered_width(self) -> int:
261 """int: Maximum 1D layered texture width."""
262 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2tG
264 @property
265 def maximum_texture1d_layered_layers(self) -> int:
266 """int: Maximum layers in a 1D layered texture."""
267 return self._get_cached_attribute( 2KF
268 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2KF
269 )
271 @property
272 def maximum_texture2d_layered_width(self) -> int:
273 """int: Maximum 2D layered texture width."""
274 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2Dm
276 @property
277 def maximum_texture2d_layered_height(self) -> int:
278 """int: Maximum 2D layered texture height."""
279 return self._get_cached_attribute( 2MF
280 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2MF
281 )
283 @property
284 def maximum_texture2d_layered_layers(self) -> int:
285 """int: Maximum layers in a 2D layered texture."""
286 return self._get_cached_attribute( 2NF
287 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2NF
288 )
290 @property
291 def maximum_texturecubemap_layered_width(self) -> int:
292 """int: Maximum cubemap layered texture width or height."""
293 return self._get_cached_attribute( 2#l
294 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2#l
295 )
297 @property
298 def maximum_texturecubemap_layered_layers(self) -> int:
299 """int: Maximum layers in a cubemap layered texture."""
300 return self._get_cached_attribute( 2TF
301 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2TF
302 )
304 @property
305 def maximum_surface1d_width(self) -> int:
306 """int: Maximum 1D surface width."""
307 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2oG
309 @property
310 def maximum_surface2d_width(self) -> int:
311 """int: Maximum 2D surface width."""
312 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2Cm
314 @property
315 def maximum_surface2d_height(self) -> int:
316 """int: Maximum 2D surface height."""
317 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2Am
319 @property
320 def maximum_surface3d_width(self) -> int:
321 """int: Maximum 3D surface width."""
322 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2rG
324 @property
325 def maximum_surface3d_height(self) -> int:
326 """int: Maximum 3D surface height."""
327 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2qG
329 @property
330 def maximum_surface3d_depth(self) -> int:
331 """int: Maximum 3D surface depth."""
332 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2pG
334 @property
335 def maximum_surface1d_layered_width(self) -> int:
336 """int: Maximum 1D layered surface width."""
337 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2nG
339 @property
340 def maximum_surface1d_layered_layers(self) -> int:
341 """int: Maximum layers in a 1D layered surface."""
342 return self._get_cached_attribute( 2FF
343 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2FF
344 )
346 @property
347 def maximum_surface2d_layered_width(self) -> int:
348 """int: Maximum 2D layered surface width."""
349 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2Bm
351 @property
352 def maximum_surface2d_layered_height(self) -> int:
353 """int: Maximum 2D layered surface height."""
354 return self._get_cached_attribute( 2GF
355 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2GF
356 )
358 @property
359 def maximum_surface2d_layered_layers(self) -> int:
360 """int: Maximum layers in a 2D layered surface."""
361 return self._get_cached_attribute( 2HF
362 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2HF
363 )
365 @property
366 def maximum_surfacecubemap_width(self) -> int:
367 """int: Maximum cubemap surface width."""
368 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2sG
370 @property
371 def maximum_surfacecubemap_layered_width(self) -> int:
372 """int: Maximum cubemap layered surface width."""
373 return self._get_cached_attribute( 2JF
374 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2JF
375 )
377 @property
378 def maximum_surfacecubemap_layered_layers(self) -> int:
379 """int: Maximum layers in a cubemap layered surface."""
380 return self._get_cached_attribute( 2IF
381 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2IF
382 )
384 @property
385 def max_registers_per_block(self) -> int:
386 """int: Maximum number of 32-bit registers available to a thread block."""
387 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2jG
389 @property
390 def clock_rate(self) -> int:
391 """int: Typical clock frequency in kilohertz."""
392 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 29f[manjbGnR
394 @property
395 def texture_alignment(self) -> int:
396 """int: Alignment requirement for textures."""
397 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2TG
399 @property
400 def texture_pitch_alignment(self) -> int:
401 """int: Pitch alignment requirement for textures."""
402 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2UG
404 @property
405 def gpu_overlap(self) -> bool:
406 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
407 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2}F
409 @property
410 def multiprocessor_count(self) -> int:
411 """int: Number of multiprocessors on device."""
412 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2JmPm
414 @property
415 def kernel_exec_timeout(self) -> bool:
416 """bool: Specifies whether there is a run time limit on kernels."""
417 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 29H
419 @property
420 def integrated(self) -> bool:
421 """bool: Device is integrated with host memory."""
422 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2dG
424 @property
425 def can_map_host_memory(self) -> bool:
426 """bool: Device can map host memory into CUDA address space."""
427 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2=F
429 @property
430 def compute_mode(self) -> int:
431 """int: Compute mode (See CUcomputemode for details)."""
432 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 28H
434 @property
435 def concurrent_kernels(self) -> bool:
436 """bool: Device can possibly execute multiple kernels concurrently."""
437 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2?F
439 @property
440 def ecc_enabled(self) -> bool:
441 """bool: Device has ECC support enabled."""
442 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2^F
444 @property
445 def pci_bus_id(self) -> int:
446 """int: PCI bus ID of the device."""
447 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2OG
449 @property
450 def pci_device_id(self) -> int:
451 """int: PCI device ID of the device."""
452 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2PG
454 @property
455 def pci_domain_id(self) -> int:
456 """int: PCI domain ID of the device."""
457 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2QG
459 @property
460 def tcc_driver(self) -> bool:
461 """bool: Device is using TCC driver model."""
462 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2SG
464 @property
465 def memory_clock_rate(self) -> int:
466 """int: Peak memory clock frequency in kilohertz."""
467 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2!H
469 @property
470 def global_memory_bus_width(self) -> int:
471 """int: Global memory bus width in bits."""
472 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2`F
474 @property
475 def l2_cache_size(self) -> int:
476 """int: Size of L2 cache in bytes."""
477 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2rm
479 @property
480 def max_threads_per_multiprocessor(self) -> int:
481 """int: Maximum resident threads per multiprocessor."""
482 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2mGZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E
484 @property
485 def unified_addressing(self) -> bool:
486 """bool: Device shares a unified address space with the host."""
487 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a WG
489 @property
490 def compute_capability_major(self) -> int:
491 """int: Major compute capability version number."""
492 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)stFjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf
494 @property
495 def compute_capability_minor(self) -> int:
496 """int: Minor compute capability version number."""
497 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)spmjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf
499 @property
500 def global_l1_cache_supported(self) -> bool:
501 """bool: Device supports caching globals in L1."""
502 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2_F
504 @property
505 def local_l1_cache_supported(self) -> bool:
506 """bool: Device supports caching locals in L1."""
507 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2sm
509 @property
510 def max_shared_memory_per_multiprocessor(self) -> int:
511 """int: Maximum shared memory available per multiprocessor in bytes."""
512 return self._get_cached_attribute( 2EFZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E
513 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2EFZF0F1F2F3F4F1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E
514 )
516 @property
517 def max_registers_per_multiprocessor(self) -> int:
518 """int: Maximum number of 32-bit registers available per multiprocessor."""
519 return self._get_cached_attribute( 2DF1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E
520 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2DF1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E
521 )
523 @property
524 def managed_memory(self) -> bool:
525 """bool: Device can allocate managed memory on this system."""
526 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgfG
528 @property
529 def multi_gpu_board(self) -> bool:
530 """bool: Device is on a multi-GPU board."""
531 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2IG
533 @property
534 def multi_gpu_board_group_id(self) -> int:
535 """int: Unique id for a group of devices on the same multi-GPU board."""
536 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2JG
538 @property
539 def host_native_atomic_supported(self) -> bool:
540 """bool: Link between the device and the host supports all native atomic operations."""
541 return bool( 2AF
542 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2AF
543 )
545 @property
546 def single_to_double_precision_perf_ratio(self) -> int:
547 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
548 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2#H
550 @property
551 def pageable_memory_access(self) -> bool:
552 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
553 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2NG
555 @property
556 def concurrent_managed_access(self) -> bool:
557 """bool: Device can coherently access managed memory concurrently with the CPU."""
558 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2~E!f#f$f%f'f(fZn-E.E/E:E;E=E[f]f^f_f`f{f|f}f~f+fRfag,fbg-fcgdgegfggghgigjgkglg@FR ngogpg.f6f0n1nPo2nInQoRo.n?mSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{E4o#n
560 @property
561 def compute_preemption_supported(self) -> bool:
562 """bool: Device supports compute preemption."""
563 return bool( 2uF
564 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2uF
565 )
567 @property
568 def can_use_host_pointer_for_registered_mem(self) -> bool:
569 """bool: Device can access host registered memory at the same virtual address as the CPU."""
570 return bool( 27l
571 self._get_cached_attribute( 27l
572 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 27l
573 )
574 )
576 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
578 @property
579 def cooperative_launch(self) -> bool:
580 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
581 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2qmPm
583 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
585 @property
586 def max_shared_memory_per_block_optin(self) -> int:
587 """int: Maximum optin shared memory per block."""
588 return self._get_cached_attribute( 2!l
589 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2!l
590 )
592 @property
593 def pageable_memory_access_uses_host_page_tables(self) -> bool:
594 """bool: Device accesses pageable memory via the host's page tables."""
595 return bool( 2mF
596 self._get_cached_attribute( 2mF
597 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2mF
598 )
599 )
601 @property
602 def direct_managed_mem_access_from_host(self) -> bool:
603 """bool: The host can directly access managed memory on the device without migration."""
604 return bool( 2gF
605 self._get_cached_attribute( 2gF
606 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2gF
607 )
608 )
610 @property
611 def virtual_memory_management_supported(self) -> bool:
612 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
613 return bool( 2oFNcLe)f*fgn$n'sOc8f
614 self._get_cached_attribute( 2oFNcLe)f*fgn$n'sOc8f
615 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2oFNcLe)f*fgn$n'sOc8f
616 )
617 )
619 @property
620 def handle_type_posix_file_descriptor_supported(self) -> bool:
621 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
622 return bool( 2U l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbiFUbVbWbXbP Q S T
623 self._get_cached_attribute( 2U l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbiFUbVbWbXbP Q S T
624 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2U l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbiFUbVbWbXbP Q S T
625 )
626 )
628 @property
629 def handle_type_win32_handle_supported(self) -> bool:
630 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
631 return bool( 2yF
632 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2yF
633 )
635 @property
636 def handle_type_win32_kmt_handle_supported(self) -> bool:
637 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
638 return bool( 2jF
639 self._get_cached_attribute( 2jF
640 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2jF
641 )
642 )
644 @property
645 def max_blocks_per_multiprocessor(self) -> int:
646 """int: Maximum number of blocks per multiprocessor."""
647 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2vm
649 @property
650 def generic_compression_supported(self) -> bool:
651 """bool: Device supports compression of memory."""
652 return bool( 2vF
653 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2vF
654 )
656 @property
657 def max_persisting_l2_cache_size(self) -> int:
658 """int: Maximum L2 persisting lines capacity setting in bytes."""
659 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2ym
661 @property
662 def max_access_policy_window_size(self) -> int:
663 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
664 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2gG
666 @property
667 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
668 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
669 return bool( 2hF
670 self._get_cached_attribute( 2hF
671 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2hF
672 )
673 )
675 @property
676 def reserved_shared_memory_per_block(self) -> int:
677 """int: Shared memory reserved by CUDA driver per block in bytes."""
678 return self._get_cached_attribute( 2VF
679 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2VF
680 )
682 @property
683 def sparse_cuda_array_supported(self) -> bool:
684 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
685 return bool( 2WF
686 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2WF
687 )
689 @property
690 def read_only_host_register_supported(self) -> bool:
691 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
692 return bool( 2UF
693 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2UF
694 )
696 @property
697 def memory_pools_supported(self) -> bool:
698 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
699 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2~E@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsWsXsYsZs0s1s2s3s(F)F*F+F,F-F/f!fWiUfVfXiDeYiZi0i1i2i:f#f3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f/iYfZf:iFe;i=i?i@i[i=f%f]i0f1f^iGe_i`i{i|i}i?f'f~i2f3fajHebjcjdjejfj@f(fgj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.F/F4s5s6s}q~q}oNmOm7s8s9s~oapbp!scpdpepfp#s$sgp%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jFnZnU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbHmngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?m3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{E:j4oLn#nkr;j7fMc=jUbVbWb?jXb@j[j]j^j_j`j{j|j}j~jMe-g.gThakbkckNeUhVhdkek; = ? @ [ fkgkhkikjkohphqhrhshkklkmknkokWhOe/g:gXhpkqkrkPeYhZhsktk;g=g?g@g[gQe]g^gukvkwk0h1hxkykzkAkBkCkDk$b%b'b(b)bSeTeUeEkFkGkHkIkVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b+b,b-b.bTkUkVkWkXkthuhvhwhxh3h4h5h6h7hZe}g~g8hYkZk0k0e9h!h1k2k} ~ abbbcb3k4k5k6k7kyhzhAhBhCh8k9k!k#k$k#h1eahbh$h%k'k(k2e%h'h)k*kchdhehfhgh3ehhih+k,k-k(h)h.k/k:k;k=k?k@k?b@b[b]b^b5e6e7e[k]k^k_k`k8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`b{b|b}bglhliljlklDhEhFhGhHhP Q S T llmlnlolpl+h,h-h.h/hqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTl3G
701 @property
702 def gpu_direct_rdma_supported(self) -> bool:
703 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
704 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2{FOc8f
706 @property
707 def gpu_direct_rdma_flush_writes_options(self) -> int:
708 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
709 return self._get_cached_attribute( 2wF
710 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2wF
711 )
713 @property
714 def gpu_direct_rdma_writes_ordering(self) -> int:
715 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
716 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2|F
718 @property
719 def mempool_supported_handle_types(self) -> int:
720 """int: Handle types supported with mempool based IPC."""
721 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2Im
723 @property
724 def deferred_mapping_cuda_array_supported(self) -> bool:
725 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
726 return bool( 2fF
727 self._get_cached_attribute( 2fF
728 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2fF
729 )
730 )
732 @property
733 def numa_config(self) -> int:
734 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
735 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2LG
737 @property
738 def numa_id(self) -> int:
739 """int: NUMA node ID of the GPU memory."""
740 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2MG
742 @property
743 def multicast_supported(self) -> bool:
744 """bool: Device supports switch multicast and reduction operations."""
745 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2KG
747 @property
748 def surface_alignment(self) -> int:
749 """int: Surface alignment requirement in bytes."""
750 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2RG
752 @property
753 def async_engine_count(self) -> int:
754 """int: Number of asynchronous engines."""
755 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2:F
757 @property
758 def can_tex2d_gather(self) -> bool:
759 """bool: True if device supports 2D texture gather operations, False if not."""
760 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2nm
762 @property
763 def maximum_texture2d_gather_width(self) -> int:
764 """int: Maximum 2D texture gather width."""
765 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2xG
767 @property
768 def maximum_texture2d_gather_height(self) -> int:
769 """int: Maximum 2D texture gather height."""
770 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2wG
772 @property
773 def stream_priorities_supported(self) -> bool:
774 """bool: True if device supports stream priorities, False if not."""
775 return bool( 2XF
776 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2XF
777 )
779 @property
780 def can_flush_remote_writes(self) -> bool:
781 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
782 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2;F
784 @property
785 def host_register_supported(self) -> bool:
786 """bool: Device supports host memory registration via cudaHostRegister."""
787 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2cG
789 @property
790 def timeline_semaphore_interop_supported(self) -> bool:
791 """bool: External timeline semaphore interop is supported on the device."""
792 return bool( 2nF
793 self._get_cached_attribute( 2nF
794 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2nF
795 )
796 )
798 @property
799 def cluster_launch(self) -> bool:
800 """bool: Indicates device supports cluster launch."""
801 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2om
803 @property
804 def can_use_64_bit_stream_mem_ops(self) -> bool:
805 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
806 return bool( 2rF
807 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2rF
808 )
810 @property
811 def can_use_stream_wait_value_nor(self) -> bool:
812 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
813 return bool( 2sF
814 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2sF
815 )
817 @property
818 def dma_buf_supported(self) -> bool:
819 """bool: Device supports buffer sharing with dma_buf mechanism."""
820 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2]F
822 # Start of CUDA 12 device attributes
824 @property
825 def ipc_event_supported(self) -> bool:
826 """bool: Device supports IPC Events."""
827 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2eG
829 @property
830 def mem_sync_domain_count(self) -> int:
831 """int: Number of memory domains the device supports."""
832 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2GG
834 @property
835 def tensor_map_access_supported(self) -> bool:
836 """bool: Device supports accessing memory using Tensor Map."""
837 return bool( 2YFIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g
838 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2YFIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g
839 )
841 @property
842 def handle_type_fabric_supported(self) -> bool:
843 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
844 return bool( 2xF
845 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2xF
846 )
848 @property
849 def unified_function_pointers(self) -> bool:
850 """bool: Device supports unified function pointers."""
851 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2XG
853 @property
854 def mps_enabled(self) -> bool:
855 """bool: Indicates if contexts created on this device will be shared via MPS."""
856 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2HG
858 @property
859 def host_numa_id(self) -> int:
860 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
861 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2-E.E:E;El m n o p q r s t u v w x y z A B C D E F G H I J K L M N O bGIn*jqg+j,j-j.jrg/jf @mfn
863 @property
864 def d3d12_cig_supported(self) -> bool:
865 """bool: Device supports CIG with D3D12."""
866 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2[F
868 @property
869 def mem_decompress_algorithm_mask(self) -> int:
870 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
871 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2FG
873 @property
874 def mem_decompress_maximum_length(self) -> int:
875 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
876 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2Gm
878 @property
879 def vulkan_cig_supported(self) -> bool:
880 """bool: Device supports CIG with Vulkan."""
881 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2YG
883 @property
884 def gpu_pci_device_id(self) -> int:
885 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
887 Returns 0 if the driver does not support this query.
888 """
889 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2~F
891 @property
892 def gpu_pci_subsystem_id(self) -> int:
893 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
895 Returns 0 if the driver does not support this query.
896 """
897 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2aG
899 @property
900 def host_numa_virtual_memory_management_supported(self) -> bool:
901 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
902 return bool( 2kF
903 self._get_cached_attribute( 2kF
904 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2kF
905 )
906 )
908 @property
909 def host_numa_memory_pools_supported(self) -> bool:
910 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
911 return bool( 2lrmr[mxnJHKHLHMH;sNHUpVpWpnryn=s(s?sBFqgrgf
912 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2lrmr[mxnJHKHLHMH;sNHUpVpWpnryn=s(s?sBFqgrgf
913 )
915 # Start of CUDA 13 device attributes
917 @property
918 def host_numa_multinode_ipc_supported(self) -> bool:
919 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
920 return bool( 2CF
921 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2CF
922 )
924 @property
925 def host_memory_pools_supported(self) -> bool:
926 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
927 IF CUDA_CORE_BUILD_MAJOR < 13:
928 return False
929 ELSE:
930 return bool( 2~E~ml m n o p q r s t u v w x y z A B C D E F G H I J K L M N O zFMmYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j5odnMcenXJKmf Tb|E@mfn}E
931 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2~E~ml m n o p q r s t u v w x y z A B C D E F G H I J K L M N O zFMmYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j5odnMcenXJKmf Tb|E@mfn}E
932 )
934 @property
935 def host_virtual_memory_management_supported(self) -> bool:
936 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
937 IF CUDA_CORE_BUILD_MAJOR < 13:
938 return False
939 ELSE:
940 return bool( 2lF
941 self._get_cached_attribute( 2lF
942 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2lF
943 )
944 )
946 @property
947 def host_alloc_dma_buf_supported(self) -> bool:
948 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
949 IF CUDA_CORE_BUILD_MAJOR < 13:
950 return False
951 ELSE:
952 return bool( 29l
953 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 29l
954 )
956 @property
957 def only_partial_host_native_atomic_supported(self) -> bool:
958 """bool: Link between the device and the host supports only some native atomic operations."""
959 IF CUDA_CORE_BUILD_MAJOR < 13:
960 return False
961 ELSE:
962 return bool( 28l
963 self._get_cached_attribute( 28l
964 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 28l
965 )
966 )
969class Device:
970 """Represent a GPU and act as an entry point for cuda.core features.
972 This is a singleton object that helps ensure interoperability
973 across multiple libraries imported in the process to both see
974 and use the same GPU device.
976 While acting as the entry point, many other CUDA resources can be
977 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
978 resource created through this device, will continue to refer to
979 this device's context.
981 Newly returned :obj:`~_device.Device` objects are thread-local singletons
982 for a specified device.
984 Note
985 ----
986 Will not initialize the GPU.
988 Parameters
989 ----------
990 device_id : int, optional
991 Device ordinal to return a :obj:`~_device.Device` object for.
992 Default value of `None` return the currently used device.
994 """
995 __slots__ = (
996 "_device_id",
997 "_memory_resource",
998 "_has_inited",
999 "_properties",
1000 "_resources",
1001 "_uuid",
1002 "_context",
1003 "__weakref__",
1004 )
1006 def __new__(cls, device_id: Device | int | None = None) -> Device:
1007 if isinstance(device_id, Device): 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vAMFjBMGjCMHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r zN3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSngN4jSfTfAL5jLm(yAN6jhN7jBN8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzuMkrOp)oDM;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3rEM=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUb!LVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1008 return device_id 25s6s}oNmOm7s8s9s~oapbp!scpdpepfp#s$sgpAMBMCM%n'n(n)n*n+n,n-nFnU %HV 'HW X GpY (HZ 0 zN1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - )H*H. / : 5F6F)K*K+K,KgNTfALLmANhNBNBLCL=m3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)j:jLnuMDM7fEMLegn'sOc+o,o-o5JtIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIiI!LjIkIP Q
1010 Device_ensure_cuda_initialized() 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1011 device_id = Device_resolve_device_id(device_id) 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1012 devices = Device_ensure_tls_devices(cls) 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1014 try: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1015 return devices[device_id] 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1016 except IndexError: 2xLyL
1017 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2xLyL
1019 def _check_context_initialized(self) -> None:
1020 if not self._has_inited: 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%IonpnqnpoXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3sUfVfWfXfYfZf0f1f2f3f4f5f4sVH4GWHXH`J{JYJ}q(I)I*I~q+I}oNmOm|mwoxo~oapbpcpdpepfpgpYH|JyozoAoBoCoDo%sAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJWLlm}J,I-I~JaKEoFoGobKcKdKeKfKZJ0J1J2JXLgK.I/IhKiKHoIoJojKkKlKmKnKCNoK:I;IpKqKKoLoMorKsKtKuKvKYLmmOHPHNoZL0LZH0H:mrnOo1Hsntnunvn}mwn;m:K:h;h;K=hQH/nRH:n?h@h;nFM[hGM]h^h=K_h5G`h?K{h=n?n@n6G@K|h[K}h]K~h^Kaibicidieifigihiii[n]n^n_n`n{n|n}n~naoDNbocoENdoFNeofoGNgoHNhoiojokolNmNnNoNpNqNrNwKxKsNtNuNvNwNxNyN$HINJNKNLNMNNNONPNQNRNSNTNUNVN9fWN[mXN1L2L3L4L5L6L7L8LHMYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOyKzKAKBKCKDK]m^m3JEK|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnhOiOjOkOlOmOnOoOpOqOrOsOtOSHloinR Pm_Hzn`mNnjnOnPnQnAnBnjikiuOvOIMwOJMxOyOKMLMzOAOBOMMCONMOMPMQMRMSMTMUMVMDOWMXMYMZMEO0M1MFOGOHOIO2MJO3MKOLO4M5MMONOOO6MPO7M8M9M!M#M$M%M'M(MQO)M*M+M,MRO-M.MSOTOUOVO/MWO:MXOYO;M=MZO0O1O?M2O@M[M]M^M_M`M{M|M}M3O~MaNbNcN4OdNeN5O6ORnCnSnLmTnUnVnWnXnYn.n=m?mMmuMDMDn7OKmf TbEMEntJuJ,g%l'l#L(l9p*r)l+r!p#p$p,r*l-r+l.r%p'p(p/r-g.g; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb)p*poh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_r[l`r+p,p-p{r/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlqth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfs]l@omqnqoqhs}g~g} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bpqqqyh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqscmrsrqsqtqssahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVqDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsP Q S T dmCsWqXqYqDsem|oZq0q1qFsfmGs2q3q4qHsgmIs5q6q7qJshmKs8q9q!qLsimMs#q$q%qNsjmOs'q(q)qPskmQs*q+q,qRsSKAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#K$KWJ%K'KKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HFJ%J'J(JGJ)JPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHwM
1021 raise CUDAError(
1022 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
1023 )
1026 @classmethod
1027 def get_all_devices(cls) -> tuple[Device, ...]:
1028 """
1029 Query the available device instances.
1031 Returns
1032 -------
1033 tuple of Device
1034 A tuple containing instances of available devices.
1035 """
1036 return cls._get_all_devices_from_cuda_driver() 2orRfqrrrsrdFULVL8FeFeLZIjikiWrXrYrZr0r1r2r0I1I3r4r5r6r7r8r9r!r#r$r%r'r(r)rtIuIvIwIxIyIzIAIBICIDIEIFIGIHIII@ogs|oEs3G2I3I4I5IxMyMzM
1038 @classmethod
1039 def _get_all_devices_from_cuda_driver(cls):
1040 Device_ensure_cuda_initialized() 2orRfqrrrsrdFULVL8FeFeLZIjikiWrXrYrZr0r1r2r0I1I3r4r5r6r7r8r9r!r#r$r%r'r(r)rtIuIvIwIxIyIzIAIBICIDIEIFIGIHIII@ogs|oEs3G2I3I4I5IxMyMzM
1041 return tuple(Device_ensure_tls_devices(cls)) 2orRfqrrrsrdFULVL8FeFeLZIjikiWrXrYrZr0r1r2r0I1I3r4r5r6r7r8r9r!r#r$r%r'r(r)rtIuIvIwIxIyIzIAIBICIDIEIFIGIHIII@ogs|oEs3G2I3I4I5IxMyMzM
1043 def to_system_device(self) -> 'cuda.core.system.Device':
1044 """
1045 Get the corresponding :class:`cuda.core.system.Device` (which is used
1046 for NVIDIA Management Library (NVML) access) for this
1047 :class:`cuda.core.Device` (which is used for CUDA access).
1049 The devices are mapped to one another by their UUID.
1051 Returns
1052 -------
1053 cuda.core.system.Device
1054 The corresponding system-level device instance used for NVML access.
1055 """
1056 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2dFULVLeF7F
1058 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2dFULVLeF7F
1059 raise RuntimeError(
1060 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x"
1061 )
1063 from cuda.core.system import Device as SystemDevice 2dFULVLeF7F
1064 return SystemDevice(uuid=self.uuid) 2dFULVLeF7F
1066 @property
1067 def device_id(self) -> int:
1068 """Return device ordinal."""
1069 return self._device_id 2@s[s/f!f:f#f;f$f=f%f?f'f@f(f5s6s}oNmOmSpTp|m7s8s9s~oapbp!scpdpepfp#s$sgpAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJ(KaPOHPHFn:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h/E6G|h}h~haibicidieifigihiii:H;H=H=ElNmN_KRL,E?HfIbPnNoNpNqNrNSLsNtNprU $L%HV 'H4pW lr@HX mrGpY (HZ 0 zN9f1 Qm2 3 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( 5p) Up9L* Vp6p+ Wp7p, nrpF- )H*H]H. ^H/ 8p: 5F6F)K*K+K,K)s]m^meL2H{I3HSHloinTLjikigNSfTfALLmANhNBNBLCLaL6f2n=m?m3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)j:jLnuMDM7fEMtJuJNcLegn'sOc5J6o7obLcL,g%l'l1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+EtIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIiI!LjIkI(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6lDLELP Q dmemfmgmhmimjmkmcI*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOiPiQh.HAPwM
1071 @property
1072 def pci_bus_id(self) -> str:
1073 """Return a PCI Bus Id string for this device."""
1074 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 28F{I7F
1075 return bus_id[:12].decode() 28F{I7F
1077 def can_access_peer(self, peer: Device | int) -> bool:
1078 """Check if this device can access memory from the specified peer device.
1080 Queries whether peer-to-peer memory access is supported between this
1081 device and the specified peer device.
1083 Parameters
1084 ----------
1085 peer : Device | int
1086 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1087 """
1088 peer = Device(peer)
1089 cdef int d1 = <int> self.device_id
1090 cdef int d2 = <int> peer.device_id
1091 if d1 == d2:
1092 return True
1093 cdef int value = 0
1094 with nogil:
1095 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1096 return bool(value)
1098 @property
1099 def uuid(self) -> str:
1100 """Return a UUID for the device.
1102 Returns 16-octets identifying the device. If the device is in
1103 MIG mode, returns its MIG UUID which uniquely identifies the
1104 subscribed MIG compute instance.
1106 Note
1107 ----
1108 MIG UUID is only returned when device is in MIG mode and the
1109 driver is older than CUDA 11.4.
1111 The UUID is cached after first access to avoid repeated CUDA API calls.
1113 """
1114 cdef cydriver.CUuuid uuid
1115 cdef cydriver.CUdevice dev
1116 cdef bytes uuid_b
1117 cdef str uuid_hex
1119 if self._uuid is None: 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdFULVL8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1120 dev = self._device_id 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1121 with nogil: 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1122 IF CUDA_CORE_BUILD_MAJOR == 12:
1123 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1124 ELSE: # 13.0+
1125 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1126 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1127 uuid_hex = uuid_b.hex() 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1128 # 8-4-4-4-12
1129 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdF8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1130 return self._uuid 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbdFULVL8FeFpIaIqIrI7F3H$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1132 @property
1133 def name(self) -> str:
1134 """Return the device name."""
1135 # Use 256 characters to be consistent with CUDA Runtime
1136 cdef int LENGTH = 256 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1137 cdef bytes name = bytes(LENGTH) 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1138 cdef char* name_ptr = name 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1139 cdef cydriver.CUdevice this_dev = self._device_id 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1140 with nogil: 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1141 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1142 name = name.split(b"\0")[0] 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1143 return name.decode() 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7G2HqM
1145 @property
1146 def properties(self) -> DeviceProperties:
1147 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1148 if self._properties is None: 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)sTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
1149 self._properties = DeviceProperties._init(self._device_id) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbmgnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ljbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
1151 return self._properties 2a ~EnhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s9F!F#F$F%FQiRiSiTiUiVi'FSsTsUsVsqo+s,srosotouovoWsXsYsZs0s1s2s3s-s(F)F*F+F,F-F.q/q/f!f$eWiUfVfXiDeYiZi0i1i2i:f#f%e3iWfXf4iEe5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iFe;i=i?i@i[i=f%f(e]i0f1f^iGe_i`i{i|i}i?f'f)e~i2f3fajHebjcjdjejfj@f(f*egj4f5fhjIeijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEj.s.F/F:q/s4s:s;q=q?q@q[q]q5s^q_q`q{q|q6s}q~q}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparyozoAoBoCoDo%sFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjZj0j1j2jlmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;mFnZn~m-E.E/E:E;E=E[f]f^f_f`f{f|f}fhp~f+fRfag,fbg-fcgdgegfggghgigjgkglgU l V m W lrn X mro Y p Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEb2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v JHw KHx y z LHA MHB C D ;sE NHF G ) UpH * VpI + WpJ , nrK - ynL FbGb. =sM / (sN : ?sO HbIbJbKbLbMbmg)sTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZGjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpg4jSfTf5jLm6j7j8j9j!j#j.f6f0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnkr;j7fMcenXJKmf Tb|E@mfn}E=jNcLe)f*fgn$n'sOc8fipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'lZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXbLd@j+e[j]jMd,e^j_jNdOd`j-e{j|jPd.e}j~jQdMe-g.gThakbkckNeUhVhdkek; h = ? b i @ [ c YbZb/e:e;e=e?efk@egkhk[eikjkoh!bphqhkb#brhshlbkk]elkmkRd^enkokSdWhOe/g:gXhpkqkrkPeYhZhsktk;g0b=g?g] 1b@g[g^ Qe]g^gukvkwk0h1hxkykzk_eAkBk`eCkDk$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFkGk3dcfHkIk4dVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkVkefWkXkth/buhvhmb:bwhxhnb3hXe4h5h)dYe6h7h*dZe}g~g8hYkZk0k0e9h!h1k2k} j ~ abd k bbcbe 4b5bffgfhfifjf3kkf4k5klf6k7kyh;bzhAhob=bBhChpb8kmf9k!k+dnf#k$k,d#h1eahbh$h%k'k(k2e%h'h)k*kch6bdhehdb7bfhgheb3ehhih+k,k-k(h)h.k/k:kof;k=kpf?k@k?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf]k^k^dwf_k`k_d8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlilyfjlklDh~bEhFhqbacGhHhrbP Q S T gehellzfmlnlieAfolpljekeleme+h!e,h-hne#e.h/hoeqlBfrlslpeCftlulqevlDfwlxlreEfylzlseAlFfBlClteGfDlElueFlHfGlHlveIfIlJlweKlJfLlMlxeKfNlOlyezePlLfQlRlAeMfSlTlBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp3GIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+g
1153 @property
1154 def resources(self) -> DeviceResources:
1155 """Return the hardware resource query namespace for this device."""
1156 if self._resources is None: 2trUlurVlg JeKeWlXlYlZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr2lVr
1157 self._resources = DeviceResources._init(self._device_id) 2trUlurVlg JeKeWlXlYlZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr2lVr
1158 return self._resources 2trUlurVlg JeKeWlXlYlZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr2lVr
1160 @property
1161 def compute_capability(self) -> ComputeCapability:
1162 """Return a named tuple with 2 fields: major and minor."""
1163 cdef DeviceProperties prop = self.properties 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFpNfOfPfQf
1164 cached = prop._cache.get("compute_capability") 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFpNfOfPfQf
1165 if cached is not None: 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR Pm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFpNfOfPfQf
1166 return cached 2a {m%n'n(n)n*n+n,n-n8o9o!o}mmgGnHng JeKePm~IcJ_H8G9G!G#G$G%G'G(GNbOb)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`cvJ{cwJ|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdxJtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdb c kblbRdSd] ^ $bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe3d4d*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dmbnbXe)dYe*dd e obpb+d,ddbeb?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e^d_d_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeqbrbgeheiejekeleme!ene#eoepeqereseteuevewexeyezeAeBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp
1167 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf
1168 return prop._cache.setdefault("compute_capability", cc) 2a nhknlnRmSmTmmnUmnnmo{mVmnoWmooonpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/mqo+s,srosotouovo-s.q/q$eDe%eEe'eFe(eGe)eHe*eIe.s:q/s:s;q=q?q@q[q]q^q_q`q{q|qNmOmSpTp|mwoxoaryozoAoBoCoDo%n'n(n)n*n+n,n-n8o9o!olmEoFoGobrcrdrerfrgrhrHoIoJoirKoLoMommjrNo:mrnOosntnunvn}mwn;m9f[mmg)sjbGnHng JeKe}H~HR bcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpvgwgxgygzgAgBgCgDgApEgFgGgHgBpsbCpDptbEpFpNfOfPfQf
1170 @property
1171 def arch(self) -> str:
1172 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1173 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a %n'n(n)n*n+n,n-n8o9o!omgHng JeKe_HecsIfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcipPcQc6oRc7oScTcUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8c%l'l9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdb c kblbRdSd] ^ $bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2d3d4d*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dmbnb)d*dd e obpb+d,ddbeb?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d^d_d_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeqbrbgeheiejekelemeneoepeqereseteuevewexeyezeAeBeCetgupvpugwpxpypzpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFp
1175 @property
1176 def context(self) -> Context:
1177 """Return the :obj:`~_context.Context` associated with this device.
1179 Note
1180 ----
1181 Device must be initialized.
1183 """
1184 self._check_context_initialized() 2+r.roh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_r`r:oPp@oyh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqsrs^oQpCs|oGsIsKsMsOsQs
1185 return self._context 2+r.roh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_r`r:oPp@oyh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqsrs^oQpCs|oGsIsKsMsOsQs
1187 @property
1188 def memory_resource(self) -> MemoryResource:
1189 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1190 cdef int attr, device_id
1191 if self._memory_resource is None: 2OHPH:h;h=hQHRH!O?h#O@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh.H8OwM
1192 # If the device is in TCC mode, or does not support memory pools for some other reason,
1193 # use the SynchronousMemoryResource which does not use memory pools.
1194 device_id = self._device_id 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H
1195 with nogil: 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H
1196 HANDLE_RETURN( 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H
1197 cydriver.cuDeviceGetAttribute( 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H
1198 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1199 )
1200 )
1201 if attr == 1: 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh.H
1202 from cuda.core._memory import DeviceMemoryResource 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdItiIhuiviJhKhxiyiAiLhCiEiMhGiNhIiJiLiOhPhQh.H
1203 self._memory_resource = DeviceMemoryResource(self._device_id) 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdItiIhuiviJhKhxiyiAiLhCiEiMhGiNhIiJiLiOhPhQh.H
1204 else:
1205 from cuda.core._memory._legacy import _SynchronousMemoryResource 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFrisiIhwiJhKhziBiLhDiMhFiNhHiKiMiOhNiPhOiPiQh.H
1206 self._memory_resource = _SynchronousMemoryResource(self._device_id) 2OHPH:h;h=hQHRH?h@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFrisiIhwiJhKhziBiLhDiMhFiNhHiKiMiOhNiPhOiPiQh.H
1208 return self._memory_resource 2OHPH:h;h=hQHRH!O?h#O@h/H[h]h^h_h5G`h{h6G|h}h~haibicidieifigihiii:H;H=H]m^mSHloinjiki,g%l'l(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm*sJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh.H8OwM
1210 @memory_resource.setter
1211 def memory_resource(self, mr: MemoryResource) -> None:
1212 from cuda.core._memory import MemoryResource
1213 assert_type(mr, MemoryResource)
1214 self._memory_resource = mr
1216 @property
1217 def default_stream(self) -> Stream:
1218 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1220 The type of default stream returned depends on if the environment
1221 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1223 If set, returns a per-thread default stream. Otherwise returns
1224 the legacy stream.
1226 """
1227 return default_stream() 25s6s}oNmOm7s8s9s~oapbp!scpdpepfp#s$sgpFnZn~mBP+f,f-fuNvNwNxNyN%H'H4plr@HmrGp(HCPDPQmxnEP`KFP{KGP|KHP}KIP[HJP~KKPJHKHLPMPLHMHNPOP;sNHPP5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s5F6F)K*K+K,K]m^m#obI8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHjikigNSfTfLmhN6f1n.n=m?mMmJnRhKnSh9n!nbnqgcnrgLn#ndnuM7fMcenKmf Tb(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6lP Q dmemfmgmhmimjmkmdLJDgHhHiHjHkHlHmHnHoHpHqHaFbFcFdIrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh.H8OwM
1229 def __int__(self) -> int:
1230 """Return device_id."""
1231 return self._device_id 2rMsMtM(K]m^m
1233 def __repr__(self) -> str:
1234 return f"<Device {self._device_id} ({self.name})>" 2UHVH4GWHXHgMhMiMjMkMlMmMYHnMoMpMWLlmXLYLmmZL0LZH0H1H,Epr$L%H'H4plr@HmrGp(H9f[m1L2L3L4L5L6L7L8LQmxn[H;s5pUp9LVp6pWp7pnrpFyn)H*H]H=s^H(s8p?s7GqM
1236 def __hash__(self) -> int:
1237 return hash(self.uuid) 2,E?HfIU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbpIaIqIrI$jRh$l%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMP Q S T eMfM%L'L
1239 def __eq__(self, other: object) -> bool:
1240 if not isinstance(other, Device): 2,E?HU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbvLaIwLzL$jRh%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb9O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}OP Q S T %L'LWJ
1241 return NotImplemented 2,E?HzL9O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}OWJ
1242 return self._device_id == other._device_id 2,EU l V m W n X o Y p Z q 0 r 1 s ubvbwbxbybzbAbBbCbDbEb2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K - L FbGb. M / N : O HbIbJbKbLbMbvLaIwL$jRh%j'j(jSh)j*jqg+j,j-j.jrg/j:jf @mfnUbVbWbXb9OP Q S T %L'L
1244 def __reduce__(self) -> tuple[object, ...]:
1245 return Device, (self.device_id,) 2pr$L%H'H4plr@HmrGp(H9fQm`K{K|K}K[H~K5pUp9LVp6pWp7pnrpF)H*H]H^H8p5F6F)K*K+K,KDLEL
1247 def set_current(self, ctx: Context | None = None) -> Context | None:
1248 """Set device to be used for GPU executions.
1250 Initializes CUDA and sets the calling thread to a valid CUDA
1251 context. By default the primary context is used, but optional `ctx`
1252 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1254 Providing a `ctx` causes the previous set context to be popped and returned.
1256 Parameters
1257 ----------
1258 ctx : :obj:`~_context.Context`, optional
1259 Optional context to push onto this device's current thread stack.
1261 Returns
1262 -------
1263 :obj:`~_context.Context`, optional
1264 Popped context.
1266 Examples
1267 --------
1268 Acts as an entry point of this object. Users always start a code by
1269 calling this method, e.g.
1271 >>> from cuda.core import Device
1272 >>> dev0 = Device(0)
1273 >>> dev0.set_current()
1274 >>> # ... do work on device 0 ...
1276 """
1277 cdef ContextHandle h_context
1278 cdef cydriver.CUcontext prev_ctx, curr_ctx
1279 cdef Context prev_owned = None 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKe-KWlXlYl9xZl.K0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x/K2l+JVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1281 if ctx is not None: 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKe-KWlXlYl9xZl.K0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x/K2l+JVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1282 # TODO: revisit once Context is cythonized
1283 assert_type(ctx, Context) 2-K.K/K+J
1284 Context_check_open(ctx) 2-K.K/K+J
1285 if ctx._device_id != self._device_id: 2-K.K/K
1286 raise RuntimeError(
1287 "the provided context was created on the device with"
1288 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1289 )
1290 if self._has_inited and self._context is not None: 2-K.K/K
1291 prev_owned = self._context 2-K.K/K
1292 # prev_ctx is the previous context
1293 curr_ctx = as_cu(ctx._h_context) 2-K.K/K
1294 prev_ctx = NULL 2-K.K/K
1295 with nogil: 2-K.K/K
1296 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2-K.K/K
1297 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2-K.K/K
1298 self._has_inited = True 2-K.K/K
1299 self._context = ctx # Store owning context reference 2-K.K/K
1300 if prev_ctx != NULL: 2-K.K/K
1301 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2-K.K/K
1302 return prev_owned 2-K.K/K
1303 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1304 else:
1305 # use primary ctx
1306 h_context = get_primary_context(self._device_id) 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1307 if h_context.get() == NULL: 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1308 HANDLE_RETURN(get_last_error())
1309 raise RuntimeError(
1310 f"Failed to retain the primary context for device {self._device_id}"
1311 )
1312 with nogil: 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1313 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1314 self._has_inited = True 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1315 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxFndxZnex~mfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhphx~f+fRfag,fbg-fcgdgegfggghgigjgkglg$HixU l V m W n X o Y p Z q 0 r 3j1 s ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G ) H * I + J , K qrrrsrpF- ynL FbGb. M / N : O HbIbJbKbLbMbjxkxlxmxnxoxpx]m^m=I?Iqxrx@Isx[IeL]I^I7G+H_I`ItxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUr!x2lVrR #x#obIPmaJbJdJeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5jLm(y6j7j8j9j2r!j#jhIMpTnUnNp(oVnWnXnYn)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?y3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogzhz9nizjzTokzlzUomznzVoozqJWopzqz!nrzszXotzrJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*fgn$n0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdiIUb!LVbjIWb#L?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.ClI/CmI:CnI;C=C?CoI@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDcInDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExEyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1317 def create_context(self, options: ContextOptions | None = None) -> Context:
1318 """Create a new :obj:`~_context.Context` object.
1320 Note
1321 ----
1322 The newly created context will not be set as current.
1324 Parameters
1325 ----------
1326 options : :obj:`~_context.ContextOptions`, optional
1327 Customizable dataclass for context creation options.
1329 Returns
1330 -------
1331 :obj:`~_context.Context`
1332 Newly created context object.
1334 """
1335 cdef int i
1336 cdef object resources
1337 cdef object res
1338 cdef SMResource sm_res
1339 cdef WorkqueueResource wq_res
1341 if options is None: 2PLUlVlg loinWlXlYlZl0l1l(LQLfN2l+J
1342 raise ValueError( 2fN
1343 "options with device resources must be provided to create a green context"
1344 )
1346 options = check_or_create_options(ContextOptions, options, "Context options") 2PLUlVlg loinWlXlYlZl0l1l(LQLfN2l+J
1347 if options.resources is None: 2PLUlVlg loinWlXlYlZl0l1l(LQLfN2l+J
1348 raise ValueError( 2fN
1349 "ContextOptions.resources must be provided to create a green context"
1350 )
1352 resources = tuple(options.resources) 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1353 if len(resources) == 0: 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1354 raise ValueError("ContextOptions.resources must not be empty")
1356 cdef vector[cydriver.CUdevResource] c_resources
1357 c_resources.resize(len(resources)) 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1359 for i, res in enumerate(resources): 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1360 if isinstance(res, SMResource): 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1361 sm_res = <SMResource>res 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1362 if not sm_res._is_usable: 2PLUlVlg loinWlXlYlZl0l1l(LQL2l+J
1363 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2(L
1364 c_resources[i] = sm_res._resource 2PLUlVlg loinWlXlYlZl0l1lQL2l+J
1365 elif isinstance(res, WorkqueueResource): 2in
1366 wq_res = <WorkqueueResource>res 2in
1367 c_resources[i] = wq_res._wq_config_resource 2in
1368 else:
1369 raise TypeError(f"Unsupported context resource type: {type(res)}")
1371 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2PLUlVlg loinWlXlYlZl0l1lQL2l+J
1372 c_resources.data(),
1373 <unsigned int>(c_resources.size()),
1374 <cydriver.CUdevice>(self._device_id), 2PLUlVlg loinWlXlYlZl0l1lQL2l+J
1375 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1376 )
1377 if h_green.get() == NULL: 2PLUlVlg loinWlXlYlZl0l1lQL2l+J
1378 HANDLE_RETURN(get_last_error())
1379 raise RuntimeError("Failed to create CUDA green context")
1381 return Context._from_green_ctx(Context, h_green, self._device_id) 2PLUlVlg loinWlXlYlZl0l1lQL2l+J
1383 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream:
1384 """Create a :obj:`~_stream.Stream` object.
1386 New stream objects can be created in two different ways:
1388 1) Create a new CUDA stream with customizable ``options``.
1389 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1391 Option (2) internally holds a reference to the foreign object
1392 such that the lifetime is managed.
1394 Note
1395 ----
1396 Device must be initialized.
1398 Parameters
1399 ----------
1400 obj : :obj:`~_stream.IsStreamType`, optional
1401 Any object supporting the ``__cuda_stream__`` protocol.
1402 options : :obj:`~_stream.StreamOptions`, optional
1403 Customizable dataclass for stream creation options.
1405 Returns
1406 -------
1407 :obj:`~_stream.Stream`
1408 Newly created stream object.
1410 """
1411 self._check_context_initialized() 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%IonpnqnpoXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s4sVH4GWHXH`J{J)I*I}oNmOm|mwoxo~oapbpcpdpepfpgpYH|JyozoAoBoCoDo%sAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJWLlm}J,I-I~JaKEoFoGobKcKdKeKfKXLgK.I/IhKiKHoIoJojKkKlKmKnKCNoK:I;IpKqKKoLoMorKsKtKuKvKYLmmOHPHNoZL0LZH0H:mrnOo1Hsntnunvn}mwn;m:K:h;h;K=hQH/nRH:n?h@h;nFM[hGM]h^h=K_h5G`h?K{h=n?n@n6G@K|h[K}h]K~h^Kaibicidieifigihiii[n]n^n_n`n{n|n}n~naobocoENdoFNeofoGNgohoiojokolNmNnNoNpNqNrNwKxKsNtNuNvNwNxNyN$H9f[m1L2L3L4L5L6L7L8LHMYNZNyKzKAKBKCKDKEK|IMnjb_mFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnhOiOjOkOlOmOnOoOpOqOrOsOtOR Pm_Hzn`mNnjnOnPnQnAnBnuOvOIMwOJMxOyOKMLMzOAOBOMMCONMOMPMQMRMSMTMUMVMDOWMXMYMZMEO0M1MFOGOHOIO2MJO3MKOLO4M5MMONOOO6MPO7M8M9M!M#M$M%M'M(MQO)M*M+M,MRO-M.MSOTOUOVO/MWO:MXOYO;M=MZO0O1O?M2O@M[M]M^M_M`M{M|M}M3O~MaNbNcN4OdNeN5O6ORnCnSnLmTnUnVnWnXnYn.nDMDn7OKmEMEntJuJ,g%l'l#L*r,r-r/r{rth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfshsssDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsS T DsFsHsJsLsNsPsRsSKAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#K$KWJ%K'K*sJDCJDJEJ4HGJwM
1412 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%IonpnqnpoXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s4sVH4GWHXH`J{J)I*I}oNmOm|mwoxo~oapbpcpdpepfpgpYH|JyozoAoBoCoDo%sAMBMCMiNjNkN%n'n(n)n*n+n,n-n8o9o!orMsMtMQJRJSJWLlm}J,I-I~JaKEoFoGobKcKdKeKfKXLgK.I/IhKiKHoIoJojKkKlKmKnKCNoK:I;IpKqKKoLoMorKsKtKuKvKYLmmOHPHNoZL0LZH0H:mrnOo1Hsntnunvn}mwn;m:K:h;h;K=hQH/nRH:n?h@h;nFM[hGM]h^h=K_h5G`h?K{h=n?n@n6G@K|h[K}h]K~h^Kaibicidieifigihiii[n]n^n_n`n{n|n}n~naobocoENdoFNeofoGNgohoiojokolNmNnNoNpNqNrNwKxKsNtNuNvNwNxNyN$H9f[m1L2L3L4L5L6L7L8LHMYNZNyKzKAKBKCKDKEK|IMnjb_mFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnhOiOjOkOlOmOnOoOpOqOrOsOtOR Pm_Hzn`mNnjnOnPnQnAnBnuOvOIMwOJMxOyOKMLMzOAOBOMMCONMOMPMQMRMSMTMUMVMDOWMXMYMZMEO0M1MFOGOHOIO2MJO3MKOLO4M5MMONOOO6MPO7M8M9M!M#M$M%M'M(MQO)M*M+M,MRO-M.MSOTOUOVO/MWO:MXOYO;M=MZO0O1O?M2O@M[M]M^M_M`M{M|M}M3O~MaNbNcN4OdNeN5O6ORnCnSnLmTnUnVnWnXnYn.nDMDn7OKmEMEntJuJ,g%l'l#L*r,r-r/r{rth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfshsssDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsS T DsFsHsJsLsNsPsRsSKAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#K$KWJ%K'K*sJDCJDJEJ4HGJwM
1414 def create_event(self, options: EventOptions | None = None) -> Event:
1415 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`.
1417 Note
1418 ----
1419 Device must be initialized.
1421 Parameters
1422 ----------
1423 options : :obj:`EventOptions`, optional
1424 Customizable dataclass for event creation options.
1426 Returns
1427 -------
1428 :obj:`~_event.Event`
1429 Newly created event object.
1431 """
1432 self._check_context_initialized() 2'IUfVfWfXfYfZf0f1f2f3f4f5fYJ}q(I)I*I~q+I|m,I-IZJ0J1J2J.I/I:I;IHM3J|I_m4Jhn}I9p!p#p$p%p'p(p-g.glimiYbZb)p*p.o/o+p,p-p/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlq;o=o?omqnqoq}g~goipi4b5bpqqq[o]orqsqtqahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVq_o`o{oWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q
1433 cdef Context ctx = self._context 2'IUfVfWfXfYfZf0f1f2f3f4f5fYJ}q(I)I*I~q+I|m,I-IZJ0J1J2J.I/I:I;IHM3J|I_m4Jhn}I9p!p#p$p%p'p(p-g.glimiYbZb)p*p.o/o+p,p-p/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlq;o=o?omqnqoq}g~goipi4b5bpqqq[o]orqsqtqahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVq_o`o{oWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q
1434 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2'IUfVfWfXfYfZf0f1f2f3f4f5fYJ}q(I)I*I~q+I|m,I-IZJ0J1J2J.I/I:I;IHM3J|I_m4Jhn}I9p!p#p$p%p'p(p-g.glimiYbZb)p*p.o/o+p,p-p/g:g;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfq]g^ggqhq_ ` 2b3biqjq_g`g{g|g{ | kqlq;o=o?omqnqoq}g~goipi4b5bpqqq[o]orqsqtqahbhchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPqhhihQqRqfbgb8b9bSqTqjhkhlhmhhbibUqVq_o`o{oWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q
1436 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1437 """Allocate device memory from a specified stream.
1439 Allocates device memory of `size` bytes on the specified `stream`
1440 using the memory resource currently associated with this Device.
1442 Note
1443 ----
1444 Device must be initialized.
1446 Parameters
1447 ----------
1448 size : int
1449 Number of bytes to allocate.
1450 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1451 Keyword-only. The stream establishing the stream ordering semantic.
1452 Must be passed explicitly; pass ``self.default_stream`` to use
1453 the default stream.
1455 Returns
1456 -------
1457 :obj:`~_memory.Buffer`
1458 Newly created buffer object.
1460 """
1461 self._check_context_initialized() 2]m^mSHloinjiki(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm
1462 return self.memory_resource.allocate(size, stream=stream) 2]m^mSHloinjiki(l)l*l+l; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@l3l[lni4l]l} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm5lcmqi6ldmemfmgmhmimjmkm
1464 def sync(self) -> None:
1465 """Synchronize the device.
1467 Note
1468 ----
1469 Device must be initialized.
1471 """
1472 self._check_context_initialized() 25G6GDNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgO]m^m`mjnIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNLm.n=m?mMmuMKmf TbP Q
1473 handle_return(runtime.cudaDeviceSynchronize()) 25G6GDNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgO]m^m`mjnIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNLm.n=m?mMmuMKmf TbP Q
1475 def create_graph_builder(self) -> GraphBuilder:
1476 """Create a new :obj:`~graph.GraphBuilder` object.
1478 Returns
1479 -------
1480 :obj:`~graph.GraphBuilder`
1481 Newly created graph builder object.
1483 """
1484 from cuda.core.graph._graph_builder import GraphBuilder 26I7I8IknlnRmSmeITmmn9I!IUmnn{m#IVm$IWm%IonpnqnXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m4GrMsMtMQJRJSJ:mrnsntnunvn}mwn;mFMGMAJ*s
1486 self._check_context_initialized() 26I7I8IknlnRmSmeITmmn9I!IUmnn{m#IVm$IWm%IonpnqnXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m4GrMsMtMQJRJSJ:mrnsntnunvn}mwn;mFMGMAJ*s
1487 return GraphBuilder._init(self.create_stream()) 26I7I8IknlnRmSmeITmmn9I!IUmnn{m#IVm$IWm%IonpnqnXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m4GrMsMtMQJRJSJ:mrnsntnunvn}mwn;mFMGMAJ*s
1489 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray:
1490 """Create an :obj:`~cuda.core.texture.OpaqueArray` on the current device.
1492 Allocates an opaque, hardware-laid-out CUDA array for texture/surface
1493 access. The array is created in the current CUDA context, so make this
1494 device current with :meth:`set_current` before calling (mirroring
1495 :meth:`create_stream` / :meth:`create_event`).
1497 Note
1498 ----
1499 Device must be initialized.
1501 Parameters
1502 ----------
1503 options : :obj:`~cuda.core.texture.OpaqueArrayOptions`
1504 Allocation options (shape, format, channels, surface flag).
1506 Returns
1507 -------
1508 :obj:`~cuda.core.texture.OpaqueArray`
1509 Newly created opaque array.
1511 .. versionadded:: 1.1.0
1512 """
1513 from cuda.core.texture._array import _create_opaque_array 2KILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HPIQISI|HTIVIWIXIYITH
1515 self._check_context_initialized() 2KILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HPIQISI|HTIVIWIXIYITH
1516 return _create_opaque_array(options) 2KILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJEJ4HPIQISI|HTIVIWIXIYITH
1518 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray:
1519 """Create a :obj:`~cuda.core.texture.MipmappedArray` on the current device.
1521 Allocates a mipmapped CUDA array for texture/surface access across
1522 levels. The array is created in the current CUDA context, so make this
1523 device current with :meth:`set_current` before calling (mirroring
1524 :meth:`create_stream` / :meth:`create_event`).
1526 Note
1527 ----
1528 Device must be initialized.
1530 Parameters
1531 ----------
1532 options : :obj:`~cuda.core.texture.MipmappedArrayOptions`
1533 Allocation options (shape, format, channels, levels, surface flag).
1535 Returns
1536 -------
1537 :obj:`~cuda.core.texture.MipmappedArray`
1538 Newly created mipmapped array.
1540 .. versionadded:: 1.1.0
1541 """
1542 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 24HFJ%J'J(JGJ)JRIUITH
1544 self._check_context_initialized() 24HFJ%J'J(JGJ)JRIUITH
1545 return _create_mipmapped_array(options) 24HFJ%J'J(JGJ)JRIUITH
1547 def create_texture_object(
1548 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None
1549 ) -> TextureObject:
1550 """Create a :obj:`~cuda.core.texture.TextureObject` on the current device.
1552 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` /
1553 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d
1554 :obj:`~cuda.core.Buffer`, wrapped in a
1555 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for
1556 kernel-side sampled reads. The object is created in the current CUDA
1557 context, so make this device current with :meth:`set_current` before
1558 calling (mirroring :meth:`create_stream` / :meth:`create_event`).
1560 Note
1561 ----
1562 Device must be initialized.
1564 Parameters
1565 ----------
1566 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1567 The memory backing the texture.
1568 options : :obj:`~cuda.core.texture.TextureObjectOptions`
1569 Sampling state (address/filter/read modes, normalization, etc.).
1571 Returns
1572 -------
1573 :obj:`~cuda.core.texture.TextureObject`
1574 Newly created texture object.
1576 .. versionadded:: 1.1.0
1577 """
1578 from cuda.core.texture._texture import _create_texture_object 2KILIMINIOI4H|HTIbFUIcFVIWIXIYI*JTH
1580 self._check_context_initialized() 2KILIMINIOI4H|HTIbFUIcFVIWIXIYI*JTH
1581 return _create_texture_object(resource, options) 2KILIMINIOI4H|HTIbFUIcFVIWIXIYI*JTH
1583 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject:
1584 """Create a :obj:`~cuda.core.texture.SurfaceObject` on the current device.
1586 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a
1587 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for
1588 kernel-side typed load/store. The backing array must have been created
1589 with ``is_surface_load_store=True``. The object is created in the
1590 current CUDA context, so make this device current with
1591 :meth:`set_current` before calling (mirroring :meth:`create_stream` /
1592 :meth:`create_event`).
1594 Note
1595 ----
1596 Device must be initialized.
1598 Parameters
1599 ----------
1600 resource : :obj:`~cuda.core.texture.ResourceDescriptor`
1601 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with
1602 ``is_surface_load_store=True``.
1604 Returns
1605 -------
1606 :obj:`~cuda.core.texture.SurfaceObject`
1607 Newly created surface object.
1609 .. versionadded:: 1.1.0
1610 """
1611 from cuda.core.texture._surface import _create_surface_object 2PIQIaFRISI|HTH
1613 self._check_context_initialized() 2PIQIaFRISI|HTH
1614 return _create_surface_object(resource) 2PIQIaFRISI|HTH
1617cdef inline int Device_ensure_cuda_initialized() except? -1:
1618 """Initialize CUDA driver and check version compatibility (once per process)."""
1619 global _is_cuInit
1620 if _is_cuInit is False: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1621 with _lock, nogil:
1622 HANDLE_RETURN(cydriver.cuInit(0))
1623 _is_cuInit = True
1624 try:
1625 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1626 except ImportError:
1627 pass
1628 else:
1629 warn_if_cuda_major_version_mismatch()
1630 return 0 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1633cdef inline int Device_resolve_device_id(device_id) except? -1:
1634 """Resolve device_id, defaulting to current device or 0."""
1635 cdef cydriver.CUdevice dev
1636 cdef cydriver.CUcontext ctx
1637 cdef cydriver.CUresult err
1638 if device_id is None: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*oPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zvMPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=CdL?CoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1639 with nogil: 2a ~EnhUH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o p q r s t u v w x y z A B C D E F G H I J K L M N O yKzKAKBKCKDKmg)s]m^m3JEKTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3H|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR #obIPm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILp'oRnCnSnSfTfLmhIMpTnUnNp(oVnWnXnYnaL.f6f0n1nPo2nInQoRo.n=m?mMmqF3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnOp)oDn*o7fMcenKmf Tb|E@mfn}EEntJuJNcLe)f*fgn$n'sOc8f+o,o-oipPc5JQc6oRc7oScbLTccLUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpRpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh
1640 err = cydriver.cuCtxGetDevice(&dev) 2a ~EnhUH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o p q r s t u v w x y z A B C D E F G H I J K L M N O yKzKAKBKCKDKmg)s]m^m3JEKTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3H|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR #obIPm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILp'oRnCnSnSfTfLmhIMpTnUnNp(oVnWnXnYnaL.f6f0n1nPo2nInQoRo.n=m?mMmqF3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnOp)oDn*o7fMcenKmf Tb|E@mfn}EEntJuJNcLe)f*fgn$n'sOc8f+o,o-oipPc5JQc6oRc7oScbLTccLUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpRpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh
1641 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ~EnhUH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o p q r s t u v w x y z A B C D E F G H I J K L M N O yKzKAKBKCKDKmg)s]m^m3JEKTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3H|IMnjb_m4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR #obIPm~IcJ_H8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILp'oRnCnSnSfTfLmhIMpTnUnNp(oVnWnXnYnaL.f6f0n1nPo2nInQoRo.n=m?mMmqF3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndnOp)oDn*o7fMcenKmf Tb|E@mfn}EEntJuJNcLe)f*fgn$n'sOc8f+o,o-oipPc5JQc6oRc7oScbLTccLUc,gVcsgjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCetgupvpugwpxpypzpRpvgwgxgygzgAg`HBgCgDgAp{HEgFgGgHgBpJIsbCpDptbEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQh
1642 return int(dev) 2UH6I7I,J-J.J/J:J8IknlnRmSmeITmmn9I!IUmnnmo{m#IVmno;J$IWmoo%Ionpnqnpo-qXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m@s[s=J?J@J[J]JSsTsUsVsqo'I^J_JrosotouovoWsXsYsZs0s1s2s3s.q/q/f!f$eUfVfDe:f#f%eWfXfEe;f$f'eYfZfFe=f%f(e0f1fGe?f'f)e2f3fHe@f(f*e4f5fIe:q4s;q=q?q@q[q]q5sVH^q_q`q{q4GWHXH`J{J|q6sYJ}q(I)I*I~q+I}oNmOmSpTp|mwoxo7s8s9s~oapbp!scpdpepfp#s$sgparYH|JyozoAoBoCoDo%s%n'n(n)n*n+n,n-n8o9o!o(Klm}J,I-I~JaKEoFoGobKcKdKeKfKfLZJ0JgLhLbrcrdriLjLkLlLmLnL1J2JoLpLerfrgrqLrLsLtLuLhrgK.I/IhKiKHoIoJojKkKlKmKnKiroK:I;IpKqKKoLoMorKsKtKuKvKmmjrNoZH0H:mrnOo1Hsntnunvn}mwn;mFnZn~m:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h-E=n.E?n/E@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_K^f_f`f{f|f}fhp~f+fRfag,fwKbgxK-fcgdgegfggghgigjgkglg$Hl m n o p q r s t u v w x y z A B C D E F G H I J K L M N O yKzKAKBKCKDK3JEK|I4Jhn}IFKGKHKIKJKKKGnLKMKNKOKPKQKRKHnR bIPm~IcJ_H8G9G!G#G$G%G'G(GNbOb)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgzn`mAnBn$o%ogI'oCnTfLmhI(oaL0n1nPo2nInQoRo.n=m?mMm3n$jJnRh4n$l5n%j6n'j7n(jKnSh8n)jSo?E9n@ETo[EUo]EVo^EWo_E!n`EXo{EYo*jbnqgZo+j0o,j1o-j2o.jcnrg3o/j:j4o5oLn#ndn)oDn*oMcenKmf Tb|E@mfn}EEntJuJNcLegn$n'sOcipPc5JQc6oRc7oScbLTccLUc,gVcjpkplpmpnpopppqprpsptpWcXcYcZc0c1c2c3c4c5c6c7c8cZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdLd+eMd,eNdOd-ePd.eQdMeNeh b i c YbZb/e:e;e=e?e@e[e!bkb#blb]eRd^eSdOePe0b] 1b^ Qe_e`e$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafbf3dcf4dVeWe*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(ddfef/bmb:bnbXe)dYe*dZe0ej d k e 4b5bffgfhfifjfkflf;bob=bpbmf+dnf,d1e2e6bdb7beb3eofpf?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfufvf^dwf_d8e9e_b`d{d`bhbib{b|d}d~daebece|b}bdeeefexfyf~bqbacrbgehezfieAfjekeleme!ene#eoeBfpeCfqeDfreEfseFfteGfueHfveIfweJfxeKfyezeLfAeMfBeCeupvpwpxpypzpApBpJICpDpEpFplImInISKdLoIAJTKUJUKVKWKXKVJYKZK0K1K2K3K4K5K6K7K8K9K!K#KcI$KWJ%K'KIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQf)g*g+gKILIMINIOIBJ6J7J8J9J!J#J*s$JJDCJDJFLGLHLILJLKLEJ4HFJ%J'J(JGJLLMLNLOLgHhHiHjHkHlH)JmHnHoHpHqHPIQIaFRISI|HTIbFUIcFVIWIXIYI*JTHrisitiuiviwixiyiziAiBiCiDiEi5HFiGiHiIi6HJiKiLi7HMiNiOi,HPi-H
1643 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1644 with nogil: 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh
1645 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh
1646 assert <void*>(ctx) == NULL 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh
1647 return 0 # cudart behavior 2a ~Enhmg)s]m^mTJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG+H2H{I7F3HMnjb_mhnR #obcccNbObdcPbQbRbSbHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLp'oRnCnSnSfTfMpTnUnNp(oVnWnXnYn.f6fqFOp)oDn*o7fMcf TbEnNcLe)f*fOc8f+o,o-osgtgugRpvgwgxgygzgAg`HBgCgDg{HEgFgGgHgsbtbrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQh
1648 else:
1649 HANDLE_RETURN(err)
1650 elif device_id < 0: 2a ]s^s_s`s{s|s}s~satbtctRmdtSmeteIftTmgthtitjtUmktltmtntotVmptqtrtstWmttutvtwtxtytztAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^t_t`t{t|t+s}t,s~taubucudueuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-FwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u?u/s@u[u4s]u:s^u_u`u{u|u}u~u5savbvcvdvevfvgvhvivjvkvlvmvnvovpvqv6srvsvtvuvvvwvxvyvzvAvBvCvDv}qEv(IFvGvHv~qIv+IJv}oKvNmLvOmMvNvOvPvQvRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wOH-wPH.w/w:w;w=w?w@w[w:m]w^w_w`w{w|w}w~waxbx;mcxdxex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h=n?n@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgxRL^f,E_f?H`ffI{f|f}fhx~f+fRfag,fbg-fcgSLdgegfggghgigjgkglgixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbjxkxlxmxnxoxpx]m^m=I?IpIqxvLrxaI@IwLsxqI[IxL]IyL^I7GrI_IzL`Itxux}IvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVr#xPmaJbJdJeJecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y4jSfAL5j(y6j7j8j9j2rBL!jCL#j)y*y+y,y-y.y/y:y;yoJ=ypJMm?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozqJpzqzrzsztzrJuzvzbnwzqgxzyzzzAzsJBzCzDzEzcnFzrgGzHzIzJzKzLzMzNzdnOzkr;jPzQzMcenRzSzKmTzf TbUzVzWzXz3r=jtJYzuJZzNc0z4r5r6r7r8r9r!r#r$r%r'r(r)r1zvMPc5JQc2zRc3zScTcUc,g4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.C3G/C:C;C=C?C@C[C]CUJ^C_C`C{C|CVJ}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDBJADBDCDDDEDFDGD*sHDIDJDKDLDMDNDODPDQDRDSDTDUDFJVDWDXDYDZD0D1D2D3DgH4DhH5DiH6DjH7DkH8DlH9D!DmH#DnH$DoH%DpH'DqH(D)D*DaF+D,D-D.D/DbF:D;DcF=D?D@D[D]D^D_D`D{D|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1651 raise ValueError(f"device_id must be >= 0, got {device_id}")
1652 return device_id 2a ]s^s_s`s{s|s}s~satbtctRmdtSmeteIftTmgthtitjtUmktltmtntotVmptqtrtstWmttutvtwtxtytztAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^t_t`t{t|t+s}t,s~taubucudueuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-FwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u?u/s@u[u4s]u:s^u_u`u{u|u}u~u5savbvcvdvevfvgvhvivjvkvlvmvnvovpvqv6srvsvtvuvvvwvxvyvzvAvBvCvDv}qEv(IFvGvHv~qIv+IJv}oKvNmLvOmMvNvOvPvQvRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wOH-wPH.w/w:w;w=w?w@w[w:m]w^w_w`w{w|w}w~waxbx;mcxdxex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h=n?n@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgxRL^f,E_f?H`ffI{f|f}fhx~f+fRfag,fbg-fcgSLdgegfggghgigjgkglgixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbjxkxlxmxnxoxpx]m^m=I?IpIqxvLrxaI@IwLsxqI[IxL]IyL^I7GrI_IzL`Itxux}IvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTLTrUr!x2lVr#xPmaJbJdJeJecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y4jSfAL5j(y6j7j8j9j2rBL!jCL#j)y*y+y,y-y.y/y:y;yoJ=ypJMm?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozqJpzqzrzsztzrJuzvzbnwzqgxzyzzzAzsJBzCzDzEzcnFzrgGzHzIzJzKzLzMzNzdnOzkr;jPzQzMcenRzSzKmTzf TbUzVzWzXz3r=jtJYzuJZzNc0z4r5r6r7r8r9r!r#r$r%r'r(r)r1zPc5JQc2zRc3zScTcUc,g4zVc5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_B`B{B|B}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8Csb9C!C#C$CzJ%C'Ctb(C)C*C+C,C-C.C3G/C:C;C=C?C@C[C]CUJ^C_C`C{C|CVJ}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDBJADBDCDDDEDFDGD*sHDIDJDKDLDMDNDODPDQDRDSDTDUDFJVDWDXDYDZD0D1D2D3DgH4DhH5DiH6DjH7DkH8DlH9D!DmH#DnH$DoH%DpH'DqH(D)D*DaF+D,D-D.D/DbF:D;DcF=D?D@D[D]D^D_D`D{D|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1655cdef inline list Device_ensure_tls_devices(cls):
1656 """Ensure thread-local Device singletons exist, creating if needed."""
1657 cdef int total
1658 try: 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1659 return _tls.devices 2a ~EnhUH]s6I^s7I_s,J`s-J{s.J|s/J}s:J~s8IatknbtlnctRmdtSmeteIftTmgtmnht9Iit!IjtUmktnnltmomt{mnt#IotVmptnoqt;Jrt$IstWmttoout%Ivtonwtpnxtqnytpozt-qAtXmBtYmCtZmDt0mEt1mFt2mGt3mHt4mIt5mJt6mKt7mLt8mMt9mNt!mOt#mPt$mQt%mRt'mSt(mTt)mUt*mVt+mWt,mXt-mYt.mZt/m0t@s1t[s2t9F3t4tor!F5t6t#F7t$F8t%F9tQiRiSi!tTiUiVi'F#t$t%t=J't?J(t@J)t[J*t]J+t,t-t.t/t:t;t=t?tSs@tTs[tUs]tVs^tqo_t'I`t^J{t_J|t+s}t,s~troausobutocuuoduvoeuWsfuXsguYshuZsiu0sju1sku2slu3smu-snuoupuqu(Fru)Fsu*Ftu+Fuu,Fvu-Fwuxuyuzu.qAu/qBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u.s:u.F;u/F=u:q?u/s@u[u4s]u:s^u;q_u=q`u?q{u@q|u[q}u]q~u5savVHbvcvdvevfv^qgv_qhv`qiv{qjv4GkvWHlvXHmv`Jnv{Jov|qpvqv6srvsvtvuvvvwvxvyvzvAvBvCvYJDv}qEv(IFv)IGv*IHv~qIv+IJv}oKvNmLvOmMvSpNvTpOv|mPvwoQvxoRv7sSv8sTv9sUv~oVvapWvbpXv!sYvcpZvdp0vep1vfp2v#s3v$s4vgp5v6var7vYH8v9v!v|J#v$v%v'v(vyo)vzo*vAo+vBo,vCo-v.v/v:v;vDo=v?v@v[v]v%s^v_vFjGjHjIjJjKj%nLj'nMj(nNj)nOj*nPj+nQj,nRj-nSj8oTj9oUj!oVjWjXjYjQJZjRJ0jSJ1j(K`v2j{vlm|v}J}v,I~v-Iaw~JbwaKcwEodwFoewGofwbKgwcKhwdKiweKjwfKkwfLlwZJmw0JnwgLowhLpwbrqwcrrwdrswiLtwjLuwkLvwlLwwmLxwnLyw1Jzw2JAwoLBwpLCwerDwfrEwgrFwqLGwrLHwsLIwtLJwuLKwLwhrMwNwOwgKPw.IQw/IRwhKSwiKTwHoUwIoVwJoWwjKXwkKYwlKZwmK0wnK1wir2w3woK4w:I5w;I6wpK7wqK8wKo9wLo!wMo#wrK$wsK%wtK'wuK(wvK)w*wmm+wjr,wOH-wPH.w/w:wNo;w=w?wZH@w0H[w:m]wrn^wOo_w1H`wsn{wtn|wun}wvn~w}maxwnbx;mcxFndxZnex~mfx:K:h;h;K=hQH/nRH:n?h@h/H;n[h]h^h=K_h5GXp`h?K{h-E=n.E?n/E@n6GYp@K|h[K}h]K~h^Kaibicidieifigihiii:H[n;H]n^n_n`n=H{n|n}n:E~n;EaoZp=Eboco0pdo1peofo2pgo3phoiojoko[f]f_KgxRL^f,E_f?H`ffI{f|f}fhphx~f+fRfag,fwKbgxK-fcgSLdgegfggghgigjgkglg$HixprU l %HV 'Hm 4pW lrn @HX mro GpY (Hp Z q 0 r 3j9f1 [ms ubvbwbxbybzbAbBbCbDbEbQm2 xnt 3 u 4 `K5 6 {K7 8 |K9 ! }K# $ [H% ' ~K( v JHw KHx y z LHA MHB C D ;sE NHF G 5p) UpH * VpI 6p+ WpJ 7p, nrK qrrrsrpF- ynL )HFb*HGb]H. =sM ^H/ (sN 8p: ?sO 5FHb6FIb)KJb*KKb+KLb,KMbdFULVL8FeFyKjxzKkxAKlxBKmxCKnxDKoxpxmg)s]m^m3J=IEK?IpIqxvLrxaI@IwLsxqI[IeLxL]IyL^ITJ:F;F=FnmrF7lsFanomtFpm8HuF?F@Fqm[FfFgF]F^FvF_F`FwF{FhF|F}F~FaGxFiFyFjF9lzFAFbGBFCFkFcGlFdGeG9HrmsmfGgGtmhGumvmwmxmiGymzmjGDFkG!lEFlGmGFFnGoGAmGFHFBmCmpGqGrGIFJFsGKFtGuGLFvGwGxGyGMFNFDmzGAGBGOFPFCGDGQFEGRFEmSFTF#lFmFGGmGG!HHmImHGIGJGKGJmLGMG8lNGmFOGPGQGUFVF#HWFXFRGSGYFTGUGnFVGWGXGoFYGZG7G+HrI_IzL`I2H{I7F3H|ItxMnjb_m4Juxhn}IvxFKwxGKxxHKyxIKzxJKAxKKBxGnCxLKDxMKExNKFxOKGxPKHxQKIxRKJxHnKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlSHg loJeinKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITLTrUr!x2lVrR #x#obIPm~IaJbJcJdJ_HeJ8G9G!G#Gbc$Gcc%G'G(GNbObdc)G*G+G,G-G.GPbQb/G:G;G=G?G@G[G]G^G_G`G{GRb|G}G~GSbaHbHcHdHeHfHfJecsIfcgchcgJicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpgILpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]xhJ^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyiJuyvywyxyyyzyjJAyBykJCyDyEyFyGyHyIyJyKylJLymJMyNyOyPyQyRySyTyUyVyWyXyYyZy0ynJ1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTfAL5jLm(y6j7j8j9j2rBL!jCL#jhIMpTnUnNp(oVnWnXnYnaL)y*y.f6f0n+y1n,yPo-y2n.yIn/yQo:yRo;y.noJ=m=y?mpJMm?yqF3n@y$j[yJn]yRh^y4n_y$l`y5n{y%j|y6n}y'j~y7naz(jbzKnczShdz8nez)jfzSogz?Ehz9niz@EjzTokz[ElzUomz]EnzVooz^EqJWopz_Eqz!nrz`EszXotz{ErJYouz*jvzbnwzqgxzZoyz+jzz0oAz,jsJ1oBz-jCz2oDz.jEzcnFzrgGz3oHz/jIz:jJz4oKz5oLzLnMz#nNzdnOzkrOp)o;jDn*o0I1IPzQz7fMcenRzSzKmTzf Tb|EUz@mVzfnWz}EXz3r=jEntJYzuJZzNcLe)f*fgn$n's0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)rip1zPc5JQc6o2zRc7o3zScbLTccLUc,g4zVcsgjp5zkp6zlp7zmp8znp9zop!zpp#zqp$zrp%zsp'ztp(zWcXcYcZc0c1c2c3c4c5c6c7c8c%l)z'l*zZF9c0F!c1F#c2F$c3F%c4F'c1E(c2E)c3E*c4E+c5E,c6E-c7E.c8E/c9E:c!E;c#E=c$E?c%E@c'E[c(E]c)E^c*E_c+E`cvJ{cwJ|c0G}crH~csHadtHbduHcdvHddwHed1GfdxHgdyHhdzHidAHjdBHkdCHld2GmdDHndEHodFHpdGHqdHHrdIHsdxJtdtIuduIvdvIwdwIxdxIydyIzdzIAdAIBdBICdCIDdDIEdEIFdFIGdGIHdHIIdIIJdKdiIUbVbjIWb?jkIXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBDLjBELkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btgup`Bvp{Bugwp|Bxp}B~BaCbCcCyJdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCypKCzpLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAg`HBgCgDgAp7C{HEgFgGgHgBp8CJIsbCp9CDp!C#C$CzJ%C'Ctb(C)C*CEp+CFp,C-C.C3GlI/CmI:CnI;CSK=C2IdL?C3I4I5IoI@CAJ[CTK]CUJ^CUK_CVK`CWK{CXK|CVJ}CYK~CZKaD0KbD1KcD2KdD3KeD4KfD5KgD6KhD7KiD8KjD9KkD!KlD#KmDcInD$KoDWJpD%KqD'KrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfxMsDyMtDzMuD)g*g+gKIvDLIwDMIxDNIyDOIzDBJAD6JBD7JCD8JDD9JED!JFD#JGD*sHD$JIDJDKDCJLDDJMDFLNDGLODHLPDILQDJLRDKLSDEJTD4HUDFJVD%JWD'JXD(JYDGJZDLL0DML1DNL2DOL3DgH4DhH5DiH6DjH7DkH8DlH9D)J!DmH#DnH$DoH%DpH'DqH(DPI)DQI*DaF+DRI,DSI-D|H.DTI/DbF:DUI;DcF=DVI?DWI@D[D]DXI^D_DYI`D*J{DTH|DdI}D~DaEbEcEdEHJeEfEgEhEiEjEkElEmEnEoEIJpEqErEsEtEuEJJrisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEi5HMhFiGiNhHiIi6HJiKiLi7HMiOhNiPhOi,HPi-HQhvEwExE.HyEzEKJAELJMJBECEDEEEFEGEHENJIEOJJEKELEMENEOEPEQERESETEUEVEWEPJXEYEZE0E
1660 except AttributeError: 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1661 with nogil: 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1662 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1663 devices = _tls.devices = [] 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1664 for dev_id in range(total): 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1665 device = super(Device, cls).__new__(cls) 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1666 device._device_id = dev_id 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1667 device._memory_resource = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1668 device._has_inited = False 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1669 device._properties = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1670 device._resources = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1671 device._uuid = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1672 device._context = None 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1673 devices.append(device) 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E
1674 return devices 2a nh]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4tor5t6t7t8t9tQiRiSi!tTiUiVi#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBu/f!f$eWiUfVfXiCuDuEuFuDeYiZi0i1i2iGuHu:f#f%e3iWfXf4iIuJuKuLuEe5i6i7i8i9iMuNu!i#i$iOu%i'i(i)i*i+i,i-i.i;f$f'e/iYfZf:iPuQuRuSuFe;i=i?i@i[iTuUu=f%f(e]i0f1f^iVuWuXuYuGe_i`i{i|i}iZu0u?f'f)e~i2f3faj1u2u3u4uHebjcjdjejfj5u6u@f(f*egj4f5fhj7u8u9u!uIeijjjkjljmj#u$unjojpjqjrjsjtjujvjwjxjyj%uzjAjBjCjDjEj'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j`v2j{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfx:h;h=h/n:n?h@h;n[h]h^h_hXp`h{h=n?n@nYp|h}h~haibicidieifigihiii[n]n^n_n`n{n|n}n~naoZpboco0pdo1peofo2pgo3phoiojoko[f]fgx^f_f`f{f|f}fhx~f+fRfag,fbg-fcgdgegfggghgigjgkglgixprU l V m 4pW n X o GpY p Z q 0 r 3j9f1 s ubvbwbxbybzbAbBbCbDbEbQm2 t 3 u 4 5 6 7 8 9 ! # $ % ' ( v w x y z A B C D E F G 5p) H * I 6p+ J 7p, K qrrrsr- L FbGb. M / N 8p: O 5FHb6FIbJbKbLbMbdF8FeFjxkxlxmxnxoxpxmgqxrxsxnm7lanompmqm9lrmsmtmumvmwmxmymzm!lAmBmCmDmEm#lFmGmHmImJm8ltxMnjb_muxhnvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8xtrUlurVlg JeKeWlXlYl9xZl0l1lvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrZITrUr!x2lVrR #x#obcccNbObdcPbQbRbSbecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcngogpgHpzn`mNnjnOnPnQnAnBnIp$o%oJpKpLpjikiWrXrYrZr0r1r$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y'oRnCnSn4jSfTf5j(y6j7j8j9j2r!j#jMpTnUnNp(oVnWnXnYn)y*y.f6f+y,y-y.y/y:y;y=y?yqF@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzOp)o;jDn*o0I1IPzQz7fMcRzSzTzf TbUzVzWzXz3r=jEnYzZzNcLe)f*f0zOc8f+o,o-o4r5r6r7r8r9r!r#r$r%r'r(r)r1zPcQc2zRc3zScTcUc4zVcsg5z6z7z8z9z!z#z$z%z'z(zWcXcYcZc0c1c2c3c4c5c6c7c8c)z*z9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdUbVbWb?jXb(l9pLd*r@j)l+e+z+r,z[j!p#p$p]j-z.z/z:zMd,e^j_jNd;z,r=z?z*lOd-r@z`j+l-e[z.r]z{j%p'p(p|j^z_z`z{zPd.e}j~jQd|z/r}z~zMe-g.gThakbkckNeUhVhdkek; h ,l= limi? -l.l/l:lb i ;l@ [ c =l?l@lYbZb/e:e;e=e?efk@egk)p*phkaAbAcA[eikjkdAeAfAoh3l!b:rph.o/oqh;r=r?r@rkb#b[rrhshlb]r^r_rkk[l]egA`rlk+p,p-pmkhAiAjAkARd^elAnkokSdmA{rnAoAWhOe/g:gXhpkqkrkPeYhZhsktk;gni0b.p:o=g/p:p?g;p=p?p@p] 1b[p@g[g^ ]p^p_p`p{p|p}p~paqbqcqdqeqfqQe]g^gukvkwk0h1hxkykzk_epAAkgqhqBkqArAsA`eCkDktAuAvAwAxAyAzAAABACADAEA$bTdUd%b_ ` 'bVdWdXdYdZd(b)b0d1d2dRe2b3bSe{e|e}eTeUe~eafEkbfFAFkiqjqGkGAHAIAJA3dcfHkIk4dKALAMAVe_g`gJkKkLkMkNkWe{g|gOkPkQk2hRkSk*b5d6d+b{ | ,b7d8d9d!d#d$d-b.b%d'd(dTkdfUkkqlqVkNAOAPAefWkXkQARAth4l/b|rPpuh;o=o?ovh}r~rasbsmb:bcswhxhnbdsesfsSA3h]lXeTA@ogs4hmqnqoq5hUAVAWAXA)dYe6h7h*dYAhsZA0AZe}g~g8hYkZk0k0e9h!h1k2k} j ^l~ oipiab_l`l{l|ld k }lbbcbe ~lambm4b5bffgfhfifjf3kkf4kpqqq5k1A2A3Alf6k7k4A5A6Ayh5l;biszh[o]oAhjskslsmsob=bnsBhChpbospsqs8kcmmf7Ars9krqsqtq!k8A9A!A#A+dnf$A#k$k,d%Ass'A(A#h1eahbh$h%k'k(k2e%h'h)k*kchqi6buq^odhvqwqehxqyqzqAqdb7bBqfhghebCqDqEqFqGqHqIqJqKqLqMqNqOqPq3ehhih+k,k-k(h)h.k/k:kof)A;kQqRq=k*A+A,Apf?k@k-A.A/A:A;A=A?A@A[A]A^A_A?b-d.d@bfbgb[b/d:d;d=d?d]b^b@d[d]d4e8b9b5eqfrfsf6e7etfuf[kvf`A]kSqTq^k{A|A}A~A^dwf_k`k_daBbBcB8ejhkh{k|k}k~kal9elhmhblcldl*helfl_b`d{d`bhbib{b|d}d~daebece|b}bdeeefeglxfhlUqVqildBeBfByfjlklgBhBDh6l~btsQpEh_o`o{oFhusvswsxsqbacysGhHhrbzsAsBsiBjBkBP Q S T gehelldmzflBCsmBmlWqXqYqnlnBoBpBqBieAfolpljekerBlemesBtBDsuBvB+hem!ewB|oEs,hZq0q1q-hxByBzBABne#e.h/hoeBBFsCBDBqlfmBfEBGsFBrl2q3q4qslGBHBIBJBpeCftlulqeKBHsLBMBvlgmDfNBIsOBwl5q6q7qxlPBQBRBSBreEfylzlseTBJsUBVBAlhmFfWBKsXBBl8q9q!qClYBZB0B1BteGfDlElue2BLs3B4BFlimHf5BMs6BGl#q$q%qHl7B8B9B!BveIfIlJlwe#BNs$B%BKljmJf'BOs(BLl'q(q)qMl)B*B+B,BxeKfNlOlyeze-BPs.B/BPlkmLf:BQs;BQl*q+q,qRl=B?B@B[BAeMfSlTlBeCe]BRs^B_Btg`B{Bug|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCRpMCNCOCPCQCRCvgwgxgygSCTCUCVCWCXCYCZC0C1C2C3C4C5C6CzgAgBgCgDg7CEgFgGgHg8Csb9C!C#C$C%C'Ctb(C)C*C+C,C-C.C/C:C;C=C2I?C3I4I5I@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(gNfOfPfQfsDtDuD)g*g+gvDwDxDyDzDADBDCDDDEDFDGDHDIDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuErisitiIhuiviwiJhKhxiyiziAiBiLhCiDiEiMhFiGiNhHiIiJiKiLiMiOhNiPhOiPiQhvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E