From a4f77f015fbe9c6f66154013c1635624322eb18a Mon Sep 17 00:00:00 2001 From: Eric Arellano <14852634+Eric-Arellano@users.noreply.github.com> Date: Mon, 18 Nov 2024 16:35:16 -0500 Subject: [PATCH] Preview Sphinx enhancements for qiskit-ibm-transpiler --- docs/api/qiskit-ibm-transpiler/index.mdx | 4 ++- ..._ibm_transpiler.ai.AICliffordSynthesis.mdx | 20 +++++++++++++- ...ranspiler.ai.AILinearFunctionSynthesis.mdx | 20 +++++++++++++- ...m_transpiler.ai.AIPermutationSynthesis.mdx | 20 +++++++++++++- .../qiskit_ibm_transpiler.ai.AIRouting.mdx | 20 +++++++++++++- ...kit_ibm_transpiler.ai.CollectCliffords.mdx | 25 ++++++++++++++++-- ...m_transpiler.ai.CollectLinearFunctions.mdx | 25 ++++++++++++++++-- ..._ibm_transpiler.ai.CollectPermutations.mdx | 25 ++++++++++++++++-- ...r.transpiler_service.TranspilerService.mdx | 2 ++ public/api/qiskit-ibm-transpiler/objects.inv | Bin 931 -> 1087 bytes 10 files changed, 150 insertions(+), 11 deletions(-) diff --git a/docs/api/qiskit-ibm-transpiler/index.mdx b/docs/api/qiskit-ibm-transpiler/index.mdx index e797462d6c4..0d0d92538bc 100644 --- a/docs/api/qiskit-ibm-transpiler/index.mdx +++ b/docs/api/qiskit-ibm-transpiler/index.mdx @@ -3,7 +3,9 @@ title: Qiskit Transpiler Service client API documentation (latest version) description: Index of all the modules in the latest version of qiskit-ibm-transpiler. --- -# qiskit-ibm-transpiler API reference + + +# `qiskit-ibm-transpiler` API reference * [AI (`qiskit_ibm_transpiler.ai`)](ai) * [Qiskit IBM Transpiler (`qiskit_ibm_transpiler.transpiler_service`)](transpiler_service) diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AICliffordSynthesis.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AICliffordSynthesis.mdx index 522ad1df4cf..520d0ee247c 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AICliffordSynthesis.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AICliffordSynthesis.mdx @@ -19,6 +19,24 @@ python_api_name: qiskit_ibm_transpiler.ai.AICliffordSynthesis * **replace\_only\_if\_better** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Determine if replace the original circuit with the synthesized one if it’s better, defaults to True. * **max\_threads** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the number of requests to send in parallel. + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + ## Methods ### execute @@ -30,7 +48,7 @@ python_api_name: qiskit_ibm_transpiler.ai.AICliffordSynthesis * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AILinearFunctionSynthesis.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AILinearFunctionSynthesis.mdx index bcd5aa9e4ec..2cb686e72ed 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AILinearFunctionSynthesis.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AILinearFunctionSynthesis.mdx @@ -19,6 +19,24 @@ python_api_name: qiskit_ibm_transpiler.ai.AILinearFunctionSynthesis * **replace\_only\_if\_better** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Determine if replace the original circuit with the synthesized one if it’s better, defaults to True. * **max\_threads** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the number of requests to send in parallel. + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + ## Methods ### execute @@ -30,7 +48,7 @@ python_api_name: qiskit_ibm_transpiler.ai.AILinearFunctionSynthesis * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIPermutationSynthesis.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIPermutationSynthesis.mdx index 77d4fd5cffa..ed085132763 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIPermutationSynthesis.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIPermutationSynthesis.mdx @@ -19,6 +19,24 @@ python_api_name: qiskit_ibm_transpiler.ai.AIPermutationSynthesis * **replace\_only\_if\_better** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Determine if replace the original circuit with the synthesized one if it’s better, defaults to True. * **max\_threads** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the number of requests to send in parallel. + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + ## Methods ### execute @@ -30,7 +48,7 @@ python_api_name: qiskit_ibm_transpiler.ai.AIPermutationSynthesis * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIRouting.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIRouting.mdx index aa370888c21..d5bcab8bc6c 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIRouting.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.AIRouting.mdx @@ -20,6 +20,24 @@ python_api_name: qiskit_ibm_transpiler.ai.AIRouting * **optimization\_level** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")) – With a range from 1 to 3, determines the computational effort to spend in the process (higher usually gives better results but takes longer), defaults to 2. * **layout\_mode** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.13)")) – Specifies how to handle the layout selection. There are 3 layout modes: keep (respects the layout set by the previous transpiler passes), improve (uses the layout set by the previous transpiler passes as a starting point) and optimize (ignores previous layout selections), defaults to OPTIMIZE. + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + + ## Methods ### execute @@ -31,7 +49,7 @@ python_api_name: qiskit_ibm_transpiler.ai.AIRouting * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectCliffords.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectCliffords.mdx index 6dc7078ee0e..3801d8dc519 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectCliffords.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectCliffords.mdx @@ -15,11 +15,32 @@ python_api_name: qiskit_ibm_transpiler.ai.CollectCliffords **Parameters** - * **do\_commutative\_analysis** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Enable or disable commutative analysis, defaults to True + * **do\_commutative\_analysis** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")) – Enable or disable commutative analysis, defaults to True * **min\_block\_size** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the minimum size for blocks generated during the collect Cliffords pass, defaults to 2. * **max\_block\_size** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the maximum size for blocks generated during the collect Cliffords pass, defaults to 9. * **collect\_from\_back** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Specify if collect blocks in reverse order or not, defaults to False. * **num\_reps** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Specify how many times to repeat the optimization process, defaults to 10. + * **collect\_function** (*callable*) – a function that takes a DAG and returns a list of “collected” blocks of nodes + * **collapse\_function** (*callable*) – a function that takes a DAG and a list of “collected” blocks, and consolidates each block. + * **do\_commutative\_analysis** – if True, exploits commutativity relations between nodes. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + ## Methods @@ -32,7 +53,7 @@ python_api_name: qiskit_ibm_transpiler.ai.CollectCliffords * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectLinearFunctions.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectLinearFunctions.mdx index 898a6e4221b..963e57a7584 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectLinearFunctions.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectLinearFunctions.mdx @@ -15,11 +15,32 @@ python_api_name: qiskit_ibm_transpiler.ai.CollectLinearFunctions **Parameters** - * **do\_commutative\_analysis** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Enable or disable commutative analysis, defaults to True + * **do\_commutative\_analysis** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")) – Enable or disable commutative analysis, defaults to True * **min\_block\_size** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the minimum size for blocks generated during the collect linear functions pass, defaults to 4. * **max\_block\_size** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the maximum size for blocks generated during the collect linear functions pass, defaults to 9. * **collect\_from\_back** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Specify if collect blocks in reverse order or not, defaults to False. * **num\_reps** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Specify how many times to repeat the optimization process, defaults to 10. + * **collect\_function** (*callable*) – a function that takes a DAG and returns a list of “collected” blocks of nodes + * **collapse\_function** (*callable*) – a function that takes a DAG and a list of “collected” blocks, and consolidates each block. + * **do\_commutative\_analysis** – if True, exploits commutativity relations between nodes. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + ## Methods @@ -32,7 +53,7 @@ python_api_name: qiskit_ibm_transpiler.ai.CollectLinearFunctions * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectPermutations.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectPermutations.mdx index 49c38f863f7..5fb6f04d9cf 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectPermutations.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.ai.CollectPermutations.mdx @@ -15,11 +15,32 @@ python_api_name: qiskit_ibm_transpiler.ai.CollectPermutations **Parameters** - * **do\_commutative\_analysis** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Enable or disable commutative analysis, defaults to True + * **do\_commutative\_analysis** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")) – Enable or disable commutative analysis, defaults to True * **min\_block\_size** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the minimum size for blocks generated during the collect permutations pass, defaults to 4. * **max\_block\_size** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Set the maximum size for blocks generated during the collect permutations pass, defaults to 12. * **collect\_from\_back** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")*, optional*) – Specify if collect blocks in reverse order or not, defaults to False. * **num\_reps** ([*int*](https://docs.python.org/3/library/functions.html#int "(in Python v3.13)")*, optional*) – Specify how many times to repeat the optimization process, defaults to 10. + * **collect\_function** (*callable*) – a function that takes a DAG and returns a list of “collected” blocks of nodes + * **collapse\_function** (*callable*) – a function that takes a DAG and a list of “collected” blocks, and consolidates each block. + * **do\_commutative\_analysis** – if True, exploits commutativity relations between nodes. + + ## Attributes + + ### is\_analysis\_pass + + + Check if the pass is an analysis pass. + + If the pass is an AnalysisPass, that means that the pass can analyze the DAG and write the results of that analysis in the property set. Modifications on the DAG are not allowed by this kind of pass. + + + ### is\_transformation\_pass + + + Check if the pass is a transformation pass. + + If the pass is a TransformationPass, that means that the pass can manipulate the DAG, but cannot modify the property set (but it can be read). + ## Methods @@ -32,7 +53,7 @@ python_api_name: qiskit_ibm_transpiler.ai.CollectPermutations * **passmanager\_ir** ([*Any*](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.13)")) – Qiskit IR to optimize. * **state** ([*PassManagerState*](/api/qiskit/qiskit.passmanager.PassManagerState "(in Qiskit v1.2)")) – State associated with workflow execution by the pass manager itself. - * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)")) – A callback function which is caller per execution of optimization task. + * **callback** ([*Callable*](https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable "(in Python v3.13)") *| None*) – A callback function which is caller per execution of optimization task. **Returns** diff --git a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.transpiler_service.TranspilerService.mdx b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.transpiler_service.TranspilerService.mdx index f492a0db2d1..edaafe10d55 100644 --- a/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.transpiler_service.TranspilerService.mdx +++ b/docs/api/qiskit-ibm-transpiler/qiskit_ibm_transpiler.transpiler_service.TranspilerService.mdx @@ -24,6 +24,8 @@ python_api_name: qiskit_ibm_transpiler.transpiler_service.TranspilerService * **ai\_layout\_mode** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.13)")*, optional*) – Specifies how to handle the layout selection. There are 3 layout modes: keep (respects the layout set by the previous transpiler passes), improve (uses the layout set by the previous transpiler passes as a starting point) and optimize (ignores previous layout selections). * **use\_fractional\_gates** ([*bool*](https://docs.python.org/3/library/functions.html#bool "(in Python v3.13)")) – + Initializes the instance. + ## Methods ### run diff --git a/public/api/qiskit-ibm-transpiler/objects.inv b/public/api/qiskit-ibm-transpiler/objects.inv index 9a913f03b652aaed1e5d7031cde4cb24364f1319..d289741bc3c66d7c896a4d591789f51307433cef 100644 GIT binary patch delta 969 zcmV;)12+7l2fqlAgnyaAZ<{a_#_#yE$3bo@ElPk)}Zhu!dWm_?FLnyyI9A}?M zcJbyZS>3N6D!$z|vV7hP{mK+qU7Mn!N|9TFs>5Mc?1L4pW`DhEreB*9$-5jHAh}%S zRM2X#xXO3k-`wr*sMeBix@JfXPBXli{-kXqYpQu87Lf$CL<$qMo^fmXY9vv%A|2Qj zBYCPj%0*K$mChYELGs&ONj1xrrn;S>z-%+A;X4H)9J|jCoCAi@5Nt%}$K4Iv{0Oeuw0#p(X3y_OQ3J@EN z36PqQ5gY0LM8mJ9)m*$pronJ_OiQfikAG!xHXj%>oIUVxW*&j(`FDgz zTXqnEap}Md8*}K6@Z!)sXuqL%(p(=X(bM~(sVY|JVH+N|<~cHkzI<0C0WYqfiRX$ zpKC8$Nq>UL07(m24G@-QI9ndtcD9m8^VwXi1#N7c5p8O^9c@0=l%t&=%8^DL4wK}? zaRY=A4eneQ8X6KTXp33Ef3~DF^BKa>&NDPb+Rh+iJ!b&p3}^7t-DZ%ZtyUb0c_SwF zlG#F=Nf+i_ce6zoUKb2!OSW9N$m4SW@Bo_4eSZQ~rzh&k?`7F?AI!$Y;A{JA>G$?y z`t+N=Y`Ir`=fhkv`OXVwe9&}%4u9ZuYgWHcL(gZ(^gH?F|Ire911hOsk3t-xqn&{$+k=~QLs}BU}BE?0l)t2 zo0Ij|ALM+4d}7`Dv-rae8^I0(e>AVS=1lo|_NQH4c>X&q?`HL7b=zNo$EHx^NwRm& z{#_{DZqzj@)n0aw(z*2ZPtYcW#;?Tp{r=t+S*@nb$ roFaQ5l4|cn5Nx{?9*)#u>`f3Nj5=U!5+Ai31;s>laYp_F!M*-HJtWY6 delta 812 zcmV+{1JnG!2%`s(gnyVpZ<{a_$M5+Rmb$}wfVRi=mbID`X_LBjJ0llfT5DiZ+jQ-> zpF%={v5ntzazlpy`@O)=#^F`yzrqyasVR)&Qg1{JD(8Z2K5m<~>S|!ujEjriarTL2 zi`PITU#{+Iv0k^Tdi;>)1+>uHGG)!RW;cwKqhWG*hq5!!cYh7$rLBm(i=hCKD|vGQ zv`-U>s*~x!ZJ5Z@+oM9Z73g&CxCoKoZ7Ob{(1x4tgbwU7vpswl61e)-$hkBqW9%>*idWcTYJp_+RA7Uq{AL;=;0YbebO@mN3gvsy#s_6_*nF-z~ z8AhE0z8bg*;D4o4?DwMM>U+5a@4eWl^j>O$@m@MwcW)O-u6z3+i2keXjF8Vrw}-1S zC8-AQV>oFC2F23>5La`kPOxz(9u;t?o%FN^3i<)xwRH`p88!yEHOvVS0JNt*O=BLu zL&Q7a;9@E`EVL00Dk6qMO7O#BQZ=z(oFrMMQ8Fw^oPS9Tf<99^S)wT#snV276>5sb zX*H#$%QfXw6&t;;NPby48YaoCaRGu>7MJXl1w{&F5vev=K%7bzFWn=HjFza}g+(i8 z-fY>KUTrQcxISiQT_9bsf7WE@n>K2{EAeayvr~73`mn>D{Zf{l?^D^B82zk~o%_4S zm_GkMGJiYYAIalkp+UWg60A>|?&&%XAQwGMso5p4Gosek zP3=eG_p!e$FBNRpIK^evHbvcQRjl`3ZOa~xZ}x>_6`#Qr4HzX#9nABMsM=Craly2y zZmYK3O2-9TuGr_0dzXipkQKa-le>XkFcVKrc7F`A<->|8Sc3vt!l8sm%uzkh*`IxJ zw)*;m9UoArSvP-de)qseu-(8PBWhs;=upl6vdcx_xBJ_>&cEb0{T;Y(OU)h>yb1WX z(58FRSEOZa1SI7=V{v?Fb;C6gN(axx8}hDsxNf{r|8TsI;kAZC4_6