Coverage for cuda/core/_device.pyx: 93.66%

489 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-10 02:27 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8  

9from cuda.bindings cimport cydriver 

10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN 

11from libcpp.vector cimport vector 

12  

13import threading 

14  

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 context_synchronize, 

27 get_primary_context, 

28 get_last_error, 

29 as_cu, 

30) 

31  

32from cuda.core._stream import IsStreamType, Stream, StreamOptions 

33from cuda.core._utils.clear_error_support import assert_type 

34from cuda.core._utils.cuda_utils import ( 

35 ComputeCapability, 

36 CUDAError, 

37 driver, 

38 handle_return, 

39 runtime, 

40) 

41from cuda.core._stream cimport ( 

42 default_stream, 

43) 

44  

45from typing import TYPE_CHECKING 

46  

47if TYPE_CHECKING: 

48 import cuda.core.system # no-cython-lint 

49 from cuda.core.graph import GraphBuilder 

50 from cuda.core.texture import ( 

51 MipmappedArray, 

52 MipmappedArrayOptions, 

53 OpaqueArray, 

54 OpaqueArrayOptions, 

55 ResourceDescriptor, 

56 SurfaceObject, 

57 TextureObject, 

58 TextureObjectOptions, 

59 ) 

60  

61# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python, 

62# but it seems it is very convenient to expose them for testing purposes... 

63_tls = threading.local() 

64_lock = threading.Lock() 

65cdef bint _is_cuInit = False 

66  

67__all__ = ['Device'] 

68  

69  

70cdef class DeviceProperties: 

71 """ 

72 A class to query various attributes of a CUDA device. 

73  

74 Attributes are read-only and provide information about the device. 

75 """ 

76 cdef: 

77 int _handle 

78 dict _cache 

79  

80 def __init__(self, *args, **kwargs) -> None: 

81 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2hQ

82  

83 @classmethod 

84 def _init(cls, handle: int) -> DeviceProperties: 

85 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

86 self._handle = handle 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

87 self._cache = {} 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

88 return self 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

89  

90 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2: 

91 """Retrieve the attribute value directly from the driver.""" 

92 cdef int val 

93 cdef cydriver.CUresult err 

94 with nogil: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

95 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

96 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

97 return <int>default 

98 HANDLE_RETURN(err) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

99 return val 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

100  

101 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2: 

102 """Retrieve the attribute value, using cache if applicable.""" 

103 cached = self._cache.get(attr) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

104 if cached is not None: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

105 return cached 2=f?f@f[f]f^fNn,f~qarbrttl +mYo+n8m7oPnQnagRnXeSnGmkbwnQF0c`e{estYe2H3H4HwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi

106 cdef int value = self._get_attribute(attr, default) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

107 self._cache[attr] = value # setdefault not needed for ints 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

108 return value 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEhYGZG0GUm~FymLm1G2G3GaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+G,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrHsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyGSmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +m2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8Fhdidjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

109  

110 @property 

111 def max_threads_per_block(self) -> int: 

112 """int: Maximum number of threads per block.""" 

113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 20mAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F2HnIoIpIqIrIsI3HtIuIvIwIxIyI4HzIAIBICIDIEI

114  

115 @property 

116 def max_block_dim_x(self) -> int: 

117 """int: Maximum block dimension X.""" 

118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2:G

119  

120 @property 

121 def max_block_dim_y(self) -> int: 

122 """int: Maximum block dimension Y.""" 

123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2;G

124  

125 @property 

126 def max_block_dim_z(self) -> int: 

127 """int: Maximum block dimension Z.""" 

128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2=G

129  

130 @property 

131 def max_grid_dim_x(self) -> int: 

132 """int: Maximum grid dimension X.""" 

133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2a Ym+m

134  

135 @property 

136 def max_grid_dim_y(self) -> int: 

137 """int: Maximum grid dimension Y.""" 

138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2?G

139  

140 @property 

141 def max_grid_dim_z(self) -> int: 

142 """int: Maximum grid dimension Z.""" 

143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2@G

144  

145 @property 

146 def max_shared_memory_per_block(self) -> int: 

147 """int: Maximum shared memory available per block in bytes.""" 

148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2^GAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F2HnIoIpIqIrIsI3HtIuIvIwIxIyI4HzIAIBICIDIEI

149  

150 @property 

151 def total_constant_memory(self) -> int: 

152 """int: Memory available on device for constant variables in a CUDA C kernel in bytes.""" 

153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2IH

154  

155 @property 

156 def warp_size(self) -> int: 

157 """int: Warp size in threads.""" 

158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2LH

159  

160 @property 

161 def max_pitch(self) -> int: 

162 """int: Maximum pitch in bytes allowed by memory copies.""" 

163 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2]G

164  

165 @property 

166 def maximum_texture1d_width(self) -> int: 

167 """int: Maximum 1D texture width.""" 

168 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2eH

169  

170 @property 

171 def maximum_texture1d_linear_width(self) -> int: 

172 """int: Maximum width for a 1D texture bound to linear memory.""" 

173 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 22m

174  

175 @property 

176 def maximum_texture1d_mipmapped_width(self) -> int: 

177 """int: Maximum mipmapped 1D texture width.""" 

178 return self._get_cached_attribute( 2rG

179 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2rG

180 ) 

181  

182 @property 

183 def maximum_texture2d_width(self) -> int: 

184 """int: Maximum 2D texture width.""" 

185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2mH

186  

187 @property 

188 def maximum_texture2d_height(self) -> int: 

189 """int: Maximum 2D texture height.""" 

190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2hH

191  

192 @property 

193 def maximum_texture2d_linear_width(self) -> int: 

194 """int: Maximum width for a 2D texture bound to linear memory.""" 

195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2lH

196  

197 @property 

198 def maximum_texture2d_linear_height(self) -> int: 

199 """int: Maximum height for a 2D texture bound to linear memory.""" 

200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2jH

201  

202 @property 

203 def maximum_texture2d_linear_pitch(self) -> int: 

204 """int: Maximum pitch in bytes for a 2D texture bound to linear memory.""" 

205 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2kH

206  

207 @property 

208 def maximum_texture2d_mipmapped_width(self) -> int: 

209 """int: Maximum mipmapped 2D texture width.""" 

210 return self._get_cached_attribute( 2tG

211 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2tG

212 ) 

213  

214 @property 

215 def maximum_texture2d_mipmapped_height(self) -> int: 

216 """int: Maximum mipmapped 2D texture height.""" 

217 return self._get_cached_attribute( 2Pm

218 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2Pm

219 ) 

220  

221 @property 

222 def maximum_texture3d_width(self) -> int: 

223 """int: Maximum 3D texture width.""" 

224 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2nH

225  

226 @property 

227 def maximum_texture3d_height(self) -> int: 

228 """int: Maximum 3D texture height.""" 

229 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 24m

230  

231 @property 

232 def maximum_texture3d_depth(self) -> int: 

233 """int: Maximum 3D texture depth.""" 

234 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 23m

235  

236 @property 

237 def maximum_texture3d_width_alternate(self) -> int: 

238 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported.""" 

239 return self._get_cached_attribute( 2Qm

240 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2Qm

241 ) 

242  

243 @property 

244 def maximum_texture3d_height_alternate(self) -> int: 

245 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported.""" 

246 return self._get_cached_attribute( 2vG

247 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2vG

248 ) 

249  

250 @property 

251 def maximum_texture3d_depth_alternate(self) -> int: 

252 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported.""" 

253 return self._get_cached_attribute( 2uG

254 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2uG

255 ) 

256  

257 @property 

258 def maximum_texturecubemap_width(self) -> int: 

259 """int: Maximum cubemap texture width or height.""" 

260 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2oH

261  

262 @property 

263 def maximum_texture1d_layered_width(self) -> int: 

264 """int: Maximum 1D layered texture width.""" 

265 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2dH

266  

267 @property 

268 def maximum_texture1d_layered_layers(self) -> int: 

269 """int: Maximum layers in a 1D layered texture.""" 

270 return self._get_cached_attribute( 2qG

271 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2qG

272 ) 

273  

274 @property 

275 def maximum_texture2d_layered_width(self) -> int: 

276 """int: Maximum 2D layered texture width.""" 

277 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2iH

278  

279 @property 

280 def maximum_texture2d_layered_height(self) -> int: 

281 """int: Maximum 2D layered texture height.""" 

282 return self._get_cached_attribute( 2sG

283 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2sG

284 ) 

285  

286 @property 

287 def maximum_texture2d_layered_layers(self) -> int: 

288 """int: Maximum layers in a 2D layered texture.""" 

289 return self._get_cached_attribute( 2Om

290 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Om

291 ) 

292  

293 @property 

294 def maximum_texturecubemap_layered_width(self) -> int: 

295 """int: Maximum cubemap layered texture width or height.""" 

296 return self._get_cached_attribute( 2Rm

297 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2Rm

298 ) 

299  

300 @property 

301 def maximum_texturecubemap_layered_layers(self) -> int: 

302 """int: Maximum layers in a cubemap layered texture.""" 

303 return self._get_cached_attribute( 2wG

304 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2wG

305 ) 

306  

307 @property 

308 def maximum_surface1d_width(self) -> int: 

309 """int: Maximum 1D surface width.""" 

310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2`G

311  

312 @property 

313 def maximum_surface2d_width(self) -> int: 

314 """int: Maximum 2D surface width.""" 

315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2}G

316  

317 @property 

318 def maximum_surface2d_height(self) -> int: 

319 """int: Maximum 2D surface height.""" 

320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2{G

321  

322 @property 

323 def maximum_surface3d_width(self) -> int: 

324 """int: Maximum 3D surface width.""" 

325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2bH

326  

327 @property 

328 def maximum_surface3d_height(self) -> int: 

329 """int: Maximum 3D surface height.""" 

330 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2aH

331  

332 @property 

333 def maximum_surface3d_depth(self) -> int: 

334 """int: Maximum 3D surface depth.""" 

335 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2~G

336  

337 @property 

338 def maximum_surface1d_layered_width(self) -> int: 

339 """int: Maximum 1D layered surface width.""" 

340 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 21m

341  

342 @property 

343 def maximum_surface1d_layered_layers(self) -> int: 

344 """int: Maximum layers in a 1D layered surface.""" 

345 return self._get_cached_attribute( 2nG

346 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2nG

347 ) 

348  

349 @property 

350 def maximum_surface2d_layered_width(self) -> int: 

351 """int: Maximum 2D layered surface width.""" 

352 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2|G

353  

354 @property 

355 def maximum_surface2d_layered_height(self) -> int: 

356 """int: Maximum 2D layered surface height.""" 

357 return self._get_cached_attribute( 2oG

358 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2oG

359 ) 

360  

361 @property 

362 def maximum_surface2d_layered_layers(self) -> int: 

363 """int: Maximum layers in a 2D layered surface.""" 

364 return self._get_cached_attribute( 2Mm

365 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2Mm

366 ) 

367  

368 @property 

369 def maximum_surfacecubemap_width(self) -> int: 

370 """int: Maximum cubemap surface width.""" 

371 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2cH

372  

373 @property 

374 def maximum_surfacecubemap_layered_width(self) -> int: 

375 """int: Maximum cubemap layered surface width.""" 

376 return self._get_cached_attribute( 2Nm

377 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2Nm

378 ) 

379  

380 @property 

381 def maximum_surfacecubemap_layered_layers(self) -> int: 

382 """int: Maximum layers in a cubemap layered surface.""" 

383 return self._get_cached_attribute( 2pG

384 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2pG

385 ) 

386  

387 @property 

388 def max_registers_per_block(self) -> int: 

389 """int: Maximum number of 32-bit registers available to a thread block.""" 

390 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2Zm

391  

392 @property 

393 def clock_rate(self) -> int: 

394 """int: Typical clock frequency in kilohertz.""" 

395 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2-fqn6Ijb*n3

396  

397 @property 

398 def texture_alignment(self) -> int: 

399 """int: Alignment requirement for textures.""" 

400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2GH

401  

402 @property 

403 def texture_pitch_alignment(self) -> int: 

404 """int: Pitch alignment requirement for textures.""" 

405 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2HH

406  

407 @property 

408 def gpu_overlap(self) -> bool: 

409 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead.""" 

410 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2$G

411  

412 @property 

413 def multiprocessor_count(self) -> int: 

414 """int: Number of multiprocessors on device.""" 

415 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2xH+m

416  

417 @property 

418 def kernel_exec_timeout(self) -> bool: 

419 """bool: Specifies whether there is a run time limit on kernels.""" 

420 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2On

421  

422 @property 

423 def integrated(self) -> bool: 

424 """bool: Device is integrated with host memory.""" 

425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2*G

426  

427 @property 

428 def can_map_host_memory(self) -> bool: 

429 """bool: Device can map host memory into CUDA address space.""" 

430 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 20G

431  

432 @property 

433 def compute_mode(self) -> int: 

434 """int: Compute mode (See CUcomputemode for details).""" 

435 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 27I

436  

437 @property 

438 def concurrent_kernels(self) -> bool: 

439 """bool: Device can possibly execute multiple kernels concurrently.""" 

440 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 24G

441  

442 @property 

443 def ecc_enabled(self) -> bool: 

444 """bool: Device has ECC support enabled.""" 

445 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 28G

446  

447 @property 

448 def pci_bus_id(self) -> int: 

449 """int: PCI bus ID of the device.""" 

450 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2BH

451  

452 @property 

453 def pci_device_id(self) -> int: 

454 """int: PCI device ID of the device.""" 

455 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2CH

456  

457 @property 

458 def pci_domain_id(self) -> int: 

459 """int: PCI domain ID of the device.""" 

460 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2DH

461  

462 @property 

463 def tcc_driver(self) -> bool: 

464 """bool: Device is using TCC driver model.""" 

465 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2FH

466  

467 @property 

468 def memory_clock_rate(self) -> int: 

469 """int: Peak memory clock frequency in kilohertz.""" 

470 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 28I

471  

472 @property 

473 def global_memory_bus_width(self) -> int: 

474 """int: Global memory bus width in bits.""" 

475 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2!G

476  

477 @property 

478 def l2_cache_size(self) -> int: 

479 """int: Size of L2 cache in bytes.""" 

480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2,G

481  

482 @property 

483 def max_threads_per_multiprocessor(self) -> int: 

484 """int: Maximum resident threads per multiprocessor.""" 

485 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2_GAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F

486  

487 @property 

488 def unified_addressing(self) -> bool: 

489 """bool: Device shares a unified address space with the host.""" 

490 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a JH

491  

492 @property 

493 def compute_capability_major(self) -> int: 

494 """int: Major compute capability version number.""" 

495 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEh2Gjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f

496  

497 @property 

498 def compute_capability_minor(self) -> int: 

499 """int: Minor compute capability version number.""" 

500 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEh3Gjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f

501  

502 @property 

503 def global_l1_cache_supported(self) -> bool: 

504 """bool: Device supports caching globals in L1.""" 

505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 29G

506  

507 @property 

508 def local_l1_cache_supported(self) -> bool: 

509 """bool: Device supports caching locals in L1.""" 

510 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2-G

511  

512 @property 

513 def max_shared_memory_per_multiprocessor(self) -> int: 

514 """int: Maximum shared memory available per multiprocessor in bytes.""" 

515 return self._get_cached_attribute( 2mGAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F

516 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2mGAGBGCGDGEGFGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F

517 ) 

518  

519 @property 

520 def max_registers_per_multiprocessor(self) -> int: 

521 """int: Maximum number of 32-bit registers available per multiprocessor.""" 

522 return self._get_cached_attribute( 2kGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F

523 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2kGRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F

524 ) 

525  

526 @property 

527 def managed_memory(self) -> bool: 

528 """bool: Device can allocate managed memory on this system.""" 

529 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2igjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg.G

530  

531 @property 

532 def multi_gpu_board(self) -> bool: 

533 """bool: Device is on a multi-GPU board.""" 

534 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2uH

535  

536 @property 

537 def multi_gpu_board_group_id(self) -> int: 

538 """int: Unique id for a group of devices on the same multi-GPU board.""" 

539 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2vH

540  

541 @property 

542 def host_native_atomic_supported(self) -> bool: 

543 """bool: Link between the device and the host supports all native atomic operations.""" 

544 return bool( 2hG

545 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2hG

546 ) 

547  

548 @property 

549 def single_to_double_precision_perf_ratio(self) -> int: 

550 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance.""" 

551 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 29I

552  

553 @property 

554 def pageable_memory_access(self) -> bool: 

555 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it.""" 

556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2AH

557  

558 @property 

559 def concurrent_managed_access(self) -> bool: 

560 """bool: Device can coherently access managed memory concurrently with the CPU.""" 

561 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2#i=f?f@f[f]f^fWo#F$F%F'F(F)Figjgkglgmgngogpgqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg5G3 EgFgGg_f/fepXoYoZo+nfpgp!m)mhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;Fsp9o

562  

563 @property 

564 def compute_preemption_supported(self) -> bool: 

565 """bool: Device supports compute preemption.""" 

566 return bool( 2aG

567 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2aG

568 ) 

569  

570 @property 

571 def can_use_host_pointer_for_registered_mem(self) -> bool: 

572 """bool: Device can access host registered memory at the same virtual address as the CPU.""" 

573 return bool( 2ym

574 self._get_cached_attribute( 2ym

575 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2ym

576 ) 

577 ) 

578  

579 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

580  

581 @property 

582 def cooperative_launch(self) -> bool: 

583 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel.""" 

584 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 26G+m

585  

586 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

587  

588 @property 

589 def max_shared_memory_per_block_optin(self) -> int: 

590 """int: Maximum optin shared memory per block.""" 

591 return self._get_cached_attribute( 2lG

592 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2lG

593 ) 

594  

595 @property 

596 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

597 """bool: Device accesses pageable memory via the host's page tables.""" 

598 return bool( 2_F

599 self._get_cached_attribute( 2_F

600 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2_F

601 ) 

602 ) 

603  

604 @property 

605 def direct_managed_mem_access_from_host(self) -> bool: 

606 """bool: The host can directly access managed memory on the device without migration.""" 

607 return bool( 2]F

608 self._get_cached_attribute( 2]F

609 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2]F

610 ) 

611 ) 

612  

613 @property 

614 def virtual_memory_management_supported(self) -> bool: 

615 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs.""" 

616 return bool( 2`F0c`e`fut{e{fstYe;f

617 self._get_cached_attribute( 2`F0c`e`fut{e{fstYe;f

618 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2`F0c`e`fut{e{fstYe;f

619 ) 

620 ) 

621  

622 @property 

623 def handle_type_posix_file_descriptor_supported(self) -> bool: 

624 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

625 return bool( 2) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b^F_b-b.b/bm n 1 2

626 self._get_cached_attribute( 2) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b^F_b-b.b/bm n 1 2

627 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b^F_b-b.b/bm n 1 2

628 ) 

629 ) 

630  

631 @property 

632 def handle_type_win32_handle_supported(self) -> bool: 

633 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

634 return bool( 2eG

635 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2eG

636 ) 

637  

638 @property 

639 def handle_type_win32_kmt_handle_supported(self) -> bool: 

640 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

641 return bool( 2Bm

642 self._get_cached_attribute( 2Bm

643 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2Bm

644 ) 

645 ) 

646  

647 @property 

648 def max_blocks_per_multiprocessor(self) -> int: 

649 """int: Maximum number of blocks per multiprocessor.""" 

650 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2Xm

651  

652 @property 

653 def generic_compression_supported(self) -> bool: 

654 """bool: Device supports compression of memory.""" 

655 return bool( 2bG

656 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2bG

657 ) 

658  

659 @property 

660 def max_persisting_l2_cache_size(self) -> int: 

661 """int: Maximum L2 persisting lines capacity setting in bytes.""" 

662 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2[G

663  

664 @property 

665 def max_access_policy_window_size(self) -> int: 

666 """int: Maximum value of CUaccessPolicyWindow.num_bytes.""" 

667 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2/G

668  

669 @property 

670 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

671 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate.""" 

672 return bool( 2Am

673 self._get_cached_attribute( 2Am

674 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2Am

675 ) 

676 ) 

677  

678 @property 

679 def reserved_shared_memory_per_block(self) -> int: 

680 """int: Shared memory reserved by CUDA driver per block in bytes.""" 

681 return self._get_cached_attribute( 2yG

682 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2yG

683 ) 

684  

685 @property 

686 def sparse_cuda_array_supported(self) -> bool: 

687 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.""" 

688 return bool( 2Sm

689 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2Sm

690 ) 

691  

692 @property 

693 def read_only_host_register_supported(self) -> bool: 

694 """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.""" 

695 return bool( 2xG

696 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2xG

697 ) 

698  

699 @property 

700 def memory_pools_supported(self) -> bool: 

701 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs.""" 

702 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2#iJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]r^r_r`r{r|r}r~rasQGRGSGTGUGVGcg=f+i7f8f,iPe-i.i/i:i;idg?f=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@fhj#f$fijRejjkjljmjnjfg[foj%f'fpjSeqjrjsjtjujgg]fvj(f)fwjTexjyjzjAjBjhg^fCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jWGXGesktlt^q_q`q`o%m'mmtntot{o|o}opt~oapbpcpqtrtdprs1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j)nWo) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bsHEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;Fiksp.n9ojkkk:fXelk_b-b.bmk/bnkokpkqkrksktkukvkwkZeJgKgwixkykzk0exiyiAkBkR S T U V CkDkEkFkGkFhGhHhIhJhHkIkJkKkLkzi1eLgMgAiMkNkOk2eBiCiPkQkNgOgPgQgRg3eSgTgRkSkTkDiEiUkVkWkXkYkZk0k`b{b|b}b~b5e6e7e1k2k3k4k5k8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kacbcccdcec)k*k+k,k-kKhLhMhNhOhGiHiIiJiKi$eYgZgLi.k/k:k%eMiNi;k=kW X Y Z 0 ?k@k[k]k^kPhQhRhShTh_k`k{k|k}kOi'e0g1gPi~kalbl(eQiRicldl2g3g4g5g6g)e7g8gelflglSiTihliljlklllmlnlfcgchcicjc+e,e-eolplqlrlsl.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkclcmcncocDlElFlGlHlUhVhWhXhYhm n 1 2 IlJlKlLlMlViWiXiYiZiNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*m

703  

704 @property 

705 def gpu_direct_rdma_supported(self) -> bool: 

706 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information).""" 

707 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2#GYe;f

708  

709 @property 

710 def gpu_direct_rdma_flush_writes_options(self) -> int: 

711 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum.""" 

712 return self._get_cached_attribute( 2cG

713 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2cG

714 ) 

715  

716 @property 

717 def gpu_direct_rdma_writes_ordering(self) -> int: 

718 """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.""" 

719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2Wm

720  

721 @property 

722 def mempool_supported_handle_types(self) -> int: 

723 """int: Handle types supported with mempool based IPC.""" 

724 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 25m

725  

726 @property 

727 def deferred_mapping_cuda_array_supported(self) -> bool: 

728 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.""" 

729 return bool( 2zm

730 self._get_cached_attribute( 2zm

731 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2zm

732 ) 

733 ) 

734  

735 @property 

736 def numa_config(self) -> int: 

737 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum.""" 

738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2yH

739  

740 @property 

741 def numa_id(self) -> int: 

742 """int: NUMA node ID of the GPU memory.""" 

743 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2zH

744  

745 @property 

746 def multicast_supported(self) -> bool: 

747 """bool: Device supports switch multicast and reduction operations.""" 

748 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2wH

749  

750 @property 

751 def surface_alignment(self) -> int: 

752 """int: Surface alignment requirement in bytes.""" 

753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2EH

754  

755 @property 

756 def async_engine_count(self) -> int: 

757 """int: Number of asynchronous engines.""" 

758 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2YG

759  

760 @property 

761 def can_tex2d_gather(self) -> bool: 

762 """bool: True if device supports 2D texture gather operations, False if not.""" 

763 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Um

764  

765 @property 

766 def maximum_texture2d_gather_width(self) -> int: 

767 """int: Maximum 2D texture gather width.""" 

768 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2gH

769  

770 @property 

771 def maximum_texture2d_gather_height(self) -> int: 

772 """int: Maximum 2D texture gather height.""" 

773 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2fH

774  

775 @property 

776 def stream_priorities_supported(self) -> bool: 

777 """bool: True if device supports stream priorities, False if not.""" 

778 return bool( 2Tm

779 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Tm

780 ) 

781  

782 @property 

783 def can_flush_remote_writes(self) -> bool: 

784 """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.""" 

785 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2ZG

786  

787 @property 

788 def host_register_supported(self) -> bool: 

789 """bool: Device supports host memory registration via cudaHostRegister.""" 

790 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2)G

791  

792 @property 

793 def timeline_semaphore_interop_supported(self) -> bool: 

794 """bool: External timeline semaphore interop is supported on the device.""" 

795 return bool( 2Fm

796 self._get_cached_attribute( 2Fm

797 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Fm

798 ) 

799 ) 

800  

801 @property 

802 def cluster_launch(self) -> bool: 

803 """bool: Indicates device supports cluster launch.""" 

804 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 21G

805  

806 @property 

807 def can_use_64_bit_stream_mem_ops(self) -> bool: 

808 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs.""" 

809 return bool( 2~F

810 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2~F

811 ) 

812  

813 @property 

814 def can_use_stream_wait_value_nor(self) -> bool: 

815 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs.""" 

816 return bool( 2Lm

817 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2Lm

818 ) 

819  

820 @property 

821 def dma_buf_supported(self) -> bool: 

822 """bool: Device supports buffer sharing with dma_buf mechanism.""" 

823 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Vm

824  

825 # Start of CUDA 12 device attributes 

826  

827 @property 

828 def ipc_event_supported(self) -> bool: 

829 """bool: Device supports IPC Events.""" 

830 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2+G

831  

832 @property 

833 def mem_sync_domain_count(self) -> int: 

834 """int: Number of memory domains the device supports.""" 

835 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2rH

836  

837 @property 

838 def tensor_map_access_supported(self) -> bool: 

839 """bool: Device supports accessing memory using Tensor Map.""" 

840 return bool( 2zG^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDh

841 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2zG^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAhBhChDh

842 ) 

843  

844 @property 

845 def handle_type_fabric_supported(self) -> bool: 

846 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate().""" 

847 return bool( 2dG

848 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2dG

849 ) 

850  

851 @property 

852 def unified_function_pointers(self) -> bool: 

853 """bool: Device supports unified function pointers.""" 

854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2KH

855  

856 @property 

857 def mps_enabled(self) -> bool: 

858 """bool: Indicates if contexts created on this device will be shared via MPS.""" 

859 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2tH

860  

861 @property 

862 def host_numa_id(self) -> int: 

863 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA.""" 

864 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2#F$F'F(Fo 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 P Q l (G+nckHgdkekfkgkaghkf wnTn

865  

866 @property 

867 def d3d12_cig_supported(self) -> bool: 

868 """bool: Device supports CIG with D3D12.""" 

869 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 27G

870  

871 @property 

872 def mem_decompress_algorithm_mask(self) -> int: 

873 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum.""" 

874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2pH

875  

876 @property 

877 def mem_decompress_maximum_length(self) -> int: 

878 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed.""" 

879 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2qH

880  

881 @property 

882 def vulkan_cig_supported(self) -> bool: 

883 """bool: Device supports CIG with Vulkan.""" 

884 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 26m

885  

886 @property 

887 def gpu_pci_device_id(self) -> int: 

888 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID. 

889  

890 Returns 0 if the driver does not support this query. 

891 """ 

892 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2%G

893  

894 @property 

895 def gpu_pci_subsystem_id(self) -> int: 

896 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID. 

897  

898 Returns 0 if the driver does not support this query. 

899 """ 

900 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2'G

901  

902 @property 

903 def host_numa_virtual_memory_management_supported(self) -> bool: 

904 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

905 return bool( 2Cm

906 self._get_cached_attribute( 2Cm

907 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Cm

908 ) 

909 ) 

910  

911 @property 

912 def host_numa_memory_pools_supported(self) -> bool: 

913 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

914 return bool( 2FsGsqn3nHIIIJIKIDtLI~qarbrHs4nEtttFtiGHgagf

915 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2FsGsqn3nHIIIJIKIDtLI~qarbrHs4nEtttFtiGHgagf

916 ) 

917  

918 # Start of CUDA 13 device attributes 

919  

920 @property 

921 def host_numa_multinode_ipc_supported(self) -> bool: 

922 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system.""" 

923 return bool( 2jG

924 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2jG

925 ) 

926  

927 @property 

928 def host_memory_pools_supported(self) -> bool: 

929 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

930 IF CUDA_CORE_BUILD_MAJOR < 13: 

931 return False 

932 ELSE: 

933 return bool( 2#iNno 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 P Q l gG8mmpckPnHgnpdkopekppfkqpgkQnagrphktpRnXeSn?KGmf kb=FwnTnQF

934 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2#iNno 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 P Q l gG8mmpckPnHgnpdkopekppfkqpgkQnagrphktpRnXeSn?KGmf kb=FwnTnQF

935 ) 

936  

937 @property 

938 def host_virtual_memory_management_supported(self) -> bool: 

939 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

940 IF CUDA_CORE_BUILD_MAJOR < 13: 

941 return False 

942 ELSE: 

943 return bool( 2Dm

944 self._get_cached_attribute( 2Dm

945 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2Dm

946 ) 

947 ) 

948  

949 @property 

950 def host_alloc_dma_buf_supported(self) -> bool: 

951 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism.""" 

952 IF CUDA_CORE_BUILD_MAJOR < 13: 

953 return False 

954 ELSE: 

955 return bool( 2fG

956 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2fG

957 ) 

958  

959 @property 

960 def only_partial_host_native_atomic_supported(self) -> bool: 

961 """bool: Link between the device and the host supports only some native atomic operations.""" 

962 IF CUDA_CORE_BUILD_MAJOR < 13: 

963 return False 

964 ELSE: 

965 return bool( 2Em

966 self._get_cached_attribute( 2Em

967 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2Em

968 ) 

969 ) 

970  

971  

972class Device: 

973 """Represent a GPU and act as an entry point for cuda.core features. 

974  

975 This is a singleton object that helps ensure interoperability 

976 across multiple libraries imported in the process to both see 

977 and use the same GPU device. 

978  

979 While acting as the entry point, many other CUDA resources can be 

980 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent 

981 resource created through this device, will continue to refer to 

982 this device's context. 

983  

984 Newly returned :obj:`~_device.Device` objects are thread-local singletons 

985 for a specified device. 

986  

987 Note 

988 ---- 

989 Will not initialize the GPU. 

990  

991 Parameters 

992 ---------- 

993 device_id : int, optional 

994 Device ordinal to return a :obj:`~_device.Device` object for. 

995 Default value of `None` return the currently used device. 

996  

997 """ 

998 __slots__ = ( 

999 "_device_id", 

1000 "_memory_resource", 

1001 "_has_inited", 

1002 "_properties", 

1003 "_resources", 

1004 "_uuid", 

1005 "_context", 

1006 "__weakref__", 

1007 ) 

1008  

1009 def __new__(cls, device_id: Device | int | None = None) -> Device: 

1010 if isinstance(device_id, Device): 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1wCN1jDN2jEN3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is $PGb. t cPHb/ u %PIb'P=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYndP?j)o_e.fGM@j7mXz(P[jeP]j)P^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxA:MjkvJ)pFNkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;sGNlk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b*M-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1011 return device_id 2ktlt`o%m'mmtntot{o|o}opt~oapbpcpqtrtdpCNDNEN5H/n:n;n=n?n@n[n)n) 'I* (I+ , 5p- )I$P. cP/ %P'P: ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfb*I+IgbhbibGGHG|L}L~LaMdP.fGM7m(PeP)PHMIM(m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkik.n:MFN:fGN`e{estYe*oCpDp0L$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@JwJ*MxJyJm n

1012  

1013 Device_ensure_cuda_initialized() 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1014 device_id = Device_resolve_device_id(device_id) 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1015 devices = Device_ensure_tls_devices(cls) 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1016  

1017 try: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1018 return devices[device_id] 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1019 except IndexError: 2DMEM

1020 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2DMEM

1021  

1022 def _check_context_initialized(self) -> None: 

1023 if not self._has_inited: 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~ras7f8f9f!f#f$f%f'f(f)f*f+fesNIMHOIPIdLeL2K^qUJVJWJ_qXJ3K4K`q5K`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL6K7K8K9K1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohooOiojogPkohPlomoiPnopOoopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWIEOFOGOHOIOJOKOLOMONOOOPOQORO-fSOqnTO5M6M7M8M9M!M#M$MKNjPkPUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPGLHLILJLKLLL#m$m!KML9m7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxP!H7ntnwtGI3 +m-IVnun8nmIZI9n!nWnXn:h;hyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!m(m)m8m:MFN1n#PGmf kbGN(n!J#JbgHmIm(M[l+por]lpr,p-p.pqr^lrr_lsr/p:p;ptrJgKgR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbub=p?pFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCremDr@p[p]pErLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquqKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrfm;ovqwqxqOrYgZgW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbyqzqPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrpmYrAqBqCqZr0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4qUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8rm n 1 2 qm9r5q6q7q!rrm_o8q9q!q#rsm$r#q$q%q%rtm'r'q(q)q(rum)r*q+q,q*rvm+r-q.q/q,rwm-r:q;q=q.rxm/r?q@q[q:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:LfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFI|J,K-K.K}J/KkJlJGtmJnJVISKoJHtpJItqJrJsJtJTKxnZH0H

1024 raise CUDAError( 

1025 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?" 

1026 ) 

1027 Context_check_open(self._context) 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~ras7f8f9f!f#f$f%f'f(f)f*f+fesNIMHOIPIdLeL2K^qUJVJWJ_qXJ3K4K`q5K`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL6K7K8K9K1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohooOiojogPkohPlomoiPnopOoopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWIEOFOGOHOIOJOKOLOMONOOOPOQORO-fSOqnTO5M6M7M8M9M!M#M$MKNjPkPUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPGLHLILJLKLLL#m$m!KML9m7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxP!H7ntnwtGI3 +m-IVnun8nmIZI9n!nWnXn:h;hyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!m(m)m8m:MFN1n#PGmf kbGN(n!J#JbgHmIm(M[l+por]lpr,p-p.pqr^lrr_lsr/p:p;ptrJgKgR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbub=p?pFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCremDr@p[p]pErLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquqKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrfm;ovqwqxqOrYgZgW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbyqzqPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrpmYrAqBqCqZr0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4qUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8rm n 1 2 qm9r5q6q7q!rrm_o8q9q!q#rsm$r#q$q%q%rtm'r'q(q)q(rum)r*q+q,q*rvm+r-q.q/q,rwm-r:q;q=q.rxm/r?q@q[q:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:LfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFI|J,K-K.K}J/KkJlJGtmJnJVISKoJHtpJItqJrJsJtJTKxnZH0H

1028  

1029  

1030 @classmethod 

1031 def get_all_devices(cls) -> tuple[Device, ...]: 

1032 """ 

1033 Query the available device instances. 

1034  

1035 Returns 

1036 ------- 

1037 tuple of Device 

1038 A tuple containing instances of available devices. 

1039 """ 

1040 return cls._get_all_devices_from_cuda_driver() 2Is,fKsLsMs@F%M'M+M[F|I1H~IaJbJcJdJ~J:h;heJ)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtet$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J;oft_ogt*maKbKcKdKhtiOjOkOitjt

1041  

1042 @classmethod 

1043 def _get_all_devices_from_cuda_driver(cls): 

1044 Device_ensure_cuda_initialized() 2Is,fKsLsMs@F%M'M+M[F|I1H~IaJbJcJdJ~J:h;heJ)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtet$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J;oft_ogt*maKbKcKdKhtiOjOkOitjt

1045 return tuple(Device_ensure_tls_devices(cls)) 2Is,fKsLsMs@F%M'M+M[F|I1H~IaJbJcJdJ~J:h;heJ)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtet$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J;oft_ogt*maKbKcKdKhtiOjOkOitjt

1046  

1047 def to_system_device(self) -> 'cuda.core.system.Device': 

1048 """ 

1049 Get the corresponding :class:`cuda.core.system.Device` (which is used 

1050 for NVIDIA Management Library (NVML) access) for this 

1051 :class:`cuda.core.Device` (which is used for CUDA access). 

1052  

1053 The devices are mapped to one another by their UUID. 

1054  

1055 Returns 

1056 ------- 

1057 cuda.core.system.Device 

1058 The corresponding system-level device instance used for NVML access. 

1059 """ 

1060 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2@F%M'M[FIG

1061  

1062 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2@F%M'M[FIG

1063 raise RuntimeError( 

1064 "cuda.core.system.Device requires cuda-bindings 12.9.6+ for CUDA 12.x, or cuda-bindings 13.2.0+ for CUDA 13.x" 

1065 ) 

1066  

1067 from cuda.core.system import Device as SystemDevice 2@F%M'M[FIG

1068 return SystemDevice(uuid=self.uuid) 2@F%M'M[FIG

1069  

1070 @property 

1071 def device_id(self) -> int: 

1072 """Return device ordinal.""" 

1073 return self._device_id 2JtKtcg=fdg?feg@ffg[fgg]fhg^fktlt`o%m'm{q|qvnmtntot{o|o}opt~oapbpcpqtrtdpCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK=LiQ6H7H)n0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h%F|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I)FqOrObMXM9F=IuJjQsOtOuOvOwOYMxOyOJs) ,M'I* (Ijr+ Fs?I, Gs5p- )I$P. cP/ %P'P-f: rn; = ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMabkrbb~q)McbarlrdbbrmrebHs}Ffb*I+I[Igb]IhbnribGGHG|L}L~LaMEh#m$m1HXImKYI!H7ntnwtZM:h;hdP_e.fGM7m(PeP)PHMIMhM/fZo(m)m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkik.n:MFN:fGN!J#J0c`e{estYe0LupvpiMjMbgHmImRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@JwJ_b*MxJyJ[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliJMKMm n qmrmsmtmumvmwmxmUI;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihirisi!iti3IkQ4I0H5I

1074  

1075 @property 

1076 def pci_bus_id(self) -> str: 

1077 """Return a PCI Bus Id string for this device.""" 

1078 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2+MmKIG

1079 return bus_id[:12].decode() 2+MmKIG

1080  

1081 def can_access_peer(self, peer: Device | int) -> bool: 

1082 """Check if this device can access memory from the specified peer device. 

1083  

1084 Queries whether peer-to-peer memory access is supported between this 

1085 device and the specified peer device. 

1086  

1087 Parameters 

1088 ---------- 

1089 peer : Device | int 

1090 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID. 

1091 """ 

1092 peer = Device(peer) 

1093 cdef int d1 = <int> self.device_id 

1094 cdef int d2 = <int> peer.device_id 

1095 if d1 == d2: 

1096 return True 

1097 cdef int value = 0 

1098 with nogil: 

1099 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2)) 

1100 return bool(value) 

1101  

1102 @property 

1103 def uuid(self) -> str: 

1104 """Return a UUID for the device. 

1105  

1106 Returns 16-octets identifying the device. If the device is in 

1107 MIG mode, returns its MIG UUID which uniquely identifies the 

1108 subscribed MIG compute instance. 

1109  

1110 Note 

1111 ---- 

1112 MIG UUID is only returned when device is in MIG mode and the 

1113 driver is older than CUDA 11.4. 

1114  

1115 The UUID is cached after first access to avoid repeated CUDA API calls. 

1116  

1117 """ 

1118 cdef cydriver.CUuuid uuid 

1119 cdef cydriver.CUdevice dev 

1120 cdef bytes uuid_b 

1121 cdef str uuid_hex 

1122  

1123 if self._uuid is None: 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F%M'M+M[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1124 dev = self._device_id 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1125 with nogil: 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1126 IF CUDA_CORE_BUILD_MAJOR == 12: 

1127 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev)) 

1128 ELSE: # 13.0+ 

1129 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1130 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1131 uuid_hex = uuid_b.hex() 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1132 # 8-4-4-4-12 

1133 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1134 return self._uuid 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b@F%M'M+M[F4J}I5J6JIGYI{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1135  

1136 @property 

1137 def name(self) -> str: 

1138 """Return the device name.""" 

1139 # Use 256 characters to be consistent with CUDA Runtime 

1140 cdef int LENGTH = 256 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1141 cdef bytes name = bytes(LENGTH) 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1142 cdef char* name_ptr = name 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1143 cdef cydriver.CUdevice this_dev = self._device_id 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1144 with nogil: 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1145 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1146 name = name.split(b"\0")[0] 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1147 return name.decode() 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nXIBN

1148  

1149 @property 

1150 def properties(self) -> DeviceProperties: 

1151 """Return a :obj:`~_device.DeviceProperties` class with information about the device.""" 

1152 if self._properties is None: 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEh}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

1153 self._properties = DeviceProperties._init(self._device_id) 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bDgEh}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6mjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`f{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

1154  

1155 return self._properties 2a #iZhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKtJGKGLGMGNGOG$i%i'i(i)i*iPG?r@r[r]rxoxtytyozoAoBoCo^r_r`r{r|r}r~rasztQGRGSGTGUGVGbscscg=f=e+i7f8f,iPe-i.i/i:i;idg?f?e=i9f!f?iQe@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjeg@f@ehj#f$fijRejjkjljmjnjfg[f[eoj%f'fpjSeqjrjsjtjujgg]f]evj(f)fwjTexjyjzjAjBjhg^f^eCj*f+fDjUeEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0jAtWGXGdsBtesCtfsgshsisjsksktlsmsnsospslt^q_q`q`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsFoGoHoIoJoKors1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-j.j/j:j;jJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn)nWoNn#F$F%F'F(F)FigjgkglgmgngogpgGpqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg) o * p + Fsq , Gsr - s Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTb; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby HIz IIA B C JID KIE F G DtH LII J bb~qK cbarL dbbrM ebHsN fb4nO UbVbgbEtP hbttQ ibFtl WbXbYbZb0b1bDgEh}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg?j_e.f@j7m[j]j^j_j`jEs_f/fepXoYoZo+nfpgp!m(m)m8m0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnjkkk:fXeSn?KGmf kb=FwnTnQFlk0c`e`fut{e{fstYe;fHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmImAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/bXdnk|eokpkYd}eqkrkZd0dsk~etkuk1dafvkwk2dZeJgKgwixkykzk0exiyiAkBkR g S T b h U V c tbubbfcfdfefffCkgfDkEkhfFkGkFh:bGhHhlb;bIhJhmbHkifIkJk3djfKkLk4dzi1eLgMgAiMkNkOk2eBiCiPkQkNgvbOgPg4 wbQgRg5 3eSgTgRkSkTkDiEiUkVkWkkfXkYklfZk0k`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krf2k3k(dsf4k5k)d8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*k+kuf,k-kKh=bLhMhnb?bNhOhobGi!eHiIi[d#eJiKi]d$eYgZgLi.k/k:k%eMiNi;k=kW i X Y d j Z 0 e zbAbvfwfxfyfzf?kAf@k[kBf]k^kPh@bQhRhpb[bShThqb_kCf`k{k^dDf|k}k_dOi'e0g1gPi~kalbl(eQiRicldl2gBb3g4g! Cb5g6g# )e7g8gelflglSiTihliljlEfklllFfmlnlfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLfplqlfeMfrlslge.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfElFlOfGlHlUh]bVhWhrb^bXhYhsbm n 1 2 seteIlPfJlKlueQfLlMlvewexeyeVi:eWiXize;eYiZiAeNlRfOlPlBeSfQlRlCeSlTfTlUlDeUfVlWlEeXlVfYlZlFeWf0l1lGe2lXf3l4lHeYf5l6lIe7lZf8l9lJe0f!l#lKeLe$l1f%l'lMe2f(l)lNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p*m^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDh

1156  

1157 @property 

1158 def resources(self) -> DeviceResources: 

1159 """Return the hardware resource query namespace for this device.""" 

1160 if self._resources is None: 2Ns*lOs+lk VeWe,l-l.l/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's@l(s

1161 self._resources = DeviceResources._init(self._device_id) 2Ns*lOs+lk VeWe,l-l.l/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's@l(s

1162 return self._resources 2Ns*lOs+lk VeWe,l-l.l/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's@l(s

1163  

1164 @property 

1165 def compute_capability(self) -> ComputeCapability: 

1166 """Return a named tuple with 2 fields: major and minor.""" 

1167 cdef DeviceProperties prop = self.properties 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo5H/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p3f4f5f6f

1168 cached = prop._cache.get("compute_capability") 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo5H/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p3f4f5f6f

1169 if cached is not None: 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo5H/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 +mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p3f4f5f6f

1170 return cached 2a 5H/n:n;n=n?n@n[n!o#o$oDg2nk VeWe+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*H+H8b9b,H-H!b.H/H:H;H=H?H@H[H]H^H_H`H#b{H$b|H%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdLKidMKjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdNKFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2db c lbmb3d4d4 5 `b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4e(d)dac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dnbob!e[d#e]dd e pbqb^d_d! # fc`d{dgc$ % hc|d}d~daebeicjccedeee*efegekcheielc' ( mcjekelemeneoencocpeqererbsbseteuevewexeye:eze;eAeBeCeDeEeFeGeHeIeJeKeLeMeNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p

1171 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f

1172 return prop._cache.setdefault("compute_capability", cc) 2a Zhsoynzn,m-m.mAn/mBntoCn:muo;mvoDnEnFnwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnxoxtytyozoAoBoCoztbscs=ePe?eQe@eRe[eSe]eTe^eUeAtdsBtCtfsgshsisjskslsmsnsosps%m'm{q|qvnDoEoqsFoGoHoIoJoKo/n:n;n=n?n@n[n!o#o$oJmLoMoNosstsusvswsxsyszsAsBsOoPoQoCsRoSoToKmDsUoonGnVoHnInJnKnLnMnpn-fqnDgEhjb*n2nk VeWe_I`I3 2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p2pFb3p4p3f4f5f6f

1173  

1174 @property 

1175 def arch(self) -> str: 

1176 """Return compute capability as a string (e.g., '75' for CC 7.5).""" 

1177 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a 5H/n:n;n=n?n@n[n!o#o$oDg2nk VeWe-Isc9JtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcHp1c2cup3cvp4c5c6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cHmIm.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2db c lbmb3d4d4 5 `b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd(d)dac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dnbob[d]dd e pbqb^d_d! # fc`d{dgc$ % hc|d}d~daebeicjccedeeefegekcheielc' ( mcjekelemeneoencocpeqererbsbseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOe%gTpUp'gVpWpXpYp(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4p

1178  

1179 @property 

1180 def context(self) -> Context: 

1181 """Return the :obj:`~_context.Context` associated with this device. 

1182  

1183 Note 

1184 ---- 

1185 Device must be initialized. 

1186  

1187 """ 

1188 self._check_context_initialized() 29mwtprsrFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrDr-oEp;oPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrYr@oFp9r_o$r'r)r+r-r/rUI

1189 return self._context 29mwtprsrFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrDr-oEp;oPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXrYr@oFp9r_o$r'r)r+r-r/rUI

1190  

1191 @property 

1192 def memory_resource(self) -> MemoryResource: 

1193 """Return :obj:`~_memory.MemoryResource` associated with this device.""" 

1194 cdef int attr, device_id 

1195 if self._memory_resource is None: 26H7H0h1h2h8H9H+P3h,P4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I3I4I0H5I

1196 # If the device is in TCC mode, or does not support memory pools for some other reason, 

1197 # use the SynchronousMemoryResource which does not use memory pools. 

1198 device_id = self._device_id 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I

1199 with nogil: 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I

1200 HANDLE_RETURN( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I

1201 cydriver.cuDeviceGetAttribute( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I

1202 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1203 ) 

1204 ) 

1205 if attr == 1: 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti3I4I0H5I

1206 from cuda.core._memory import DeviceMemoryResource 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt_h`h{h0i1i2i|h}h~h3iai4i5ibicidi6iei7i8i9ifigihi!i3I4I0H5I

1207 self._memory_resource = DeviceMemoryResource(self._device_id) 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt_h`h{h0i1i2i|h}h~h3iai4i5ibicidi6iei7i8i9ifigihi!i3I4I0H5I

1208 else: 

1209 from cuda.core._memory._synchronous_memory_resource import ( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbg[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h|h}hni~haioipibicidieiqifigihirisiti3I4I0H5I

1210 _SynchronousMemoryResource, 

1211 ) 

1212 self._memory_resource = _SynchronousMemoryResource( 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbg[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h|h}hni~haioipibicidieiqifigihirisiti3I4I0H5I

1213 self._device_id, self._context) 26H7H0h1h2h8H9H3h4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbg[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h{h|h}hni~haioipibicidieiqifigihirisiti3I4I0H5I

1214  

1215 return self._memory_resource 26H7H0h1h2h8H9H+P3h,P4h!I5h6h7h8h{F9h!h|F#h$h%h'h(h)h*h+h,h-h.h/h#I$I%I#m$m!H7ntn:h;hbgHmIm[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm;rvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I3I4I0H5I

1216  

1217 @memory_resource.setter 

1218 def memory_resource(self, mr: MemoryResource) -> None: 

1219 from cuda.core._memory import MemoryResource 

1220 assert_type(mr, MemoryResource) 

1221 self._memory_resource = mr 

1222  

1223 @property 

1224 def default_stream(self) -> Stream: 

1225 """Return a default CUDA :obj:`~_stream.Stream` token. 

1226  

1227 The type of default stream returned depends on if the environment 

1228 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1229  

1230 If set, returns a per-thread default stream. Otherwise returns 

1231 the legacy stream. 

1232  

1233 A default-stream token uses the device that is current when the token 

1234 is used. 

1235  

1236 """ 

1237 return default_stream() 2ktlt`o%m'mmtntot{o|o}opt~oapbpcpqtrtdp)nWoNnlQ|f}f~fzOAOBOCODO'I(IjrFs?IGs5p)IcPmQnQrn3noQcMpQdMqQeMrQfMsQ@ItQgMuQHIIIvQwQJIKIxQyQDtLIzQkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFtGGHG|L}L~LaM#m$m%o'o#H$H%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,b(o:h;hdP)o_e.f7meP/fXo!mBp(m)m8m,nui-nvi6o8oPnHgQnag.n9oRn:M:fXeSnGmf kb[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hlim n qmrmsmtmumvmwmxmkMvtOHPHQHRHSHTHUHVHWHXHYHGtHtIt^I_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I3I4I0H5I

1238  

1239 def __int__(self) -> int: 

1240 """Return device_id.""" 

1241 return self._device_id 2;M=M?M=L#m$m

1242  

1243 def __repr__(self) -> str: 

1244 return f"<Device {self._device_id} ({self.name})>" 2MINIMHOIPIrNsNtNuNvNwNxNQIyNzNAN0MJm1M2MKm3M4MRISITI9FJs,M'I(IjrFs?IGs5p)I-fqn5M6M7M8M9M!M#M$Mrn3n@IDtkr~q)MarlrbrmrHs}F4n*I+I[IEt]IttnrFt5nBN

1245  

1246 def __hash__(self) -> int: 

1247 return hash(self.uuid) 29F=IuJ) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1b4J}I5J6J{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn_b-b.b/b@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNm n 1 2 pNqN-M.M

1248  

1249 def __eq__(self, other: object) -> bool: 

1250 if not isinstance(other, Device): 29F=I) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bBM}ICMFM{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn-b.b/b*P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQm n 1 2 -M.MRKSKxn

1251 return NotImplemented 29F=IFM*P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQRK

1252 return self._device_id == other._device_id 29F) o * p + q , r - s Gb. t Hb/ u Ib: v JbKbLbMbNbObPbQbRbSbTb; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN fbO UbVbgbP hbQ ibl WbXbYbZb0b1bBM}ICM{jui|j}j~jakvibkckHgdkekfkgkaghkikf wnTn-b.b/b*Pm n 1 2 -M.MSKxn

1253  

1254 def __reduce__(self) -> tuple[object, ...]: 

1255 return Device, (self.device_id,) 2Js,M'I(IjrFs?IGs5p)I-frncMdMeMfM@IgMkr~q)MarlrbrmrHs}F*I+I[I]InrGGHG|L}L~LaMJMKM

1256  

1257 def set_current(self, ctx: Context | None = None) -> Context | None: 

1258 """Set device to be used for GPU executions. 

1259  

1260 Initializes CUDA and sets the calling thread to a valid CUDA 

1261 context. By default the primary context is used, but optional `ctx` 

1262 parameter can be used to explicitly supply a :obj:`~_context.Context` object. 

1263  

1264 Providing a `ctx` causes the previous set context to be popped and returned. 

1265  

1266 If `ctx` was created on a different device than this receiver, the call 

1267 is delegated to that device's own :meth:`set_current`. This keeps the 

1268 owning device's bookkeeping consistent and lets a context this method 

1269 handed out for a foreign device be pushed back through any ``Device`` 

1270 object, matching the CUDA context stack's own thread-wide semantics. 

1271  

1272 Parameters 

1273 ---------- 

1274 ctx : :obj:`~_context.Context`, optional 

1275 Optional context to push onto this device's current thread stack. 

1276  

1277 Returns 

1278 ------- 

1279 :obj:`~_context.Context`, optional 

1280 The previous context, or ``None`` if no context was current. When 

1281 returned, its ``device_id`` identifies the device that was 

1282 previously current. 

1283  

1284 Examples 

1285 -------- 

1286 Acts as an entry point of this object. Users always start a code by 

1287 calling this method, e.g. 

1288  

1289 >>> from cuda.core import Device 

1290 >>> dev0 = Device(0) 

1291 >>> dev0.set_current() 

1292 >>> # ... do work on device 0 ... 

1293  

1294 """ 

1295 cdef ContextHandle h_context 

1296 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1297 cdef cydriver.CUdevice prev_dev 

1298 cdef Context prev_owned = None 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe:K,l-l.lMywt/l:l;K;l=lGI?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy=K@l;L(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1299  

1300 if ctx is not None: 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe:K,l-l.lMywt/l:l;K;l=lGI?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy=K@l;L(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1301 # TODO: revisit once Context is cythonized 

1302 assert_type(ctx, Context) 2:Kwt;KGI=K;L

1303 Context_check_open(ctx) 2:Kwt;KGI=K;L

1304 if ctx._device_id != self._device_id: 2:Kwt;KGI=K

1305 # The CUDA context stack is per-thread, not per-Device-object, 

1306 # so pushing/popping a foreign-device context is delegated to 

1307 # the device that owns it; its own bookkeeping (_context, 

1308 # _has_inited) is what should track this push, not ours. 

1309 return Device(ctx._device_id).set_current(ctx) 

1310 if self._has_inited and self._context is not None: 2:Kwt;KGI=K

1311 prev_owned = self._context 2:Kwt;KGI=K

1312 curr_ctx = as_cu(ctx._h_context) 2:Kwt;KGI=K

1313 prev_ctx = NULL 2:Kwt;KGI=K

1314 with nogil: 2:Kwt;KGI=K

1315 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&prev_ctx)) 2:Kwt;KGI=K

1316 if prev_ctx != NULL: 2:Kwt;KGI=K

1317 HANDLE_RETURN(cydriver.cuCtxGetDevice(&prev_dev)) 2:Kwt;KGI=K

1318 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2:Kwt;KGI=K

1319 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2:Kwt;KGI=K

1320 self._has_inited = True 2:Kwt;KGI=K

1321 self._context = ctx # Store owning context reference 2:Kwt;KGI=K

1322 if prev_ctx != NULL: 2:Kwt;KGI=K

1323 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2:Kwt;KGI=K

1324 return prev_owned 2:Kwt;KGI=K

1325 return Context._from_handle( 2wt

1326 Context, create_context_handle_ref(prev_ctx), <int>prev_dev) 2wt

1327 else: 

1328 # use primary ctx 

1329 h_context = get_primary_context(self._device_id) 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1330 if h_context.get() == NULL: 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1331 HANDLE_RETURN(get_last_error()) 

1332 raise RuntimeError( 

1333 f"Failed to retain the primary context for device {self._device_id}" 

1334 ) 

1335 with nogil: 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1336 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1337 self._has_inited = True 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1338 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x)n(xWo)xNn*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpgGp,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCgWI-x) o * p + q , r - s Gb. t Hb/ u Ib=j: v JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J bbK cbL dbM ebN KsLsMs}Ffb4nO UbVbgbP hbQ ibl WbXbYbZb0b1b.x/x:x;x=x?x@x#m$mhK|IiK[xjK]x^x_x1H`xkK9m~IaJ5n,I{xbJlKcJdJ|x6njbsn}xUn~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s'sNy@l(s3 oK%o'o+mqKOysKtKPyuK#HvK$HwKxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,bQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.f@j7mXz[j]j^j_j.s`jEsAp#p$p%p$nZn'p(p%n'n0I0nYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK=z6o?z@zip[z]zjp^z_z7o`z{zkp|z}z8o~zaAlpbAcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kbDAEAFAGA;slk(n=sHAKK?s@s[s0c`e`fut{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdwJ_b*M-bxJ.b(MmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5DzJ6DAJ7DBJ8D9D!DCJ#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{DUI|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhFiFXKjFkFlFmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOFPF

1339  

1340 def create_context(self, options: ContextOptions | None = None) -> Context: 

1341 """Create a new :obj:`~_context.Context` object. 

1342  

1343 Note 

1344 ---- 

1345 The newly created context will not be set as current. 

1346  

1347 Parameters 

1348 ---------- 

1349 options : :obj:`~_context.ContextOptions`, optional 

1350 Customizable dataclass for context creation options. 

1351  

1352 Returns 

1353 ------- 

1354 :obj:`~_context.Context` 

1355 Newly created context object. 

1356  

1357 """ 

1358 cdef int i 

1359 cdef object resources 

1360 cdef object res 

1361 cdef SMResource sm_res 

1362 cdef WorkqueueResource wq_res 

1363  

1364 if options is None: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWMbP@l;L

1365 raise ValueError( 2bP

1366 "options with device resources must be provided to create a green context" 

1367 ) 

1368  

1369 options = check_or_create_options(ContextOptions, options, "Context options") 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWMbP@l;L

1370 if options.resources is None: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWMbP@l;L

1371 raise ValueError( 2bP

1372 "ContextOptions.resources must be provided to create a green context" 

1373 ) 

1374  

1375 resources = tuple(options.resources) 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1376 if len(resources) == 0: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1377 raise ValueError("ContextOptions.resources must not be empty") 

1378  

1379 cdef vector[cydriver.CUdevResource] c_resources 

1380 c_resources.resize(len(resources)) 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1381  

1382 for i, res in enumerate(resources): 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1383 if isinstance(res, SMResource): 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1384 sm_res = <SMResource>res 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1385 if not sm_res._is_usable: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?l/MWM@l;L

1386 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2/M

1387 c_resources[i] = sm_res._resource 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L

1388 elif isinstance(res, WorkqueueResource): 2tn

1389 wq_res = <WorkqueueResource>res 2tn

1390 c_resources[i] = wq_res._wq_config_resource 2tn

1391 else: 

1392 raise TypeError(f"Unsupported context resource type: {type(res)}") 

1393  

1394 cdef GreenCtxHandle h_green = create_green_ctx_handle( 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L

1395 c_resources.data(), 

1396 <unsigned int>(c_resources.size()), 

1397 <cydriver.CUdevice>(self._device_id), 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L

1398 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM), 

1399 ) 

1400 if h_green.get() == NULL: 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L

1401 HANDLE_RETURN(get_last_error()) 

1402 raise RuntimeError("Failed to create CUDA green context") 

1403  

1404 return Context._from_green_ctx(Context, h_green, self._device_id) 2VM*l+lk 7ntn,l-l.l/l:l;l=l?lWM@l;L

1405  

1406 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream: 

1407 """Create or wrap a :obj:`~_stream.Stream` object. 

1408  

1409 New stream objects can be created in two different ways: 

1410  

1411 1) Create a new CUDA stream with customizable ``options``. 

1412 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol. 

1413  

1414 Option (2) internally holds a reference to the foreign object 

1415 such that the lifetime is managed. 

1416  

1417 Note 

1418 ---- 

1419 Device must be initialized. New streams are created on this device. 

1420  

1421 Parameters 

1422 ---------- 

1423 obj : :obj:`~_stream.IsStreamType`, optional 

1424 Any object supporting the ``__cuda_stream__`` protocol. 

1425 options : :obj:`~_stream.StreamOptions`, optional 

1426 Customizable dataclass for stream creation options. 

1427  

1428 Returns 

1429 ------- 

1430 :obj:`~_stream.Stream` 

1431 Newly created stream object. 

1432  

1433 """ 

1434 self._check_context_initialized() 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasesNIMHOIPIdLeLVJWJ`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoiojogPkohPlomoiPnooopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWI-fqn5M6M7M8M9M!M#M$MKNjPkPGLHLILJLKLLLML9m7J6njbsnNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxPwt3 +m-IVnun8nmIZI9n!nWnXnyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!mFN1n#PGmGN(n!J#JbgHmIm(MorqrrrtrErKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrOrZrUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r1 2 !r#r%r(r*r,r.r:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-L.LRK/L:L;rvt_J`J{JFI}J0H

1435 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnn{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasesNIMHOIPIdLeLVJWJ`o%m'mvnDoEo{o|o}o~oapbpcpdpQIfLFoGoHoIoJoKorsCNDNENlOmOnO5H/n:n;n=n?n@n[n!o#o$o;M=M?MeKfKgK0MJmgLYJZJhLiLLoMoNojLkLlLmLnL1MoL0J1JpLqLOoPoQorLsLtLuLvLfPwL2J3JxLyLRoSoTozLALBLCLDL2MKm6H7HUo3M4MRISIonGnVoTIHnInJnKnLnMnpn?L0h1h@L2h8H]n9H^n3h4h_nIN5hJN6h7h[L8h{F9h]L!h`n{n|n|F^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoiojogPkohPlomoiPnooopoqoroqOrOsOtOuOvOwOELFLxOyOzOAOBOCODOWI-fqn5M6M7M8M9M!M#M$MKNjPkPGLHLILJLKLLLML9m7J6njbsnNLOLPLQLRLSL*nTLULVLWLXLYLZL2nlPmPnPoPpPqPrPsPtPuPvPwPxPwt3 +m-IVnun8nmIZI9n!nWnXnyPzPLNAPMNBPCPNNONDPEPFPPNGPQNRNSNTNUNVNWNXNYNHPZN0N1N2NIP3N4NJPKPLPMP5NNP6NOPPP7N8NQPRPSP9NTP!N#N$N%N'N(N)N*N+NUP,N-N.N/NVP:N;NWPXPYPZP=N0P?N1P2P@N[N3P4P5P]N6P^N_N`N{N|N}N~NaObO7PcOdOeOfO8PgOhO9P!P#nNHYn7m$nZn%n'n0I0n!mFN1n#PGmGN(n!J#JbgHmIm(MorqrrrtrErKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrOrZrUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r1 2 !r#r%r(r*r,r.r:r1L]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-L.LRK/L:L;rvt_J`J{JFI}J0H

1436  

1437 def create_event(self, options: EventOptions | None = None) -> Event: 

1438 """Create an :obj:`~_event.Event` on this device without recording it to a :obj:`~_stream.Stream`. 

1439  

1440 Note 

1441 ---- 

1442 Device must be initialized. 

1443  

1444 Parameters 

1445 ---------- 

1446 options : :obj:`EventOptions`, optional 

1447 Customizable dataclass for event creation options. 

1448  

1449 Returns 

1450 ------- 

1451 :obj:`~_event.Event` 

1452 Newly created event object. 

1453  

1454 """ 

1455 self._check_context_initialized() 2TJ7f8f9f!f#f$f%f'f(f)f*f+f2K^qUJVJWJ_qXJ3K4K`q5KvnYJZJ6K7K8K9K0J1J2J3JKN!K9m7Jsn#KUn8Jwt+p,p-p.p/p:p;pJgKg=h?htbub=p?p+o,o@p[p]pLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquq.o/o:ovqwqxqYgZg[h]hzbAbyqzq=o?oAqBqCq0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4q[o]o^o5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q

1456 cdef Context ctx = self._context 2TJ7f8f9f!f#f$f%f'f(f)f*f+f2K^qUJVJWJ_qXJ3K4K`q5KvnYJZJ6K7K8K9K0J1J2J3JKN!K9m7Jsn#KUn8Jwt+p,p-p.p/p:p;pJgKg=h?htbub=p?p+o,o@p[p]pLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquq.o/o:ovqwqxqYgZg[h]hzbAbyqzq=o?oAqBqCq0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4q[o]o^o5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q

1457 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2TJ7f8f9f!f#f$f%f'f(f)f*f+f2K^qUJVJWJ_qXJ3K4K`q5KvnYJZJ6K7K8K9K0J1J2J3JKN!K9m7Jsn#KUn8Jwt+p,p-p.p/p:p;pJgKg=h?htbub=p?p+o,o@p[p]pLgMgNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoqSgTgpqqq6 7 xbybrqsqUgVgWgXg8 9 tquq.o/o:ovqwqxqYgZg[h]hzbAbyqzq=o?oAqBqCq0g1g2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq7g8gZq0q$ % DbEb1q2q9g!g#g$g' ( 3q4q[o]o^o5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q

1458  

1459 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer: 

1460 """Allocate device memory from a specified stream. 

1461  

1462 Allocates device memory of `size` bytes on the specified `stream` 

1463 using the memory resource currently associated with this Device. 

1464  

1465 Note 

1466 ---- 

1467 Device must be initialized. 

1468  

1469 Parameters 

1470 ---------- 

1471 size : int 

1472 Number of bytes to allocate. 

1473 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

1474 Keyword-only. The stream establishing the stream ordering semantic. 

1475 Must be passed explicitly; pass ``self.default_stream`` to use 

1476 the default stream. 

1477  

1478 Returns 

1479 ------- 

1480 :obj:`~_memory.Buffer` 

1481 Newly created buffer object. 

1482  

1483 """ 

1484 self._check_context_initialized() 2#m$m!H7ntn:h;h[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm

1485 return self.memory_resource.allocate(size, stream=stream) 2#m$m!H7ntn:h;h[l]l^l_lR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmiiem@hjifmW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomkipm^hliqmrmsmtmumvmwmxm

1486  

1487 def sync(self) -> None: 

1488 """Synchronize this device's bound context. 

1489  

1490 Waits for all preceding work in this device's bound :obj:`~_context.Context` 

1491 to complete. Only that context is synchronized, not the device as a 

1492 whole; work queued in a different context on the same device (e.g. a 

1493 green context) is unaffected. 

1494  

1495 Note 

1496 ---- 

1497 Device must be initialized. 

1498  

1499 """ 

1500 self._check_context_initialized() 2{F|FoOpOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaP#m$m9mwtunmILNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!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~NaObOcOdOeOfOgOhO7m!m(m)m8m:MGmf kbm n

1501 cdef Context ctx = self._context 2{F|FoOpOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaP#m$m9mwtunmILNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!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~NaObOcOdOeOfOgOhO7m!m(m)m8m:MGmf kbm n

1502 HANDLE_RETURN(context_synchronize(ctx._h_context)) 2{F|FoOpOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaP#m$m9mwtunmILNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!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~NaObOcOdOeOfOgOhO7m!m(m)m8m:MGmf kbm n

1503  

1504 def create_graph_builder(self) -> GraphBuilder: 

1505 """Create a new :obj:`~graph.GraphBuilder` on this device. 

1506  

1507 Returns 

1508 ------- 

1509 :obj:`~graph.GraphBuilder` 

1510 Newly created graph builder object. 

1511  

1512 """ 

1513 from cuda.core.graph._graph_builder import GraphBuilder 2DJEJFJGJHJIJJJKJLJynzn,m-m{I.mAnMJNJ/mBnCnOJ:mPJ;mQJDnEnFnRJSJ=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnMH;M=M?MeKfKgKonGnHnInJnKnLnMnpnINJN9mwt]J;r

1514  

1515 self._check_context_initialized() 2DJEJFJGJHJIJJJKJLJynzn,m-m{I.mAnMJNJ/mBnCnOJ:mPJ;mQJDnEnFnRJSJ=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnMH;M=M?MeKfKgKonGnHnInJnKnLnMnpnINJN9mwt]J;r

1516 return GraphBuilder._init(self.create_stream()) 2DJEJFJGJHJIJJJKJLJynzn,m-m{I.mAnMJNJ/mBnCnOJ:mPJ;mQJDnEnFnRJSJ=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnMH;M=M?MeKfKgKonGnHnInJnKnLnMnpnINJN9mwt]J;r

1517  

1518 def create_opaque_array(self, options: OpaqueArrayOptions) -> OpaqueArray: 

1519 """Create an :obj:`~cuda.core.texture.OpaqueArray` on this device. 

1520  

1521 Allocates an opaque, hardware-laid-out CUDA array for texture/surface 

1522 access. 

1523  

1524 Note 

1525 ---- 

1526 Device must be initialized. 

1527  

1528 Parameters 

1529 ---------- 

1530 options : :obj:`~cuda.core.texture.OpaqueArrayOptions` 

1531 Allocation options (shape, format, channels, surface flag). 

1532  

1533 Returns 

1534 ------- 

1535 :obj:`~cuda.core.texture.OpaqueArray` 

1536 Newly created opaque array. 

1537  

1538 .. versionadded:: 1.1.0 

1539 """ 

1540 from cuda.core.texture._array import _create_opaque_array 2GIfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFIkJlJnJVIoJqJrJsJtJxnZH

1541  

1542 self._check_context_initialized() 2GIfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFIkJlJnJVIoJqJrJsJtJxnZH

1543 return _create_opaque_array(options, self._context, self._device_id) 2GIfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`J{JFIkJlJnJVIoJqJrJsJtJxnZH

1544  

1545 def create_mipmapped_array(self, options: MipmappedArrayOptions) -> MipmappedArray: 

1546 """Create a :obj:`~cuda.core.texture.MipmappedArray` on this device. 

1547  

1548 Allocates a mipmapped CUDA array for texture/surface access across 

1549 levels. 

1550  

1551 Note 

1552 ---- 

1553 Device must be initialized. 

1554  

1555 Parameters 

1556 ---------- 

1557 options : :obj:`~cuda.core.texture.MipmappedArrayOptions` 

1558 Allocation options (shape, format, channels, levels, surface flag). 

1559  

1560 Returns 

1561 ------- 

1562 :obj:`~cuda.core.texture.MipmappedArray` 

1563 Newly created mipmapped array. 

1564  

1565 .. versionadded:: 1.1.0 

1566 """ 

1567 from cuda.core.texture._mipmapped_array import _create_mipmapped_array 2FI|J,K-K.K}J/KmJpJZH

1568  

1569 self._check_context_initialized() 2FI|J,K-K.K}J/KmJpJZH

1570 return _create_mipmapped_array(options, self._context, self._device_id) 2FI|J,K-K.K}J/KmJpJZH

1571  

1572 def create_texture_object( 

1573 self, *, resource: ResourceDescriptor, options: TextureObjectOptions | None = None 

1574 ) -> TextureObject: 

1575 """Create a :obj:`~cuda.core.texture.TextureObject` on this device. 

1576  

1577 Binds a resource (an :obj:`~cuda.core.texture.OpaqueArray` / 

1578 :obj:`~cuda.core.texture.MipmappedArray` / linear or pitch2d 

1579 :obj:`~cuda.core.Buffer`, wrapped in a 

1580 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless texture for 

1581 kernel-side sampled reads. The resource must belong to this device. 

1582  

1583 Note 

1584 ---- 

1585 Device must be initialized. 

1586  

1587 Parameters 

1588 ---------- 

1589 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1590 The memory backing the texture. 

1591 options : :obj:`~cuda.core.texture.TextureObjectOptions` 

1592 Sampling state (address/filter/read modes, normalization, etc.). 

1593  

1594 Returns 

1595 ------- 

1596 :obj:`~cuda.core.texture.TextureObject` 

1597 Newly created texture object. 

1598  

1599 .. versionadded:: 1.1.0 

1600 """ 

1601 from cuda.core.texture._texture import _create_texture_object 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH

1602  

1603 self._check_context_initialized() 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH

1604 return _create_texture_object( 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH

1605 resource, options, self._context, self._device_id) 2GIfJgJhJiJjJFIVISKoJHtpJItqJrJsJtJTKxnZH

1606  

1607 def create_surface_object(self, *, resource: ResourceDescriptor) -> SurfaceObject: 

1608 """Create a :obj:`~cuda.core.texture.SurfaceObject` on this device. 

1609  

1610 Binds an :obj:`~cuda.core.texture.OpaqueArray` (via a 

1611 :obj:`~cuda.core.texture.ResourceDescriptor`) as a bindless surface for 

1612 kernel-side typed load/store. The backing array must have been created 

1613 with ``is_surface_load_store=True`` and must belong to this device. 

1614  

1615 Note 

1616 ---- 

1617 Device must be initialized. 

1618  

1619 Parameters 

1620 ---------- 

1621 resource : :obj:`~cuda.core.texture.ResourceDescriptor` 

1622 Must wrap an :obj:`~cuda.core.texture.OpaqueArray` allocated with 

1623 ``is_surface_load_store=True``. 

1624  

1625 Returns 

1626 ------- 

1627 :obj:`~cuda.core.texture.SurfaceObject` 

1628 Newly created surface object. 

1629  

1630 .. versionadded:: 1.1.0 

1631 """ 

1632 from cuda.core.texture._surface import _create_surface_object 2kJlJGtmJnJVIZH

1633  

1634 self._check_context_initialized() 2kJlJGtmJnJVIZH

1635 return _create_surface_object( 2kJlJGtmJnJVIZH

1636 resource, self._context, self._device_id) 2kJlJGtmJnJVIZH

1637  

1638  

1639cdef inline int Device_ensure_cuda_initialized() except? -1: 

1640 """Initialize CUDA driver and check version compatibility (once per process).""" 

1641 global _is_cuInit 

1642 if _is_cuInit is False: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1643 with _lock, nogil: 

1644 HANDLE_RETURN(cydriver.cuInit(0)) 

1645 _is_cuInit = True 

1646 try: 

1647 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1648 except ImportError: 

1649 pass 

1650 else: 

1651 warn_if_cuda_major_version_mismatch() 

1652 return 0 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1653  

1654  

1655cdef inline int Device_resolve_device_id(device_id) except? -1: 

1656 """Resolve device_id, defaulting to current device or 0.""" 

1657 cdef cydriver.CUdevice dev 

1658 cdef cydriver.CUcontext ctx 

1659 cdef cydriver.CUresult err 

1660 if device_id is None: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1bGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJAHN1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DkM!DCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1661 with nogil: 2a #iZhDJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo 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 P Q l GLHLILJLKLLLDgEh#m$m!KML}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n3 %o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.f7mAp#p$p%p$nZn'p(p%n'n0I0nhM_f/fepXoYoZo+nfpgp!mBp(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ)p1n*p:fXeSnGmf kb=FwnTnQF(n!J#J0c`e`fut{e{fstYe;f*oCpDpHp1c0L2cup3cvp4ciM5cjM6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp]q(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZH_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I

1662 err = cydriver.cuCtxGetDevice(&dev) 2a #iZhDJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo 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 P Q l GLHLILJLKLLLDgEh#m$m!KML}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n3 %o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.f7mAp#p$p%p$nZn'p(p%n'n0I0nhM_f/fepXoYoZo+nfpgp!mBp(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ)p1n*p:fXeSnGmf kb=FwnTnQF(n!J#J0c`e`fut{e{fstYe;f*oCpDpHp1c0L2cup3cvp4ciM5cjM6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp]q(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZH_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I

1663 if err == cydriver.CUresult.CUDA_SUCCESS: 2a #iZhDJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo 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 P Q l GLHLILJLKLLLDgEh#m$m!KML}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI7J6njbsn#KUn8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n3 %o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.f7mAp#p$p%p$nZn'p(p%n'n0I0nhM_f/fepXoYoZo+nfpgp!mBp(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ)p1n*p:fXeSnGmf kb=FwnTnQF(n!J#J0c`e`fut{e{fstYe;f*oCpDpHp1c0L2cup3cvp4ciM5cjM6cbg7cIgIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOe%gTpUp'gVpWpXpYp]q(g)g*g+g,g-g.g/g:g;gZp=g?g@g[g]g0p1p[J!F2pFb3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZH_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;I

1664 return int(dev) 2DJEJMIFJGJHJIJJJKJso@K[K]K^K_KLJynzn,m-m{I.mAnMJNJ/mBntoCnOJ:muo`KPJ;mvoQJDnEnFnRJSJwo=r=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnJtKt{K|K}K~KaL?r@r[r]rxoTJbLcLyozoAoBoCo^r_r`r{r|r}r~rasbscscg=f=e7f8fPedg?f?e9f!fQeeg@f@e#f$fRefg[f[e%f'fSegg]f]e(f)fTehg^f^e*f+fUedsesfsgshsisjsksktNIlsmsnsosMHOIPIdLeLpslt2K^qUJVJWJ_qXJ3K4K`q5K`o%m'm{q|qvnDoEomtntot{o|o}opt~oapbpcpqtrtdpqsQIfLFoGoHoIoJoKors5H/n:n;n=n?n@n[n!o#o$o=LJmgLYJZJhLiLLoMoNojLkLlLmLnLlM6K7KmMnMsstsusoMpMqMrMsMtM8K9KuMvMvswsxswMxMyMzMAMyszsAsBsoL0J1JpLqLOoPoQorLsLtLuLvLCswL2J3JxLyLRoSoTozLALBLCLDLKmDsUoRISIonGnVoTIHnInJnKnLnMnpn)nWoNn0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h#F`n$F{n%F|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbMkglgmgngogpgGpqg|f,frg}fELsgFL~ftgugvgwgxgygzgAgBgCgWIo 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 P Q l GLHLILJLKLLL!KML7J#K8JNLOLPLQLRLSL*nTLULVLWLXLYLZL2n%o'o+mpKrK#H$H-I%H'H(H2b3b)H4b5b6b7b*H+H8b9b,H-H!b.H/H:H;H=H?H@H[H]H^H_H`H#b{H$b|H%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnmIZIWnXnxpypzpNHYn)o_e7mApZn0I0nhM_fepXoYoZo+nfpgp!m(m)m8m?F0o{j,nui1o|j2o}j3o~j4oak-nvi5obkhp*F6o+Fip,Fjp-F7o.Fkp/F8o:Flp;FmpckPnHgnpdkopekppfkqpgkQnagrphkiksptp.n9oRnvJ1nSnGmf kb=FwnTnQF!J#J0cutst*oHp1c0L2cup3cvp4ciM5cjM6cbg7cIpJpKpLpMpNpOpPpQpRpSp8c9c!c#c$c%c'c(c)c*c+c,c-cAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdXd|eYd}eZd0d~e1daf2dZe0eg b h c tbubbfcfdfefffgfhf:blb;bmbif3djf4d1e2evb4 wb5 3ekflf`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqfrf(dsf)d8e9eac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@dtfuf=bnb?bob!e[d#e]d$e%ei d j e zbAbvfwfxfyfzfAfBf@bpb[bqbCf^dDf_d'e(eBb! Cb# )eEfFffc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfLffeMfge.e/ekcheielc' ( mcjekelemeneoencocpeqereNfOf]brb^bsbsetePfueQfvewexeye:eze;eAeRfBeSfCeTfDeUfEeVfFeWfGeXfHeYfIeZfJe0fKeLe1fMe2fNeOeTpUpVpWpXpYpZp0p1p[J2p3p4pzJAJBJ1LkMCJ]J2LPK3L4L5L6LQK7L8L9L!L#L$L%L'L(L)L*L+L,L-LUI.LRK/L:L^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fBhChDhfJgJhJiJjJ^J$K%K'K(K)K*K;r+Kvt_J`JLMMMNMOMPMQM{JFI|J,K-K.K}JRMSMTMUMOHPHQHRHSHTH/KUHVHWHXHYHkJlJGtmJnJVIoJHtpJItqJrJsJtJTKZHmi1I0i1i2ini3ioi4i5ipi6i2I7i8iqi9iri.Isi!i/Iti:I;I

1665 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1666 with nogil: 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti

1667 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti

1668 assert <void*>(ctx) == NULL 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti

1669 return 0 # cudart behavior 2a #iZhDgEh#m$m}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLH,IXImKIGYI6njbsnUn3 %o'o2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!pzp#nNHYn)o_e.fAp#p$p%p$nZn'p(p%n'n0n_f/fBp?F)p1n*p:fXef kb(n0c`e`f{e{fYe;f*oCpDpIg%g'g]q(g)g*g+g,g-g.g/g:g;g=g?g@g[g]g!FFb_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!iti

1670 else: 

1671 HANDLE_RETURN(err) 

1672 elif device_id < 0: 2a LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t,m3t-m4t{I5t.m6t7t8t9t/m!t#t$t%t't:m(t)t*t+t;m,t-t.t/t:t;t=t?t@t[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuXuYuZu0uxt1uyt2u3u4u5u6u7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvSvBtTvUvesVvCtWvXvYvZv0v1v2vkt3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v`v^q{vUJ|v}v~v_qawXJbwcwdw`qewfw`ogw%mhw'miwjwkwlwmwnwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTx6HUx7HVxWxXxYxZx0x1x2x3xon4x5x6x7x8x9x!x#x$x%xpn'x(x)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h`n{n|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xXMkg9Flg=ImguJngogpg,xqg|f,frg}fsg~ftgYMugvgwgxgygzgAgBgCg-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b.x/x:x;x=x?x@x#m$mhK|IiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~IaJ5n6J{xbJFMlKcJdJ|x}x8J~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(soK+mqKOysKtKPyuKvKwKxKQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWz?j_eGM@jXz[j]j^j_j.sHM`jIMEsYzGKZz0z1z2z3z4z5z6z7z8z8m9z!z#z$z%z'z(z)z*z+zHK,z-z.z/z:z;zIK=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAPnfAHggAhAiAjAkAlAmAnAoAQnpAagqArAJKsAtAuAvAwARnxAjkkk/s:syAzAXeSnAABAGmCAf kbDAEAFAGA;slk=s!JHA#JKK?s@s[s0cIA]s^s_s`s{s|s}s~satbtctdtetJAHN1c0L2cKA3cLA4c5c6cbgMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5D*m6D7D8D9D!D#D$D%DPK'D(D)D*D+DQK,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjE^JkElEmEnEoEpEqE;rrEsEvttEuEvEwExEyEzEAEBECEDE|JEEFEGEHEIEJEKELEMEOHNEPHOEQHPERHQESHRETHSETEUHUEVHVEWHWEXHXEYHYEZE0EGt1E2E3E4EitSK5E6EHt7E8EIt9E!E#E$E%E'E(E)E*Exnjt+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itiWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1673 raise ValueError(f"device_id must be >= 0, got {device_id}") 

1674 return device_id 2a LtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t,m3t-m4t{I5t.m6t7t8t9t/m!t#t$t%t't:m(t)t*t+t;m,t-t.t/t:t;t=t?t@t[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuXuYuZu0uxt1uyt2u3u4u5u6u7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvSvBtTvUvesVvCtWvXvYvZv0v1v2vkt3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v`v^q{vUJ|v}v~v_qawXJbwcwdw`qewfw`ogw%mhw'miwjwkwlwmwnwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTx6HUx7HVxWxXxYxZx0x1x2x3xon4x5x6x7x8x9x!x#x$x%xpn'x(x)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h`n{n|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xXMkg9Flg=ImguJngogpg,xqg|f,frg}fsg~ftgYMugvgwgxgygzgAgBgCg-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b.x/x:x;x=x?x@x#m$mhK|IiK4J[xBMjK}I]xCM^x5J_xDM`xEMkK9m~IaJ5n6J{xbJFMlKcJdJ|x}x8J~xnKaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$sZM%s'sNy@l(soK+mqKOysKtKPyuKvKwKxKQyzKAKsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGg:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWz?j_eGM@jXz[j]j^j_j.sHM`jIMEsYzGKZz0z1z2z3z4z5z6z7z8z8m9z!z#z$z%z'z(z)z*z+zHK,z-z.z/z:z;zIK=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAPnfAHggAhAiAjAkAlAmAnAoAQnpAagqArAJKsAtAuAvAwARnxAjkkk/s:syAzAXeSnAABAGmCAf kbDAEAFAGA;slk=s!JHA#JKK?s@s[s0cIA]s^s_s`s{s|s}s~satbtctdtetJA1c0L2cKA3cLA4c5c6cbgMA7cNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTD!FUDVDWDXDYDFbOKZD0D1D2D3D4D5D*m6D7D8D9D!D#D$D%DPK'D(D)D*D+DQK,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjE^JkElEmEnEoEpEqE;rrEsEvttEuEvEwExEyEzEAEBECEDE|JEEFEGEHEIEJEKELEMEOHNEPHOEQHPERHQESHRETHSETEUHUEVHVEWHWEXHXEYHYEZE0EGt1E2E3E4EitSK5E6EHt7E8EIt9E!E#E$E%E'E(E)E*Exnjt+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itiWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1675  

1676  

1677cdef inline list Device_ensure_tls_devices(cls): 

1678 """Ensure thread-local Device singletons exist, creating if needed.""" 

1679 cdef int total 

1680 try: 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1681 return _tls.devices 2a #iZhDJLtEJMtMINtFJOtGJPtHJQtIJRtJJStKJTtsoUt@KVt[KWt]KXt^KYt_KZtLJ0tyn1tzn2t,m3t-m4t{I5t.m6tAn7tMJ8tNJ9t/m!tBn#tto$tCn%tOJ't:m(tuo)t`K*tPJ+t;m,tvo-tQJ.tDn/tEn:tFn;tRJ=tSJ?two@t=r[t=m]t?m^t@m_t[m`t]m{t^m|t_m}t`m~t{mau|mbu}mcu~mduaneubnfucngudnhueniufnjugnkuhnluinmujnnuknoulnpumnqunnruJtsuKttuJGuuKGvuwuIsLGxuyuMGzuNGAuOGBu$i%i'iCu(i)i*iPGDuEuFu{KGu|KHu}KIu~KJuaLKuLuMuNuOuPuQuRuSu?rTu@rUu[rVu]rWuxoXuTJYubLZucL0uxt1uyt2uyo3uzo4uAo5uBo6uCo7u^r8u_r9u`r!u{r#u|r$u}r%u~r'uas(uzt)u*u+u,uQG-uRG.uSG/uTG:uUG;uVG=u?u@u[ubs]ucs^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvAtPvWGQvXGRvdsSvBtTvUvesVvCtWvfsXvgsYvhsZvis0vjs1vks2vkt3vNI4v5v6v7v8vls9vms!vns#vos$vMH%vOI'vPI(vdL)veL*vps+v,vlt-v.v/v:v;v=v?v@v[v]v^v_v2K`v^q{vUJ|vVJ}vWJ~v_qawXJbw3Kcw4Kdw`qew5Kfw`ogw%mhw'miw{qjw|qkwvnlwDomwEonwmtowntpwotqw{orw|osw}otwptuw~ovwapwwbpxwcpywqtzwrtAwdpBwCwqsDwQIEwFwGwfLHwIwJwKwLwFoMwGoNwHoOwIoPwJoQwRwSwTwUwKoVwWwXwYwZwrs0w1w1j2j3j4j5j6j5H7j/n8j:n9j;n!j=n#j?n$j@n%j[n'j!o(j#o)j$o*j+j,j-jeK.jfK/jgK:j=L2w;j3wJm4w5wgL6wYJ7wZJ8whL9wiL!wLo#wMo$wNo%wjL'wkL(wlL)wmL*wnL+wlM,w6K-w7K.wmM/wnM:wss;wts=wus?woM@wpM[wqM]wrM^wsM_wtM`w8K{w9K|wuM}wvM~wvsaxwsbxxscxwMdxxMexyMfxzMgxAMhxixysjxzskxAslxmxnxBsoxoLpx0Jqx1JrxpLsxqLtxOouxPovxQowxrLxxsLyxtLzxuLAxvLBxCsCxDxwLEx2JFx3JGxxLHxyLIxRoJxSoKxToLxzLMxALNxBLOxCLPxDLQxRxKmSxDsTx6HUx7HVxWxXxYxUoZx0x1xRI2xSI3xon4xGn5xVo6xTI7xHn8xIn9xJn!xKn#xLn$xMn%xpn'x)n(xWo)xNn*x?L0h1h@L2h8H]n9H^n3h4h!I_n5h6h7h[L8h{Fcr9h]L!h#F`n$F{n%F|n|Fdr^L#h_L$h`L%h{L'h(h)h*h+h,h-h.h/h#I}n$I~naoboco%Idoeofo'Fgo(Fhoer)FiojofrkogrlomohrnoiroopoqoroigjgbM+xXMkg9Flg=ImguJngogpgGp,xqg|f,frg}fELsgFL~ftgYMugvgwgxgygzgAgBgCgWI-xJs) o 'I* (Ip jr+ Fsq ?I, Gsr 5p- )Is Gb. t Hb/ u Ib=j-f: qnv JbKbLbMbNbObPbQbRbSbTbrn; 3nw = x ? cM@ [ dM] ^ eM_ ` fM{ | @I} ~ gMaby HIz IIA B C JID KIE F G DtH LII J krbb~qK cbarL lrdbbrM mrebHsN KsLsMs}Ffb4nO *IUb+IVb[IgbEtP ]IhbttQ nribFtl GGWbHGXb|LYb}LZb~L0baM1b@F%M'M+M[FGL.xHL/xIL:xJL;xKL=xLL?x@xDgEh#m$m!KhK|IMLiK4J[xBMjK}I]xCM^x5J_x1HDM`xEMkK9m~I}qYGZG0GUm~FymLm6I1G2G3G7IaG4G5G6G7Gzm]FVm8GbG9G!GcG#GAmWm$G%G'GdG^FeGBmfGgGhG(GiGjGCm)GDm*G+GOn,G-G.G/G:G;G=GXmYm?G@G[G]GZmkG^GlGmG0m_GnG1m`G{GoGMm|G}G~GaHbHpGNmcHqGdH2mrGeHfHgHhHsGOmiHjHkHlHPmtGmH3muG4mvGnHQmwGRmoHpHqHrH8IsH5mtHuHvHwHxHyHzHEmAH_FBHCHDHxGyG9ISmTmEHFHzGGHHHFmIHJHKH`F6mLHaJ5n,I6J{xbJFMlKXImKcJdJIGYI7J|x6njbsn#K}xUn8J~xNLnKOLayPLbyQLcyRLdySLey*nfyTLgyULhyVLiyWLjyXLkyYLlyZLmy2nnyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+l!Hk 7nVetnWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~JZM%s'sNy@l(s3 oK%o'o+mpKqKOyrKsKtKPyuK#HvK$HwK-IxK%H'H(H2b3b)H4b5b6b7b*Hpc+H8b9b,H-H!b.H/H:H;H=H?H@H[H]Hqc^H_H`H#b{H$b|Hrc%b}H'b~HaIbIcIdIeI(bfIgIhI)biI*bjIkIlI+b,byKQyzKAKsc9JtcucvcBKwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8nmIZI9n!nWnXn6p7pxpyp8p9p!p:h;heJ)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzCKezfzgzDKhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzEKFzGzHzIzFKJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nNHYn?j)o_e.fGM@j7mXz[j]j^j_j.sHM`jIMEsAp#p$p%p$nZn'p(p%n'n0I0nhMYzGK_f/fepZzXo0zYo1zZo2z+n3zfp4zgp5z!m6zBp(m7z)m8z8m9z?F0o!z{j#z,n$zui%z1o'z|j(z2o)z}j*z3o+z~jHK4o,zak-z-n.zvi/z5o:zbk;zhpIK*F=z6o?z+F@zip[z,F]zjp^z-F_z7o`z.F{zkp|z/F}z8o~z:FaAlpbA;FcAmpdAckeAPnfAHggAnphAdkiAopjAekkApplAfkmAqpnAgkoAQnpAagqArprAhkJKiksAsptAtpuA.nvA9owARnxAjkvJ)pkk1n*p/s:syAzA:fXeSnAABAGmCAf kb=FDAwnEATnFAQFGA;slk(n=s!JHA#JKK?s@s[s0c`e`fut{e{fstIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetHpJA1c0L2cupKA3cvpLA4ciM5cjM6cbgMA7cIgIpNAJpOAKpPALpQAMpRANpSAOpTAPpUAQpVARpWASpXA8c9c!c#c$c%c'c(c)c*c+c,c-cHmYAImZAAG.cBG/cCG:cDG;cEG=cFG?cRF@cSF[cTF]cUF^cVF_cWF`cXF{cYF|cZF}c0F~c1Fad2Fbd3Fcd4Fdd5Fed6Ffd7Fgd8FhdLKidMKjd2HkdnIldoImdpIndqIodrIpdsIqd3HrdtIsduItdvIudwIvdxIwdyIxd4HydzIzdAIAdBIBdCICdDIDdEIEdNKFd$JGd%JHd'JId(JJd)JKd*JLd+JMd,JNd-JOd.JPd/JQd:JRd;JSd=JTd?JUd@JVdWdwJ_b-bxJ.bmkyJ/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@BJM[BKM]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%gTp'CUp(C'gVp)CWp*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDXptDYpuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gZpRD=g?g@g[g]g0pSD1pTD[J!F2pUDVDWDXDYDFbOKZD0D1D3p2D4p3D4D5D*mzJ6DAJ7DBJ8D1L9DaKkM!DbKcKdKCJ#D]J$D2L%DPK'D3L(D4L)D5L*D6L+DQK,D7L-D8L.D9L/D!L:D#L;D$L=D%L?D'L@D(L[D)L]D*L^D+L_D,L`D-L{DUI|D.L}DRK~D/LaE:LbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fiOcEjOdEkOeEBhChDhfJfEgJgEhJhEiJiEjJjE^JkE$KlE%KmE'KnE(KoE)KpE*KqE;rrE+KsEvttE_JuE`JvELMwEMMxENMyEOMzEPMAEQMBE{JCEFIDE|JEE,KFE-KGE.KHE}JIERMJESMKETMLEUMMEOHNEPHOEQHPERHQESHRETHSE/KTEUHUEVHVEWHWEXHXEYHYEkJZElJ0EGt1EmJ2EnJ3EVI4EitSK5EoJ6EHt7EpJ8EIt9EqJ!ErJ#E$E%EsJ'E(EtJ)ETK*ExnjtZH+E^I,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFUKfFVK_hmi`h1I{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6i2Iei7i8iqi9ifigihiri.Isi!i/Iti:I;IWKgFhF3IiFXKjF4IkFlF0HmFnFoFpFYKqFrFZKsFtFuFvFwFxF0KyFzFAFBFCF1KDFEFFFGFHFIFJFKFLFMFNFOF5IPF

1682 except AttributeError: 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1683 with nogil: 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1684 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1685 devices = _tls.devices = [] 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1686 for dev_id in range(total): 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1687 device = super(Device, cls).__new__(cls) 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1688 device._device_id = dev_id 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1689 device._memory_resource = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1690 device._has_inited = False 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1691 device._properties = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1692 device._resources = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1693 device._uuid = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1694 device._context = None 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1695 devices.append(device) 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF

1696 return devices 2a #iZhLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!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}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuIsxuyuzuAuBu$i%i'iCu(i)i*iDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^ucg=f=e+i7f8f,i_u`u{u|uPe-i.i/i:i;i}u~udg?f?e=i9f!f?iavbvcvdvQe@i[i]i^i_ievfv`i{i|igv}i~iajbjcjdjejfjgjeg@f@ehj#f$fijhvivjvkvRejjkjljmjnjlvmvfg[f[eoj%f'fpjnvovpvqvSeqjrjsjtjujrvsvgg]f]evj(f)fwjtvuvvvwvTexjyjzjAjBjxvyvhg^f^eCj*f+fDjzvAvBvCvUeEjFjGjHjIjDvEvJjKjLjMjNjOjPjQjRjSjTjUjFvVjWjXjYjZj0jGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j2w;j3w4w5w6w7w8w9w!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~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x0h1h2h]n^n3h4h_n5h6h7h8hcr9h!h`n{n|ndr#h$h%h'h(h)h*h+h,h-h.h/h}n~naobocodoeofogohoeriojofrkogrlomohrnoiroopoqoroigjg+xkglgmgngogpg,xqg|f,frg}fsg~ftgugvgwgxgygzgAgBgCg-xJs) o * p jr+ q , r 5p- s Gb. t Hb/ u Ib=j-f: v JbKbLbMbNbObPbQbRbSbTbrn; w = x ? @ [ ] ^ _ ` { | } ~ aby z A B C D E F G H I J krbbK cbL lrdbM mrebN KsLsMsfbO UbVbgbP hbQ nribl GGWbHGXbYbZb0b1b@F[F.x/x:x;x=x?x@xDgEh[x]x^x_x1H`x9m}qUmymLmzmVmAmWmBmCmDmOnXmYmZm0m1mMmNm2mOmPm3m4mQmRm5mEmSmTmFm6m5n{x|x6njbsn}xUn~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyNs*lOs+lk VeWe,l-l.lMy/l:l;l=l?lPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s~J%s'sNy@l(s3 %o'oOyPy2b3b4b5b6b7bpc8b9b!bqc#b$brc%b'b(b)b*b+b,bQysctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZcEgFgGgwp(oVnun8n9n!nWnXn6p7pxpyp8p9p!p:h;h)s*s+s,s-sRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzzp#nYn?j)o_e.f@jXz[j]j^j_j.s`jAp#p$p%p$nZn'p(p%n'n0nYz_f/fZz0z1z2z3z4z5z6zBp7z8z9z?F!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAjk)pkk1n*p/s:syAzA:fXeAABACAf kbDAEAFAGA;slk(n=sHA?s@s[s0c`e`f{e{fIAYe;f*oCpDp]s^s_s`s{s|s}s~satbtctdtetJA1c2cKA3cLA4c5c6cMA7cIgNAOAPAQARASATAUAVAWAXA8c9c!c#c$c%c'c(c)c*c+c,c-cYAZA.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWd_b-b.bmk/b[l+pXdornk]l|e0Apr1Aok,p-p.ppk2A3A4A5AYd}eqkrkZd6Aqr7A8A^l0drr9Ask_l~e!Asr#Atk/p:p;puk$A%A'A(A1dafvkwk2d)Atr*A+AZeJgKgwixkykzk0exiyiAkBkR g `lS =h?hT {l|l}l~lb h amU V c bmcmdmtbubbfcfdfefffCkgfDk=p?pEk,A-A.AhfFkGk/A:A;AFhii:burGh+o,oHhvrwrxryrlb;bzrIhJhmbArBrCrHkemif=ADrIk@p[p]pJk?A@A[A]A3djf^AKkLk4d_AEr`A{Azi1eLgMgAiMkNkOk2eBiCiPkQkNg@hvb^p-oOg_p`pPg{p|p}p~p4 wbaqQgRg5 bqcqdqeqfqgqhqiqjqkqlqmqnqoq3eSgTgRkSkTkDiEiUkVkWkkf|AXkpqqqYk}A~AaBlfZk0kbBcBdBeBfBgBhBiBjBkBlBmB`b5d6d{b6 7 |b7d8d9d!d#d}b~b$d%d'd4exbyb5emfnfof6e7epfqf1krfnB2krqsq3koBpBqBrB(dsf4k5k)dsBtBuB8eUgVg6k7k8k9k!k9eWgXg#k$k%kFi'k(kac*d+dbc8 9 cc,d-d.d/d:d;ddcec=d?d@d)ktf*ktquq+kvBwBxBuf,k-kyBzBKhji=bFrEpLh.o/o:oMhGrHrIrJrnb?bKrNhOhobLrMrNrABGifm!eBB;oftHivqwqxqIiCBDBEBFB[d#eJiKi]dGBOrHBIB$eYgZgLi.k/k:k%eMiNi;k=kW i gmX [h]hY hmimjmkmd j lmZ 0 e mmnmomzbAbvfwfxfyfzf?kAf@kyqzq[kJBKBLBBf]k^kMBNBOBPhki@bPrQh=o?oRhQrRrSrTrpb[bUrShThqbVrWrXr_kpmCfPBYr`kAqBqCq{kQBRBSBTB^dDfUB|k}k_dVBZrWBXBOi'e0g1gPi~kalbl(eQiRicldl2g^hBbDq@o3gEqFq4gGqHqIqJq! CbKq5g6g# LqMqNqOqPqQqRqSqTqUqVqWqXqYq)e7g8gelflglSiTihliljlEfYBklZq0qllZB0B1BFfmlnl2B3B4B5B6B7B8B9B!B#B$B%Bfc`d{dgc$ % hc|d}d~daebeicjccedeee*eDbEb+eGfHfIf,e-eJfKfolLf'Bpl1q2qql(B)B*B+BfeMfrlslge,B-B.B.e9g!gtlulvlwlxl/e#g$gylzlAlUiBlClkcheielc' ( mcjekelemeneoencocpeqereDlNfEl3q4qFl/B:B;BOfGlHl=B?BUhli]b0rFpVh[o]o^oWh1r2r3r4rrb^b5rXhYhsb6r7r8r@B[B]Bm n 1 2 seteIlqmPf^B9r_BJl5q6q7qKl`B{B|B}BueQfLlMlvewe~BxeyeaCbC!rcCdCVirm:eeC_ogtWi8q9q!qXifCgChCiCze;eYiZiAejC#rkClCNlsmRfmC$rnCOl#q$q%qPloCpCqCrCBeSfQlRlCesC%rtCuCSltmTfvC'rwCTl'q(q)qUlxCyCzCACDeUfVlWlEeBC(rCCDCXlumVfEC)rFCYl*q+q,qZlGCHCICJCFeWf0l1lGeKC*rLCMC2lvmXfNC+rOC3l-q.q/q4lPCQCRCSCHeYf5l6lIeTC,rUCVC7lwmZfWC-rXC8l:q;q=q9lYCZC0C1CJe0f!l#lKeLe2C.r3C4C$lxm1f5C/r6C%l?q@q[q'l7C8C9C!CMe2f(l)lNeOe#C:r$C%C%g'C(C'g)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuD]qvDwDxDyDzDADBD(g)g*g+gCDDDEDFDGDHDIDJDKDLDMDNDODPDQD,g-g.g/g:g;gRD=g?g@g[g]gSDTDUDVDWDXDYDFbZD0D1D2D3D4D5D*m6D7D8D9DaK!DbKcKdK#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~DaEbEht^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhwhxhyhzhAh3f4f5f6fcEdEeEBhChDhfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4Eit5E6E7E8E9E!E#E$E%E'E(E)E*Exnjt+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfF_hmi`h{h0i1i2i|h}hni~h3iaioi4i5ipibicidi6iei7i8iqi9ifigihirisi!itigFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPF