From 5243adcb8c50d16822e4d6288f16210fe9b1c20b Mon Sep 17 00:00:00 2001 From: Harrison Mutai Date: Tue, 15 Dec 2020 11:41:21 +0000 Subject: [PATCH 1/4] Remove unsupported S112 SoftDevice build support --- .../TARGET_SOFTDEVICE_S112/CMakeLists.txt | 9 - .../s112_nrf52_6.0.0_licence-agreement.txt | 35 - .../s112_nrf52_6.0.0_migration-document.pdf | Bin 18085 -> 0 bytes .../doc/s112_nrf52_6.0.0_release-notes.pdf | Bin 21906 -> 0 bytes .../TARGET_SOFTDEVICE_S112/headers/ble_err.h | 93 - .../TARGET_SOFTDEVICE_S112/headers/ble_gap.h | 2023 ------ .../TARGET_SOFTDEVICE_S112/headers/ble_gatt.h | 228 - .../headers/ble_gattc.h | 715 -- .../headers/ble_gatts.h | 845 --- .../TARGET_SOFTDEVICE_S112/headers/ble_hci.h | 135 - .../headers/ble_ranges.h | 148 - .../headers/ble_types.h | 215 - .../headers/nrf52/nrf_mbr.h | 241 - .../TARGET_SOFTDEVICE_S112/headers/nrf_ble.h | 617 -- .../headers/nrf_error.h | 90 - .../headers/nrf_error_sdm.h | 70 - .../headers/nrf_error_soc.h | 85 - .../TARGET_SOFTDEVICE_S112/headers/nrf_nvic.h | 486 -- .../headers/nrf_sd_def.h | 59 - .../TARGET_SOFTDEVICE_S112/headers/nrf_sdm.h | 358 - .../TARGET_SOFTDEVICE_S112/headers/nrf_soc.h | 964 --- .../TARGET_SOFTDEVICE_S112/headers/nrf_svc.h | 90 - .../s112_nrf52_6.0.0_licence-agreement.txt | 35 - .../hex/s112_nrf52_6.0.0_softdevice.hex | 6143 ----------------- 24 files changed, 13684 deletions(-) delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_migration-document.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_release-notes.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_err.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatt.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gattc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatts.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_hci.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_ranges.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_types.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf52/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_ble.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sd_def.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_softdevice.hex diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/CMakeLists.txt deleted file mode 100644 index 9125e60859..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./headers/nrf52 -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_migration-document.pdf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/doc/s112_nrf52_6.0.0_migration-document.pdf deleted file mode 100644 index 642779343494a66543a84954d539d4a1e700c348..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18085 zcmeIa1yogA*Dwqc(jY1&$RVXq(B0i7jU3?6dFWE<29<8<79^!hq#J3J2BoD-zJu3$ zulGLpeaHWd?|uJ&jDI|5=-8XJXRI~XTyw6y_MDSWMM8=d%*KIBx3oMohKmK}0Du7Y z##Xoj0zd^zI~Wvh=?OChfPo4CFb{}_6Q~RTa{(m*5O!_|Pzk^Z)Bu3Fxe)C#06hQ) zHx~fR%V8iSgbTAXy`cj5*B>sHI~->AgA*?<7U<^>%mw&y2eA92jf)%fFKyia(8kNn z^LIE12m=0>HZYj;U)mrb#CUIhfAWPuxFLUU1Ko`54>)Hy)Y1k9$HhX(NF5;_gfM_= z_V&(z8wLP1psbylJpj!9+r5OI04EO*2S`**3?e1LDap+%3E`0B;pAcGmV$sG;vAA7 zAptRQQE_e_30_WKPAOh)4hd0^C@+MY2P6&wi%If;AwmW~6*$cGM%3IK2?0c8PT2neVEvom+L z0DwWNOg(o%XRG^)0#Ohd6BP;Y z^}QlOnGy=RZ*)MKI&{lY3h)LU1B7HLK`@Amg;1KGe1EFX4}t#FMn#x2)D-FrMfCcI zWR+c9AGvc9s{5v%+wP4Up!NR!Vy${ zXR8KtvUh=-z?=~3B86aZa{(h((+>_(5X6ePxf2pXOtHO*I?P!Qh**?9mB+E%s_ZQPnA*$}T~un4Unk;xKQJ3hC+ETmA&viWFP6^;}owUo-s z?qrrjyt^K`F8=T~?GRMmBl^K^<;l|7`{)YPC_{{v#RGHT-lE%XS&L6WBTq0(PygAV z{8B_fj><>|mc{D!CPW)# zXsQD2U$P9y#`6QswIu|2QY6s_nQ1KfXmqm=^{e)$6|kF#$mRQAy9$g&NbCo?Cck>; zP&F2?!WPt&E~{s~#97bN(LRv6|3rmn&|-yHz`8#*-~2A-W;K8Z{=x2gkLvkr0H%!< zu$&bGz~xE=ow;Mfx0{CLx0hi!(WA9-s-!j`i66%h9CdVlwKm=TUUdFe?$k?AwFspb zt0ZSEkqGuMuKzA_wBcgXl0E2~_f(ju-tgq5c(;ry%jMfO=uRUyu2vm_l(QyUDo}t))a8~_XJ3;{S+m1LfgEDRQaH9~dO;_a zXpO-x?Z~dKC1#B0>zS0{9xL^t54A{NxG;QvWNDKrgn=0mA1S~2Fbapv(}=59x2lxq z+tb@&(+*#|YTLHm18MPCPUk7NU<HNc^T9+`+n5k zgk%=8x>$Xd4UU75%7(Jkkpv%q!dHnB*~ST$E{CQ$Ps03rb{?hl!G)s8lQR1`J4aq? z-{;VaYU=F&{ARlTJO(4-q~N=B_NDBMJ)Tfn6^L0PY)8}M)j=1Tk}(oflAbk>&{!|? zZN`D9I$xbf6nV!35jocnzC9&V$A0gXyZX*NPKUWZa|RZ||K-(q{1=)A)0_`6@zpQP z&KyW|{e+Qr?Y|3a%wfL8A(29@siy*+J&^e$}Z1 z`GtMv?c?oaHYe{m)JeNZ$+uSyq>oTro+_-faf>aPV7`-}`u=1fp}y`NdWZ}5Gkc_F z=vkM?V*K?9I-WfWO~Mg4biWenDVsWp|LCROc}vKZ>^Fn##lD7beO`0y6-#siZ=;q) zQtXkot~$n0c!gghZOI0Xl_d(4_l`h5r)M-hLoTd4%=#xYdSh#TnglVZ6YRzc0cBt| zt}tgy6DX^gy^SeQ(hlJiEbYvJT9$UAc21Um{H^X{?0jQ5Z>%TyH-mG7|BJ!7v0wis z_5TaPKMea%!s7NWHx?BrWeIn32Hbdegh5w;{(1kyxc_eV|Loik$e%PMU{20@Kg_)v zP+LbAL4uo;8)3`=AcTAU&1C=dB^s8_HZTS!Fc|X04sOQj4zRT}heMq$?d<@j_9ia2 z2+1ERdp)ktZSYL5 zu|@!RxS?wg$~)TquaVEb-8l+>oGu%Iw1GbWNik@7A-v(gCt4^hTXh^TJD7}qbj?@d0s7i|)}!&(NW%S9YHp0KDz7g8 zx_n&2g;(#WtUuPs-#Hy0)8#cHyuG<|uf^QU^gOy_?|ie^IL11n zPA4_luEYz9uekFe`Tb7RAw#8zysU?Xhkf#Dv1|3PS|Cy?1ixHj!qZfp?{JjFY1LKQ;i3>aE##TJ5d0MPace=v6i2!Hn zhjDggNwGS`-D3-?LQJKP<=QQ8?tS zSU)*G%(^`%xG7>$h}=rV?rcydEOO_iX>$PFuaTVr=Ux-a1GXf4GxPf<-Y*m6dx#$f zMs0n(O)3PPqQ=^dQ3lw`U;Y56inLenwnQ&Ct+I7K0Lg{&4#gSnCX z0aahcRI34WN3M5aXJFbc?Su6#U7*ml$dYko0iYkB$B)W<7p_tVg~f;mjd z_B2(CzYaKJ8t{@Fwcq|iwOK&D&)2KPM0KRQ?Hli&{Z81S$fZ!@NlFzeJZqavei?(Y z_(ifF+K`H9a-nHEsR0#FdI`R0gYp57H2^1vi7SjnQ-j;$t)Vn0vO6u%3ZBGS#D-;b zV0{<%1%j5nBCh&M5!pWHtb&1?Y>pT8u_eBITw%fJQV|&-V2ha8 z(=HU_`&fw&Y%YfLt?N}ipl(L-eK+!H4VBCbr#`YkL;6FOlqC@~5R%u_s489fr~N=j z@3-Pl?FQ`((>Acyec!BmHLZ6UEQ&3tT3{M|`^*#Dk0u#MGn+ zUOW9Xh|2zzW|E$M%jIh8qQ{2?CL;c1c`Cnco7>hlgSzV@NGl^Mo=J|Lmew^pzO~aQ z+$|bf-0R%%7#2IPOn_A{X31PUp&I{^dZ-yn6|$tQ8OO!~8!4HfnRG6lF4Yuj#wRZl zs83@9bZ2cE5ml|~L4~ZVH7nPvc>%2A?SbFvyPKRqeYe-t3n5kBCDQPEC&I%i*9C%UG zQ>j!d0ZaQeToj#N0>?DfYjRE`pE_>|tUOrOz_4A&XVOjL+aq>vrO?8O(&u8BjY=Q8 z#q)aB>g=5V8>75~R}Hs1|o9q?s~nww)M3yIPlZ(=j-L|{9=4z?*Q~S;@hcV$!FuR zq3S-*hAoYTDEayI?|af1t(%Uwet9c5xk%j? zMv;EuTARKToSX0bCcg8Im&jbZ#%X@4n`g55=`?Cw^EL-yjzL+*|4XJ9kw9ewc^fAV zY(#4D%vahV7XRU`_%Dv(4XJ##x1JP}MW)7(e8^OL(l#|dTcb%+fb{^Kq@@P5&gf_9 zq!bn7p^qs0zfwNi{C?`Kts-s56DV;^vdIqfwyQ{n;UGby>~B7*q&NU^Pi51Z&^-( zIL$kZs5A0ZmBRF)oA{c0Y>In~JE16awF7XEDFKmOK^6^`0Im!Q<+2Xc72j3meh(Spk%F7Lv zp^~aSZeI&Omvj8T0*~k^bODJDGUopz9Nq+7WMa8G~FM2VtR1?*D&_S## zsGOQaXOgHJk8kjWw_2t{0lkaW|LW7xlN?=Q#h@>^g$b}cT`ADC*p>z_coTC+9Z143 z?l*691aNySm$p{T4+3ezC{yYHu&LIg$BN;W)V2cnEwR&v>E}?i228!ZX14UT2I2)R zFZqtumd`*TLvKU<#tRR}tEbJ00&7VNrwORBSL>Z0`3YLiIiyE!`|xPACFUqhS>-9i z(K*X0)QvJWMzcVqbg*@AUj{?bJ)pbUO@plCzbGtmsgJJ614DnneRPhukpPKY502Xjs z#{~SqoDz}~*rjS&QT;ickSBweZzVLbGrj1$ri-S_k;!S-Lh$12ZZgd^#TeXt|GveA zgf>clYM^OpWtVUFckG#KUWV|kj|;WW?oB(tPA-|?6lx){&|GgHagyg|0^WPUbiR>Z z|KQT6Jm)D>Qe4GAIFV_a`9*m=^}P;SVau~Voa;CC8LTTofPk;4?im)}G)BakR*b6E zxav3z;_Kq6nzW+HaSfhlqLG|)lZ2LZ&qml7tYC#;ednB>rBrRUkufyLIuds9q01&OW6c_KXML|};PT)n!v;-kr=_Ld_>mNNDW z_28XQ6Q6;X;pi)`JwI!{7Tx@?i}@w}*sQouU&P-cQd^vl_Lfk0KCN(LjAXOIIPQg6 z4s0uiUz{YRmHCLyb#02yg)B`ovb%VqK%Dk69|GtN3sEz7dD%Bg7$f>|t+!fp0Y7rJ z0#!EPc2aCz5Z9Vo9f1<{ofzNkfhsWGQW!|7JM2=ERgpxSaBj9O=(@_^7UTBp3!DK5 z9Y0#WDUljH*HU;l!DH$>cwDu-+NHhJ5$LWuiMvMc?=QJ>6y!m2R34+LqV1?AM&WRh zR-p$_>7fkm>G%b-`ztUxll0~G+$ojGqDPses)djkM`V83tL{%B5E>2)E|X*v^cLqm z4KfW08oH~9^rX1ab+39bZjU>PlEiK z14P?P+n<{%$-mV1j{m}^#pIN#Xeb9vDClWD>Mf1vc93#6p$MY~7KsGk%4&4xyBF6( zngbK0AMgttjyZPa&?=ma>A=%P8#uk^Z_ zV%*M{#S!XTD}3y6SkL&azIuam<&h?TVG#V(pxCz~_0E(wGKPdEI+ljy8|M7ycHsG$ zW}H>cg~w7osqxfxhPOi;Re33%Tcx={R$a<}>siNPVH`-ww1-fzjg|w~slKKs3NuA0 ziG%S~9Sc>zj2GctD_qurfLZ0$?o@L@C)BEswuYR+67IxbCyVD*0pR{n<0&_J+4}iQ_4w7^j-(MLcEc@XN4{6 zVP0?X3^r}Acx@@3&a4@Dki@H05llQRz?xl^oDUmI$Rzg^he&j+W6BA}mweOJK6Qy? zYzr;n-Jim%i)$k=!Qqq(DJp`iUIY}pE>an#m(WbIoTg>V(-*5MrC-&#nfn9+P0jV( zZt_Rt)wv1svGO5r;_i?RV%V4X=TRN-iCB)fQ*huWZ_6JL=+e&hG9-nXptj}z| ze!%Wgsh`z|SMw7A<=&-af&VSRCOkP4S=$Rp?4++ADV>vU*or5`bGs(IqPEztD}*;w zhzDh^AhA#6iYswsGvujQS|XE_mBXMP07DPxW9WGy33OKMvwDP&)u}7>Rm5WvOO4BM zhUy+liioGNbf}|nB(tRc68a$!yA^~r4kJFluzSfdN;*m>_xk?>9rMW#; z5qF#e{`Ad>a7SxBMN?fR`D*x#+q(}c}hC13SZ@wbY$4_Rqqkl zeGbG-;Y;H9^0JOal+gBTY+&9@QXRmW*Y|XqUdawhkR0xe4}#P^uXt0^*n@V@wW5li zSViWs-GLvYHJme$K0O)QdQFvm}^~ojl@R;bcepJaSH!k$zUA zpMJ7pFJuj4*6!iYF0+dtBa7td8x7yc-aGYi>BCdlj^OPf@cZfpOBQ34%n z<}`r>&(z!pnNa3-l8zwKjt(}e(cC}-F}wm68+yb)T#mJha@j0@T-nzS<-P?JHsUwn z^weVn9v+%}HtBlJ3_jz=_;5Go{FlaGts^ zWzPA+(dw16#4z&riukqi4?R5mvrp@HJ(E@L`Grvr?Oeg?OdfzF7K-2t=98tB6O6_*AJ&X0Dkiy*oMXK}uCr5F@lYESLa@yPH9kpIYQmWN!kHg%q; zg^Bl|?%=xk2Me}OJ!`>1qk>na48mh7N)0K~@S3#J_>`>^dqN>hc>smn z<&~ZcF=fM0D*Q=n0Iy4CLuO6uK4CU9t&*VcA?4F%@+CvI4-&Y@e z`-~7w_a#fFHSs9*T8{Kcn(fTz*m>nk$HyZ{0t@O6W+7=Sypg33hJcHPYk^V=Rjk@h z6l9@}l?Zk)ceb57#>9@x`bgj81PLzs81b%#41HEoOV@6asBS_n^6IoYrZmOZ^2S|dgUx;Y(8^JwzCR!MCs+Y zOq90Y-O16?Z)rY`g3cQsj(v<4j%53U|BRyP@@RD^p(!6f(Xkh@-@YsDXM+_NL zk8v+vjAEoFI2VBbIH)$*@?1(mR!4LBI8NS4P>kMGwlM0c=C(((d4R`frP&)!**?U4BLrl%Si3f0NfY*7hoZbBbBJJ?vR>$Su12Y(}?` z^I6kOS@+xlRTDPN+Y{LrAH9htKX`@BV%3hfbh~;}pODWkx^njWl0_p&&%RNRD{@S` zC-e1-Njj8Y&$&1_pkl)!ef2DA4d!k#(yuOAIh5{+2K>^e()#u)(5E;l=xZ8KRm^XD z#;S}km}l=;`#so4JKE7_zE&Z|Z1nJ!gDUQ(`kcLv^YQ=+o1nS8_7*IB{Oet&GW4?9 zY7%ZiSDddKi@~clDN~A~L0O%}y-(KY45fNoC(;CO?+CFpoLPWBU2eYfycJzT^WIFj zuanx|^l&<|Yf~6PR6Wz+l9bGmQ}j)a60*D!bqIIeTED0tcDJjMHv6m(?7!;EY89*> zQ|CMjT%ONa8uV{VT*7QJFAo>(+x)cw?v0 zA`qaIH=hA=^nRpQX>IAoqV-zJlU;Ig)#}c3cQmWv%)#Z;yBNtO@nZ$gw$7orj6VF= zsCOC$xbRO-ijQh0Yl_>?O8F|hR^1q5Dp5<6u}S3=DA+Q)Qr{!RWR@rywd#4SwymG6 z*o)9oXVWe%6^NRS80q5X2x3l-F};+7O4i+;Equ2ZlsTT6Q_Cy&t6?`P&wPll7L$D)ZPmrKn!aw45Bz zkdteiSi@`Op6{{~Oz+B{E?mA_pRv7?W3?!#&BPudR!0gEs>?;m=T*Ssa1?bxDmK*B zRY9RVc3xYPbLGFl@a_xl47Q70RdXjnonfs_8DrvOQW2=?JXKaJz1WDyxQcgiZ^J^# z)!@=guPLD+PxoLa1xj!3MBllmSNWhudRLOS8Tb&RAt~Dau4V**^IM3~3Z| za=oGzB{J@AlCYih;4uK%YVK2lVSwG9K7hcicGa+jG`VTJHld}pg}dxC9{!HjZsC41 zSwc`|kYFYE4htq`xSNlF*DkiMuYB+GyYZWangxTKA z_RPi~x#kyWFdw@7Q>Byj>U<3~MjY#sto!~O+eI#@aO>u6~1EdtHe_*lXI^^B*r_0xvV zl;$xjIodBO$hZ$IVvUr3*S1xG1%=Ufk`)R1-QGEXR%DP8*w((o6;qU zDrk4;BfTmb9JpUHRP4gUWmH}aF_P_+99vM9I9+bCPD=Z}?zFo0afu*J0hB|*=3v*kx{Ss5e^o62q)NrE0 zgul_#`6`g<))K#uZkM@L-KwzO7=_;TXLyMs2sBOSF$AbhebZa+M^j z<-`^E-4r807I50>IBPY>X^%g1{2Ybza6)P2Y2~VGQ?ihPf>qL3={C>XOKfEl%3TnO zDDu@t@xK34wE)5GW)^YAfd`B}#|%cKd9$ti+tyU*ub-6xpniF{l62E88CCq0`-Yu?x#Q1oRt0|?Ku7li5%(^Q3-4u2cvX*0fD zx7mNexA%U(t@F*|=a#pqgxntOpBSX&y>mZP7UQDaGlcVfBzjqrFSEzN)->F4ve1ab zoteK=5lg5@>X2TO7PNcao=m-fUq%m|@j5%dI&wJtdf9T6f_~4cI@Gh3adMWTTa%}^0a<};gTdPn?sdrE=sQM(M6X;B!W(LLnA z9;}8}rwV~+$ES0tc&S$u8N|QW;6D;a{prpOGi)aQWWZ z`|gUvT5qh$g+@e8mwtBSo**|$YR%vp&sSYQLo#yo#E|s6_t96ZC&eLaFAQr{E%EtY zd|zoY^ZM%M>bi7a(PSxVV<5m(W6y_T_p%!Mz*b1#@3DMBE^GZ+`CC z)l)smCl_{Z2T#p}TdLLeh*(?B;{wMKZIxdz&ZU` zl-|Oq+;XZ7w!>Ys?X3jYEQRV+v}Opg`8TamG3Aq?fM8!r9D=8+;K8 zOa*~&8BMJ#&|iwU_f1$WrKmM>gyP<1u_UZ6)No~|;~wY@GvkU+2=m?>w6JB%r5Lcm zFi$yHVbMGABF0I&$NsieBiV@@N9j=0$so67;N!bd14Xr%`%QvVpi_TYlw2*gGTtI$-Z{k@x>^GhWDNg zxwNQ0-gYL-C39j_?fhek6 zCS4w5leYCOmO5RPDnc=}@eqm*E>k%1RwIdd`PE@~GJnj%tE~CxZc!aj>IWLsh})JA z&7j_aSXgqk76OW@E9(xfDXs4sFSj07mjf*9h#hy!IvBL!2aZ|;x7QO>0;5@OgT$R5 ze5hMp-9Q^D4_BVAaob3BSK2Ign{aK4U*`LyvmRaJwsQHju$xGOh6?s$Q3U^4{hcZJ4TH3wmo{^ z8ZsTLZX=7m9W16DERthdnu(S!7um}ED0aSes0$kBcg-#QfKtm+QpqIO6htU|^hoD^ z1xFY}Zq$;RI1e!E_1=m~!S_fl@=Tm?>m#&b{gJKx^}9*y-G-<}hnn3(&rY3|$*-yH z4h=^+d7gHllH%}(D7m7Z>(YH4Vae-rA4+0Pe1y`{XN9i5ITSUf?t5)`YmA1aONehx_xLQx$OIQQI$>3xD09>>0!Jiz>dSSqr_Z z9Ur7_9n%_0Dap`+r}8T3uCR}Y<~xPzz^~;)rX_9O^xrci>rmZ19%taIE-NS4BjG-_ z62PNTDNRtwMts-ixTr4&dBtC%@Ei`_--r7a&Li2!VF2r%7T^{y1tut3u^|hcdGGN0 zoM_)+s|ItDwX&wjIV^XM36KYORE!?CX6gzU8x5(M__r|N|4+UZ{*SqYU&0Ij8<)Vv&HY!GFbkhWgdDGHEr638RsGyn z212)K)3}Ir6#4I(^Mqi?D$uIYG4cYhh@V-xi9ScAn~lBeM!($WAi2{vJ@0Rza?LZ8 zA0_|l`3No5SU+zDB3Snsc|!eD@>kYfG%amcKs=`&%E2yWww_b~l_SaWf%PLC{Dbc)l~i{PZ9XKS?-?xyYHDk z(haAo<#kP^o~(Fcyd}8?*8Ei&?2E$fa<$@d7TWaRXnNbZMtX4=LB_F?4iv*7$dq5% zP5M(qvW2Qi={S_CV(Jj*P^nxd#sbD<`*@0^>|G_}pT_PPLl(HyH9t~GYxsURJiXloA*Y=A?rRWiu$|N&X z(H0gK)*ZtWX7Y+&q~cU$GZt`h{*_dzr@;j{;a}cG z9WAm==980?;E+kIGMWK_jpz?u`4MjJy&F86UdgC@xTn>z*BRUBx67XZk11!3BJ8lJOA?K5IcQTYR;%5;3fPb!6I6EcGAkyA}_tkt`$61 z&R2k$aOD&eDrII0_c%*VZT7MqJC;%4rF0iZ7FVjv_s*A}K6{y4&|}Vs4bclTMhMFZRCw<@TTukxM!*!*B}t{HGazG@tFdLht7-5Mx7%3JJ~OoUlAu=O6?6o zGOBBt>KKco_U|}Dt7=FM*6KV@2bjH5GCbw@NLr+46Z_BL<0Eah09Fq2~w(x zHU$j2*S_|A9J`P$=MlBl1?Aj%LZ`wI(p^DLL(E)pCr-Oh>M;%YY#6(#J1Bc4s|3L9 zG4G%1%u8gdzJ|8MMMqLRy5h-5h33inJTJ4)-IQ@1L~8g-MYufSQ%)tUC~O=>hah+h zoRKaaGjUZu?sPviK28&)2JG8rLJ53X&&ZrKa#5K>_RhYB7E5#Io`SlqIqvi1IJ=#$ zwijnen|Wwrb=Yd%n?mc{C-R}4LaWWVN0%oDhpS&24lg@6I-idbmnnU26cF}OQT4`4 zGexqdWpYzwR&SyiTbr(=>3eSkItM_A8M<^$)$fs98hZ>%&~#%P)J+z_wUpO%>{G%>OA4PO` zH!@9TH&H$3=I(n|k}R5X`e||J{c>~lh#kc;lwc&Ww(k3bnM+QNGZQKI4N3Q8$ZY#D zour52*KKr<@tk-?e@1lN6_7#=C@)#=-VvXD6?UE;7Q+G)u$d541b2C_fV)`IiEn0g zz^Ykb=`*e$sP52i!yu@YvI&33yczRS?tFOXltAv@^b{a!LD6_2<^+Wzcw2@-jPl6? zmTT9j@U(8NTWVQqI8ecAYqxe)1(AKgYg91wqzvO)B{6$Riu zB;y|S^ovUz_cx4HPbLqdc3iuLyk25#6=s|`t*lz;g4Pk=c~twVyZCsv zIpINfY~G8FjyS#b%&5VrQY6YVMkXjtX_Il-YfWUqf=(NjZ^TF-cE(%y&{b6s|gcvL8W)J*bdX2 zqEJg6J5%+He=$+Lm9bvro5h!nI>hv=N9`GZE9`GYg4e%pz4e%rB$>6sb|C^*Dr(a^+e~AJA z8Su>x;^hYZo*kgAsPG%!?`c|px_SX&cL%76HOv`c3^TX16Qtg4XrTsJnhH{DaVmlo z9mHW4mNK4jn7XHuhKZ-O39l)&un?AjJDdu} zAV3I&6#>EOHq|@fq?&ngu(LwgHNYHvATB--nS^&#b}!M^t`={e=!f zrhJIpJX04F7+lEmCNU52V>tngJpf=0c5Mv-;9o#~LH!|eK8c?>BeD`gE-sd)d{8jE zF$X6?eRxfbxmY<&K|HLyyk;D%T*e$=4o)6!V`DSZAHq>o{1x|K=*rq5@<8oOV87D^ z^MJXzxj|j$fGuZERf5H8QuBi#1nLXSV>MR6x zaIirn2i<7!&FBPxe?IyNF95vJ>|Zqfw`KIB6|s&GOBnda8vgO<_x1L_cKvf8|7$D& zfd4T0w}ks2as5YJ|CR*)E#UuX*MG$IZ%N?a0{)M7{f~(Y>(93UL~RE_YB$6l{~unv zepJo){R`R6{t>bLxY@cfNbue4Awdub1kBFP3j!f_e~&<*M~pzk*6&vUb_hF|1H|=X zd-xl`?>je!f7-eIlEwS8ng#&O@ka%co4O!eoSf{O07Si#ALTzlH+4_`tOWA2jguGg z=5+J>vx*1@F9h)l`PVj1Fz4T^jerqdMSM{E3mh1P80X*HAYcx}``TaOAncrf=Zk>) zmx?A}4hW)Wf5YW~@cb(-`>$0_ejtFkIXQpf`!AJGz#Kr?|Dg&ehYNyUVt1Tm9<$&0q0mUd+V2m>2J6+{`>D zGxyQTjJ?jHncS| zrjs_dF?BKnu&^=n@;W*>80%X@yJbcxkK3%%BX-_XJz?tp>iQ|xV&;b~?gs$zF!T3E zrU;7`<|IDs{k<=DspzvH8?i>OXI8eEwz`?8^JgR+OrDs42D+5}RVxniP7(xr&>h;A z*x&ZWN2DL<>d*8s5W58Q=={cU46%#@cGli5CI%E7GHgP`h?1(D4`NX5mnkRR?m!A+ ze|)ig6LIFWkhoXo2*;#Bsi=eL0R3B$bcU$jARrYjw-Lofp{nzOXlxr3%ObQMYrn!l z^uEkqk;)ERi*84B}#rWFD85ofA5Fg`S%|(J=w;l zYF8yjk_P6p=1c|!^#9^4^q=)5q*BQYZ9%PqzvRH_W{GJ8Gt(Z`$5q8%)JnlOD_HqL;q9ARdh)<+$R$d3{N%$f z*}CfDQZEtHx0#6}ZHzR*%X#pyG+KU7W0iw>skSeG;|^C~)p(_f$4P*eFvay>JfKI~t`!>OUI|}{V zQ9_$e^xNV;$YuaA{>!8&BY^3j6W;INw`qs((f};~x*}t2WUeo0>!wNnon+x)p=D$T zuro8zva@UR^8Qonf9lHieeHkxvM{l6u>6;|B};SNVS^RfJEul(v7225Dg~%7W1D(J zwi8E}@J~|Vk|w1^aD3`SEJ{3)`tJg{&2Im~%G3lJzED&8O?E4%pUi;Q>BT>nKf8l^de^B_By!?J zJUKwEh5~*7-+inPY-o@eWPbFC^sB~+68}CkoG=wh3-ptU0MArEGqQ1?Svt`~sMzW}QT%Qz!MfkCl3)>M{5Gk0&lzt_=(eDGiP z3xUyP)z=B74X@*TO=%3XRd@ZdMkp?ci<&mwPx||RSc5H%5rZT)^B0qrw~#oO2>mz*31hc?^QA(Z~V5-`4EYsp~W($fWJTh zJgq()2%#>6HO0=Qp)QB*z^i&IUfb;i?eUZd1x3TEz<yW<7wjCj(Blm|+&wdYU^h@2ETY_?Sr=t0*nt0OT^5J~v@U9D2vlU43euX9lZ08< z9m-f~EWrTBB8RuQtCIAIkn_;gd`Q34NE@d68*C8aIt8F4n->-5z*hrJ-$X1WQ1p$H z(rDC9);XC$0cqG}B9$CLyBZ6nZ@t_M>V{)L9yy>2HC8N#nY5n-nF^?l4i|#g+$hq$ zb}@24u{mI&r68BRl&QpjFBgOf4HZ~Y6QG1b1%9Al&PC2#;O`H3hQC#p7!QpFBw+Qa z7qh2CneXM!Naug=!L-XQDaGf70VVz`6r*0zy-aT^DB_xIZ$t-5zGg$ zx2maO7X?2@w*`%*d}Ek}!bmkK05QCC$*O9V24-ze+h{w6G=}{Fl_t2yeXR1sC@S`( z2!=J3Q}Uh#w+wUd;y0L*zgA^|IUWgGdc{@11&*k+XD}V`(E5$oOE^mqICP0o-h87> zV;)UDlq0!4gZpDAhK~uc{up*qxEczoMeYKa9hMdJBU~KQV@k#JIgti2k4C!ygp9n> z{)rv@q~tD=*_j@9JJbpSPH{uDeIWx5FuMUH1%gx3O1fRqulQV&i&-IMR>q@v{DuDH z{P)^`@}Au zF}EQL_iEIBN6-2ukq^BrSi1f}T(W z#5#3_zsg_%>YCAH@#f#5WS+fFJ*>FyZYGrE48y00rVpHc1j3QDDxPClZ4~4Y>Px1D z_juI0<3x&&0!^E0pCQH-b(`3ju{T-~E<^J)gpDoAy9P^=Z^h>CrHlqc7AdVV)F0Qo zI!ltru=a20ll>Xf?jpF|Hgk~O9YOX+H9Bufj{2`rdjLL4n}dXsocq2#t~=Vp!5w{~ zY$_g{)sd-LbBXjsd1^EzCU2 zl}J{w0*S2-2IZ%N0Jfta?l0DPQ-?AJu~GsyyLjpFSptHe4t!^6ll%|jIB=vh!di%8 zI$E$M_v~my(^+|lMjc3~1+AFU>S!1NtC`WXj=a?`P{zumvAdaP)cW)xqV^22O>N;Y zAO(Aby=1UL641?x{P^De{9~k)v=H^H9w9Fm^Fd;PU}+OSrUbLa+(yobve7g)Qw?7a z0KNPJlc7XotRE9s%u8)~SH9FcY3a}o!@ZCiBdKw_K8AuZSUH(BU$59YtWZ;ayql~- zDOxkyWD4xtRoRcjD-p#Vk{93y{FvU3UtBu=2{d5fHNQ)iX4XMe2AYrARBEZtNzKYT zcFHM3gw((nm9MW_Tk5+QMk#X98!1HX+Y5>dnio<=ND%Tc|?Xt#>#u z^}^>Zv=>|Syj6AC4q4f8+RNMUZTyX^-DRKOdLLyP%9byl<{Rc48rX8Wq1r9BU4(wp zzWX&wpxoV8=Yl2Y8hStQ0boDtGb6n zs=KbnHmlG4*(T+k)ehVJT|IAsb!cD*Cv!sDE8cQ(FFk$*?$rA;XeD`QTBC2}RPWOK zh||5ZSax|n^HO6Gim8DAz@O5y@413=<=?pJ8fkd4czuk15#3 zcHp*yG2j-MBIz!6ypCX(3Bu;3#zfbCDZwpR0vmtP5 zjZaYVfwx>mP-)BKTvI!LJHzjZis;!+21OT}`T3OE8jF(h%*>c3Vqua-cGANz=qOnE zmRxz9*H+P@sgnVmV4;||>lG!9>r=)efxqAVXjb;D-BHt?SN$eZ4CQpY=Ns>_ci4P! zR*wbpf{JScZwXCiH@pHgp3C7aQ-J|ttLHopf%11|0N@ohVj!ivq1>|AylKb?`7YFA z`)(nDaYDOoP;gkbsj3|V+lpN*t=|MGKbFn=TN9*@mfd_Ec&O@8Om4LVI5?m*BEBu%V)8V}`oFQ)Tsim(GB#BS=X0xkQ zJ|vfE?4XuTO^fmGd#^k~xXdg)6vd1Xx#|4r;?Vq)-8=kbL>)H)5ZKBrjeTA$@ZXuZ zeMry?#zszWdzXZNh(`>U2SeSur}B5ql50ui@CMyZ>jxJEX^I-$Df%pA0f@04t}CZ^ z)1k`-P{mMD>W`6|=JjsS0#oqEK+^!LIk#~Q3Hvzmq#bYb z2MXsEn~k`@q;OP^bTwLl&>L|y6So_)=GmaTbI3*eV~D2}-4&4DJf!pvW%Zz3e|UtR z)Hq@dQqc*SWr^6^f%lYw+=R%tE!06IlX?ZXfnI2kxLykBv$XqBrYxiKwN9is*rz~l zaC%xH8ULWcXfSkI-(M$LDW^X`HGbDtnb5T}MCkdSQ zA^B^Zu1MP&zC$Y3K?~A~G7oY5t5+rD)^@EUx0B|arkL((a(*cOX_9&oqQlNo$3mR&w4e?`zt8NnTa-r+?Ll`W zAcOBW+aPqM{?=~4^)P!vzLwS1?d0U~{_SCZcYD!7w6#5RtuTYCIWXrsoPuV>{yu;% zOIhm!18nE;dhJc4k{E@XT||aH=TP*=U*DkCI}H%< ziNI#2(^6` z;Ce#}#{XV`Q zh`7HeA}@R>!IV3o#QPzpqJdnL-^(=_))BInW1sSbV0KjBMgxW2-ABYzQNv$k9l%YP4RvfAobkt?Jx`Br$?bDL|CP`&ToG^ZFf4*uzah zW_$bgpV<+{zFcJ|dBO&EdR;|wRWmV{!MP_V46qR29}{T^fl?%YT~5smvMxlRr9#L# zA{OE+@4+{xT1fcZC;ABSa=QO&fh_Ip4)O=(IE_iLANj4#`{<}P;7^oxgg(`a!^=aR zdE@wzFdv4ZYw;cdpPm$PZsDe7EvHP4`bkY&0G8wJ^?J9sx{9PQ1U+tIS~^iAM$*kt zwl->;8K5wtFU@k>R>o&Qbdd>MWMRD7WU(Zhlfn8ne9vjsS!i-gAVhtt~ZM<#6 zzfNC|wlPVviS>bG4_ZMUo?`we>k+SFL?SvvvV`m-}Go<|c8AKLRY3T|~ z7N8Mzg`gg}@D*lU1_=&{h1=YAh6!RR3*~o>!UO%&@=Nw$V}rlPXjli$RtDJGJX{SdlkfdSS==tTb2vL#-3Jg>0gMdUenuu4jv`+ zo>h%7Lt(KHu`hFlZqjF+;Mt{ws9pmc=10p5Viz?9s>;Hd_(_{QAnk1R9w0_P7>a}o z_Dqx$;`|)T9pADuFT}S8n25aPWLFmM9v)bbz*$7lOnuQ8dKVt4y?u=eYi7i^BP|#i zzv-|jpR5ww5z#06kSgm1)Jt=sXmD3>cpfxUj+R#4Reys4UU3Mg&C0)I4#RpD2Ln>58Nc{|pkkbix8SA&|%{NPumhHx#NJ@1o^D^R-^?j<2N}R&MNTb4x^Sm zahm<(D~ z-)>&&E!!K@NX0_W``rxne>Ee=F|&?)hWD5q3Di;6OwY?^7!?8Sdr}4ihlB7pAuIIF zN_f;-S&}#rRhz$tI$DXJq=kx@dwpVdZB1qAV(e(SjTj4uE|#;Tb1|p$R9%N%Dh2&! z&_KtA69!!68MKA5N+K|0feIcy(|7KOy&03qnWBDq8G{s6#7gA8^y82I!oE@uuxXR# z4n$}x*V)n1>O4i&5iCFg_F{o_b+c-g!zxY9Z0Ub=m=7g}XJO9Te&k8X8@tj2TKxms z0;)YZ%hdrji(z_IWct1GhW-54F1BXhBxCcS^1)*Yeo+K|KD(w( zmh19jPQH=*Kza8z%u^>)mfnD9?Yj$)7ivg3Vx`%$^PjQm&ALn;*G0fDvhGU}zFLdP zazCD99v`L9GyXORtnFh>;_@2=2$^5AHZAT-_0Qwmr)PiBMLG$07D&Pou6egUTVHsk zIxlv+-d##N5e=lk8SmUYJw=OvmiJ$*8QwVge&LmOn`MZirn<6N{o*?q=pNCdh_+SR z7m%bQOYj#vVT*$Li;NNvKOc+GqE;c7!d4N(w!Ez7supo*;qF@3+S97F<)u?e%eTF? zwXr{sb^mnxmFHk{?}LbUF2bbuL}r2%*orXOAM={t@Az~$Z)>&O6h!`v_eW(}MYjo# zi7J(Js{-xgJn)k}F{O~<^YZfSe6M8aSQn$BT4w?wm0w*_yV%^17^A#nxFI#25wpDsNAa;)5)b703Fy=|;$RQiy2 z!IPnpCS12!&%Fmlq^UaG3jmG)OQ*iwm9H{eeJ&!_5uIA~40_r-VwW+o|7QWd8F}spN z1q&v7JMGR~=K#uHDCZ#RWEg*+B(>WCz^Afq5nKO6mLY-rMruXvIm~R<^Tv2#GI@1Z zZ?T$>cj1vwWWbpJ=clED&&ZPVmaS7n;Zteti9@As$ABD~63e3ep;4#)eA9c$q$LM! z_eO8G^CUjFr4fg{Y)w?&uh9~n3D=IbUkDKuq;}4L6hny`zHOQwx#^Q(#x{&uXMW0; zxmdD_zrHG)ybVpWis74HVVu_XFWqd zO%Zoj>{_jm<09-mc-F7pcZJ9A6MVN$$guctgvGJvWQ>s=Hkyr_dt*?=7^6(KE{*UFQ_&Go~6AhOF!4YF)X_e8xG*2;A@ zI2Pc`B$qDGHUV>{a?}g6kI;ToW+^lAGsckSe8$kv-%vCE~B$To_EQU zpEudC+*W$!Ag$=`5>>b|T9p-|i6dfle-Oxh-VFLsu1wCfUT+QBI{5-Da67_ae>I<| zzimV;`(TU6%k(p*fZ*whAgIHRFvJSX>vq9;#{Y-+nNJj|nNS`&ww6hU>_q{oPLB z*qCth*LGB4_|%eMGgh~S-L0fp>TK`)l4iYW!Irb2`?Q4PJ<;{hxx0qIb$%brYtwtg zp1r10Uw{Z&=S@t78~6Rl_W6O-oSo+|{h>@VZTeIyPGYp~Qg(1=lQCmt)LL=b>1HnL zYS5c?Vj*GzGbg8Y<24Rvn()mbh{^6T@mkeg-Gxf434e>HlW!4V$eHxl75n8m7K85C z82XkGZNh|}$SIeaYOQS%rCPP-{&TXPqzWmDi1PT^|Gf{! z@Q-fsZ`#CvIAQ_BT{>tJMV=xA(hPHSjuO-J$lh?28`(?6P#w7HEXozTCO90qMV!S5T5 z9sZS~*Z!8044pKY=-Fslm;o%zjI@j_0A@xuT4q)N3kw4+3&Vd=dl>%FjQ*!`4OdX+-#XIfFSv6^gk`1$(NQnMGUDW)M+q_E4 zjzA`31W)`lUf|Jvey~RMk=~Lc10E;rYlxJ=NSHr8I6oL6-VsP0zVIPj&8hu*76!Yx zKiK{YwPJv5OdX}<<--(KkSGJo{5M8R6dUYPYg@Wz$DNCUsN>@B)CzX2wQT@ zlzj)+f1FT^Q`$WqXHMUO)z>ze){9K=O&>IoP>K}{zKsM%z{uHrXY`C^O-BN*6mI3) ztw^q#a6`pzW;`r=424K;2o{!+!pddlT(c{mn}LXhItKx#w$>mjmbBJ%UJcb1>2LXTsx?)7{C8{~hQY~F1C%n`scRA{bcA$u`C|W0~1fz~n8nV<$n#tJ; zUqd~5jZYLp8ljoS@fd0CHO-CMEXBc^G6`xDHSS`K5kZFy`sN4Qga}5qDv>!z*bC1f zBPWEi$yoIep#^}69RCnWj7ar@!3yA^5+CwsulUBf2iofu8sKXNy=(@;R3V0q21TnJ zw`mFHNoS21qwhg-0L9f_5g2jH%6ldq!18Ae?=pgNGB63s|0XO^AUL<{kkm@t@g=uM zc#Me;gb~@=Nev+o3LJ|MCCjB=&@>0rl#mHjEjkj9hoIt{%G@`)ifD>ytXd;D1<@cG z*?8c4Jp*w;^u+;$J{3%U6xSd?WC~h^EEVrW{yYuL72W`xE^}cuGrFp$8Wxv~dxN(I z^hxqCO#sG~1*bp3WEvnk1))KbOl%%IcW&h?N|XiX>+rA4|1{41#UWlhzY1`6nAMpp z#AnD;F_8GD0aFk!;+b$aNSyyvF;&H&kOa~zgq43C>!4BmGZQ^5XC9ja$1Lere4)T9 zeM#P@8%NaS=xT0ULtiCw!N#u z!}ZaZOj0t8eP*(H@Zf-<+VYhkb!4KupB*w2SO%ysQb!dE`N+bY!05;d>E1YK5Sa$3 zlZdvZ%&XSe3MC^rXc(oX%o9p=Ws?58@xy@c$9E2y2~*|+E8$#{enINUYIfNaBbrw$ zt@Xm*D?Yn}&B5k@O-KvKPs0%#^H(QC>!It3#w(M`W0)`WN~4)XrBapwkM#W_P;^#y zsYa|7h)-=3BtEM(g9aEKLHm2S0XRS?h64P0MO)QPadd{1!gW@BGVERrVinntS-;@+-_A3?ozvFBcSd$vnnk+ zBIZ<=M>id|Q@6+WE&Hg{8!x)>tT#^@uw7Rao46XU@0vC!pR3i9m@2&mD}tYw|4p(@ zx7M}Z8TYpyZ(ge&YyQ<^e)dTB^fgb>VUheP;jT8RA5v_5EYneXWR*!RtWSu#TH&BH znSpK2a>>W3s_Ua{((qco<`Eg)lWDGcZ_+^Xc4neoZ{s?j)Wt-Q$V(8rb3s(Aku1_< zDdi+Q+mKJAFalw9jZ^gw)NQv{x2L%P(=;EqmhfwLxq2nBw?%)mysaf7*t)6uO;>Db zai{9Bz0EcLiTiBx2m)7oyFOnD=hoh(ZZN+prrRhZzr4>=#9Pwl8;kx0DlD zD-qR__JFFM+p@0|s|s96%Q|g1K0E^6?}m;b@h^23NOqBOE>Ii0E#Hrh6p{tcyg;%3 zcKdZznTRJrH+R&EcDi+!mdjlyS(B3O;)aIt8kPq)3(cttV-`AP z0S)H+O^C_1nk7pY&^|jg<#Ukx&Xb>_Q#ip&kDPz5OfLeQX?Jx4>5y{b;PV_t;^?g5 z2?J-TCiO`UpjcfxV)`wAj)T=ce;8I~x8UjJKrwVruL=>$KY(U;nSodv6{&gmct1Z` ztI%b*hcS#>s$_DNw&0e}X_jdB=zH&C4uqQKS<=L4hHxp6AMhyu)L!Dnz_S|PVw0Js z9p|`!CwO`NBoXeK1#o=S`C)~e7W8h&L2{#!v6lBHXOssUfR(Ge_m_AIx{Xg-`&03k5`g(heUWIxzq+2e7ej? zcH>Zh5USb=^FSTu-H~!F@Y%uma%?C8nP+f7@>mvlJT{FCn}Y9 zUT0Ab#*nei9jQ4~L8w$+XzccUR)@W4>Dpw~X@%G#Y-5C|aEz zqL2Ew?jsc!ASQ-C4t6r~(doMVG{@$nzZ=0rH&twvFXJ6K{CGCuOm|_WML;lucBjm_ zK}E(pv(ndH#(wi^jV4gURB*v+qMRfukp8#tmyE*x=#R*b?wJwbU}vsOw7SCS<3n_7 zjf(~L%Q_CD7bvDMaE-~B!%sUfd=^saKqP#vVY|jE9Mu9rM+yZtFljBG{00oshXA+z z2srPkkK8LDB17zYI7T7|_ZM${uiWI9eqpk$pCh`W;jX?tUOyJ(c3&gp3%_Ad1{(@8kPjy!kd}U}!1I6qQ z;!O(A%PPLVczf*V3UZVafxg8+MK%>(0A@SEaueMojF#)3q?PN@(vlSm$1V@OJp5Cd zn(fWo^|I{b;{2-b^0@o*0Yu^<{+N`zb8+G2;qiL;GJkQu`Z_znBsKCIuT}ta?>v_b z$BU1PukEEXn9+vMv5^AOU>oamRi$BqdJbz5{>k#k^|pyUvZTE7rC5a zCQ)Lj>8GaL_BPX*cZ|(n=hMiKs+(u-zV9Ns==6QmV!{K`JrhsDk5R^&f_QxzT8l89 zK7vymxP7bz6kq-(cgubu2oOax{STPVKM`F2cc$|%U;Y0>sv}@yW9#Io`7i#WsQteY zO2+WN6nM$R!2HdH{v+}-OXHvUXJqeVwF$#cG(+GCSlV~e@y3ECK?>rmg(Z&&@Hjvi z3lupJdDR`u+X4>{8<2~Ye3>!_CrJCT^mJNx@0a(T3CFEEAqbtsiUU&`Em@DWPtHsB zwBa9oGJY&J;)T%o~7=K-ql-k%#qhvb`khk&$dI z`g^uXJiHe_WPdhvFyB8Y#R2+*5L~d&V0+&W{9Gc@qn{@Nxt>)Oojk@(VPNn%KNhQk zSiZYa3~mXfA>F;$-K+w5gvF&+MEv2p5Kv$k!l8~rsLS|32w#XXXT~GJ0tKfeBe$-e zo4F?fT6DahRu`|c;Z9te-Fo=IG$5=F=MLW%f|MmY!jq^I%XyV|Q>ZBpJfcM)B#Wb- z%gwpxD`629Qb(3Bl_!Yj{Jy{-rO0|v)^=VHdQ-vd)&Mjd;#Ngv+o0>Va$ifB=c_0Snd71`wHnOxA# zL?Mbsx##G~5MhoLh(+ysfb$VZ<}?0y7X^$=FsrIS zGQnd7U<~K`i5q!U(CC3uM_G}g2u=iZ7921DiDy@=DDByQE2Nb|3j!LswkiH#wJouI zq7{5nNl5e|$+qk1w4nY*$0w1XMLn!DXr*@C1cKuY8#{b$3gmEMRt)ZkwGZ(OxUgSz zr@Kiic?H2V!85;`eU4{uSK~fBs>=q8!v+iUM`ITFSlK?lIGw|W0+`!z9RJ8BH;(vRbRkj)Vt2~gnyD{Zho8pG@R+~+BMiE|GeuYgnbgE^s z8F>ZofIuhs1Im*_yRT8(_^Cgnc21#RRI?~&?(ir`wWkzJP&?wVxV*V5JetFZpTXSO%~QQ$|&yU?Osm~D}R!!l=b z7IPNgPRWktdF#I6eCnR<(vc(@*}4wX%vjAyk`mh@`_#Z;Ry04B&x`Kxwn%+&y7qFB zJeD~4LtAq%obClJ2j-Qr3|IRNuJhGj-@wg)Dv)1#UJuM14_b>fWa@^ohE{$mXZVveXf!ris!N>NtfSeOn z@=ADm%_;UA(CIwSFMKjS=8VOsSeExiZ|$bn_Roib61AG-zeRs^IezrG#2Uz%Z;#v? z+OyZzdl)%yWuM)>zQeO)vrC@wKn^7v+sSu-5!FyV#p20wP+>Py;orquS76I+Z%o-H zS6;uKcLfoW7(a7QA6=`?zkZl>r*BfLMZ~nUu-zX%T#mw12$LI!J=Il@S=Vtbs%t8f zG`CWvv(~70OluITtI~|)*YCw{;yDDft$9yfA*jP_i9MZ$wA?>8EK?lMmZ;(HI3Q$< zRO+whm92QIwp6ZBW|02qS5db$P6hjd_KrX9f$w4}&G!-j6=vbuxMq^)K2T5aEFhB@ zK8a^n8@~S@Q}?zhoF!EvQ%pTtD2S!$_X`43S9e(gPE~~0VC(a<(b_x}rK&ET@v$hu zL!msq0++7R=F4^59z`-Ai*Sb#^d9Zg7NoV)_n2HJhZ|ssKqr1kliys1&%o_#@>myl zj3Y<^B4P7Ya?jTL@N|g`@Yk=0A?0Ooc3tUWW~1)F{M>Ybv|M+0`~HH0TcJFBRqQB z&xpnGm7cPR24Wy+=?IKjv+bOCtfaQ}N^NCJC5G_e-};ptjo3B{GRNJtMM{%(L;uf5 ziy&^Jf#uJ4bf2`qYP8^|qrlYMf3jGg)M!<9%%)q;k0{`Ho8oL!isl9%0(qTDw_e z09SktU4J0_)S$pTr(vL((<7L~!v~ACRRS3Y>u7F5EV=p*Do^-}{I)J1AF;-RDd4Ps zQ?SRpgILcME9Q@}iVWFptH6vgaz5pIpJmbT$?4|FG zF4R~ooU8Ma`~4RU?&5N(5Vm_|EvK>Jfg<&JvZhAux)@_T=Kj>8yA|)xMJj14<{;^G zEY-cpRyNWcAoumDgTNX-(U(mm0KToz>;QpyANv!UF?4JGmOgiv8-69bjEt+@eXv*J1Vd@nWH!W;dQ=5jZ&O-+*+39Ge!r$ zOiplSa8onksppp<9*ot?rIWKKi)P-KSL&DLuer3)lrP)(=b|Gt$Ax_ zxxCXcp)BgNNN<+~{~V8EWlgV=a~DklUUX`>`1;Z-oy#p^qc1v_SbWC|-dPUI$xhM| z(epSjLC!8SvX-C2XV^UK$;pi+YvxrxpC;cc(Lk_gZr1;m=S|o$&#hu(h6~0{0H6#) zmUsxMG*^J0)(6fSX`j<}@*L>mV7WZ0#GbpnaL0r(_jd{E=>-I8?46K6)D_;odVxOH zosnES%I1vd)SA)@=BzRGQbY$)4J52{1Za@N1`{Nf&>X|oBy|tBDn&==G`amI8 z4O&{fb)AN3j?Be>3siW1;|OF2p5=U{vbx(toTtviilL8(&$ckWT^P^J;MiGLlyCCss*a{ayn9_L zl6&gKX1;;(!`<*Um?OY}Zdlc02k7WjbgukeGATheLQThc5*IP8jokQfeh#cd-sO2h z&voDtAIzX!t~hM`Ih1>Hg#UN^&p8fDgwSCgE$`2+wji4&#PeO|JjN#m%Vp1akLJ|{4lh>x z4!szaPYxj(DrcXc$Jm00b!953N}I~)50gki#M5VVzqSt7CE>)aEpZA6%$F4$IW(qY ztNVY=nErN7njC+S+we*I__-R&0{%asQ~#`g`S0k||M3+#|8K*082;DR;;=I?{a60< zy%y)c@h9m+5| z0^C?m)2G?p6R#wfUr_tMqm9V7qQ368 zl!$Y`l@8Y-1gyx2jMgp3Vp%Xe<0xy~aHwLE%ESVM?&esj;`-vi0)j^^OQr_k`UH{E_{2erC4Nw7 zOeP$!Jp+a3m*ms_m3CXvcZvN0%D{?Yx9~*!Ho*r<$=`Kj`HH^d7B|!{goXxEEsJw* z#WQBqsFiAx;se!865|{9XKs050vKbY#1+ZKQp9HhYm^n`0GCY6g@7b-zG1sRxF`NG z>!V$i?d>%vUjT=#WE!NaF@Rp8Z0HBG8bmy(1yF!CisCQ=Xp6$IfZ7yFf3Jt;Ar+U2 zaDsKv$_Y(xOZWv%rsf>5$JxUZoZI?eD8(BBVOKTGBR zUXs8xsuSa;_3x}51a3=R=$%^%{Sz0VL9ZZ6kybK{4z;Z~-hEkT(Z`(=y#8hnRS2_vuylQ=<@aZCHLflBS72@YWC3#3Dc zxr{m>M%iQ2Oo1Ak$m=2aH3uYz9FZJIZ^#>rBmx?BOar9-<<)V3jOR`lzr`KVG$aX^ z7Z>XveI|UdKq0iTxvL^=SrM@feqw1PQk=>!eyAXH7~=ZagS4?fIB+J&nF#;DZ%4yH zw;QLk<0vB;Dv=uhD0Idkvh>FyiKjO6U9zB&p9x0MKdk3Rm#q+80^%BTYSas{OyOf5 zE4_I+4y!h(gk>#idqg8L1&U!5OJ){7cSh%LQLbYFme0%7iOPgBNyLgX3b9>=Fw2TF z6--Vg5jIwrmJ(O`S1S^}TOnW70OV2c6ahpYlcf=r32u@I6<0XjJP(I@@oZRwQ%cOj zf|*1jq2~$*Cd~#AM#~9;9W6D&Of}?T5NxAm5!Igx8l4y}m=K0>ad*l3iMH_vcFLK| zPz=c7ywdNUC#ud>eInO?ExONM+&LL+7qQri#Q4C=Rx}J=%4O6A4yY&#Hkd*i0`!J4 zHMYT5ER7fnTi%HYleu+A;E*-|iUV|lTnWAlmQ{o6Lx|JBgS|0}zpstX!CrC{tG6JS zNrE%+I2(NCg>fAU)v0^MF)}|P#u?||M;pkrW1>dTi_*y2H?cx6FcXe@j9NV&>C~CE z7nsgjQc-qpseuiqqk)fV7Rl!i`q(;)Le?Tt? z1ANItq}zC#d@WUTnqvE&dUf~wCy-IzvyUar;}M-9s33Qh@dV#N0bqVPmi3j|*tf7D z*AE&dG%g$jOFarZmB<&%5MQHwpiYU;xH`q+l0I|)vQFyAqpo#}fe|f{AW0&b$#=i6 z_XiujC?)jWLfOJ-vOL$AQKMdp1(|~p^mIpWTv>lXCloIK*b|*7t({w<;D9(bD!9(q z7;`bEVc%c{Or+JuiUO%{JnwonFa!4v7UKFO`&qaUTDM>u(jk}!#t-yNjEqs5rOBRRvV1QA$?PU)%2Wy^zwW1XbKqql4Y z(qxb6sf*`WKnj(eYoKJGE6MomCmjJOz*0FQp#Ui)KvXifQE;OOB)`o$De(A4BofVO zmH%vLTuUpE*NG6N9SlXn@49rlQp(DWfA9*;%wvf_+Qp?n7{*#v%wT{%i}wRMqK zk2|uhUJDjUBR9uAscSuE`l@o7!MP*=r z`Ov0RAb+-R{NQ>9>PM^zBdxUF?7Iu7iA(|21-{buFX>AY_27!6>||NJviMQpqRuky zID@g6rr-+<%6*lBvvYejNmG?F-(J1+c$KlD^7}fa!$RA7P4vA`yO$BWCtqr8_~rBX z_&9|?htg?0R#sGEBS@ukN$%Y`te#>Vn zmWbjobjp@)!(DX~gnR6l_imYU*y-FwpFW^f$Ho_mm=sYX1;+?P$7(Hp2|RQCqR)d` z)@myj8u1vaJ4n!B84b1UQ&g?SVMcMJH7&Hqqc15h=FUC#-k|9Ja%;_D-bz#+^MI|&VZ3HX6#aF zZ_P`4uvToPzK5Jo4KZR7LaV8oPwhS%xq}BN{`2;wKq5ruiG5GqcRmj$GhV}ij zc}rj`OFwO~t@j;?p@zysG(k8mriRw`ciUH4sKM*4vz*Nt1=9+xB4ii2X~fxqMAL#R zQQ=Q3wP9or8KfK zB?rBVmbtM}i`|K9NCrI|KYWIWcpug_qlwNB`s&ywjfi-lJUDifV?#NZyvUPKt$22cAvaV`EJj`=5|_UTaV1%0a?Cuhh0%MB}d4(`56m zY$^L?xVa?DCA2wMxSqw0lR4Gr?kq{kGAk{KsG*ee*B!D^!g3RsPM)BAw8P5@>-QD& zAhSv?PhBN2f52Rk#Ym!qFMzpXehk*aj7OxfiwX=;9@uYhY-r0xh7_mlw;a2wCHPgK z%|G+d0nqj>M~x86fRRF%6$%e6-t@h0E73w=iX{mO1ehwbD%N-3Ok zmCt1yI0r?SB8Hs~raY=~az=H2zbL&(sZNlTysOcPp6T!zIWF2(k?%&U&_Aua@d z^5=4CZCf-~Lj;}F3F`RM$kEEv)-t9mi{MmW81$xQp}<*%$aVEXHwq*zl-`qk@1Yu%Z6Fjdb z1n;OzJp)Z3zGqN136+y4I%E8q{u5#!Blksn

86QE>U#8)D?+^!yY;%+3cW?iluK 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 diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_err.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_err.h deleted file mode 100644 index 1b4820dc3d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_err.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ -#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ -#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_.h or ble_error_.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif - - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gap.h deleted file mode 100644 index 2bf80e2d10..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gap.h +++ /dev/null @@ -1,2023 +0,0 @@ -/* - * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ - SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ - SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ - SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ - SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ - SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ - SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ - SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ - SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ - SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ - SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ - SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ -}; - -/**@brief GAP Event IDs. - * IDs that uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, - BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ - BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ - BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ - BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ - BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ - BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ - BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ - BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ - BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ - BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ - BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ - BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ - BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ - BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ - BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ -}; - -/**@brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ - BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ - BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ - BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ -}; - -/**@brief GAP Configuration IDs. - * - * IDs that uniquely identify a GAP configuration. - */ -enum BLE_GAP_CFGS -{ - BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ - BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ -}; - -/**@brief GAP TX Power roles. - */ -enum BLE_GAP_TX_POWER_ROLES -{ - BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ - BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ -}; - -/** @} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ -#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -/**@} */ - - -/**@brief The default interval in seconds at which a private address is refreshed. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ - - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN (6) - -/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes - * @{ */ -#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, - and will not accept a peer using identity address as sender address when - the peer IRK is exchanged, non-zero and added to the identity list. */ -/**@} */ - -/** @brief Invalid power level. */ -#define BLE_GAP_POWER_LEVEL_INVALID 127 - -/** @brief Advertising set handle not set. */ -#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) - -/** @brief The default number of advertising sets. */ -#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) - -/** @brief The maximum number of advertising sets supported by this SoftDevice. */ -#define BLE_GAP_ADV_SET_COUNT_MAX (1) - -/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. - * @{ */ -#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. */ -/**@}. */ - -/** @brief Set ID not available in advertising report. */ -#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF - -/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons - * @{ */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ -/**@} */ - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ -#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ -#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. - @note Support for values above @ref BLE_GAP_ADV_INTERVAL_MAX - is experimental. Values above 0xFFFFFF, i.e 10,485.759375 s - are not supported. */ - /**@} */ - - - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * - * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. - * - * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. - * Note that some of the advertising types do not support advertising data. Non-scannable types do not support - * scan response data. - * - * @note Extended advertising is not supported in this SoftDevice. - * @{ */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising - events. Advertising interval is less that 3.75 ms. - Use this type for fast reconnections. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising - events. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected - advertising events. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. - For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - - -/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types - * @{ */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@defgroup BLE_GAP_DEVNAME GAP device name defines. - * @{ */ -#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -/**@} */ - - -/**@brief Disable RSSI events for connections */ -#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF - -/**@defgroup BLE_GAP_PHYS GAP PHYs - * @{ */ -#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ -#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ -#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ -#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ -#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ - -/**@brief Supported PHYs in connections and for advertising. */ -#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS) /**< All PHYs except @ref BLE_GAP_PHY_CODED are supported. */ - -/**@} */ - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Random Number Length. */ -#define BLE_GAP_SEC_RAND_LEN 8 - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -#define BLE_GAP_LESC_P256_PK_LEN 64 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -#define BLE_GAP_LESC_DHKEY_LEN 32 - - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - - -/**@brief Maximum amount of addresses in the whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - - -/**@brief Maximum amount of identities in the device identities list. */ -#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) - - -/**@brief Default connection count for a configuration. */ -#define BLE_GAP_CONN_COUNT_DEFAULT (1) - - -/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. - * @{ */ -#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ -#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. - * @{ */ -#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ -#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral roles. */ - -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. - * @{ */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ -/**@} */ - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/** @} */ - - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Advertising event properties. */ -typedef struct -{ - uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ - uint8_t anonymous : 1; /**< This feature is not supported on this SoftDevice. */ - uint8_t include_tx_power : 1; /**< This feature is not supported on this SoftDevice. */ -} ble_gap_adv_properties_t; - - - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. - Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ - uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - * - * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: - * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval - * that corresponds to the following Bluetooth Spec requirement: - * The Supervision_Timeout in milliseconds shall be larger than - * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP connection security modes. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Channel mask (40 bits). - * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, - * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents - * channel index 39. If a bit is set to 1, the channel is not used. - */ -typedef uint8_t ble_gap_ch_mask_t[5]; - - -/**@brief GAP advertising parameters. */ -typedef struct -{ - ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ - ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. - - When privacy is enabled and the local device uses - @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, - the device identity list is searched for a matching entry. If - the local IRK for that device identity is set, the local IRK - for that device will be used to generate the advertiser address - field in the advertising packet. - - If @ref ble_gap_adv_properties_t::type is directed, this must be - set to the targeted scanner or initiator. If the peer address is - in the device identity list, the peer IRK for that device will be - used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE - target addresses used in the advertising event PDUs. */ - uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE - advertising, this parameter is ignored. */ - uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, - an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - @sa BLE_GAP_ADV_TIMEOUT_VALUES. */ - uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling - advertising. Setting the value to 0 disables the limitation. When - the count of advertising events specified by this parameter - (if not 0) is reached, advertising will be automatically stopped - and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, - this parameter is ignored. - @note Setting max_adv_evts to a values not equal to 0 is only supported - as an experimental feature in this SoftDevice. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary channels. - At least one of the primary channels, that is channel index 37-39, must be used. */ - uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets - are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS - will be used. - The only supported value by this SoftDevice is @ref BLE_GAP_PHY_1MBPS. */ - uint8_t secondary_phy; /**< This field is ignored on this SoftDevice. */ - uint8_t set_id:4; /**< This field is ignored on this SoftDevice. */ - uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a - scan request is received and the scanner address is allowed - by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is a non-scannable - advertising type. */ -} ble_gap_adv_params_t; - - -/**@brief GAP advertising data buffers. - * - * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and - * shall never be modified while advertising. The data shall be kept alive until either: - * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding - * advertising handle. - * - Advertising is stopped. - * - Advertising data is changed. - * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ -typedef struct -{ - ble_data_t adv_data; /**< Advertising data. - @note - Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type - that is allowed to contain advertising data. */ - ble_data_t scan_rsp_data; /**< Scan response data. - @note - Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type - that is scannable. */ -} ble_gap_adv_data_t; - - -/**@brief Privacy. - * - * The privacy feature provides a way for the device to avoid being tracked over a period of time. - * The privacy feature, when enabled, hides the local device identity and replaces it with a private address - * that is automatically refreshed at a specified interval. - * - * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). - * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, - * and devices can establish connections without revealing their real identities. - * - * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) - * are supported. - * - * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all - * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. - * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. - */ -typedef struct -{ - uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ - uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ - uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ - ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. - When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. - By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -} ble_gap_privacy_params_t; - - -/**@brief PHY preferences for TX and RX - * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. - * @code - * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * @endcode - * - */ -typedef struct -{ - uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ -} ble_gap_phys_t; - -/** @brief Keys that can be exchanged during a bonding procedure. */ -typedef struct -{ - uint8_t enc : 1; /**< Long Term Key and Master Identification. */ - uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ - uint8_t sign : 1; /**< Connection Signature Resolving Key. */ - uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -} ble_gap_sec_kdist_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ - uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ - uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< The OOB data flag. - - In LE legacy pairing, this flag is set if a device has out of band authentication data. - The OOB method is used if both of the devices have out of band authentication data. - - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. - The OOB method is used if at least one device has the peer device's OOB data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ - ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ - ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 6; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP LE Secure Connections P-256 Public Key. */ -typedef struct -{ - uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -} ble_gap_lesc_p256_pk_t; - - -/**@brief GAP LE Secure Connections DHKey. */ -typedef struct -{ - uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -} ble_gap_lesc_dhkey_t; - - -/**@brief GAP LE Secure Connections OOB data. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address of the device. */ - uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ - uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -} ble_gap_lesc_oob_data_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ - uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ -} ble_gap_evt_connected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -typedef struct -{ - uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ -} ble_gap_evt_phy_update_request_t; - -/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ -typedef struct -{ - uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ - uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ -} ble_gap_evt_phy_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ - uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply - with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or - @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -} ble_gap_evt_passkey_display_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -typedef struct -{ - uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -} ble_gap_evt_key_pressed_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -typedef struct -{ - ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory - inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ - uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -} ble_gap_evt_lesc_dhkey_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ - uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Encryption Key. */ -typedef struct -{ - ble_gap_enc_info_t enc_info; /**< Encryption Information. */ - ble_gap_master_id_t master_id; /**< Master Identification. */ -} ble_gap_enc_key_t; - - -/**@brief Identity Key. */ -typedef struct -{ - ble_gap_irk_t id_info; /**< Identity Resolving Key. */ - ble_gap_addr_t id_addr_info; /**< Identity Address. */ -} ble_gap_id_key_t; - - -/**@brief Security Keys. */ -typedef struct -{ - ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ - ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ - ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ - ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined - in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -} ble_gap_sec_keys_t; - - -/**@brief Security key set for both local and peer keys. */ -typedef struct -{ - ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ - ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -} ble_gap_sec_keyset_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - uint8_t bonded : 1; /**< Procedure resulted in a bond. */ - uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ - ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ -} ble_gap_evt_rssi_changed_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ -typedef struct -{ - uint8_t reason; /**< Reason for why the advertising set terminated. See - @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ - uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, - this field indicates the number of completed advertising events. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. */ -} ble_gap_evt_adv_set_terminated_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection requested. */ - uint8_t lesc : 1; /**< LE Secure Connections requested. */ - uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -} ble_gap_evt_sec_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -typedef struct -{ - uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ -} ble_gap_evt_scan_req_report_t; - - - -/**@brief GAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ - ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ - ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ - ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ - ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ - ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_t; - - -/** - * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. - * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. - */ -typedef struct -{ - uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. - The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ - uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. - The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. - The event length and the connection interval are the primary parameters - for setting the throughput of a connection. - See the SoftDevice Specification for details on throughput. */ -} ble_gap_conn_cfg_t; - - -/** - * @brief Configuration of maximum concurrent connections in the peripheral role, set with - * @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The periph_role_count is too large. The maximum - * supported sum of concurrent connections is - * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. - * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum - * supported advertising handles is - * @ref BLE_GAP_ADV_SET_COUNT_MAX. - */ -typedef struct -{ - uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ - uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ -} ble_gap_cfg_role_count_t; - - -/** - * @brief Device name and its properties, set with @ref sd_ble_cfg_set. - * - * @note If the device name is not configured, the default device name will be - * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be - * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name - * will have no write access. - * - * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, - * the attribute table size must be increased to have room for the longer device name (see - * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). - * - * @note If vloc is @ref BLE_GATTS_VLOC_STACK : - * - p_value must point to non-volatile memory (flash) or be NULL. - * - If p_value is NULL, the device name will initially be empty. - * - * @note If vloc is @ref BLE_GATTS_VLOC_USER : - * - p_value cannot be NULL. - * - If the device name is writable, p_value must point to volatile memory (RAM). - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Invalid device name location (vloc). - * - Invalid device name security mode. - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). - * - The device name length is too long for the given Attribute Table. - * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. - */ -typedef struct -{ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ - uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ - uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -} ble_gap_cfg_device_name_t; - - -/**@brief Configuration structure for GAP configurations. */ -typedef union -{ - ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ - ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ -} ble_gap_cfg_t; - - -/**@brief Channel Map option. - * - * @details Used with @ref sd_ble_opt_get to get the current channel map - * or @ref sd_ble_opt_set to set a new channel map. When setting the - * channel map, it applies to all current and future connections. When getting the - * current channel map, it applies to a single connection and the connection handle - * must be supplied. - * - * @note Setting the channel map may take some time, depending on connection parameters. - * The time taken may be different for each connection and the get operation will - * return the previous channel map until the new one has taken effect. - * - * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. - * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. - * - * @retval ::NRF_SUCCESS Get or set successful. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Less then two bits in @ref ch_map are set. - * - Bits for primary advertising channels (37-39) are set. - * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. - * @retval ::NRF_ERROR_NOT_SUPPORTED Returned by @ref sd_ble_opt_set in peripheral-only SoftDevices. - * - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ - uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -} ble_gap_opt_ch_map_t; - - -/**@brief Local connection latency option. - * - * @details Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * @details Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is disabled by default, and needs to be enabled for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - -/**@brief Disable slave latency - * - * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection - * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the - * peripheral will ignore the slave_latency set by the central. - * - * @note Shall only be called on peripheral links. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ -} ble_gap_opt_slave_latency_disable_t; - -/**@brief Passkey Option. - * - * @details Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication - * instead of generating a random one. - * - * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Authenticated payload timeout option. - * - * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other - * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. - * - * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated - * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted - * link. - * - * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance - * to reset the timer. In addition the stack will try to prioritize running of LE ping over other - * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects - * on other activities, it is recommended to use high timeout values. - * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ -} ble_gap_opt_auth_payload_timeout_t; - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ - ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ - ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ - ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set the local Bluetooth identity address. - * - * The local Bluetooth identity address is the address that identifies this device to other peers. - * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @note The identity address cannot be changed while advertising. - * - * @note This address will be distributed to the peer during bonding. - * If the address changes, the address stored in the peer device will not be valid and the ability to - * reconnect using the old address will be lost. - * - * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being - * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged - * for the lifetime of each IC. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in] p_addr Pointer to address structure. - * - * @retval ::NRF_SUCCESS Address successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising. - */ -SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); - - -/**@brief Get local Bluetooth identity address. - * - * @note This will always return the identity address irrespective of the privacy settings, - * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @param[out] p_addr Pointer to address structure to be filled in. - * - * @retval ::NRF_SUCCESS Address successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); - - -/**@brief Set the active whitelist in the SoftDevice. - * - * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. - * The whitelist cannot be set if a BLE role is using the whitelist. - * - * @note If an address is resolved using the information in the device identity list, then the whitelist - * filter policy applies to the peer identity address and not the resolvable address sent on air. - * - * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. - * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. - * - * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. - * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when - * pp_wl_addrs is not NULL. - */ -SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); - - -/**@brief Set device identity list. - * - * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. - * The device identity list cannot be set if a BLE role is using the list. - * - * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. - * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. - * To fill in the list with the currently set device IRK for all peers, set to NULL. - * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. - * This code may be returned if the local IRK list also has an invalid entry. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can - * only return when pp_id_keys is not NULL. - */ -SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); - - -/**@brief Set privacy settings. - * - * @note Privacy settings cannot be changed while advertising. - * - * @param[in] p_privacy_params Privacy settings. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. - * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising. - */ -SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); - - -/**@brief Get privacy settings. - * - * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. - * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. - * - * @param[in,out] p_privacy_params Privacy settings. - * - * @retval ::NRF_SUCCESS Privacy settings read. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - */ -SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); - - -/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. - * - * @note The format of the advertising data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertising data and scan response data. - * - * @note In order to update advertising data while advertising, new advertising buffers must be provided. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure - * a new advertising set. On success, a new handle is then returned through the pointer. - * Provide a pointer to an existing advertising handle to configure an existing advertising set. - * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. - * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, - * this parameter must be NULL. See @ref ble_gap_adv_params_t. - * - * @retval ::NRF_SUCCESS Advertising set successfully configured. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, - * see @ref sd_ble_gap_whitelist_set. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * - It is invalid to provide non-NULL advertising set parameters while advertising. - * - It is invalid to provide the same data buffers while advertising. To update - * advertising data, provide new advertising buffers. - * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to - * configure a new advertising handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification - * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an - * existing advertising handle instead. - * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - */ -SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @note Only one advertiser may be active at any time. - * - * @events - * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} - * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} - * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @endmscs - * - * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable - * advertising, this is ignored. - * - * @retval ::NRF_SUCCESS The BLE stack has started advertising. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. adv_handle is not configured or already advertising. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * @retval ::NRF_ERROR_RESOURCES Either: - * - adv_handle is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * - Not enough BLE role slots available. - * Stop one or more currently active roles (Peripheral or Broadcaster) and try again - * - p_adv_params is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in] adv_handle The advertising handle that should stop advertising. - * - * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. - * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); - - - -/**@brief Update connection parameters. - * - * @details In the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. Regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CPU_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * - * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a @ref BLE_GAP_EVT_DISCONNECTED event. - * - * @events - * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CONN_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). - * - * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for - * possible roles. - * @param[in] handle The handle parameter is interpreted depending on role: - * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. - * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, - * will use the specified transmit power, and include it in the advertising packet headers if - * @ref ble_gap_adv_properties_t::include_tx_power set. - * - For all other roles handle is ignored. - * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). - * - * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +3dBm and +4dBm. - * @note The initiator will have the same transmit power as the scanner. - * @note When a connection is created it will inherit the transmit power from the initiator or - * advertiser leading to the connection. - * - * @retval ::NRF_SUCCESS Successfully changed the transmit power. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); - - -/**@brief Set GAP device name. - * - * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), - * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. - * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @retval ::NRF_SUCCESS GAP device name retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); - - -/**@brief Initiate the GAP Authentication procedure. - * - * @details In the peripheral role, this function will send an SMP Security Request. - * - * @events - * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} - * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} - * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} - * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} - * @event{@ref BLE_GAP_EVT_KEY_PRESSED} - * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} - * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} - * @event{@ref BLE_GAP_EVT_AUTH_STATUS} - * @event{@ref BLE_GAP_EVT_TIMEOUT} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. - * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. - * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure - * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application - * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. - * Note that the SoftDevice expects the application to provide memory for storing the - * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key - * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the - * @ref BLE_GAP_EVT_AUTH_STATUS event. - * - * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); - - -/**@brief Reply with an authentication key. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) - * or NULL when confirming LE Secure Connections Numeric Comparison. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. - * - * @retval ::NRF_SUCCESS Authentication key successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); - - -/**@brief Reply with an LE Secure connections DHKey. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dhkey LE Secure Connections DHKey. - * - * @retval ::NRF_SUCCESS DHKey successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); - - -/**@brief Notify the peer of a local keypress. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. - * - * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. - */ -SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); - - -/**@brief Generate a set of OOB data to send to a peer out of band. - * - * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, - * the one used during connection setup). The application may manually overwrite it with an updated value. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. - * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. - * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. - * - * @retval ::NRF_SUCCESS OOB data successfully generated. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); - -/**@brief Provide the OOB data sent/received out of band. - * - * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. - * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. - * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. - * Must correspond to @ref sd_ble_gap_sec_params_reply in the peripheral role. - * - * @retval ::NRF_SUCCESS OOB data accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); - - -/**@brief Reply with GAP security information. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @retval ::NRF_SUCCESS Successfully accepted security information. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Current connection security successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @events - * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is - * dependent on the settings of the threshold_dbm - * and skip_count input parameters.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. - * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. - * - * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); - - -/**@brief Stop reporting the received signal strength. - * - * @note An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * - * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); - - -/**@brief Get the received signal strength for the last connection event. - * - * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND - * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. - * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. - * - * @retval ::NRF_SUCCESS Successfully read the RSSI. - * @retval ::NRF_ERROR_NOT_FOUND No sample is available. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - */ -SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); - - -/**@brief Initiate or respond to a PHY Update Procedure - * - * @details This function is used to initiate or respond to a PHY Update Procedure. It will always - * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. - * If this function is used to initiate a PHY Update procedure and the only option - * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the - * currently active PHYs in the respective directions, the SoftDevice will generate a - * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the - * procedure in the Link Layer. - * - * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, - * then the stack will select PHYs based on the peer's PHY preferences and the local link - * configuration. The PHY Update procedure will for this case result in a PHY combination - * that respects the time constraints configured with @ref sd_ble_cfg_set and the current - * link layer data length. - * - * If the peer does not support the PHY Update Procedure, then the resulting - * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to - * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. - * - * If the PHY procedure was rejected by the peer due to a procedure collision, the status - * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or - * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. - * If the peer responds to the PHY Update procedure with invalid parameters, the status - * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. - * If the PHY procedure was rejected by the peer for a different reason, the status will - * contain the reason as specified by the peer. - * - * @events - * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} - * @endmscs - * - * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. - * @param[in] p_gap_phys Pointer to PHY structure. - * - * @retval ::NRF_SUCCESS Successfully requested a PHY Update. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. - * - */ -SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); - - - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatt.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatt.h deleted file mode 100644 index 98a7a150bf..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatt.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default ATT MTU, in bytes. */ -#define BLE_GATT_ATT_MTU_DEFAULT 23 - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/**@brief First Attribute Handle. */ -#define BLE_GATT_HANDLE_START 0x0001 - -/**@brief Last Attribute Handle. */ -#define BLE_GATT_HANDLE_END 0xFFFF - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. - */ -typedef struct -{ - uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. - The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - @mscs - @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - @endmscs - */ -} ble_gatt_conn_cfg_t; - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ - uint8_t read :1; /**< Reading the value permitted. */ - uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ - uint8_t write :1; /**< Writing the value with Write Request permitted. */ - uint8_t notify :1; /**< Notification of the value permitted. */ - uint8_t indicate :1; /**< Indications of the value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -} ble_gatt_char_ext_props_t; - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATT_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gattc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gattc.h deleted file mode 100644 index 7fb3920244..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gattc.h +++ /dev/null @@ -1,715 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ - SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -}; - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ - BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ - BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ - BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ - BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -/** @} */ - -/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats - * @{ */ -#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -/** @} */ - -/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults - * @{ */ -#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. - The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ -} ble_gattc_conn_cfg_t; - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t const *p_value; /**< Pointer to the value data. */ -} ble_gattc_write_params_t; - -/**@brief Attribute Information for 16-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -} ble_gattc_attr_info16_t; - -/**@brief Attribute Information for 128-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -} ble_gattc_attr_info128_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Attribute count. */ - uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ - union { - ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - } info; /**< Attribute information union. */ -} ble_gattc_evt_attr_info_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -typedef struct -{ - uint16_t server_rx_mtu; /**< Server RX MTU size. */ -} ble_gattc_evt_exchange_mtu_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of write without response transmissions completed. */ -} ble_gattc_evt_write_cmd_tx_complete_t; - -/**@brief GATTC event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ - ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. - * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @events - * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @events - * @event{@ref BLE_GATTC_EVT_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note Only one write with response procedure can be ongoing per connection at a time. - * If the application tries to write with response while another write with response procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. - * - * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. - * - * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} - * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @retval ::NRF_SUCCESS Successfully started the Write procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. - * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. - * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @mscs - * @mmsc{@ref BLE_GATTC_HVI_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/**@brief Discovers information about a range of attributes on a GATT server. - * - * @events - * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} - * @endevents - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range The range of handles to request information about. - * - * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); - -/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value, and - * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @events - * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] client_rx_mtu Client RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - used for this connection. - * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent request to the server. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); - -/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * - * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * @note If the buffer contains different event, behavior is undefined. - * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with - * the next Handle-Value pair in each iteration. If the function returns other than - * @ref NRF_SUCCESS, it will not be changed. - * - To start iteration, initialize the structure to zero. - * - To continue, pass the value from previous iteration. - * - * \code - * ble_gattc_handle_value_t iter; - * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); - * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) - * { - * app_handle = iter.handle; - * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); - * } - * \endcode - * - * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. - * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. - */ -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); - -/** @} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -{ - uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; - uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; - uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; - - if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) - { - p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; - p_iter->p_value = p_next + sizeof(uint16_t); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_NOT_FOUND; - } -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif -#endif /* BLE_GATTC_H__ */ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatts.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatts.h deleted file mode 100644 index e437b6e076..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_gatts.h +++ /dev/null @@ -1,845 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" -#include "ble_gap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ - SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ - SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ - SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -}; - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ - BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ - BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ - BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ -}; - -/**@brief GATTS Configuration IDs. - * - * IDs that uniquely identify a GATTS configuration. - */ -enum BLE_GATTS_CFGS -{ - BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ - BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - -/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags - * @{ */ -#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -/** @} */ - -/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values - * @{ - */ -#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size - * @{ - */ -#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ -#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ -/** @} */ - -/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults - * @{ - */ -#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. - The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ -} ble_gatts_conn_cfg_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -} ble_gatts_attr_t; - -/**@brief GATT Attribute Value. */ -typedef struct -{ - uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ - uint16_t offset; /**< Attribute value offset. */ - uint8_t *p_value; /**< Pointer to where value is stored or will be stored. - If value is stored in user memory, only the attribute length is updated when p_value == NULL. - Set to NULL when reading to obtain the complete length of the attribute value */ -} ble_gatts_value_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ - ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ - uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. - Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, - as the data to be written needs to be stored and later provided by the application. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ - } params; /**< Reply Parameters. */ -} ble_gatts_rw_authorize_reply_params_t; - -/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ -typedef struct -{ - uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ -} ble_gatts_cfg_service_changed_t; - -/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The specified Attribute Table size is too small. - * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. - * - The specified Attribute Table size is not a multiple of 4. - */ -typedef struct -{ - uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ -} ble_gatts_cfg_attr_tab_size_t; - -/**@brief Config structure for GATTS configurations. */ -typedef union -{ - ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ - ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ -} ble_gatts_cfg_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the received data. */ - uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gatts_evt_write_t; - -/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; /**< Request Parameters. */ -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; /**< Hint (currently unused). */ -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -typedef struct -{ - uint16_t client_rx_mtu; /**< Client RX MTU size. */ -} ble_gatts_evt_exchange_mtu_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of notification transmissions completed. */ -} ble_gatts_evt_hvn_tx_complete_t; - -/**@brief GATTS event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the Attribute Table. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the Attribute Table. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a service declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); - - -/**@brief Add an include declaration to the Attribute Table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). - * - * @note The included service must already be present in the Attribute Table prior to this call. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added an include declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, - * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a characteristic. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); - - -/**@brief Add a descriptor to the Attribute Table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a descriptor. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); - -/**@brief Set the value of a given attribute. - * - * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully set the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Get the value of a given attribute. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. - * The application may use this information to allocate a suitable buffer size. - * - * @note When retrieving system attribute values with this function, the connection handle - * may refer to an already disconnected connection. Refer to the documentation of - * @ref sd_ble_gatts_sys_attr_get for further information. - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, - * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. - * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). - * - * @note Only one indication procedure can be ongoing per connection at a time. - * If the application tries to indicate an attribute value while another indication procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. - * - * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. - * - * @note The application can keep track of the available queue element count for notifications by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} - * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_HVN_MSC} - * @mmsc{@ref BLE_GATTS_HVI_MSC} - * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data - * contains a non-NULL pointer the attribute value will be updated with the contents - * pointed by it before sending the notification or indication. If the attribute value - * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to - * contain the number of actual bytes written, else it will be set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. - * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute - * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @events - * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_SC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref - * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @retval ::NRF_ERROR_BUSY Procedure already in progress. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond - * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update - * is set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, - * handle supplied does not match requested handle, - * or invalid data to be written provided by the application. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply information about persistent system attributes to the stack, - * previously obtained using @ref sd_ble_gatts_sys_attr_get. - * This call is only allowed for active connections, and is usually - * made immediately after a connection is established with an known bonded device, - * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the system attributes - * obtained using @ref sd_ble_gatts_sys_attr_get. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved system attribute data for this device. - * - * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully set the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored persistently by the application - * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, - * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. - * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for - * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. - * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes - * may be written to at any time by the peer during a connection's lifetime. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. - * - * @mscs - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described - * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); - - -/**@brief Retrieve the first valid user attribute handle. - * - * @param[out] p_handle Pointer to an integer where the handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully retrieved the handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); - -/**@brief Retrieve the attribute UUID and/or metadata. - * - * @param[in] handle Attribute handle - * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. - * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. - * - * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. - * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. - */ -SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); - -/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. - * - * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and - * - The Server RX MTU value. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @mscs - * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] server_rx_mtu Server RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - * used for this connection. - * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent response to the client. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATTS_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_hci.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_hci.h deleted file mode 100644 index f0dde9a03a..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_hci.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -*/ -#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ -/* -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ - -/** @} */ - - -#ifdef __cplusplus -} -#endif -#endif // BLE_HCI_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_ranges.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_ranges.h deleted file mode 100644 index 493dd43eb5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_ranges.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC, event and option number subranges - @{ - - @brief Definition of SVC, event and option number subranges for each API module. - - @note - SVCs, event and option numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC, event and option values are defined in each module's ble_.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ - -#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ - -#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ -#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ - -#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ -#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ - - - -#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ - -#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ - -#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ - -#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ - -#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ - - - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ - -#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ -#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ - -#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ - -#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ - - - -#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ - -#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ -#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ - -#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ -#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ - -#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ -#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ - -#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ -#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ - -#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ -#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ - -#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ -#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ - - - - - - -#ifdef __cplusplus -} -#endif -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_types.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_types.h deleted file mode 100644 index 88c93180c8..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/ble_types.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the BLE SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_TYPES_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/**@brief Data structure. */ -typedef struct -{ - uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ - uint16_t len; /**< Length of the data buffer, in bytes. */ -} ble_data_t; - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf52/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf52/nrf_mbr.h deleted file mode 100644 index cc5971c7a3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf52/nrf_mbr.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_ble.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_ble.h deleted file mode 100644 index ad6b58f42f..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_ble.h +++ /dev/null @@ -1,617 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the BLE SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_err.h" -#include "ble_gap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ - SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ -}; - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ - BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -}; - -/**@brief BLE Connection Configuration IDs. - * - * IDs that uniquely identify a connection configuration. - */ -enum BLE_CONN_CFGS -{ - BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ - BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ - BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ - BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ -}; - -/**@brief BLE Common Configuration IDs. - * - * IDs that uniquely identify a common configuration. - */ -enum BLE_COMMON_CFGS -{ - BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ -}; - -/**@brief Common Option IDs. - * IDs that uniquely identify a common option. - */ -enum BLE_COMMON_OPTS -{ - BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ - BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVT_PTR_ALIGNMENT 4 - -/** @brief Leaves the maximum of the two arguments. -*/ -#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) - -/** @brief Maximum possible length for BLE Events. - * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. - * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. -*/ -#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ - offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -) - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts - * @{ - */ -#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ -#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ -/** @} */ - -/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. - * @{ - */ -#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ - -/** @} */ - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union - { - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; /**< Event parameter union. */ -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE__EVT series. */ - uint16_t evt_len; /**< Length in octets including this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - } evt; /**< Event union. */ -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/** - * @brief Configuration parameters for the PA and LNA. - */ -typedef struct -{ - uint8_t enable :1; /**< Enable toggling for this amplifier */ - uint8_t active_high :1; /**< Set the pin to be active high */ - uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -} ble_pa_lna_cfg_t; - -/** - * @brief PA & LNA GPIO toggle configuration - * - * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or - * a low noise amplifier. - * - * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided - * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences - * and must be avoided by the application. - */ -typedef struct -{ - ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ - ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ - - uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ - uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ - uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -} ble_common_opt_pa_lna_t; - -/** - * @brief Configuration of extended BLE connection events. - * - * When enabled the SoftDevice will dynamically extend the connection event when possible. - * - * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. - * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, - * and if there are no conflicts with other BLE roles requesting radio time. - * - * @note @ref sd_ble_opt_get is not supported for this option. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -} ble_common_opt_conn_evt_ext_t; - -/**@brief Option structure for common options. */ -typedef union -{ - ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ - ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -} ble_common_opt_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ - ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -} ble_opt_t; - -/**@brief BLE connection configuration type, wrapping the module specific configurations, set with - * @ref sd_ble_cfg_set. - * - * @note Connection configurations don't have to be set. - * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, - * the default connection configuration will be automatically added for the remaining connections. - * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in - * place of @ref ble_conn_cfg_t::conn_cfg_tag. - * - * @sa sd_ble_gap_adv_start() - * - * @mscs - * @mmsc{@ref BLE_CONN_CFG} - * @endmscs - - */ -typedef struct -{ - uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the - @ref sd_ble_gap_adv_start() call - to select this configuration when creating a connection. - Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ - union { - ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ - ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ - ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ - ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ - } params; /**< Connection configuration union. */ -} ble_conn_cfg_t; - -/** - * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. - */ -typedef struct -{ - uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. - Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is - @ref BLE_UUID_VS_COUNT_MAX. */ -} ble_common_cfg_vs_uuid_t; - -/**@brief Common BLE Configuration type, wrapping the common configurations. */ -typedef union -{ - ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ -} ble_common_cfg_t; - -/**@brief BLE Configuration type, wrapping the module specific configurations. */ -typedef union -{ - ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ - ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ - ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ - ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ -} ble_cfg_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the BLE stack - * - * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the - * application RAM region (APP_RAM_BASE). On return, this will - * contain the minimum start address of the application RAM region - * required by the SoftDevice for this configuration. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note The value of *p_app_ram_base when the app has done no custom configuration of the - * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can - * be found in the release notes. - * - * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located - * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between - * APP_RAM_BASE and the start of the call stack. - * - * @details This call initializes the BLE stack, no BLE related function other than @ref - * sd_ble_cfg_set can be called before this one. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not - * large enough to fit this configuration's memory requirement. Check *p_app_ram_base - * and set the start address of the application RAM region accordingly. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); - -/**@brief Add configurations for the BLE stack - * - * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref - * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. - * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. - * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). - * See @ref sd_ble_enable for details about APP_RAM_BASE. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note If a configuration is set more than once, the last one set is the one that takes effect on - * @ref sd_ble_enable. - * - * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default - * configuration. - * - * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref - * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref - * sd_ble_enable). - * - * @note Error codes for the configurations are described in the configuration structs. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The configuration has been added successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not - * large enough to fit this configuration's memory requirement. - */ -SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); - -/**@brief Get an event from the pending events queue. - * - * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. - * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. - * The buffer should be interpreted as a @ref ble_evt_t struct. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that - * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. - * The application is free to choose whether to call this function from thread mode (main context) or directly from the - * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher - * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) - * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so - * could potentially leave events in the internal queue without the application being aware of this fact. - * - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to - * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, - * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. - * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length - * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: - * - * \code - * uint16_t len; - * errcode = sd_ble_evt_get(NULL, &len); - * \endcode - * - * @mscs - * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} - * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); - - -/**@brief Add a Vendor Specific base UUID. - * - * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later - * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t - * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code - * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses - * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to - * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field - * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to - * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in - * p_uuid_type along with an @ref NRF_SUCCESS error code. - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @retval ::NRF_SUCCESS Successfully encoded into the buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[out] p_version Pointer to a ble_version_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Version information stored successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @endmscs - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ -#ifdef __cplusplus -} -#endif -#endif /* BLE_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error.h deleted file mode 100644 index 6badee98e5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_sdm.h deleted file mode 100644 index 530959b9d6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_sdm.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_soc.h deleted file mode 100644 index 1e784b8db3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_error_soc.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_nvic.h deleted file mode 100644 index f5c7e8e028..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_nvic.h +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_nvic_api SoftDevice NVIC API - * @{ - * - * @note In order to use this module, the following code has to be added to a .c file: - * \code - * nrf_nvic_state_t nrf_nvic_state = {0}; - * \endcode - * - * @note Definitions and declarations starting with __ (double underscore) in this header file are - * not intended for direct use by the application. - * - * @brief APIs for the accessing NVIC when using a SoftDevice. - * - */ - -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_NVIC_DEFINES Defines - * @{ */ - -/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions - * @{ */ - -#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ - -#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ -#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ - (1U << POWER_CLOCK_IRQn) \ - | (1U << RADIO_IRQn) \ - | (1U << RTC0_IRQn) \ - | (1U << TIMER0_IRQn) \ - | (1U << RNG_IRQn) \ - | (1U << ECB_IRQn) \ - | (1U << CCM_AAR_IRQn) \ - | (1U << TEMP_IRQn) \ - | (1U << __NRF_NVIC_NVMC_IRQn) \ - | (1U << (uint32_t)SWI5_IRQn) \ - )) - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ -#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) - -/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ -#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) - -/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ -#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) - -/**@} */ - -/**@} */ - -/**@addtogroup NRF_NVIC_VARIABLES Variables - * @{ */ - -/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -typedef struct -{ - uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ - uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -} nrf_nvic_state_t; - -/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an - * application source file. */ -extern nrf_nvic_state_t nrf_nvic_state; - -/**@} */ - -/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions - * @{ */ - -/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. - * - * @retval The value of PRIMASK prior to disabling the interrupts. - */ -__STATIC_INLINE int __sd_nvic_irq_disable(void); - -/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. - */ -__STATIC_INLINE void __sd_nvic_irq_enable(void); - -/**@brief Checks if IRQn is available to application - * @param[in] IRQn IRQ to check - * - * @retval 1 (true) if the IRQ to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); - -/**@brief Checks if priority is available to application - * @param[in] priority priority to check - * - * @retval 1 (true) if the priority to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); - -/**@} */ - -/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions - * @{ */ - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * @pre Priority is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); - -/**@brief Enter critical region. - * - * @post Application interrupts will be disabled. - * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each - * execution context - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - -/**@} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE int __sd_nvic_irq_disable(void) -{ - int pm = __get_PRIMASK(); - __disable_irq(); - return pm; -} - -__STATIC_INLINE void __sd_nvic_irq_enable(void) -{ - __enable_irq(); -} - -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -{ - if (IRQn < 32) - { - return ((1UL<= (1 << __NVIC_PRIO_BITS)) - { - return 0; - } - if( priority == 0 - || priority == 1 - || priority == 4 - ) - { - return 0; - } - return 1; -} - - -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); - } - else - { - NVIC_EnableIRQ(IRQn); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); - } - else - { - NVIC_DisableIRQ(IRQn); - } - - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (!__sd_nvic_is_app_accessible_priority(priority)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - NVIC_SetPriority(IRQn, (uint32_t)priority); - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - int was_masked = __sd_nvic_irq_disable(); - if (!nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__cr_flag = 1; - nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); - NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; - nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); - NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; - *p_is_nested_critical_region = 0; - } - else - { - *p_is_nested_critical_region = 1; - } - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) - { - int was_masked = __sd_nvic_irq_disable(); - NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; - NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; - nrf_nvic_state.__cr_flag = 0; - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - } - - return NRF_SUCCESS; -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif - -#endif // NRF_NVIC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sd_def.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sd_def.h deleted file mode 100644 index c9ab241872..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sd_def.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SD_DEF_H__ -#define NRF_SD_DEF_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SD_DEF_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sdm.h deleted file mode 100644 index 8c48d93678..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_sdm.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_sdm.h" -#include "nrf_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ -#ifdef NRFSOC_DOXYGEN -/// Declared in nrf_mbr.h -#define MBR_SIZE 0 -#warning test -#endif - -/** @brief The major version for the SoftDevice binary distributed with this header file. */ -#define SD_MAJOR_VERSION (6) - -/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -#define SD_MINOR_VERSION (0) - -/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -#define SD_BUGFIX_VERSION (0) - -/** @brief The full version number for the SoftDevice binary this header file was distributed - * with, as a decimal number in the form Mmmmbbb, where: - * - M is major version (one or more digits) - * - mmm is minor version (three digits) - * - bbb is bugfix version (three digits). */ -#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) - -/** @brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE 0x10 - -/** @brief SoftDevice unique string size in bytes. */ -#define SD_UNIQUE_STR_SIZE 20 - -/** @brief Invalid info field. Returned when an info field does not exist. */ -#define SDM_INFO_FIELD_INVALID (0) - -/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -the start of the SoftDevice (without MBR)*/ -#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) - -/** @brief Defines the absolute SoftDevice Information Structure location (address) when the - * SoftDevice is installed just above the MBR (the usual case). */ -#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) - -/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the - * SoftDevice base address. The size value is of type uint8_t. */ -#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) - -/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. - * The size value is of type uint32_t. */ -#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) - -/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value - * is of type uint16_t. */ -#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) - -/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID - * is of type uint32_t. */ -#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) - -/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in - * the same format as @ref SD_VERSION, stored as an uint32_t. */ -#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) - -/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. - * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. - */ -#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) - -/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value - * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is - * installed just above the MBR (the usual case). */ -#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base - * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above - * the MBR (the usual case). */ -#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual - * case). */ -#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the - * usual case). */ -#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges - * @{ */ -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -/**@} */ - -/**@defgroup NRF_FAULT_IDS Fault ID types - * @{ */ -#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ -#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, - in case of SoftDevice RAM access violation. In case of SoftDevice peripheral - register violation the info parameter will contain the sub-region number of - PREGION[0], on whose address range the disallowed write access caused the - memory access fault. */ -/**@} */ - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy - * @{ */ - -#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ -#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ -#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ -#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ -#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ -#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ -#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ -#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ -#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ -#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ -#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ - -/** @} */ - -/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources - * @{ */ - -#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ - -/** @} */ - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing LFCLK oscillator source. */ -typedef struct -{ - uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ - uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second - units (nRF52: 1-32). - @note To avoid excessive clock drift, 0.5 degrees Celsius is the - maximum temperature change allowed in one calibration timer - interval. The interval should be selected to ensure this. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ - uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration - intervals) the RC oscillator shall be calibrated if the temperature - hasn't changed. - 0: Always calibrate even if the temperature hasn't changed. - 1: Only calibrate if the temperature has changed (legacy - nRF51 only). - 2-33: Check the temperature and only calibrate if it has changed, - however calibration will take place every rc_temp_ctiv - intervals in any case. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. - - @note For nRF52, the application must ensure calibration at least once - every 8 seconds to ensure +/-500 ppm clock stability. The - recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is - rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at - least once every 8 seconds and for temperature changes of 0.5 - degrees Celsius every 4 seconds. See the Product Specification - for the nRF52 device being used for more information.*/ - uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing - windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ -} nrf_clock_lf_cfg_t; - -/**@brief Fault Handler type. - * - * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. - * - * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. - * @param[in] pc The program counter of the instruction that triggered the fault. - * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. - * - * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when - * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. - */ -typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available. - * - A portion of RAM will be unavailable (see relevant SDS documentation). - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). - * - Interrupts will not arrive from protected peripherals or interrupts. - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). - * - Chosen low frequency clock source will be running. - * - * @param p_clock_lf_cfg Low frequency clock source and accuracy. - If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 - In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. - * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); - - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_soc.h deleted file mode 100644 index 2c4d958750..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_soc.h +++ /dev/null @@ -1,964 +0,0 @@ -/* - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * - */ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ - -/**@brief Guaranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -/**@brief The maximum processing time to handle a timeslot extension. */ -#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) - -/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ -#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. - The default interrupt priority for this handler is set to 4 */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. - The default interrupt priority for this handler is set to 4 */ -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/**@} */ - -/**@addtogroup NRF_SOC_ENUMS Enumerations - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, - SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, - SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, - SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, - SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, - SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, - SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, - SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, - SD_FLASH_WRITE = SOC_SVC_BASE + 9, - SD_FLASH_PROTECT = SOC_SVC_BASE + 10, - SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, - SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, - SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, - SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, - SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, - SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, - SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, - SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, - SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, - SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, - SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, - SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, - SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, - SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, - SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, - SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, - SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, - SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, - SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, - SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, - SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, - SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, - SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, - SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, - SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, - SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, - SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, - SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, - SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, - SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, - SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Power modes. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Power failure thresholds */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ -}; - - - -/**@brief DC/DC converter modes. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ - NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -}; - -/**@brief Radio notification distances. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Radio notification types. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/**@brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current - timeslot. Maximum execution time for this action: - @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. - This action must be started at least - @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before - the end of the timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the - external crystal for the whole duration of the timeslot. This should be the - preferred option for events that use the radio or require high timing accuracy. - @note The SoftDevice will automatically turn on and off the external crystal, - at the beginning and end of the timeslot, respectively. The crystal may also - intentionally be left running after the timeslot, in cases where it is needed - by the SoftDevice shortly after the end of the timeslot. */ - NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. - The RC oscillator may be the clock source in part or for the whole duration of the timeslot. - The RC oscillator's accuracy must therefore be taken into consideration. - @note If the application will use the radio peripheral in timeslots with this configuration, - it must make sure that the crystal is running and stable before starting the radio. */ -}; - -/**@brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ -}; - -/**@brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/**@} */ - - -/**@addtogroup NRF_SOC_STRUCTURES Structures - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/**@brief Parameters for a normal radio timeslot request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/**@brief Radio timeslot request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ - } params; /**< Parameter union. */ -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; /**< Parameter union. */ -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio timeslot signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB parameter typedefs */ -typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ - -/**@brief AES ECB data structure */ -typedef struct -{ - soc_ecb_key_t key; /**< Encryption key. */ - soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ - soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -} nrf_ecb_hal_data_t; - -/**@brief AES ECB block. Used to provide multiple blocks in a single call - to @ref sd_ecb_blocks_encrypt.*/ -typedef struct -{ - soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ - soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ - soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ -} nrf_ecb_hal_data_block_t; - -/**@} */ - -/**@addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - - -/**@brief Sets the power failure comparator threshold value. - * - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); - - -/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. - * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. - * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); - -/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. - * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); - -/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); - -/**@brief Enable or disable the DC/DC regulator. - * - * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); - - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the interrupt - * is disabled. - * - * When the application waits for an application event by calling this function, an interrupt that - * is enabled will be taken immediately on pending since this function will wait in thread mode, - * then the execution will return in the application's main thread. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M - * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets - * pended, this function will return to the application's main thread. - * - * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ - * in order to sleep using this function. This is only necessary for disabled interrupts, as - * the interrupt handler will clear the pending flag automatically for enabled interrupts. - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - To ensure that the radio notification signal behaves in a consistent way, the radio - * notifications must be configured when there is no protocol stack or other SoftDevice - * activity in progress. It is recommended that the radio notification signal is - * configured directly after the SoftDevice has been enabled. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all - * running activities and retry. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Encrypts multiple data blocks provided as an array of data block structures. - * - * @details: Performs 128-bit AES encryption on multiple data blocks - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in] block_count Count of blocks in the p_data_blocks array. - * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of - * @ref nrf_ecb_hal_data_block_t structures. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50 us from call to return. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write -* -* Commands to write a buffer to flash -* -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the - * write has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is -* protected. -* -* -* @param[in] p_dst Pointer to start of flash location to be written. -* @param[in] p_src Pointer to buffer with data to be written. -* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one -* flash page. See the device's Product Specification for details. -* -* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); - - -/**@brief Flash Erase page -* -* Commands to erase a flash page -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -* erase has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is -* protected. -* -* -* @param[in] page_number Page number of the page to erase -* -* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection configuration registers. - This sets the CONFIGx registers of the BPROT peripheral. - * - * @note Not all parameters are valid for all products. Some bits in each parameter may not be - * valid for your product. Please refer your Product Specification for more details. - * - * @note To read the values read them directly. They are only write-protected. - * - * @note It is possible to use @ref sd_protected_register_write instead of this function. - * - * @param[in] block_cfg0 Value to be written to the configuration register. - * @param[in] block_cfg1 Value to be written to the configuration register. - * @param[in] block_cfg2 Value to be written to the configuration register. - * @param[in] block_cfg3 Value to be written to the configuration register. - * - * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. - * @retval ::NRF_SUCCESS Values successfully written to configuration registers. - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); - -/**@brief Opens a session for radio timeslot requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio timeslot requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - -/**@brief Requests a radio timeslot. - * - * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST - * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. - * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by - * p_request->distance_us and is given relative to the start of the previous timeslot. - * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this - * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); - -/**@brief Write register protected by the SoftDevice - * - * This function writes to a register that is write-protected by the SoftDevice. Please refer to your - * SoftDevice Specification for more details about which registers that are protected by SoftDevice. - * This function can write to the following protected peripheral: - * - BPROT - * - * @note Protected registers may be read directly. - * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in - * the register has not changed. See the Product Specification for more details about register - * properties. - * - * @param[in] p_register Pointer to register to be written. - * @param[in] value Value to be written to the register. - * - * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. - * @retval ::NRF_SUCCESS Value successfully written to register. - * - */ -SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); - -/**@} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SOC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_softdevice.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_softdevice.hex deleted file mode 100644 index 07d4432d80..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S112/hex/s112_nrf52_6.0.0_softdevice.hex +++ /dev/null @@ -1,6143 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:10100000900D0020A9800100AD2E00001B80010082 -:10101000AD2E0000AD2E0000AD2E0000000000003F -:10102000000000000000000000000000018101003D -:10103000AD2E000000000000AD2E0000AD2E00001F -:10104000698101006F810100AD2E0000AD2E00000E -:10105000AD2E0000AD2E0000AD2E0000AD2E000024 -:1010600075810100AD2E0000AD2E00007B810100D6 -:10107000AD2E000081810100878101008D8101007A -:10108000AD2E0000AD2E0000AD2E0000AD2E0000F4 -:10109000AD2E0000AD2E0000AD2E0000AD2E0000E4 -:1010A000AD2E000093810100AD2E0000AD2E00009A -:1010B000AD2E0000AD2E0000AD2E0000AD2E0000C4 -:1010C00099810100AD2E0000AD2E0000AD2E000074 -:1010D000AD2E0000AD2E0000AD2E0000AD2E0000A4 -:1010E000AD2E0000AD2E0000AD2E0000AD2E000094 -:1010F000AD2E0000AD2E0000AD2E0000AD2E000084 -:10110000AD2E0000AD2E000000F002F816F0B9FF81 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D116F0AEFFAFF2090EBAE80F0013F0CE -:10113000010F18BFFB1A43F001031847B8740100F0 -:10114000D87401000A4410F8014B14F00F0508BFD1 -:1011500010F8015B240908BF10F8014B6D1E05D083 -:1011600010F8013B6D1E01F8013BF9D1641E03D05C -:10117000641E01F8015BFBD19142E4D3704700008B -:101180000023002400250026103A28BF78C1FBD890 -:10119000520728BF30C148BF0B6070471FB500F031 -:1011A00031F88DE80F001FBD8269034981614FF05E -:1011B0000100104470470000BD11000001B41EB4CE -:1011C00000B501F0FBFE01B40198864601BC01B0F8 -:1011D0001EBD0000F0B44046494652465B460FB47F -:1011E00002A0013001B50648004700BF01BC864699 -:1011F0000FBC8046894692469B46F0BC7047000073 -:101200000911000016F03ABF70B51B4C05460920C5 -:101210002070A01C00F061F85920A08029462046CB -:10122000BDE8704006F058BD06F061BD70B50C46D3 -:101230001249097829B1A0F160015E2908D3012083 -:1012400013E0602804D0692802D043F201000CE0CA -:1012500020CC0B4E94E80E0006EB8000A0F58050E9 -:10126000241FD0F8806E2846B047206070BD012052 -:101270007047062070470000080000201C00002076 -:10128000C881010010B504460021012000F032F8A9 -:1012900000210B2000F02EF80421192000F02AF87C -:1012A00004210D2000F026F804210E2000F022F881 -:1012B00004210F2000F01EF80421C84300F01AF8A2 -:1012C0000621162000F016F80621152000F012F86D -:1012D0002046FFF799FF002010BDA721018070472D -:1012E000FFF7A2BF002070470A487047FFF79EBF74 -:1012F000704770474907090E002806DA00F00F0012 -:1013000000F1E02080F8141D704700F1E02080F823 -:101310000014704703F9004230B5FF4D0446062C17 -:10132000A9780ED2DFE804F0030E0E0E0509FFDFE8 -:1013300008E0022906D0FFDF04E0032902D0FFDF26 -:1013400000E0FFDFAC7030BDF34810B5407E4108CF -:10135000F14800F11A0005D00AF07BFBBDE810400F -:1013600006F058BB0AF05CFBF8E730B50446A1F183 -:1013700020000D460A2847D2DFE800F005070C19C7 -:10138000202532373C41FFDF3FE0207820283CD148 -:10139000FFDF3AE0E0488078052836D0207824281E -:1013A00033D0252831D023282FD0FFDF2DE020781F -:1013B00022282AD0232828D8FFDF26E020782228D8 -:1013C00023D0FFDF21E0207822281ED024281CD043 -:1013D00026281AD0272818D0292816D0FFDF14E095 -:1013E0002078252811D0FFDF0FE0207825280CD0A9 -:1013F000FFDF0AE02078252807D0FFDF05E020780E -:10140000282802D0FFDF00E0FFDF257030BD1FB5C8 -:101410000022ADF800200C88ADF802404B88ADF8F2 -:101420000430CA88ADF808208988ADF8061000217C -:10143000ADF80A10ADF80C1080B14FF6FF70062120 -:10144000844201D1ADF80210834201D1ADF80410FD -:10145000824203D14FF44860ADF8080068460AF0B4 -:101460002DFC06F0D7FA04B010BD70B514460D4639 -:1014700006460FF00FFA60B90DB1A54201D90C2054 -:1014800070BD002409E000BF56F824000FF002FAF6 -:1014900008B1102070BD641CE4B2AC42F4D300204B -:1014A00070BD2DE9F04105461F4690460E460024CA -:1014B00000680FF03CFA10B11020BDE8F0812868F8 -:1014C0000028A88802D0B84202D84FE00028F4D003 -:1014D0000920F2E72868025DB2B1611C475C152F54 -:1014E0002DD03BDC3AD2DFE807F03912222228283F -:1014F0002A2A3131393939393939393939392200DA -:10150000025D32BB641CA4B2A142F9D833E0022AC6 -:10151000DED1A21C805C88F80000072801D24007B9 -:1015200001D40A20C9E7307840F0010015E0D0432B -:10153000C00707E0012A07D010E00620BDE710072A -:10154000A0F180500028F5D01846B6E73078820721 -:1015500001D50B20B1E740F0020030702868005D33 -:10156000084484B2A888A04202D2B1E74FF448539D -:1015700081B2A142AED800209FE710B5027854088E -:1015800009D0012243F20223012C07D0022C0DD0F6 -:10159000032C13D10FE00020087005E080790324AC -:1015A000B4EB901F0AD10A70002010BD8079B2EB15 -:1015B000901F03D1F7E780798009F4D0184610BD59 -:1015C00038B50C460546694601F089F800280DD16A -:1015D0009DF80010207861F34700207055F8010F46 -:1015E000C4F80100A888A4F80500002038BD38B56B -:1015F0001378C0B1022816D048A46D462468009420 -:101600004C7905EB9414247864F347031370032892 -:101610000ED003F0FE0010700868C2F80100888840 -:10162000A2F8050038BD23F0FE0313700228EED1A6 -:10163000D8B240F00100EEE702210BF07DBC38B5D6 -:101640000C460978222901D2082038BDADF80000E7 -:101650008DF8022068460AF038FA06F0DBF905003A -:1016600003D121212046FFF780FE284638BD1CB556 -:1016700000208DF80000CDF80100ADF805002648E7 -:1016800090F82200022801D0012000E000208DF80F -:10169000070068460AF086FA002800D0FFDF1CBD6C -:1016A0002DE9FF478CB00026BDF8347082461C46F9 -:1016B00090468DF81C60780703D560680FF0EAF853 -:1016C00068B9154D4FF0010995F8220058B195F809 -:1016D0002300022807D160680FF029F918B1102003 -:1016E00010B0BDE8F087380702D5A08980281AD845 -:1016F000780704D4B8F1000F01D0287E98B1E07DBE -:10170000C0F300108DF81B00617D072069B101292D -:101710000BD00229E4D003E0900100200302FF0176 -:101720000429DDD118E00720DAE78DF817908DF84D -:1017300019908DF8158060684F4678B107A9FFF7BA -:101740001CFF0028CCD1606850F8011FCDF80F10A5 -:101750008088ADF8130005E00620C1E7CDF80F60E2 -:10176000ADF81360E07B0028F6D1207C0028F3D18F -:10177000607C0028F0D1A07C0028EDD1E07CC00680 -:10178000EAD18DF800A0BDF83400ADF80200A068E1 -:101790000190A0680290FEA0D0E90010CDE90A10E7 -:1017A000E07C0AA901EB50101B3900788DF80C0081 -:1017B00095F8220030B195F82300022818D00328AC -:1017C00004D119E0F44800F08AFF00B1FFDF9DF872 -:1017D0001C008DF80E008DF818608DF816608DF8DD -:1017E0001A6009A968460AF0A5FA06F013F977E726 -:1017F00003208DF80D00EAE78DF80D70E7E7F0B5EE -:101800009DB000228DF868208DF858208DF860205A -:1018100005468DF86C20129213921492159219B10C -:101820000FC912AC84E80F00DB4C193CA0780528E6 -:1018300001D004280CD112986168884200D120B9E7 -:101840001498E168884203D110B108201DB0F0BDA2 -:101850001F26334618AA1AA912A8FFF722FE00284D -:10186000F4D133461BAA16A914A8FFF71AFE0028C4 -:10187000ECD19DF85800C00701D00A20E6E7A08A05 -:10188000410708D4A17D31B19DF86010890702D0CD -:1018900043F20120DAE79DF86010C90709D040073C -:1018A00007D4208818B144F25061884201D907203A -:1018B000CCE78DF8005003268DF8016001278DF8E4 -:1018C0000270BDF84C208DF8032001A8129916F083 -:1018D000D6FA68460AF08DFA06F09CF80028B5D1D1 -:1018E0008DF824508DF825608DF82670BDF85420B1 -:1018F0008DF827200AA8149916F0C1FA09A80AF051 -:101900009CFA06F087F80028A0D112AD241D95E8B6 -:101910000F0084E80F00002098E72DE9FE43040043 -:1019200000D1FFDF20789C4E20F00F00801C20F0BB -:10193000F000703020706068193E0178C91F1229CC -:1019400029D2DFE801F04BFD2809FDFD38FB2828EE -:1019500064FBFA2828FBFBF986883046FFF76CFE0B -:101960000546304609F0B1FCB8B16068807985F869 -:101970003E0021212846FFF7F8FC304603F07FFAAD -:10198000304604F0E9FB314601200EF037FFA87F16 -:1019900020F01000A877BDE8FE83207820F0F0004A -:1019A0002030207006202072668060688079607226 -:1019B00006F013FADDE785882846FFF73DFE00B9FB -:1019C000FFDF60688078012800D0FFDF60688179E0 -:1019D00003B02846BDE8F04309F0A6BD868830462E -:1019E000FFF72AFE050000D1FFDF06F0F6F9606878 -:1019F0003146C088288160680089688160684089B4 -:101A0000A88101200EF0FAFE0020A875C3E78078B7 -:101A1000022808D000B1FFDF06F0DFF96568A87979 -:101A2000AD1C10B102E0FFDFB5E7FFDFF778B5F8D6 -:101A30000290B046384605F08DFF060000D1FFDF6A -:101A40000022022148460BF06EFA040000D1FFDFAD -:101A500022212046FFF789FCA17F012060F30101CC -:101A6000A177298B2181698B6181A98BA18184F860 -:101A700022708DF8080002AA032148460BF053FAA1 -:101A800000B9FFDFB088ADF80400B0788DF806002B -:101A900001AA052148460BF046FA00B9FFDFB088DD -:101AA000ADF80000F0788DF802006A46042148463F -:101AB0000BF039FA00B9FFDF062105F1120000F042 -:101AC0002BFE08B36879800700D5FFDF6979E07DD8 -:101AD00061F34700E075D5F80600A0616889A0832E -:101AE000062105F10C0000F017FEB8B198F81910A6 -:101AF0004A08617862F347016170D8F81A10C4F897 -:101B00000210B8F81E0012E0E07D20F0FE00801CFC -:101B1000E075D5F81200A061E88AE0E7607820F06F -:101B2000FE00801C6070E868C4F80200288AE0802B -:101B30000320FFF7F1FB2EE707E012E00DE0FFE7DF -:101B40002046BDE8FE4301F020BD06F046F916F838 -:101B5000240F40F0040030701DE7BDE8FE4306F09E -:101B60003CB9B178052908D00429E4D106F035F94B -:101B70000220BDE8FE43FFF7CFBB80780028DAD013 -:101B8000F07800F093FD06F028F90320F1E700005B -:101B90000706050403020100A90100202DE9F04712 -:101BA000054600780027000991460C463E4601286C -:101BB00073D0022872D0072809D00A2824D0FFDF6A -:101BC000A9F800600CB127806680002089E5D5F86F -:101BD00004C0DFF8AC874FF0010A9CF800004FF614 -:101BE000FF7113287AD008DC07280ED00E281FD0EA -:101BF000112826D0122806D186E016280BD01728E7 -:101C000059D018286CD02146FBE012271026BCF8CA -:101C100004002146B8E01C270A26ECB3BCF80200F9 -:101C2000A080686800792072686840796072C7E7B0 -:101C30001B27092684B30320207268684088A0808F -:101C4000BEE79CF802003C28BAD010272C260CF1E5 -:101C5000020C0CB3BCF80200A080BCF81800608233 -:101C6000BCF818002082BCF81A00A082BCF81C0046 -:101C7000E0829CF8050004F108020CF10601FFF770 -:101C8000B6FC9CF8040001289AD184F80FA000202B -:101C9000207608F1040002E00AE06DE077E090E8C9 -:101CA0000E00D8F81000C4E90930C4E9071287E72C -:101CB000A9F8006089E720271126002CF8D0A18020 -:101CC000686804F10A02807820726868807A60721D -:101CD0006968C878091DFFF78AFC71E729E0FFE70A -:101CE00021270A26002CE3D0BCF80200A0806868F7 -:101CF0000079207268684079607298F8241021F0A9 -:101D0000040188F824105BE722270B26002CCFD093 -:101D1000BCF80400A08068688078207268688079C8 -:101D200000F009FD60726868C07900F004FDA072DF -:101D300046E726271C26002CBAD0A1806868C07808 -:101D4000607268688079A07208F1040090E80E0063 -:101D5000D8F81000C4E90530C4E903126868807837 -:101D60003C2803D0432804D0FFDF29E784F808A0EB -:101D700026E70220207223E7287A022801D0FFDF1D -:101D80001EE712271026688800F0B3FC18E7287AAF -:101D9000032836D0042834D0052832D0062801D0B4 -:101DA000FFDF0DE711270926002C81D0B5F802804E -:101DB0004046FFF741FC90F822A0A4F80480687A1E -:101DC0002072042140460BF0C9F8052140460BF073 -:101DD000C5F8002140460BF0C1F8012140460BF048 -:101DE000BDF8032140460BF0B9F8022140460BF044 -:101DF000B5F8062140460BF0B1F8504600F056FC0D -:101E0000DEE62846BDE8F04701F0F6BC70B50128D3 -:101E100001D0FFDF70BD8DB22846FFF70DFC040036 -:101E200000D1FFDF20782128F4D005F0D3FF80B166 -:101E3000017821F00F01891C21F0F00110310170AF -:101E40000221017245800020A075BDE8704005F0B8 -:101E5000C4BF21462846BDE870401322FFF7EFBB00 -:101E60002DE9F04116460C00804600D1FFDF3078A6 -:101E700020F00F00801C20F0F0001030307020782F -:101E8000022802D0FFDFBDE8F0814046FFF7D4FB17 -:101E9000050000D1FFDF61884FF6FF700027814207 -:101EA00002D1A288824203D0814201D1A08848B1E8 -:101EB00005F093FF2068B0606068F0602089308290 -:101EC000AF75E0E7A87D0128DDD1782300224146E7 -:101ED0000EF0EAFB0220A875D5E738B505460C469A -:101EE00008460EF0D7FC68B9203D062D30D2DFE859 -:101EF00005F00305222F271B062038BD60680EF071 -:101F00000DFD08B1102038BD618820886A460AF0AE -:101F1000D5F805F07FFD0028F5D161680029F2D0E1 -:101F2000BDF800200A8038BDA07800F001012088AB -:101F30000AF0F5F808E02068BDE8384001F092BEEC -:101F4000618820880AF053F8BDE8384005F062BD8A -:101F5000072038BD70B505460C4608460EF0C0FC9B -:101F600008B1102070BD202D07D0212D0DD0222DBD -:101F70000BD0252D09D0072070BD2088A11C09F0A9 -:101F8000F7FDBDE8704005F045BD062070BDFC487A -:101F90001930704708B52821F94816F011F80120CA -:101FA000FFF7BAF9F64968461A3105F0A9FEF44878 -:101FB0009DF80020417E62F3470121F00101417646 -:101FC000002180F822104FF461710184022180F811 -:101FD0002310FFF7B9F900B1FFDF00F0DDFB01F0DE -:101FE000A7FA08BD10B50C464021204615F0C6FFE3 -:101FF000A07F20F00300A077202020700020A07593 -:1020000084F8230010BD70472DE9FC4107460EF00F -:1020100041FC10B11020BDE8FC81D94E06F1190138 -:10202000D6F819000090B6F81D50ADF80450F47FB2 -:102030008DF806403846FFF7C3FA0028EBD1FFF7CA -:1020400083F90028E7D0009946F8191FB580B471CC -:10205000E1E710B504460EF043FC08B1102010BDB6 -:10206000C748C7492246407E1A314008FFF7BFFAE9 -:10207000002010BDFEB50D4604004FF0000712D041 -:102080000822FFF7F2F9002812D1002609E000BF6C -:1020900054F826006946FFF770FA002808D1761C2C -:1020A000F6B2AE42F4D309F012FC10B143F20320B1 -:1020B000FEBDB34E3776FCB100271AE054F8270076 -:1020C00002A9FFF75AFA00B1FFDF9DF808008DF86A -:1020D000000054F8270050F8011FCDF80110808847 -:1020E000ADF80500684609F017FC00B1FFDF7F1C62 -:1020F000FFB2AF42E2D335760020FEBD2DE9F047B6 -:102100008AB01546894604001DD00F46082229468C -:10211000FFF7ABF9002810D1002612E054F8260092 -:102120006946103000F0DBFA002806D13FB157F8BD -:1021300026000EF0AFFB10B110200AB046E5761C69 -:10214000F6B2AE42EAD30026A5F101081CE000BFBA -:1021500006F1010A0AF0FF0712E000BF54F826005A -:10216000017C4A0854F827100B7CB2EB530F05D1C1 -:1021700006221130113115F056FE58B17F1CFFB206 -:10218000AF42EBD30AF0FF064645E1DB4E4624B1F1 -:10219000012003E043F20520CFE7002009F0DCFB3B -:1021A00010B909F0E5FB10B143F20420C5E75CB3B8 -:1021B00000270DF1170825E054F827006946103074 -:1021C00000F08DFA00B1FFDF54F82700102250F81C -:1021D000111FCDF801108088ADF8050054F82710C4 -:1021E0000DF1070015F04BFE96B156F8271010229E -:1021F000404615F044FE684609F073FB00B1FFDF6E -:102200007F1CFFB2AF42D7D3FFF731FA002094E72B -:10221000404601F01BFDEEE730B585B004460EF0F8 -:1022200039FB18B960680EF082FB10B1102005B0C0 -:1022300030BD60884AF2B811884206D82078504DE7 -:1022400028B1012806D0022804D00720EFE7FFF7C5 -:102250007BF818E06078022804D0032802D043F20B -:102260000220E4E785F82300C1B200200090ADF819 -:10227000040002292CD0032927D0FFDF684609F08B -:10228000E8FB05F0C7FB0028D1D1606801F0D1FC64 -:10229000207858B101208DF800000DF1010001F007 -:1022A000D5FC684609F08EFF00B1FFDF207885F885 -:1022B0002200FFF7DCF9608860B1288480B209F061 -:1022C00043FB00B1FFDF0020B1E78DF80500D5E743 -:1022D0004020FAE74FF46170EFE710B504460EF0C6 -:1022E000FFFA20B9606838B10EF018FB08B1102071 -:1022F00010BD606801F0AAFC214830F8201F618001 -:10230000C178617080782070002010BD2DE9F843FD -:102310001446894606460EF0E3FAA0B948460EF088 -:1023200006FB80B920460EF002FB60B9144DA87878 -:10233000012800D13CB13178FF2906D049B143F2E0 -:102340000400BDE8F8831020FBE7012801D0042039 -:10235000F7E74FF00008B4B3052813D0042811D0D4 -:102360006946204600F0F2F90028EAD1207D58B1F4 -:1023700001280BD002280BD003280BD00720E0E760 -:10238000900100200820DCE7424604E0012202E040 -:10239000022200E003222346174600200099FFF79F -:1023A0007FF90028CDD1A0892880A07BE875BDF8F1 -:1023B0000000A882AF75BDF80000000701D5A08914 -:1023C00088B1A089288049460020FFF718FA002824 -:1023D000B7D1A87805280BD0042809D0287DC007DC -:1023E00003D0032002E08020ECE70220FEF794FFF8 -:1023F00086F800800020A4E72DE9FC41E54C064664 -:102400000D46A078022803D0032801D0082002E658 -:1024100016B143F20400FEE506200AF041FD10B9B2 -:10242000A078032845D00CF093FC07460DF027FE5A -:10243000381A00F0FF0806200AF02AFD0746062099 -:102440000AF02EFD391AA078042809D00022114480 -:10245000A8EB010111F0FF0F04D0032804D00DE018 -:102460000122F4E71320D6E5284605F073FAF0B10F -:102470004078F0B1284605F054FDE57001208DF854 -:1024800000008DF801008DF802602088ADF804008E -:10249000E07D8DF80600684609F06CFD05F0BAFA9B -:1024A0000028B4D1A078032805D0042010E005202E -:1024B000B1E51220AFE5E07805F04CFA040000D158 -:1024C000FFDF607800B9FFDF6078401E6070052094 -:1024D000FEF722FF00209EE51CB510B143F2040078 -:1024E0001CBDAC4CA078042803D0052801D00820DE -:1024F0001CBD00208DF8000001218DF801108DF821 -:102500000200684609F036FD05F084FA0028EFD194 -:10251000A078052804D00220FEF7FEFE00201CBD96 -:10252000E07800F0C3F80320F6E72DE9FC4180468F -:102530000D46032608460EF0FAF908B110206AE5A8 -:102540004046FFF779F8040004D02078222804D20E -:10255000082060E543F202005DE5A07F00F003077C -:102560003DB1012F0AD000202946FEF750FF06009A -:10257000E5D1012F04D0FFDF30464CE50120F3E721 -:10258000A07D2946022801D011B107E0112042E5C3 -:10259000684600F00EFA0028D1D16946404608F09E -:1025A000A3FF0600E8D10120A075E5E770B50C4651 -:1025B0000546FFF741F8010005D022462846BDE850 -:1025C0007040FFF73CB843F2020070BD10B501281F -:1025D00007D1704B9B78012B00D011B143F204005E -:1025E00010BD09F0E3F9BDE8104005F013BA01236E -:1025F00000F066B800231A46194600F061B870B5BD -:10260000064615460C4608460EF06AF918B92846E3 -:102610000EF066F908B1102070BD2A4621463046FA -:1026200009F034FD05F0F6F90028F5D121787F296D -:10263000F2D1052070BD7CB505460C4608460EF06B -:1026400029F908B110207CBD2846FEF7F5FF20B11E -:102650000078222804D208207CBD43F202007CBD11 -:102660004C4890F82400400701D511207CBD21780A -:10267000C80802D16078C20801D007207CBD890853 -:1026800001D1800801D006207CBDADF80050207833 -:102690008DF8020060788DF803000220ADF8040088 -:1026A000684609F0DCFA05F0B5F97CBD10B505F017 -:1026B00051F9040000D1FFDF6078401C607010BD4C -:1026C0001CB5ADF800008DF802308DF803108DF8C0 -:1026D0000420684609F0A9FC05F09CF91CBD0278AD -:1026E000520804D0012A02D043F202207047FEF7BC -:1026F00044BF70B50C0006460DD0FEF79DFF0500E7 -:1027000000D1FFDFA680288920812889608168891F -:10271000A081A889E08170BD10B500231A4603E0AE -:10272000845C2343521CD2B28A42F9D30BB10020FD -:1027300010BD012010BD00B530B1012803D0022822 -:1027400001D0FFDF002000BDFF2000BD00220A8075 -:1027500092B222F060020A800078062817D2DFE8E1 -:1027600000F0160306090C1142F0110007E042F0D8 -:102770001D0009E042F0150006E042F0100040F0B4 -:10278000020001E042F0100008800020704707209E -:102790007047000090010020FE4800210160416068 -:1027A000018170472DE9F743044692B09146406895 -:1027B0000EF0B4F840B160680EF0B9F820B9607856 -:1027C00000F00300022801D0012000E00020F14EBB -:1027D000307248460EF05EF818B1102015B0BDE812 -:1027E000F08349460120FEF712FE0028F6D10125AC -:1027F0008DF842504FF4C050ADF84000002210A9AF -:10280000284603F06FFF0028E8D18DF842504FF4BE -:1028100028504FF00008ADF8400047461C2168469C -:10282000CDF81C8015F0CCFB9DF81C0008AA20F008 -:102830000F00401C20F0F00010308DF81C002078B4 -:102840008DF81D0061789DF81E0061F3420040F094 -:1028500001008DF81E009DF800000AA940F002005A -:102860008DF800002089ADF83000ADF83270608935 -:1028700007AFADF834000B97606810AC0E900A9467 -:10288000684603F024FD0028A8D1BDF82000308060 -:102890008DF8425042F60120ADF840009DF81E0030 -:1028A00008AA20F00600801C20F001008DF81E0010 -:1028B0000220ADF83000ADF8340013A80E900AA93C -:1028C000684603F004FD002888D1BDF82000708020 -:1028D000311D484600F033F9002887D18DF8425069 -:1028E00042F6A620ADF840001C216846CDF81C80B9 -:1028F00015F066FB9DF81C00ADF8345020F00F0079 -:10290000401C20F0F00010308DF81C009DF81D00D8 -:1029100008AA20F0FF008DF81D009DF81E000AA9EE -:1029200020F0060040F00100801C8DF81E009DF88C -:1029300000008DF8445040F002008DF80000CDE911 -:102940000A4711A80E90ADF83050684603F0BFFC5E -:10295000002899D1BDF82000F08000203EE73EB568 -:1029600004460820ADF8000020460DF093FF08B1A2 -:1029700010203EBD21460120FEF749FD0028F8D178 -:102980002088ADF804006088ADF80600A088ADF896 -:102990000800E088ADF80A007E4801AB6A468088EE -:1029A000002104F099F8BDF800100829E1D00320B7 -:1029B0003EBD1FB50446002002900820ADF8080077 -:1029C000CDF80CD020460DF065FF10B1102004B0FA -:1029D00010BD704802AA81884FF6FF7004F0BEFA5D -:1029E0000028F4D1BDF80810082901D00320EEE733 -:1029F000BDF800102180BDF802106180BDF8041000 -:102A0000A180BDF80610E180E1E701B582B00220A7 -:102A1000ADF800005F4802AB6A464088002104F030 -:102A20005BF8BDF80010022900D003200EBD1CB5D4 -:102A3000002100910221ADF8001001900DF050FF2F -:102A400008B110201CBD53486A4641884FF6FF70FC -:102A500004F084FABDF800100229F3D003201CBD55 -:102A6000FEB54C4C06461546207A0F46C00705D0E9 -:102A700008460DF00FFF18B11020FEBD0F20FEBD5F -:102A8000F82D01D90C20FEBD30460DF003FF18BB18 -:102A9000208801A903F064F90028F4D130788DF87A -:102AA0000500208801A903F0F6FF0028EBD1009073 -:102AB0009DF800009DF8051040F002008DF8000020 -:102AC000090703D040F008008DF80000208869460F -:102AD00003F07EFF0028D6D1ADF8085020883B4691 -:102AE00002AA002103F0F8FFBDF80810A942CAD0DD -:102AF0000320FEBD7CB505460020009001900888AB -:102B0000ADF800000C46284601950DF007FF18B9F6 -:102B100020460DF0E5FE08B110207CBD15B1BDF8D2 -:102B2000000050B11B486A4601884FF6FF7004F060 -:102B300015FABDF8001021807CBD0C207CBD30B59D -:102B400093B0044600200D460090142101A815F012 -:102B500037FA1C2108A815F033FA9DF80000CDF8CB -:102B600008D020F00F00401C20F0F00010308DF84D -:102B700000009DF8010020F0FF008DF801009DF895 -:102B8000200040F002008DF8200001208DF8460062 -:102B900002E00000B801002042F60420ADF8440035 -:102BA00011A801902088ADF83C006088ADF83E0087 -:102BB000A088ADF84000E088ADF842009DF8020022 -:102BC00006AA20F00600801C20F001008DF802000B -:102BD0000820ADF80C00ADF810000FA8059001A971 -:102BE00008A803F074FB002803D1BDF81800288062 -:102BF000002013B030BD00004FF0E0224FF4004140 -:102C00000020C2F880111D4908701D49900208601B -:102C1000704770B5194D04462878A04202D00CB117 -:102C200000B1FFDF2878A0420DD01649144A2C705D -:102C30000020CCB1134E144B1436151F012C03D0B9 -:102C4000022C08D0FFDF70BD0860022008603360EE -:102C50004FF0407005E008600320086033604FF4D7 -:102C600000001060286070BD086008604FF0607060 -:102C7000106070BD00B5FFDF00BD0000180000202F -:102C800008F5014000F50040380200200CF04DBF6F -:102C90000449002008604FF0E0210220C1F88002C2 -:102CA00070470000FC1F004010B50D2000F067F8D1 -:102CB000C4B26FF0040000F062F8C0B2844200D0E9 -:102CC000FFDF36490120086010BD70B50D2000F00F -:102CD00040F8334C0020C4F800010125C4F8045327 -:102CE0000D2000F041F825604FF0E0216014C1F89C -:102CF000000170BD10B50D2000F02BF8284801210F -:102D000041600021C0F80011BDE810400D2000F026 -:102D10002BB8234910B5D1F80001012801D0FFDFFD -:102D200010BD1E48001D00680022C0B2C1F800217D -:102D3000BDE810400DF0D6BA10B51948D0F8001112 -:102D40000029FBD0FFF7E5FFBDE810400D2000F0A3 -:102D50000BB800F01F02012191404009800000F1F2 -:102D6000E020C0F88011704700F01F02012191405F -:102D70004009800000F1E020C0F880127047002870 -:102D800006DA00F00F0000F1E02090F8140D03E0E7 -:102D900000F1E02090F800044009704704D500409D -:102DA00000D00040704770477047704770477047C9 -:102DB000704700004FF0E0214FF00070C1F8800133 -:102DC000C1F88002334B802283F80024C1F800014F -:102DD000704700B5024604202F4903E001EBC00311 -:102DE0001B792BB1401EC0B2F8D2FFDFFF2000BD1F -:102DF00041F8302001EBC00100224A718A710122A2 -:102E00000A7100BD244A002102EBC0000171704725 -:102E100010B50446042800D3FFDF1F4800EBC404AC -:102E20002079012800D0FFDF6079A179401CC0B271 -:102E3000814200D060714FF0E0214FF00070C1F886 -:102E4000000210BD70B51348042590F80004124E1E -:102E50004009124C042818D0FFDF16E0217806EB59 -:102E6000C1000279012A08D1427983799A4204D0BB -:102E70004279827156F8310080472078401CC0B2F8 -:102E80002070042801D3002020706D1EEDB2E5D221 -:102E900070BD000019E000E0880400204800002018 -:102EA0000F4A12680D498A420CD118470C4A126821 -:102EB0000A4B9A4206D101B500F074F8FFF774FF8F -:102EC000BDE801400749096809580847064807490D -:102ED000054A064B7047000000000000BEBAFECA5B -:102EE000A400002004000020900D0020900D002080 -:102EF00070B50C46054606F021FB21462846BDE884 -:102F0000704007F006BC10B50DF07DFEFFF774FEB3 -:102F10000DF038FDBDE810400DF0CABD70B5034698 -:102F2000002002466FF02F050EE09C5CA4F13006F5 -:102F30000A2E02D34FF0FF3070BD00EB800005EB8E -:102F40004000521C2044D2B28A42EED370BD30B54C -:102F50000A240AE0B0FBF4F304FB13008D183030B0 -:102F600005F8010C521E1846D2B2002AF2D130BD2B -:102F700030B500234FF6FF7510E0040A44EA002044 -:102F800084B2C85C6040C0F30314604005EA0034BA -:102F90004440E0B25B1C84EA40109BB29342ECD305 -:102FA00030BD000070B5154D2878401CC4B268785B -:102FB000844202D0FFF7FBFE2C7070BD2DE9F0417A -:102FC0000E4C4FF0E02600BFFFF7EFFE20BF40BFE2 -:102FD00020BF677820786070D6F80052FEF784F939 -:102FE000854305D1D6F8040210B92078B842EBD059 -:102FF000FFF7DAFE0020BDE8F0810000A00000200D -:103000002CFFFFFFDBE5B15100900100A700FFFF9F -:1030100070000000808D5B0016425791AD5F58BC78 -:103020008E702F5A0FAA100DBCD52BFD10B504467B -:103030000DF030FC08B1102010BD2078C0F3021054 -:10304000042807D86078072804D3A178102901D86C -:10305000814201D2072010BDE078410706D42179D2 -:103060004A0703D4000701D4080701D5062010BD84 -:10307000002010BD70B514460D46064604F0AAFEA9 -:1030800080B10178182221F00F01891C21F0F00194 -:10309000A03100F8081B214614F036FFBDE870404F -:1030A00004F09BBE29463046BDE870401322FEF76F -:1030B000C6BA2DE9F047064608A8894690E83004CC -:1030C0001F4690461421284614F07AFF0021CAF8C2 -:1030D0000010B8F1000F03D0B9F1000F03D114E0D4 -:1030E0003878C00711D020680DF0FAFBC0BBB8F1EA -:1030F000000F07D120681230286020681430686003 -:103100002068A8602168CAF800103878800724D5A4 -:1031100060680DF003FC18BBB9F1000F21D0FEF779 -:1031200036FF0168C6F868118188A6F86C118079AD -:1031300086F86E0101F03BFAF84FEF60626862B109 -:1031400096F8680106F2691140081032FEF74FFA4E -:1031500010223946606814F092FE0020BDE8F08726 -:1031600006E0606820B1E8606068C6F86401F4E7D2 -:103170001020F3E730B5054608780C4620F00F0024 -:10318000401C20F0F001103121700020607095F893 -:10319000230030B104280FD0052811D0062814D000 -:1031A000FFDF20780121B1EB101F04D295F8200039 -:1031B00000F01F00607030BD21F0F000203002E010 -:1031C00021F0F00030302070EBE721F0F0004030CB -:1031D000F9E7F0B591B0022715460C4606463A4687 -:1031E000ADF80870082103AB07F074FF04900028C5 -:1031F00010D004208DF804008DF80170E034099699 -:1032000005948DF818500AA968460BF087FB00B1A9 -:10321000FFDF012011B0F0BD2DE9F84F0646808A8E -:103220000C4680B28246FEF707FA0546BB4F30785F -:10323000203F4FF005094FF000080F287CD2DFE84F -:1032400000F07BA39D082C5B6A7CBADAFD97489757 -:1032500097000121504609F06FFE040000D1FFDF06 -:1032600097F85C00C00701D0386E0BE0032104F131 -:103270001D000DF018F8D4F81D00A949B0FBF1F2BB -:1032800001FB1200C4F81D0070686067B068A06799 -:103290002878252872D0FFDF70E00121504609F020 -:1032A0004BFE060000D1FFDF3078810702D5297878 -:1032B000252904D040F001003070BDE8F88F0220CD -:1032C0002070307F207106F11D002D36C4E9020602 -:1032D000F3E70121504609F02FFE050000D1FFDF82 -:1032E0002878C10604D5072020703D356560E4E7E5 -:1032F00040F008002870E0E7E87F000700D5FFDF16 -:10330000307CB28800F0010301B05046BDE8F04FB8 -:10331000082108F014B805B9FFDF716821B1102247 -:1033200005F1240014F0ABFD28212846FEF71DF816 -:10333000307A85F82000C0E7F8E00121504609F016 -:10334000FBFD050000D1FFDF022105F185000CF037 -:10335000AAFF0420207005F5B4706060B5F8850000 -:1033600020826E4810387C356561C4E90270A4E79C -:103370000121504609F0E0FD00B9FFDF3246294641 -:103380005046BDE8F84F75E605B9FFDF28782128DB -:1033900093D93079012803D1E87F40F00800E8771D -:1033A000324629465046FFF765FE2846BDE8F84FED -:1033B0002321FDF7DABF3279A28004F10803082146 -:1033C000504607F087FEE06010B184F8009074E783 -:1033D00045460121504609F0AFFD040000D1FFDF52 -:1033E00004F1620102231022081F09F04AFC057053 -:1033F0003179417061E70121504609F09DFD0400DB -:1034000000D1FFDF94F8840000F00300012859D1B7 -:10341000E87F10F0010003D194F8A010C9072AD06A -:10342000D4F8602132B394F88330117C63F38701C0 -:103430001174AA7FD30963F3410100E072E0D4F86C -:1034400060211174D4F8602160F30001117490B10F -:10345000D4F86001102205F12401883414F00FFD26 -:10346000207E40F001002076207820F0010004F852 -:10347000880919E0C0B994F88810C90714D0D4F8A5 -:103480005C218AB194F88330117C63F38701117455 -:10349000AA7FD309D4F85C2163F341011174D4F8F5 -:1034A0005C2160F30001117494F88800800709D54D -:1034B00094F87C00D4F86421400804F17D011032B6 -:1034C000FEF795F88DF8009094F884006A4600F0B5 -:1034D00003008DF8010094F888108DF8021094F81C -:1034E000A0008DF803002946504601F049F82878DD -:1034F000252805D0212807D0FFDF2878222803D9E6 -:1035000022212846FDF731FF0121504609F026FD12 -:1035100000283FF4DDAEFFDFCFE60000E40100202D -:1035200040420F00716881F80180C6E6FFDFC4E603 -:1035300070B5FE4C002584F85C5025660BF0BBF995 -:1035400004F11001204604F001FC84F8305070BDF5 -:1035500070B50D46FEF770F8040000D1FFDF4FF4A0 -:10356000B871284614F02CFD2434012105F1E00047 -:103570002C610BF0A1F9002800D0FFDF70BD0A46D6 -:10358000014602F1E0000BF0B7B970B5054640689E -:1035900086B00178082906D00B2933D00C292FD00A -:1035A000FFDF06B070BD46883046FEF745F80400E0 -:1035B00000D1FFDF20782128F3D028281BD16868AC -:1035C00002210C3000F0A6FFA8B168680821001D98 -:1035D00000F0A0FF78B104F12401304608F0CCFCE3 -:1035E00004F018FA00B1FFDF06B02046BDE87040D5 -:1035F0002921FDF7BABE06B0BDE8704004F0EDBB6E -:1036000001218171686886883046FEF715F804004C -:1036100000D1FFDF20782128C3D06868817909B103 -:10362000807808B1FFDFBCE704F0D7FBA07F00067D -:1036300023D5E07FC00705D094F8200000F01F00DC -:10364000102818D05FF0050084F82300207829287E -:1036500015D02428A5D1314604200DF0CFF8222121 -:103660002046FDF782FE0121304609F077FC002854 -:1036700097D0FFDF95E70620E6E70420E4E7012185 -:10368000304609F059FC050000D1FFDF2521204616 -:10369000FDF76BFE03208DF80000694605F1E000A0 -:1036A0000BF021F90228BED00028BCD0FFDF78E75C -:1036B0002DE9F04788B09A46164688468146FDF7C0 -:1036C000BBFF05003AD02878222837D3232835D0ED -:1036D000E87F000732D400270121484609F02CFC7E -:1036E000040005D101210022484609F01CFC0446D3 -:1036F000694600F06CFF009800B9FFDF00983CB10C -:10370000E03404612878222804D0242802D005E07F -:10371000076103E025212846FDF727FE00980121D7 -:103720004170C0F824908680C0E9028A01A90BF09C -:10373000F5F8022802D0002800D0FFDF08B00DE520 -:1037400070B586B00546FDF777FF0078222814D9BA -:103750000121284609F0F0FB04002CD1FFDF2AE00C -:10376000B4F85E0004F1620630440178427829B171 -:1037700021462846FFF72DFDB0B912E7ADF8042029 -:103780000821284602AB07F0A5FC03900028F4D0DE -:1037900005208DF80000694604F1E0000BF0A3F865 -:1037A000022801D000B1FFDF02231022314604F1CC -:1037B0005E0009F09CFAB4F860000028D0D1F0E671 -:1037C00010B586B00446FDF737FF0078222811D9DE -:1037D0000121204609F0B0FB040000D1FFDF0620E4 -:1037E0008DF80000694604F1E0000BF07CF8002839 -:1037F00000D0FFDF06B010BD2DE9F84F0546007878 -:103800000C460027010904F1080090463E46BA46DE -:10381000009002297ED0072902D00A2909D142E06E -:1038200068680178082905D00B292CD00C292AD0EA -:10383000FFDF73E114271C26002C6CD04088A08089 -:10384000FDF7FAFE5FEA000900D1FFDF99F81700E3 -:1038500009F118014008009AFDF7C9FE68688089DF -:10386000208268684168C4F812108068C4F81600A5 -:10387000A07E20F0060040F00100A07699F81E001E -:1038800040F020014FE01A270A26002CD5D080886E -:10389000A080FDF7D1FE050000D1FFDF284600998A -:1038A000FFF768FC3AE10CB1A88BA080287A4FF0B2 -:1038B000010B0B287ED006DC01287CD0022808D022 -:1038C000032804D137E00D2876D00E2875D0FFDF0D -:1038D00024E11E270926002CAFD0A088FDF7ACFEFE -:1038E0005FEA000900D1FFDF287B00F00300012818 -:1038F000207A1DD020F001002072297B890861F315 -:1039000041002072297BC90861F382002072297B63 -:10391000090901E0F7E0AEE061F3C300207299F815 -:103920001E0040F0400189F81E10F7E0C40100209D -:1039300040F00100E0E713270D26002CA6D0A08858 -:10394000FDF77AFE81460121A08809F0F5FA05000D -:1039500000D1FFDF686F817801F003010129217A2E -:1039600050D021F00101217283789B0863F341015B -:1039700021728378DB0863F38201217283781B094B -:1039800063F3C3012172037863F306112172437854 -:1039900063F3C711217284F809A0C178A17202797A -:1039A000E17A62F30001E1720279520862F34101A7 -:1039B000E17203E029E067E04EE05FE002799208FF -:1039C00062F38201E1720279D20862F3C301E1720B -:1039D0004279217B62F3000121734279520862F33C -:1039E000410121734279920862F382012173407987 -:1039F000C00860F3C301217399F8000023282AD975 -:103A0000262139E041F00101ADE71827102694B3D3 -:103A1000A088FDF711FE00900121A08809F08CFA22 -:103A20005FEA000900D1FFDFE868A06099F80000B4 -:103A300040F0040189F8001099F80100800708D5CA -:103A400084F80CB000980078232867D927210098C3 -:103A500052E084F80CA061E015270F265CB1A08825 -:103A6000FDF7EAFD81460622E8680099FFF76FFA44 -:103A700084F80EB086E042E048463DE0162709266D -:103A8000ECB3287B207249E0287B19270E26B4B3BB -:103A9000C4F808A0A4F80CA0012807D0022808D078 -:103AA00003280CD004280AD0FFDF15E084F808B002 -:103AB00001E002202072607A20F003000BE0697BB5 -:103AC000042801F00F0141F080012172F3D1607AE6 -:103AD00020F00300401C6072A088FDF7ADFD054694 -:103AE000007821281AD0232800D0FFDF0121A088E8 -:103AF00009F034FA22212846FDF737FC0EE0FFE7F3 -:103B0000A8F800600FE00CB16888A080287A03282C -:103B100022D0042809D005283AD0FFDFA8F8006099 -:103B20000CB127806680002005E415270F26002CA5 -:103B3000E6D0A088FDF780FD0121A08809F0FCF9FE -:103B4000050000D1FFDFD5F81D0006220099FFF720 -:103B5000FEF984F80EA0E1E717270926002CCFD044 -:103B6000A088FDF769FD81460121A08809F0E4F9EC -:103B7000050000D1FFDF6878800701D5022000E052 -:103B80000120207299F800002328C7D9272173E764 -:103B900019270E26002CB3D0A088FDF74DFD5FEA53 -:103BA000000900D1FFDFC4F808A0A4F80CA084F835 -:103BB00008A0A07A40F00300A07299F81E10C9096D -:103BC00061F38200A07299F81F2099F81E1012EA82 -:103BD000D11F05D099F8201001F01F01102925D020 -:103BE00020F00800A07299F81F10607A61F3C300FA -:103BF0006072697A01F0030101298FD140F004005D -:103C00006072E87A217B60F300012173AA7A607BFD -:103C100062F300006073EA7A520862F34101217393 -:103C2000A97A490861F34100607377E740F0080022 -:103C3000D8E710B5FA4C30B10146102204F120004B -:103C400014F01DF9012084F8300010BD10B50446B1 -:103C500000F0ADFCF24920461022BDE810402031B2 -:103C600014F00DB970B5EE4D06004FF0000413D0FE -:103C70000CF010FE08B110240CE006213046FFF7CE -:103C80004DF9411C05D028665FF0010085F85C0005 -:103C900000E00724204670BD0020F7E7007810F010 -:103CA0000F0204D0012A05D0022A0CD110E000092D -:103CB00009D10AE00009012807D0022805D003280D -:103CC00003D0042801D007207047087000207047F7 -:103CD0000620704705282AD2DFE800F003070F17F7 -:103CE0001F00087820F0FF001EE0087820F00F0089 -:103CF000401C20F0F000103016E0087820F00F0093 -:103D0000401C20F0F00020300EE0087820F00F007A -:103D1000401C20F0F000303006E0087820F00F0062 -:103D2000401C20F0F0004030087000207047072051 -:103D300070472DE9F043804687B00D464FF00009EB -:103D400008460CF0F4FDA8B94046FDF775FC0600E6 -:103D500003D0307822280BD104E043F2020007B0F0 -:103D6000BDE8F08335B1B07FC10601D4000703D5AB -:103D70000820F4E71020F2E7F07F000701D50D20BE -:103D8000EDE700270121404609F0D6F8040006D1EE -:103D900001210022404609F0C6F8040005D069461A -:103DA00000F015FC009818B901E00420D7E7FFDF08 -:103DB00000980221E0344170C0F8248044610781FA -:103DC00001210171297801F00102017E62F30101F4 -:103DD00001762A78520862F3820101762A789208E5 -:103DE00062F3C30101762A78D20862F304110176E6 -:103DF00024213046FDF7B9FA01A900980AF08EFD9A -:103E0000022801D000B1FFDF4846A8E72DE9FF4FA7 -:103E10009046844A0E4697B09A4607CA14AB4FF0B4 -:103E2000000983E807001798FDF706FC050006D097 -:103E30002878262806D008201BB0BDE8F08F43F272 -:103E40000200F9E726B94046FFF7F0F80028F3D161 -:103E50000121179809F070F8040000D1FFDF852ECA -:103E600027D007DCEEB1812E1DD0822E1DD0832EEF -:103E700008D11CE0862E1ED0882E1ED0892E1ED082 -:103E80008A2E1ED00F2020710F281CD003F0A2FF15 -:103E9000D8B101208DF82C00201D0C902079B0B1F4 -:103EA00032E10020EFE70120EDE70220EBE70320FD -:103EB000E9E70520E7E70620E5E70820E3E7092032 -:103EC000E1E70A20DFE70720B6E71120B4E798F81A -:103ED0000000D4E91D764208A87F002162F3C710D4 -:103EE000A87798F800008208E87F62F30000E8777E -:103EF00098F80000C209607862F34100607098F899 -:103F000000000209207862F34710207098F8000042 -:103F1000C208607862F30000607098F80100607178 -:103F200098F8000000F00102B07862F30100B07070 -:103F3000AA7FD20962F38200B070EA7F62F3C30005 -:103F4000B070627862F30410B0702278C0F3C000E1 -:103F5000520932706278C2F34002727098F80220FF -:103F6000F27071713171B978C1F3C00108405FEA34 -:103F7000000B2ED050460CF08DFC98BBDAF80C00EC -:103F80000CF088FC70BBDAF81C000CF083FC48BB1A -:103F9000DAF80C00A060DAF81C00E060797860784C -:103FA00001F0010140EA41006070B978C0B2C1F38C -:103FB0000011891E084060700020207705F117006D -:103FC0006061681CA061B07800F0030001280AD08D -:103FD0004AE07978607801F00101FD2242EA41016E -:103FE0000840E1E719E0B87800F0030001283BD170 -:103FF000321D711D404600F099FA30793979084038 -:104000008DF8480071797A7911408DF828100843AD -:104010002AD050460CF03EFC30B110200CE70000D6 -:10402000C40100203C8301000AF1100004F5AE73C6 -:1040300004F18C028DE80D00002112AB5A46204697 -:10404000FFF737F80028E9D104F5B07204F1A403B2 -:10405000CDF800A0CDE9013201210AAB5A46204635 -:10406000FFF727F80028D9D16078800722D4B078EC -:10407000B978C0F38000C1F3800108431AD03078CA -:1040800014AA397832F810204B00DA4002F0030904 -:10409000B9F1030F01D14FF00209BBF1000F09D0B4 -:1040A000012801D0042805D1012901D0042901D11A -:1040B0004FF00409A87F40F08000A877E87F6BF3F9 -:1040C0000000E877607881074FF003000CD5A071FD -:1040D000BBF1000F18D100BF8DF84C0013AA294680 -:1040E000179800F04DFA0FE00221B9F1020F1AD033 -:1040F000B9F1010F19D0B9F1040F22D00020A0713D -:10410000A87F20F08000A87725212846FDF72DF90B -:104110000BA904F1E0000AF0E6FB10B1022800D080 -:10412000FFDF002088E6A171D6E7A1710D2104F11F -:10413000200013F045FF207840F00200207004209A -:10414000CAE70120A071DFE72DE9F04387B0904670 -:10415000894604460025FDF76FFA070004D0387839 -:10416000272804D00820FAE543F20200F7E50121F0 -:10417000204608F0E1FE040000D1FFDFA6795FEAE7 -:10418000090005D0012821D0B9F1020F26D110E095 -:10419000B8F1000F22D1012E05D0022E05D0032E3A -:1041A00005D0FFDF2DE00C252BE0012529E00225BD -:1041B00027E040460CF06EFBB0B9032E0ED1102262 -:1041C000414604F11D0013F05AFE1AE0012E02D000 -:1041D000022E03D104E0B8F1000F12D00720BEE593 -:1041E00040460CF057FB08B11020B8E5102104F14F -:1041F0001D0013F0C3FE06214046FEF78FFEC4F8F3 -:104200001D002078252140F0020020703846FDF77F -:10421000ACF82078C10713D020F0010020700220F4 -:104220008DF8000004F11D0002908DF804506946DD -:10423000C3300AF058FB022803D010B1FFDF00E0C2 -:10424000257700208BE530B587B00D460446FDF795 -:10425000F3F960B10121204608F06EFE04000CD095 -:1042600028460CF017FB28B1102007B030BD43F2F0 -:104270000200FAE72078400701D40820F5E7294634 -:1042800004F13D002022054613F0F9FD207840F0AE -:104290001000207001070FD520F0080020700720C3 -:1042A0008DF80000694604F1E00001950AF01BFB5F -:1042B000022801D000B1FFDF0020D6E770B50D461F -:1042C0000646FDF7B9F918B10078272817D102E0A2 -:1042D00043F2020070BD0121304608F02DFE0400BB -:1042E00000D1FFDFA079022809D16078C00706D08D -:1042F0002A4621463046FEF76CFF10B10FE0082039 -:1043000070BDB4F860000E280BD204F162010223E4 -:104310001022081F08F0B5FC012101704570002033 -:1043200070BD112070BD70B5064614460D46084696 -:104330000CF0B0FA18B920460CF0D2FA08B11020EF -:1043400070BDA6F57F40FF380ED03046FDF774F9FA -:1043500038B1417822464B08811C1846FDF747F9D1 -:1043600007E043F2020070BD2046FDF772FE002810 -:10437000F9D11021E01D0BF096FFE21D294604F152 -:10438000170000F034F9002070BD2DE9F04104461B -:104390008AB015460E46002708460CF0C8FA18B930 -:1043A00028460CF0C4FA18B110200AB0BDE8F0811C -:1043B0002046FDF741F95FEA000804D098F80000B4 -:1043C000272810D102E043F20200EEE70121204647 -:1043D00008F0B2FD040000D1FFDF2078400702D5CD -:1043E0006078800701D40820DFE7D4E91D0149780F -:1043F00001B18DB1407800B176B1ADB1EA1D06A82A -:10440000E16800F0F4F8102206A905F1170013F096 -:104410000AFD18B1042707E00720C6E71022E91DAE -:1044200004F12D0013F02BFD2EB11022F11D04F12B -:104430001D0013F024FD2078252140F0020020709B -:104440004046FCF792FF2078C10715D020F001000C -:10445000207002208DF8000004F11D000290103041 -:1044600003908DF804706946B3300AF03CFA0228D4 -:1044700003D010B1FFDF00E02777002095E770B58B -:104480000D4606460BB1072070BDFDF7D5F80400B8 -:1044900007D02078222802D3A07F800604D40820E9 -:1044A00070BD43F2020070BDADB12946304607F041 -:1044B00063FD03F0AFFA297C4A08A17F62F3C711BC -:1044C000A177297CE27F61F30002E277297C8908E9 -:1044D00084F8201004E0304607F071FD03F09AFAEA -:1044E000A17F21F02001A17770BD70B50D46FDF7C9 -:1044F000A3F8040005D028460CF0F2F920B11020F2 -:1045000070BD43F2020070BD29462046FEF732FE20 -:10451000002070BD05E000BF10F8012B0AB100209B -:104520007047491E89B2F7D20120704710B5C47890 -:104530000B7864F300030B70C478640864F34103E0 -:104540000B70C478A40864F382030B70C478E40889 -:1045500064F3C3030B700379117863F300011170E6 -:1045600003795B0863F34101117003799B0863F3DE -:10457000820111700079C00860F3C301117010BD91 -:1045800070B51546064603F025FC040000D1FFDF98 -:10459000207820F00F00801C20F0F00020302070E8 -:1045A00066802868A060BDE8704003F016BC10B5B6 -:1045B000134C94F83000002808D104F12001A1F137 -:1045C00010000AF0D2F9012084F8300010BD10B1BB -:1045D00090F8B9202AB10A4890F8350018B10020A7 -:1045E00003E0B83001E0064834300860704708B591 -:1045F0000023009313460A4608F099FE08BD000008 -:10460000C4010020F0B5007B059F1E4614460D46F0 -:10461000012800D0FFDF0C2030803A203880002CA9 -:1046200008D0287A032806D0287B012800D0FFDF95 -:1046300017206081F0BDA889FBE72DE9F04786B01F -:10464000144691F80C900E9A0D46B9F1010F0BD05B -:104650001021007B2E8A8846052807D0062833D0F3 -:10466000FFDF06B0BDE8F0870221F2E7E8890C2100 -:1046700000EB400001EB4000188033201080002C3C -:10468000EFD0E889608100271AE00096688808F179 -:10469000020301AA696900F084FF06EB0800801C90 -:1046A00007EB470186B204EB4102BDF8040090819C -:1046B0000DF1060140460E320AF0C0F97F1CBFB270 -:1046C0006089B842E1D8CCE734201080E889B9F19C -:1046D000010F11D0122148430E301880002CC0D099 -:1046E000E88960814846B9F1010F00D002202073AB -:1046F00000270DF1040A1FE00621ECE70096688808 -:1047000008F1020301AA696900F04BFF06EB0800FB -:10471000801C86B2B9F1010F12D007EBC70004EB81 -:104720004000BDF80410C18110220AF102011030CE -:1047300013F0A5FB7F1CBFB26089B842DED890E7BA -:1047400007EB470104EB4102BDF80400D0810AF1F8 -:104750000201404610320AF071F9EBE72DE9F0470B -:104760000E4688B090F80CC096F80C80378AF58910 -:104770000C20109902F10C044FF0000ABCF1030F59 -:1047800008D0BCF1040F3ED0BCF1070F7DD0FFDF95 -:1047900008B067E705EB850C00EB4C001880312072 -:1047A0000880002AF4D0A8F1060000F0FF09558126 -:1047B00025E0182101A813F003FC009770884346F8 -:1047C00001AA716900F0EDFEBDF804002080BDF87B -:1047D0000600E080BDF808002081A21C0DF10A014E -:1047E00048460AF02BF9B9F1000F00D018B184F84F -:1047F00004A0A4F802A007EB080087B20A346D1EDB -:10480000ADB2D6D2C4E705EB850C00EB4C001880A6 -:1048100032200880002ABBD0A8F1050000F0FF0973 -:10482000558137E000977088434601AA716900F00E -:10483000B8FE9DF80600BDF80410E1802179420819 -:1048400060F3000162F34101820862F38201C20851 -:1048500062F3C301020962F30411420962F34511D4 -:10486000820962F386112171C0096071BDF80700E9 -:10487000208122460DF1090148460AF0DFF818B1FF -:1048800084F802A0A4F800A000E007E007EB08000D -:1048900087B20A346D1EADB2C4D279E7A8F1020026 -:1048A00084B205FB08F000F10E0CA3F800C035231C -:1048B0000B80002AA6D055819481009783B270881E -:1048C0000E32716900F06DFE62E72DE9F84F1E4669 -:1048D0000A9D0C4681462AB1607A00F58070D0802E -:1048E000E089108199F80C000C274FF000084FF078 -:1048F0000E0A0D2873D2DFE800F09E070E1C283048 -:104900003846556A73737300214648460095FFF791 -:1049100079FEBDE8F88F207B9146082802D0032855 -:1049200000D0FFDF378030200AE000BFA9F80A80FE -:10493000EFE7207B9146042800D0FFDF378031204D -:104940002880B9F1000FF1D1E3E7207B91460428DC -:1049500000D0FFDF37803220F2E7207B914602282B -:1049600000D0FFDF37803320EAE7207B174602289C -:1049700000D0FFDF3420A6F800A02880002FC8D088 -:10498000A7F80A80C5E7207B1746042800D0FFDF80 -:104990003520A6F800A02880002FBAD04046A7F8FE -:1049A0000A8012E0207B1746052802D0062800D096 -:1049B000FFDF1020308036202880002FA9D0E0892A -:1049C0007881A7F80E80B9F80E00B881A1E7207BA6 -:1049D0009146072800D0FFDF37803720B0E72AE074 -:1049E0004FF0120018804FF038001700288090D048 -:1049F000E0897881A7F80E80A7F8108099F80C005C -:104A00000A2805D00B2809D00C280DD0FFDF80E73D -:104A1000207B0A2800D0FFDF01200AE0207B0B2842 -:104A200000D0FFDF042004E0207B0C2800D0FFDF53 -:104A3000052038736DE7FFDF6BE770B50C46054660 -:104A4000FCF7FAFD20B10078222804D2082070BDBE -:104A500043F2020070BD0521284608F06DFA20607F -:104A600008B1002070BD032070BD30B448800878C4 -:104A700020F00F00C01C20F0F000903001F8080B6F -:104A80001DCA81E81D0030BC03F0A7B92DE9FF471E -:104A900084B00027824602970798904689461230D4 -:104AA00004F03CFA401D20F00306079828B907A936 -:104AB0005046FFF7C2FF002854D1B9F1000F05D0CE -:104AC0000798017B19BB052504681BE098F80000D6 -:104AD000092803D00D2812D0FFDF46E007990325EF -:104AE0004868B0B3497B42887143914239D98AB250 -:104AF000B3B2011D08F0B1F80446078002E0079C3C -:104B0000042508340CB1208810B1032D29D02CE0E5 -:104B100007980121123004F033FAADF80C00024678 -:104B200002AB2946504606F0D5FA070001D1A01C79 -:104B3000029007983A461230C8F80400A8F802A07C -:104B400003A94046029B04F028FAD8B10A2817D2DC -:104B500000E006E0DFE800F007091414100B0D1464 -:104B60001412132014E6002012E6112010E608208B -:104B70000EE643F203000BE6072009E60D2007E6E8 -:104B8000032005E6BDF80C002346CDE900702A4657 -:104B90005046079900F015FD57B9032D08D1079825 -:104BA000B3B2417B406871438AB2011D08F069F8D5 -:104BB000B9F1000FD7D0079981F80C90D3E72DE910 -:104BC000FE4F91461A881C468A468046FAB102ABCF -:104BD000494606F07FFA050019D04046A61C2788F2 -:104BE00008F0EEFA3246072629463B46009607F0C3 -:104BF0001AFF20882346CDE900504A4651464046D8 -:104C000000F0DFFC002020800120BDE8FE8F0020A6 -:104C1000FBE710B586B01C46AAB104238DF800301E -:104C20001388ADF808305288ADF80A208A788DF8DC -:104C30000E200988ADF80C1000236A462146FFF7C4 -:104C400025FF06B010BD1020FBE770B50D4605210D -:104C500008F072F9040000D1FFDF294604F11200C8 -:104C6000BDE8704004F075B92DE9F8430D46804663 -:104C7000002603F0AFF804462878102878D2DFE841 -:104C800000F0773B34533131123131310831313159 -:104C900031312879001FC0B2022801D0102810D16C -:104CA00014BBFFDF35E004B9FFDF0521404608F003 -:104CB00043F9007B032806D004280BD0072828D00E -:104CC000FFDF072655E02879801FC0B2022820D0D8 -:104CD00050B1F6E72879401FC0B2022819D0102839 -:104CE00017D0EEE704B9FFDF13E004B9FFDF28793E -:104CF00001280ED1172137E00521404608F01CF9A4 -:104D0000070000D1FFDF07F11201404604F0FEF872 -:104D10002CB12A4621464046FFF7A7FE29E0132181 -:104D20004046FDF743FC24E004B9FFDF052140467F -:104D300008F002F9060000D1FFDF694606F1120013 -:104D400004F0EEF8060000D0FFDFA988172901D291 -:104D5000172200E00A46BDF80000824202D901464F -:104D600002E005E01729C5D3404600F03AFCD0E741 -:104D7000FFDF3046BDE8F883401D20F0030219B183 -:104D800002FB01F0001D00E000201044704713B545 -:104D9000009848B10024684607F009FF002C02D1B2 -:104DA000F74A009911601CBD01240020F4E72DE9A9 -:104DB000F0470C4615462421204613F001F905B9A9 -:104DC000FFDFA87860732888DFF8B4A3401D20F0C7 -:104DD0000301AF788946DAF8000007F006FF060005 -:104DE00000D1FFDF4FF000082660A6F8008077B101 -:104DF00009FB07F1091D0AD0DAF8000007F0F5FEFB -:104E0000060000D1FFDF6660C6F8008001E0C4F84C -:104E10000480298804F11200BDE8F04704F068B866 -:104E20002DE9F047804601F112000D46814604F05D -:104E300075F8401DD24F20F003026E7B144629689E -:104E4000386807F0FDFE3EB104FB06F2121D03D0E8 -:104E50006968386807F0F4FE052008F019F8044680 -:104E6000052008F01DF8201A012802D1386807F043 -:104E7000B1FE49464046BDE8F04704F04EB870B573 -:104E80000546052108F058F8040000D1FFDF04F1C1 -:104E900012012846BDE8704004F038B82DE9F04F03 -:104EA00091B04FF0000BADF834B0ADF804B04788C6 -:104EB0000C46054692460521384608F03DF80600A6 -:104EC00000D1FFDF24B1A780A4F806B0A4F808B091 -:104ED000297809220B20B2EB111F7DD12A7A04F127 -:104EE000100138274FF00C084FF001090391102AE8 -:104EF00073D2DFE802F072F2F1F07F08D2888D9F62 -:104F00003DDBF3EEB6B6307B022800D0FFDFA88988 -:104F100008EBC001ADF804103021ADF83410002CBE -:104F200025D06081B5F80E9000271DE004EBC7087E -:104F3000317C88F80E10F189A8F80C10CDF800909B -:104F40006888042304AA296900F02BFBBDF810101F -:104F5000A8F8101009F10400BDF812107F1C1FFA08 -:104F600080F9A8F81210BFB26089B842DED80DE10E -:104F7000307B022800D0FFDFE98908EBC100ADF8E3 -:104F800004003020ADF83400287B0A90001FC0B226 -:104F90000F90002CEBD06181B5F81090002725E030 -:104FA000CDF800906888696903AA0A9B00F0F9FAB5 -:104FB0000A9804EBC70848441FFA80F908F10C026C -:104FC00004A90F9809F03AFD18B188F80EB0A8F8B6 -:104FD0000CB0BDF80C1001E0D4E0CFE0A8F8101040 -:104FE000BDF80E107F1CA8F81210BFB26089B8423D -:104FF000D6D8CBE00DA8009001AB2246294630461A -:10500000FFF71BFBC2E0307B082805D0FFDF03E081 -:10501000307B082800D0FFDFE8891030ADF80400AD -:105020003620ADF83400002C3FD0A9896181F18988 -:10503000A18127E0307B092800D0FFDFA88900F19B -:105040000C01ADF804103721ADF83410002C2CD031 -:105050006081E8890090AB89688804F10C022969B5 -:1050600056E0E8893921103080B2ADF80400ADF87F -:105070003410002C74D0A9896181287A0E280AD0B6 -:1050800002212173E989E181288A0090EB896888EF -:105090006969039A3CE00121F3E70DA8009001AB98 -:1050A000224629463046FFF759FB6FE0307B0A283D -:1050B00000D0FFDF1220ADF80400ADF834704CB31F -:1050C000A9896181A4F810B0A4F80EB084F80C90FE -:1050D0005CE020E002E031E039E042E0307B0B2888 -:1050E00000D0FFDF288AADF834701230ADF804002C -:1050F00084B104212173A9896181E989E181298A27 -:105100002182688A00902B8A688804F112026969FA -:1051100000F047FA3AE0307B0C2800D0FFDF122085 -:10512000ADF80400ADF834703CB305212173A4F848 -:105130000AB0A4F80EB0A4F810B027E00DA80090B3 -:1051400001AB224629463046FFF75CFA1EE00DA867 -:10515000009001AB224629463046FFF7B6FB15E02A -:1051600034E03B21ADF80400ADF8341074B3A4F87A -:105170000690A4F808B084F80AB007E0FFDF05E065 -:1051800010000020297A012917D0FFDFBDF80400A4 -:10519000AAF800006CB1BDF834002080BDF804000E -:1051A0006080BDF83400392803D03C2801D086F84F -:1051B0000CB011B00020BDE8F08F3C21ADF8040028 -:1051C000ADF8341014B1697AA172DFE7AAF80000D3 -:1051D000EFE72DE9F84356880F468046154605212E -:1051E000304607F0A9FE040000D1FFDF123400941E -:1051F0003B46414630466A6804F003F8BAE570B5AC -:105200000D46052107F098FE040000D1FFDF294676 -:1052100004F11200BDE8704003F08DBE70B50D467C -:10522000052107F089FE040000D1FFDF294604F1C3 -:105230001200BDE8704003F0ABBE70B50546052115 -:1052400007F07AFE040000D1FFDF04F108032146D5 -:105250002846BDE870400422B1E470B5054605213A -:1052600007F06AFE040000D1FFDF214628462368CC -:10527000BDE870400522A2E470B50646052107F09E -:105280005BFE040000D1FFDF04F1120003F046FED4 -:10529000401D20F0030511E0011D00880322431882 -:1052A00021463046FFF78BFC00280BD0607BABB269 -:1052B000684382B26068011D07F019FD606841888B -:1052C0000029E9D170BD70B50E46054602F082FD99 -:1052D000040000D1FFDF0120207266726580207813 -:1052E00020F00F00C01C20F0F00030302070BDE82E -:1052F000704002F072BD2DE9F0438BB00D461446AC -:10530000814606A9FFF799FB002814D14FF6FF76D6 -:1053100001274FF420588CB103208DF80000102095 -:10532000ADF8100007A8059007AA204604A909F0C7 -:10533000A4FB78B107200BB0BDE8F0830820ADF8DE -:1053400008508DF80E708DF80000ADF80A60ADF8C9 -:105350000C800CE00698A17801742188C1818DF839 -:105360000E70ADF80850ADF80C80ADF80A606A46D2 -:1053700002214846069BFFF789FBDCE708B50122BE -:105380008DF8022042F60202ADF800200A460323FF -:105390006946FFF73EFC08BD08B501228DF80220E2 -:1053A00042F60302ADF800200A4604236946FFF7DF -:1053B00030FC08BD00B587B079B102228DF800201D -:1053C0000A88ADF808204988ADF80A1000236A461B -:1053D0000521FFF75BFB07B000BD1020FBE709B11B -:1053E000072316E40720704770B588B00D461446B1 -:1053F000064606A9FFF721FB00280ED17CB1062046 -:10540000ADF808508DF80000ADF80A40069B6A46DA -:105410000821DC813046FFF739FB08B070BD05205C -:105420008DF80000ADF80850F0E700B587B059B12D -:1054300007238DF80030ADF80820039100236A4659 -:105440000921FFF723FBC6E71020C4E770B588B039 -:105450000C460646002506A9FFF7EFFA0028DCD126 -:1054600006980121123003F08BFD9CB121780629AA -:1054700021D2DFE801F0200505160318801E80B256 -:10548000C01EE28880B20AB1A3681BB1824203D970 -:105490000C20C2E71020C0E7042904D0A08850B92E -:1054A00001E00620B9E7012913D0022905D004291B -:1054B0001CD005292AD00720AFE709208DF800006D -:1054C0006088ADF80800E088ADF80A00A068039095 -:1054D00023E00A208DF800006088ADF80800E0881D -:1054E000ADF80A00A0680A25039016E00B208DF89D -:1054F00000006088ADF80800A088ADF80A00E088D8 -:10550000ADF80C00A0680B25049006E00C208DF887 -:10551000000060788DF808000C256A462946304660 -:10552000069BFFF7B3FA78E700B587B00D228DF838 -:105530000020ADF8081000236A461946FFF7A6FAC6 -:1055400049E700B587B071B102228DF800200A88C2 -:10555000ADF808204988ADF80A1000236A460621F4 -:10556000FFF794FA37E7102035E770B586B00646A6 -:1055700001200D46ADF808108DF80000014600230B -:105580006A463046FFF782FA040008D129463046C1 -:1055900001F0BCFA0021304601F0D6FA204606B0F0 -:1055A00070BDF8B51C4615460E46069F07F0F6FD81 -:1055B0002346FF1DBCB231462A46009407F0FFF98E -:1055C000F8BD30B41146DDE902423CB1032903D0F5 -:1055D000002330BC05F0B3BE0123FAE71A8030BCCB -:1055E000704770B50C460546FFF72FFB214628464D -:1055F00001F09BFA2846BDE87040012101F0A4BAF1 -:1056000018B18178012938D101E010207047018854 -:1056100042F60112881A914231D018DC42F601029A -:10562000A1EB020091422AD00CDC41B3B1F5C05F7E -:1056300025D06FF4C050081821D0A0F57060FF3855 -:105640001BD11CE001281AD002280AD117E0B0F5BE -:10565000807F14D008DC012811D002280FD0032845 -:105660000DD0FF2809D10AE0B0F5817F07D0A0F561 -:105670008070033803D0012801D0002070470F202C -:1056800070470A281ED007DC18D2DFE800F0191B8B -:105690001F1F171F231D1F21102815D008DC0B28E2 -:1056A00012D00C2810D00D2816D00F2806D10DE0EE -:1056B00011280BD084280BD087280FD003207047E7 -:1056C0000020704705207047072070470F20704763 -:1056D00004207047062070470C20704743F20200F8 -:1056E000704738B50C46050041D06946FEF7D6FA3A -:1056F000002819D19DF80010607861F302006070F5 -:105700006946681CFEF7CAFA00280DD19DF8001002 -:10571000607861F3C5006070A978C1F34101012987 -:1057200003D0022905D0072038BD217821F02001BF -:1057300002E0217841F020012170410704D0A978CE -:10574000C90861F386106070607810F0380F07D0D8 -:10575000A978090961F3C710607010F0380F02D101 -:105760006078400603D5207840F04000207000208B -:1057700038BD70B504460020088015466068FFF704 -:10578000B0FF002816D12089A189884211D860680D -:105790008078C0070AD0B1F5007F0AD840F2012016 -:1057A000B1FBF0F200FB1210288007E0B1F5FF7F9B -:1057B00001D90C2070BD01F201212980002070BDAB -:1057C00010B50478137864F3000313700478640848 -:1057D00064F3410313700478A40864F38203137024 -:1057E0000478E40864F3C30313700478240964F3B1 -:1057F000041313700478640964F34513137000787C -:10580000800960F38613137031B10878C10701D1A4 -:10581000800701D5012000E0002060F3C71313705A -:1058200010BD4278530702D002F0070306E012F0E1 -:10583000380F02D0C2F3C20300E001234A7863F3B9 -:1058400002024A70407810F0380F02D0C0F3C20054 -:1058500005E0430702D000F0070000E0012060F3FC -:10586000C5024A7070472DE9F04F95B00D00824691 -:1058700012D01221284612F081FB4FF6FF7B05AAB9 -:105880000121584605F021FA0024264637464FF4F8 -:1058900020586FF4205972E0102015B0BDE8F08F49 -:1058A0009DF81E0001280AD1BDF81C1041450BD0FF -:1058B00011EB09000AD001280CD002280CD0042CCE -:1058C0000ED0052C0FD10DE0012400E00224BDF81C -:1058D0001A6008E0032406E00424BDF81A7002E010 -:1058E000052400E00624BDF81A10514547D12C7458 -:1058F000BEB34FF0000810AA4FF0070ACDE90282AC -:10590000CDE900A80DF13C091023CDF810904246D6 -:105910003146584605F08CFA08BBBDF83C002A46D3 -:10592000C0B210A909F08AF8C8B9AE81CFB1CDE9EB -:1059300000A80DF1080C0AAE40468CE84102132382 -:1059400000223946584605F073FA40B9BDF83C00CC -:10595000F11CC01EC0B22A1D09F070F810B103205E -:105960009BE70AE0BDF82900E881062C05D19DF8E7 -:105970001E00A872BDF81C00288100208DE705A834 -:1059800005F0AFF900288BD0FFF77BFE85E72DE906 -:10599000F0471C46DDE90978DDF8209015460E0039 -:1059A000824600D1FFDF0CB1208818B1D5B111209B -:1059B000BDE8F087022D01D0012100E0002106F1B1 -:1059C000140004F071F8A8F8000002463B4629468E -:1059D000504605F07FFBC9F8000008B9A41C3C60E4 -:1059E0000020E5E71320E3E7F0B41446DDE90452B4 -:1059F0008DB1002314B1022C09D101E0012306E08E -:105A00000D7CEE0703D025F0010501230D7421461E -:105A1000F0BC05F094BC1A80F0BC70472DE9FE4F35 -:105A200091461A881C468A468046FAB102AB49461E -:105A300005F050FB050019D04046A61C278807F04A -:105A4000BFFB3246072629463B46009606F0EBFF91 -:105A500020882346CDE900504A4651464046FFF78C -:105A6000C3FF002020800120BDE8FE8F0020FBE75F -:105A70002DE9F04786B09146DDE90E460F46824695 -:105A800003AA05A904A8109D8DE807009846324690 -:105A900021465046FFF77BFF049909B1012200E03F -:105AA00000222A70002818D1F94A03AB1060059A29 -:105AB000009104F11400CDE901204A4639465046D0 -:105AC00004F0A9FBA8B1092811D2DFE800F005080D -:105AD0000510100A0C0C0E00002006B068E711201B -:105AE000FBE70720F9E70820F7E70D20F5E703209B -:105AF000F3E7BDF80C100498CDE9000143463246A7 -:105B000021465046FFF770FFE6E72DE9F04389B0E4 -:105B10000D46DDE9108781461C461646142103A870 -:105B200012F04EFA012002218DF810108DF80C00B1 -:105B30008DF81170ADF8146064B1A278D20709D065 -:105B40008DF81600E088ADF81A00A088ADF81800AE -:105B5000A068079008A80095CDE90110424603A966 -:105B600048466B68FFF784FF09B0BDE8F083F0B5E5 -:105B70008BB000240646069407940727089405A8CE -:105B80000994019400970294CDE903400D46102337 -:105B90002246304605F04CF978B90AA806A90194C6 -:105BA00000970294CDE90310BDF814300022294675 -:105BB000304604F013FF002801D0FFF762FD0BB060 -:105BC000F0BD04F0B3BD2DE9FC410C468046002633 -:105BD00002F000F9054620780D287DD2DFE800F0BC -:105BE000BC0713B325BD49496383AF959B00A84803 -:105BF000006820B1417841F010014170ADE04046AD -:105C000002F018F9A9E00421404607F095F90700D1 -:105C100000D1FFDF07F11401404603F0D9FEA5BB18 -:105C200013214046FCF7C2FC97E00421404607F0F0 -:105C300083F9070000D1FFDFE088ADF80000002005 -:105C4000B8819DF80000010704D5C00602D5A088E0 -:105C5000B88105E09DF8010040067ED5A088F88156 -:105C600005B9FFDF22462946404601F063FC0226C3 -:105C700073E0E188ADF800109DF8011009060FD51A -:105C8000072803D006280AD00AE024E00421404671 -:105C900007F052F9060000D1FFDFA088F08102264C -:105CA000CDB9FFDF17E00421404607F045F90700B2 -:105CB00000D1FFDF07F1140004F06FFD90F0010F39 -:105CC00002D1E079000648D5387C022640F0020077 -:105CD000387405B9FFDF00E03EE022462946404621 -:105CE00001F028FC39E00421404607F025F9017C49 -:105CF000002D01F00206C1F340016171017C21F029 -:105D000002010174E7D1FFDFE5E7022601214046E9 -:105D100002F0C2F821E00421404607F00DF90546E3 -:105D2000606800902089ADF8040001226946404671 -:105D300002F0D3F8287C20F0020028740DE0002D3A -:105D4000C9D1FFDFC7E7022600214046FFF766FA08 -:105D5000002DC0D1FFDFBEE7FFDF3046BDE8FC818C -:105D60003EB50C0009D001466B4601AA002005F0A3 -:105D7000E1F820B1FFF785FC3EBD10203EBD0020BC -:105D80002080A0709DF8050002A900F00700FDF733 -:105D9000A1FF50B99DF8080020709DF8050002A9E8 -:105DA000C0F3C200FDF796FF08B103203EBD9DF889 -:105DB000080060709DF80500C109A07861F3041027 -:105DC000A0709DF80510890961F3C300A0709DF8CB -:105DD0000410890601D5022100E0012161F342008F -:105DE0009DF8001061F30000A07000203EBD70B56A -:105DF000144606460D4651EA040005D075B1084622 -:105E00000AF08CFD78B901E0072070BD29463046C4 -:105E100005F0F1F810B1BDE8704032E454B120460D -:105E20000AF07CFD08B1102070BD21463046BDE867 -:105E3000704095E7002070BD2DE9FC5F0C46904650 -:105E40000546002701780822007A3E46B2EB111F72 -:105E50007ED104F10A0100910A31821E4FF0020A3C -:105E600004F1080B0191092A73D2DFE802F0ECDF9C -:105E700005F427277AA9CD006888042107F05CF88B -:105E8000060000D1FFDFB08920B152270726C2E00B -:105E90002802002051271026002C7DD06888A08081 -:105EA0000120A071A88900220099FFF7A0FF002817 -:105EB00073D1A8892081288AE081D1E0B5F81290B9 -:105EC000072824D1E87B000621D5512709F11400C9 -:105ED00086B2002CE1D0A88900220099FFF787FF45 -:105EE00000285AD16888A08084F806A0A88920815B -:105EF0000120A073288A2082A4F81290A88A00901A -:105F000068884B46A969019A01F0F1FAA8E0502788 -:105F100009F1120086B2002C3ED0A8890022594611 -:105F2000FFF765FF002838D16888A080A889E08045 -:105F3000287A072813D002202073288AE081E87B82 -:105F4000C0096073A4F81090A88A0090688801E0E6 -:105F500083E080E04B4604F11202A969D4E70120F6 -:105F6000EAE7B5F81290512709F1140086B2002C27 -:105F700066D06888042106F0DFFF83466888A08029 -:105F8000A88900220099FFF732FF00286ED184F81B -:105F900006A0A889208101E052E067E00420A073F8 -:105FA000288A2082A4F81290A88A009068884B461C -:105FB000A969019A01F09BFAA989ABF80E104FE08C -:105FC0006888FBF739FB07466888042106F0B4FFB0 -:105FD000064607B9FFDF06B9FFDF687BC00702D0BE -:105FE0005127142601E0502712264CB36888A08060 -:105FF000502F06D084F806A0287B594601F087FA76 -:106000002EE0287BA11DF9E7FE49A8894989814234 -:1060100005D1542706269CB16888A08020E053272C -:106020000BE06888A080A889E08019E068880421D6 -:1060300006F082FF00B9FFDF55270826002CF0D1BB -:10604000A8F8006011E056270726002CF8D06888D1 -:10605000A080002013E0FFDF02E0012808D0FFDF6E -:10606000A8F800600CB1278066800020BDE8FC9F86 -:1060700057270726002CE3D06888A080687AA07193 -:10608000EEE7401D20F0030009B14143091D01EB7B -:106090004000704713B5DB4A00201071009848B1EA -:1060A0000024684606F083FD002C02D1D64A0099F0 -:1060B00011601CBD01240020F4E770B50D460646B2 -:1060C00086B014465C21284611F07AFF04B9FFDF40 -:1060D000A0786874A2782188284601F042FA00204E -:1060E000A881E881228805F11401304603F055FCAF -:1060F0006A460121304604F0E8FD19E09DF80300EE -:10610000000715D5BDF806103046FFF730FD9DF8A5 -:106110000300BDF8061040F010008DF80300BDF834 -:106120000300ADF81400FF233046059A04F02EFF5B -:10613000684604F0D6FD0028E0D006B070BD10B56A -:106140000C4601F1140003F05FFC0146627C20461E -:10615000BDE8104001F03ABA70B50546042106F0DA -:10616000EBFE040000D1FFDF04F114010C462846C9 -:1061700003F02EFC21462846BDE8704003F02FBCFA -:1061800070B58AB00C460646FBF756FA050014D0E7 -:106190002878222827D30CB1A08890B101208DF84F -:1061A0000C0003208DF8100000208DF8110054B170 -:1061B000A088ADF81800206807E043F202000AB09A -:1061C00070BD0920FBE7ADF81800059004213046AA -:1061D00006F0B2FE040000D1FFDF04F1140003F06A -:1061E0002AFC000701D40820E9E701F0F3FD60B1C3 -:1061F00008A802210094CDE9011095F8232003A9F5 -:1062000030466368FFF734FCD9E71120D7E72DE962 -:10621000F04FB2F802A0834689B015468946504631 -:10622000FBF70AFA07460421504606F085FE0026D1 -:10623000044605964FF002080696ADF81C6007B9B3 -:10624000FFDF04B9FFDF4146504605F0F7F950B9CA -:1062500007AA06A905A88DE8070042462146504630 -:106260006368FFF794FB674807AB0660DDE905123A -:1062700004F11400CDF80090CDE90320CDE90131FF -:1062800097F82320594650466B6803F01DFC060022 -:106290000AD0022E04D0032E14D0042E00D0FFDF2B -:1062A00009B03046BDE8F08FBDF81C000028F7D0DB -:1062B0000599CDE900104246214650466368FFF734 -:1062C00093FBEDE7687840F008006870E8E72DE997 -:1062D000F04F9BB004464FF000084A48ADF8548098 -:1062E000ADF83080ADF85080A0F80880ADF814808B -:1062F000ADF81880ADF82080ADF81C800079164606 -:106300000D464746012808D0022806D0032804D0AD -:10631000042802D008201BB0C4E720460AF0BAFACD -:10632000D0BB28460AF0B6FAB0BB60680AF0FFFAA4 -:1063300090BB606848B160892189884202D8B1F574 -:10634000007F01D90C20E6E780460BAA06A9284663 -:10635000FFF70FFA0028DED168688078C0F34100AB -:10636000022808D19DF8190010F0380F03D02869D1 -:106370000AF0D4FA80B905A92069FFF7B2F900281C -:10638000C9D1206950B1607880079DF8150000F0F0 -:10639000380002D5D0B301E011E0B8BB9DF814007D -:1063A00080060ED59DF8150010F0380F03D06068F8 -:1063B0000AF0B4FA18B960680AF0B9FA08B1102006 -:1063C000A9E707A96069FFF78CF90028A3D16069E4 -:1063D00040B19DF81D0000F0070101293FD110F0E8 -:1063E000380F3CD008A9A069FFF77BF9002892D1AB -:1063F0009DF81C00800632D49DF8200080062ED423 -:10640000A06904E0280200201400002027E040B129 -:106410009DF8210000F00701012920D110F0380F6C -:106420001DD0E06818B10078C8B11C2817D20EAA98 -:10643000611C2046FFF7C4F90120B94660F30F271D -:10644000BA4607468DF84E0042F60300ADF84C0000 -:106450000DF13B0217A9286808F00FFB08B10720CF -:1064600059E79DF85C0016A9CDF80090C01CCDE955 -:10647000019100F0FF0B00230BF20122514613A8FB -:1064800004F066FBF0BBBDF858000990FE482A896D -:1064900029690092CDE901106B89BDF82C2028688C -:1064A000069904F055FB01007ED120784FF0020AD6 -:1064B000C10601D480062BD5ADF80C90606950B9A7 -:1064C00007A906A8FFF7ADF99DF81D0020F0070009 -:1064D000401C8DF81D009DF81C008DF84E7040F09A -:1064E000C8008DF81C0042F60210ADF84C000CA953 -:1064F00003AACDF800A0CDE90121002340F2032238 -:1065000013A800E01EE0079904F022FB01004BD124 -:10651000DD484D4608385B460089ADF839000EA8C5 -:10652000CDE90290CDF80490CDF810904FF0070916 -:106530000022CDF80090BDF858104FF6FF7004F01F -:106540004DFA10B1FFF79DF8E5E69DF8380000061A -:1065500025D52946012060F30F218DF84E704FF4A8 -:106560002450ADF84C00ADF8105062789DF8100042 -:10657000002362F300008DF810006278CDF800A0CF -:10658000520862F341008DF8100004AACDE90125FC -:1065900040F2032213A804F0DBFA010004D1606882 -:1065A00088B32069A8B900E086E005A906A8FFF72E -:1065B00038F96078800706D49DF8150020F038007F -:1065C0008DF8150005E09DF8140040F040008DF8AE -:1065D00014008DF84E7042F60110ADF84C00208981 -:1065E00040F20121B0FBF1F201FB1202606814AB32 -:1065F000CDF80080CDE90103002313A8059904F02C -:10660000A7FA010058D12078C00729D0ADF80C5066 -:10661000A06950B908A906A8FFF703F99DF8210061 -:1066200020F00700401C8DF821009DF820008DF817 -:106630004E7040F040008DF8200042F60310ADF897 -:106640004C0015A903AACDF800A0CDE90121002333 -:1066500040F2032213A8089904F07AFA01002BD122 -:10666000E06868B32946012060F30F218DF84E7071 -:1066700042F60410ADF84C00E068002302788DF873 -:10668000602040788DF86100E06818AA4088ADF875 -:106690006200E06800798DF86400E068C088ADF8B9 -:1066A0006500CDF80090CDE901254FF4027213A8E2 -:1066B00004F04EFA010003D0099800F0B3FF2AE677 -:1066C000714803210838017156B100893080BDF846 -:1066D00050007080BDF83000B080BDF85400F080EC -:1066E000002018E670B501258AB016460B46012831 -:1066F00002D0022816D104E08DF80E504FF420503D -:1067000003E08DF80E5042F60100ADF80C005BB1CD -:106710000024601C60F30F2404AA08A9184608F09E -:10672000ACF918B107204AE5102048E504A99DF806 -:1067300020205548CDE90021801E029000232146EB -:1067400003A802F2012204F003FA10B1FEF799FF48 -:1067500035E54D4808380EB1C188318005710020FB -:106760002DE5F0B593B0074601268DF83E6041F661 -:106770000100ADF83C0012AA0FA93046FFF7B2FFA6 -:10678000002848D1404C0025083CE7B31C2102A852 -:1067900011F016FC9DF808008DF83E6040F02000D6 -:1067A0008DF8080042F60520ADF83C000E959DF8E6 -:1067B0003A00119520F00600801C8DF83A009DF8F3 -:1067C00038006A4620F0FF008DF838009DF8390047 -:1067D00009A920F0FF008DF839000420ADF82C0045 -:1067E000ADF830000EA80A9011A80D900FA80990DE -:1067F000ADF82E5002A8FFF76AFD00280BD1BDF8B6 -:106800000000608100E008E0BDF80400A081401CA9 -:10681000E0812571002013B0F0BD6581A581BDF830 -:106820004800F4E72DE9F74F1749A0B000240839D4 -:1068300017940A79A146012A04D0022A02D008201E -:1068400023B02FE5CA88824201D00620F8E72198BC -:106850008A46824201D10720F2E701202146ADF8A5 -:1068600048004FF6FF7860F30F21ADF84A808DF8AD -:106870006E0042F6020B06918DF87240ADF86CB0D6 -:10688000ADF870401CA901E0300200201391ADF872 -:10689000508012A804F049FA00252E462F460DAB71 -:1068A000072212A9404604F043FA78B10A285DD1C4 -:1068B00095B38EB3ADF86450ADF866609DF85E0098 -:1068C0008DF8144019AC012864D06BE09DF83A00B3 -:1068D0001FB3012859D1BDF8381059451FD118A848 -:1068E00009A901940294CDE9031007200090BDF896 -:1068F000361010230022404604F09AFAB0BBBDF8CF -:106900006000042801D006284AD1BDF8241021983F -:1069100081423AD10F2093E73AE0012835D1BDF802 -:106920003800B0F5205F03D042F6010188422CD137 -:10693000BAF80600BDF83610884201D1012700E000 -:10694000002705B19EB1219881421ED118A809AA3D -:1069500001940294CDE90320072000900D461023F6 -:106960000022404604F064FA00B902E02DE04E46F1 -:106970000BE0BDF86000022801D0102810D1C0B291 -:1069800017AA09A908F05AF850B9BDF8369086E759 -:10699000052055E705A917A8221D08F06EF808B1D3 -:1069A00003204DE79DF814000023001DC2B28DF8AE -:1069B000142022980092CDE901401BA8069904F00A -:1069C000C7F810B902228AF80420FEF75AFE37E70A -:1069D00010B50B46401E88B084B205AA00211846A7 -:1069E000FEF7EEFE00200DF1080C06AA05A90190A5 -:1069F0008CE80700072000900123002221464FF673 -:106A0000FF7003F0EBFF0446BDF81800012800D02A -:106A1000FFDF2046FEF735FE08B010BDF0B5FF4F92 -:106A2000044687B038790E46032804D0042802D0E3 -:106A3000082007B0F0BD04AA03A92046FEF799FE7E -:106A40000500F6D160688078C0F3410002280AD1C1 -:106A50009DF80D0010F0380F05D0206909F05EFF99 -:106A600008B11020E5E7208905AA21698DE8070013 -:106A70006389BDF810202068039904F069F810B10B -:106A8000FEF7FFFDD5E716B1BDF8140030800420F5 -:106A900038712846CDE7F8B50C0006460BD0014604 -:106AA0004FF6FF7500236A46284604F043FA20B1EA -:106AB000FEF7E7FDF8BD1020F8BD69462046FEF759 -:106AC00010FE0028F8D1A078314600F001032846D6 -:106AD000009A04F05BFAEBE730B587B01446002269 -:106AE0000DF1080C05AD01928CE82C0007220092F4 -:106AF0000A46014623884FF6FF7003F06FFFBDF88A -:106B000014102180FEF7BDFD07B030BD70B50D46F5 -:106B1000042106F011FA040000D1FFDF294604F138 -:106B20001400BDE8704002F07FBF70B50D4604212F -:106B300006F002FA040000D1FFDF294604F1140038 -:106B4000BDE8704002F093BF70B50D46042106F019 -:106B5000F3F9040000D1FFDF294604F11400BDE879 -:106B6000704002F0ABBF70B50546042106F0E4F9B1 -:106B7000040000D1FFDF214628462368BDE87040AD -:106B80000122FEF74BBF70B50646042106F0D4F98A -:106B9000040000D1FFDF04F1140002F035FF401DB6 -:106BA00020F0030511E0011D008800224318214652 -:106BB0003046FEF733FF00280BD0607CABB2684351 -:106BC00082B2A068011D06F092F8A06841880029F1 -:106BD000E9D170BD70B50546042106F0ADF9040099 -:106BE00000D1FFDF214628466368BDE870400222DD -:106BF000FEF714BF70B50E46054601F0EBF8040031 -:106C000000D1FFDF0120207266726580207820F0BD -:106C10000F00001D20F0F00040302070BDE87040F3 -:106C200001F0DBB810B50446012900D0FFDF204693 -:106C3000BDE810400121FEF7F1BA2DE9F04F97B001 -:106C40004FF0000A0C008346ADF814A0D04619D0CE -:106C5000E06830B1A068A8B10188ADF81410A0F8C0 -:106C600000A05846FAF7E8FC070043F2020961D099 -:106C7000387822285CD30421584606F05DF90500D7 -:106C800005D103E0102017B0BDE8F08FFFDF05F15C -:106C9000140002F0B9FE401D20F00306A078012880 -:106CA00003D0022801D00720EDE7218807AA584623 -:106CB00004F00BF830BB07A804F013F810BB07A8CA -:106CC00004F00FF848B99DF82600012805D1BDF859 -:106CD0002400A0F52451023902D04FF45050D2E7DD -:106CE000E068B0B1CDE902A00720009005AACDF878 -:106CF00004A00492A2882188BDF81430584603F0FD -:106D00006DFE10B1FEF7BDFCBDE7A168BDF8140033 -:106D100008809DF81F00C00602D543F20140B2E78B -:106D20000B9838B1A1780078012905D080071AD4D2 -:106D30000820A8E74846A6E7C007F9D002208DF84A -:106D40003C00A8684FF00009A0B1697C42887143FB -:106D500091420FD98AB2B3B2011D05F07EFF804681 -:106D6000A0F800A006E003208DF83C00D5F80080D4 -:106D70004FF001099DF8200010F0380F00D1FFDF1F -:106D80009DF820002649C0F3C200084497F823105C -:106D900010F8010C884201D90F2074E72088ADF863 -:106DA000400014A90095CDE90191434607220FA99F -:106DB0005846FEF75DFE002891D19DF8500050B96D -:106DC000A078012807D1687CB3B2704382B2A8686A -:106DD000011D05F056FF002055E770B50646154623 -:106DE0000C460846FEF70CFC002805D12A46214631 -:106DF0003046BDE8704075E470BD13E570B51E46C1 -:106E000014460D000ED06CB1616859B160B10349F0 -:106E1000C988814208D0072070BD000028020020E8 -:106E2000468301001020F7E72068FEF7E9FB002801 -:106E3000F2D1324621462846BDE87040FFF747BAF6 -:106E400070B515460C0006D038B1FE49098981425B -:106E500003D00720E0E71020DEE72068FEF7D0FB34 -:106E60000028D9D129462046BDE87040D6E570B546 -:106E7000064686B00D461446104609F031FDD0BBDB -:106E8000606809F054FDB0BBA6F57F40FF3803D021 -:106E90003046FAF7D1FB80B128466946FEF7E3FC9D -:106EA00000280CD19DF810100F2008293CD2DFE8F3 -:106EB00001F008060606060A0A0843F2020006B0B8 -:106EC000AAE70320FBE79DF80210012908D1BDF8CD -:106ED0000010B1F5C05FF2D06FF4C052D142EED0D5 -:106EE0009DF8061001290DD1BDF80410A1F5285117 -:106EF000062907D200E028E0DFE801F003030403DD -:106F00000303DCE79DF80A1001290ED1BDF8081033 -:106F1000B1F5245FD3D0A1F524510239CFD0012996 -:106F2000CDD0022901D1CAE7FFDF606878B900231C -:106F300005AA2946304603F0FDFF10B1FEF7A1FB7C -:106F4000BDE79DF81400800601D41020B7E76188E2 -:106F5000224628466368FFF7BFFDB0E72DE9F043FE -:106F6000814687B088461446104609F0B9FC18B12E -:106F7000102007B0BDE8F083002306AA414648462A -:106F800003F0D8FF18B100BFFEF77BFBF1E79DF8D7 -:106F90001800C00602D543F20140EAE700250727A2 -:106FA00005A8019500970295CDE9035062884FF638 -:106FB000FF734146484603F03BFF060013D160686B -:106FC00009F08EFC60B960680195CDE90250009728 -:106FD0000495238862884146484603F029FF064607 -:106FE000BDF8140020803046CEE739B1954B0A88B1 -:106FF0009B899A4202D843F2030070471DE610B500 -:1070000086B0904C0423ADF81430638943B1A48951 -:107010008C4201D2914205D943F2030006B010BD63 -:107020000620FBE7ADF81010002100910191ADF8AA -:10703000003002218DF8021005A9029104A90391E4 -:10704000ADF812206946FFF7F8FDE7E72DE9FC47A8 -:1070500081460E46084609F01DFC88BB4846FAF7F3 -:10706000EBFA5FEA00080AD098F80000222829D33A -:107070000421484605F060FF070005D103E043F214 -:107080000200BDE8FC87FFDF07F1140002F0D3FC2B -:1070900005463078012803D0022804D00720F0E705 -:1070A000A8070FD502E015F01C0F0BD0B079341DE6 -:1070B000C00709D0E08838B1A06809F0EBFB18B12F -:1070C0001020DEE70820DCE732782088002628B38D -:1070D000A0F201130721112B18D20CD2DFE803F024 -:1070E0000B090D0B1D0B121D100B0B1D1D1D1D0B78 -:1070F0001D00022A11D10846C3E7012AFBD00CE08B -:107100002A0700E0EA06002AF5DA06E0A0F5C072D8 -:107110001F2A02D97D3A022AEDD8C6B200F05AFEE3 -:1071200050B198F82300CDE90006FA892346394684 -:107130004846FEF7EAFCA4E71120A2E72DE9F04F4C -:107140008BB01F4615460C4683460026FAF774FAA4 -:1071500028B10078222805D208200BB094E543F22C -:107160000200FAE7B80801D00720F6E7032F00D1A4 -:1071700000274FF6FF79CCB1022D73D3204609F0DA -:10718000D6FB30B904EB0508A8F1010009F0CFFBEC -:1071900008B11020E1E7AD1EAAB221464846FBF730 -:1071A000E7FE38F8021C88425CD1ADB22549B80729 -:1071B00002D58889401C00E001201FFA80F8F807FA -:1071C00001D08F8900E04F4605AA4146584603F09A -:1071D0007CFD4FF0070A4FF00009ACB3204608E0F1 -:1071E000408810283ED8361D304486B2AE4239D28F -:1071F000A01902884245F3D354E000BF9DF8170060 -:1072000002074FD584B304EB0608361DB8F80230E8 -:10721000B6B2102B26D89A19AA4223D8B8F8002063 -:1072200091421FD1C00620D5CDE900A90DF1080C6F -:107230000AAAA11948468CE80700B8F800100022F5 -:10724000584603E0280200202CE00BE003F0C6FBC8 -:1072500010B1FEF716FA80E7B8F80200BDF8281062 -:10726000884202D00B2078E704E0B8F802003044EE -:1072700086B206E0C00604D55846FEF778FC002822 -:1072800088D19DF81700BDF81A1020F010008DF875 -:107290001700BDF81700ADF80000FF235846009A0C -:1072A00003F074FE05A803F01CFD18B9BDF81A1010 -:1072B000B942A3D90421584605F03EFE040000D18E -:1072C000FFDFA2895AB1CDE900A94D46002321462E -:1072D0005846FEF71AFC0028BDD1A5813DE70020E5 -:1072E0003BE72DE9FF4F8BB01E4617000D464FF0D0 -:1072F000000412D0B00802D007200FB0C4E4032E5F -:1073000000D100265DB1084609F008FB28B938888D -:10731000691E084409F002FB08B11020EDE7C74AD6 -:10732000B00701D5D18900E00121F0074FF6FF78C1 -:1073300002D0D089401E00E0404686B206AA0B98D3 -:1073400003F0C3FC4FF000094FF0070B0DF1140AD6 -:1073500039E000BF9DF81B00000734D5CDF804903C -:10736000CDF800B0CDF80890CDE9039A434600224D -:107370000B9803F05DFD60BB05B3BDF814103A88AF -:1073800021442819091D8A4230D3BDF81E2020F857 -:10739000022BBDF8142020F8022BCDE900B9CDE96D -:1073A0000290CDF810A0BDF81E10BDF814300022D8 -:1073B0000B9803F03DFD08B103209EE7BDF81400D3 -:1073C0002044001D84B206A803F08BFC20B10A28DB -:1073D00006D0FEF756F990E7BDF81E10B142B9D9B4 -:1073E00034B17DB13888A11C884203D20C2084E7D7 -:1073F000052082E7224629464046FBF7B9FD0146B3 -:1074000028190180A41C3C80002076E710B50446B2 -:1074100009F066FA08B1102010BD8848C0892080A4 -:10742000002010BDF0B58BB00D460646142103A810 -:1074300010F0C6FD01208DF80C008DF81000002022 -:107440008DF81100ADF814503046FAF7F5F848B150 -:107450000078222812D30421304605F06DFD040087 -:1074600005D103E043F202000BB0F0BDFFDF04F1F1 -:107470001400074602F0DFFA800601D40820F3E783 -:10748000207C022140F00100207409A80094CDE97D -:107490000110072203A930466368FEF7E9FA20B11C -:1074A000217C21F001012174DEE729463046FDF7F9 -:1074B000A6FE08A9384602F0ADFA00B1FFDFBDF81C -:1074C0002040172C01D2172000E02046A84201D905 -:1074D0002C4602E0172C00D2172421463046FFF735 -:1074E00024FB21463046FDF7B0FB0020BCE7F8B591 -:1074F0001C4615460E46069F05F050FE2346FF1D0E -:10750000BCB231462A46009405F059FAF8BD70B570 -:107510000C4605460E21204610F030FD002020804C -:107520002DB1012D01D0FFDF76E4062000E005201B -:10753000A07171E410B548800878134620F00F0060 -:10754000001D20F0F00080300C460870142219460F -:1075500004F1080010F0D8FC00F03FFC374804604C -:1075600010BD2DE9F047DFF8D890491D064621F0FF -:10757000030117460C46D9F8000005F036FB05005C -:1075800000D1FFDF4FF000083560A5F800802146EC -:10759000D9F8000005F029FB050000D1FFDF756078 -:1075A000A5F800807FB104FB07F1091D0BD0D9F8C5 -:1075B000000005F01AFB040000D1FFDFB460C4F83E -:1075C0000080BDE8F087C6F80880FAE72DE9F041B1 -:1075D0001746491D21F00302194D0646016814465D -:1075E000286805F02DFB22467168286805F028FB05 -:1075F0003FB104FB07F2121D03D0B168286805F003 -:107600001FFB042005F044FC0446042005F048FC60 -:10761000201A012804D12868BDE8F04105F0DABA43 -:10762000BDE8F08110B50C4603F01BFB00B1FFDF95 -:107630002046BDE81040FEF724B8000028020020D4 -:107640001400002038B582880A800C46C188121DBB -:1076500090B26A4604F091FDBDF80000032800D303 -:107660000320C1B2208800F077FF38BD38B582888A -:107670000A800C46C188121D90B26A4604F07DFD56 -:10768000BDF80000022800D30220C1B2208800F01B -:1076900063FF401CC0B238BD2DE9FE4F0C46F849CF -:1076A00081464022D1E90201CDE9010109F103003F -:1076B00020F00301C91C21F0030100916846114626 -:1076C00005F075FAEF4E002C02D1EF4A0099916057 -:1076D000009901440091357E05F1010504D1E8B21D -:1076E00007F052F900B1FFDF009800EB0510C01C55 -:1076F00020F00301009144B9727A00200870B08B29 -:1077000080B203F036F900B1FFDF0098F169084458 -:1077100000902146684600F0E6FE0098C01C20F06C -:1077200003000090717A04B1002005F02AFB009953 -:10773000084400902146684600F019FF00273D46A6 -:10774000B24696F801800CE0284600F0AFFE0646EF -:1077500081788088FDF710FB71786D1C00FB017744 -:10776000EDB24545F0D10098C01C20F00300009018 -:1077700004B100203946FDF70AFB009900270844B0 -:1077800000903D469AF801800CE0284600F08EFEFD -:107790000646C1788088FEF774FC71786D1C00FB8A -:1077A0000177EDB24545F0D10098C01C20F00300F0 -:1077B000009004B100203946FEF76CFC00990844A3 -:1077C00000210090084603F064FD2146684600F061 -:1077D00050FE0098C01D20F0070200922CBBAB4960 -:1077E0000020FBF7E3FAFAF7D5FBA64801AA00212F -:1077F0000C30FAF7D7FF00B1FFDF9AF81900FEF757 -:10780000B0FF00B1FFDF9F484FF4F671383010F041 -:10781000D7FB9C480421383080F8E91180F8EA1140 -:10782000062180F8EB11032101710099A1EB0900F9 -:10783000BDE8FE8F70B5934C06463834207804EBD3 -:107840004015E078083590B9A01990F8E8010028B3 -:107850000ED0A0780F2800D3FFDF2021284610F09B -:10786000AFFB687866F3020068700120E07028467C -:1078700070BD2DE9F04105460C4600270078052132 -:1078800090463E46B1EB101F00D0FFDF287A58B17A -:1078900001280FD0FFDF00BFA8F800600CB12780DF -:1078A00066800020BDE8F0810127092674B1688850 -:1078B000A08008E00227142644B16888A0802869C7 -:1078C000E060A88A2082287B2072E5E7A8F80060A3 -:1078D000E7E710B56C4C6068C11D21F007018142DB -:1078E00000D0FFDF67480121002201704270017261 -:1078F00041720273052282821F22C282417364A2F6 -:1079000002610A22027641764FF4B061C16161687A -:10791000416010BD30B55C4C1568636808339D420A -:1079200002D20420136030BD564B5D785A6802EBDA -:10793000C502107051700320D08017209080012064 -:10794000D07090705878401C587060680830606043 -:10795000002030BD70B506464A480024457807E04F -:10796000204600F0A3FD0178B14204D0641CE4B2CB -:10797000AC42F5D1002070BDF7B5064608780C463C -:10798000F8B1FFF7E7FF0546202E06D0212E1AD0CA -:10799000222E18D0232E14D110E000F092FD0DB14C -:1079A000697800E00021401A81B2A0780144FF29E3 -:1079B00007D830B1A088022805D202E060881728D5 -:1079C00001D20720FEBD65B9207802AA0121FFF788 -:1079D000A1FF0028F6D12078FFF7BCFF050000D1F9 -:1079E000FFDF202E08D0212E0ED0222E0FD0232EE6 -:1079F00007D0FFDF0020FEBDA0786870A088E88077 -:107A0000F8E76088A880F5E7A078A870F2E7A0788A -:107A1000E870EFE71A2841D00DDC13283ED2DFE8EA -:107A200000F01B3D203D3D272723252D3D3D293DD1 -:107A30003D3D3D3B0F00302802D003DC1E282DD1F8 -:107A4000072070473A38092828D2DFE800F01527C8 -:107A50000F272727272707000020704743F204003D -:107A6000704743F202007047042070470D207047B2 -:107A70000F2070470820704711207047132070476F -:107A80004C830100640200201C0000200000002044 -:107A90006E524635780000000620F0E70320EEE73E -:107AA00010B5007800F0010004F062FBBDE8104062 -:107AB000B0E70EB5017801F001018DF800104178B2 -:107AC00001F001018DF801100178C1F340018DF83A -:107AD00002104178C1F340018DF803100178890844 -:107AE0008DF80410417889088DF8051081788DF89B -:107AF0000610C1788DF8071000798DF808006846E7 -:107B000003F0B4FFFFF786FF0EBD2DE9F84FDFF855 -:107B1000F883FE4C00261FE0012000F06BFD0120E1 -:107B2000FFF788FE054640214746D8F8080005F0D3 -:107B30005CF8686000B9FFDF686803F084FEA8B1F4 -:107B40002846F9F7EAFE284600F05AFD20B94022FF -:107B50006968B86805F074F894F9E9010428DBDA7B -:107B6000022005F095F907460025A6E04022696845 -:107B7000D8F8080005F064F8F2E7B8F802104046BB -:107B8000491C89B2A8F80210B94201D300214180F2 -:107B90000221B8F8020005F0CFF9002865D0B8F846 -:107BA0000200694604F063FAFFF734FF00B1FFDF1B -:107BB0009DF8000078B1B8F8020005F001FB5FEA1B -:107BC000000900D1FFDF484604F08DFD18B1B8F878 -:107BD000020003F022FDB8F8020005F0DFFA5FEAC8 -:107BE000000900D1FFDF484604F075FDE8BB032122 -:107BF000B8F8020005F0A0F95FEA000B48D1FFDFFA -:107C000046E000BFDBF80C0010B10078FF2849D037 -:107C1000022000F0EFFC0220FFF70CFE82464846EF -:107C200004F065FECAF8040000B9FFDFDAF80400CA -:107C300004F02DFF002100900170B8F802105046AA -:107C4000AAF8021003F0C2FB484604F022FF00B974 -:107C5000FFDF504600F0D4FC18B99AF80100000785 -:107C600004D50099CBF80C1012E024E0DBF80C00EE -:107C700038B10178491C11F0FF01017008D1FFDF14 -:107C800006E000221146484600F0F1FB00B9FFDF94 -:107C900094F9EA01022805DBB8F8020003F071FB51 -:107CA0000028AFD194F9E901042804DB484604F028 -:107CB00054FF00B101266D1CEDB2BD4204D294F90F -:107CC000EA010228BFF659AF002E7FF423AFBDE8CA -:107CD000F84F032000F08EBC10B58B4CE0600868B4 -:107CE0002061AFF2D910FBF774F8607010BD8748BF -:107CF0000021383801708448017085494160BEE632 -:107D000070B505464FF080500C46D0F8A410491CC1 -:107D100005D1D0F8A810C9430904090C0BD050F8BC -:107D2000A01F01F001012970416821608068A080D6 -:107D3000287830B970BD0621204608F0B4FA012039 -:107D40002870607940F0C000607170BD70B54FF070 -:107D500080540D46D4F88010491C0BD1D4F88410FF -:107D6000491C07D1D4F88810491C03D1D4F88C10D1 -:107D7000491C0CD0D4F880100160D4F88410416004 -:107D8000D4F888108160D4F88C10C16002E0102112 -:107D900008F089FAD4F89000401C0BD1D4F8940074 -:107DA000401C07D1D4F89800401C03D1D4F89C00A3 -:107DB000401C09D054F8900F286060686860A06883 -:107DC000A860E068E86070BD2846BDE870401021FA -:107DD00008F069BA4D4800792CE570B54B4CE07855 -:107DE00030B3207804EB4010407A00F007002044C4 -:107DF00090F9E801002800DCFFDF2078002504EB83 -:107E00004010407A00F00700011991F8E801401E87 -:107E100081F8E8012078401CC0B220700F2800D102 -:107E20002570A078401CA07008F070F9E57070BD56 -:107E3000FFDF70BD3EB50546032105F07DF8044621 -:107E4000284605F0ABF9054604B9FFDFE06818B134 -:107E50000078FF2800D1FFDF01AA6946284600F01C -:107E600006FB60B9FFDF0AE0002202A9284600F005 -:107E7000FEFA00B9FFDF9DF8080000B1FFDF9DF8B2 -:107E80000000411E8DF80010EED2E0680199884292 -:107E900001D10020E0603EBD70B50546A0F57F40F1 -:107EA0000C46FF3800D1FFDF012C01D0FFDF70BD91 -:107EB000FFF790FF040000D1FFDF207820F00F00D3 -:107EC000401D20F0F00050302070658000202072AE -:107ED00001202073BDE870407FE72DE9F041164690 -:107EE0000D460746FFF776FF040000D1FFDF20783C -:107EF00020F00F00401D20F0F0005030207067800F -:107F000001202072286805E01C0000209C0200204F -:107F1000100E00202061A888A0822673BDE8F041E1 -:107F20005BE77FB5FFF716FD040000D1FFDF02A974 -:107F30002046FFF787FB054603A92046FFF796FB7F -:107F40008DF800508DF80100BDF80800001DADF857 -:107F50000200BDF80C00001DADF80400E088ADF88B -:107F60000600684604F0EDF8002800D0FFDF7FBD72 -:107F70002DE9F05FFA4E04464FF00008307810B15A -:107F80000820BDE8F09F204608F0AAFC08B11020A8 -:107F9000F7E7F44D287808B9FFF79BFC6D7A00F0FD -:107FA00090FAA84208D2281AC1B222460020FFF750 -:107FB000B1FC5FEA0008E4D1E9484168C91C21F03E -:107FC000030100274160E7483E46BA46BB463D46AE -:107FD00090F8019007E0284600F068FA40786D1CA0 -:107FE0000644EDB27F1C4D45F5D1DE4D0BEB87000D -:107FF000C6EBC60100EB8100697ADFF8649300EB01 -:108000008A0000EBC100D9F8041047180121384656 -:10801000FFF742FB064621683844884202D8B6F58D -:10802000803F15D320600020FFF794FC04000DD0A2 -:1080300004F10B00D9F8041020F003004E468842EA -:1080400000D0FFDF6878401E68707460042098E7F5 -:1080500000213846FFF720FB0546AE4200D0FFDF87 -:10806000E919C9F8041021604FF6FF71A9F8021050 -:10807000012189F80010404683E72DE9F0410446CC -:10808000B74817460D46007808B108200AE40846AC -:1080900008F000FC08B1102004E4B24E307808B9B2 -:1080A000FFF717FC601E1E2807D8012C3DD1287849 -:1080B000FE283AD830760020E8E7A4F120001F28F7 -:1080C00005D8E0B23A462946BDE8F04154E4A4F1AF -:1080D00040004FF000081F281FD8402C02D0412C30 -:1080E00023D115E028786C78012801D91320CDE739 -:1080F000FF2C08D806F02CFE074607F0C0FF381A00 -:10810000401EA04201DA1220C0E72888308124E016 -:108110002846BDE8F04100F09BBAA4F1A0001F285A -:1081200003D8A02C03D0A12C06D00720AEE72878D6 -:1081300000F00100707610E029680920F829A5D325 -:108140008A07A3D1727B02F00302012A04D1F28ACA -:10815000D73293B28B4299D8F161404696E72DE928 -:10816000F04781460E46084608F0BAFB48B9484633 -:1081700008F0D4FB28B909F1030020F003014945B8 -:1081800002D01020BDE8F08776484FF0000A383062 -:10819000817869B14178804600EB41140834378812 -:1081A00032460021204600F039FA050004D027E0CD -:1081B000A6F800A00520E5E7B9F1000F24D030882B -:1081C000B84201D90C251FE0607800F00705284669 -:1081D00000F010FA08EB0507324697F8E801494627 -:1081E000401C87F8E801204607F5F47700F016FAFE -:1081F00005463878401E3870032000F0FBF92DB199 -:108200000C2D01D0A6F800A02846BBE76078544E9C -:1082100000F00701012923D002290CD0032933D013 -:10822000FFDF98F801104046491CC9B288F80110D8 -:108230000F2934D035E0616821B1000702D460888D -:10824000FFF7F8FD98F8EA014746012802D1707857 -:10825000FAF7DEFD97F9EA010428E2DBFFDFE0E749 -:10826000616819B14022B06804F0EAFC98F8E901AD -:108270004746032802D17078FAF7CAFD97F9E90159 -:108280000428CEDBFFDFCCE7C00602D56088FFF70D -:10829000D1FD98F9EB010628C3DBFFDFC1E780F8C9 -:1082A00001A08178491E8170617801F0070101EB1E -:1082B000080090F8E811491C80F8E811A4E770B5AF -:1082C0000D46044608F0E6FA18B9284608F008FBFF -:1082D00008B1102070BD29462046BDE8704006F068 -:1082E0008ABB70B5044615460E46084608F0D2FA19 -:1082F00018B9284608F0F4FA08B1102070BD022C15 -:1083000003D0102C01D0092070BD2A4631462046EA -:1083100006F094FB0028F7D0052070BD70B5144618 -:108320000D46064608F0B6FA38B9284608F0D8FADD -:1083300018B9204608F0F2FA08B1102070BD2246A4 -:108340002946304606F099FB0028F7D0072070BD7B -:108350003EB5044608F0C4FA30B110203EBD00001E -:108360001C00002064020020684603F00EFBFFF7AB -:1083700051FB0028F2D19DF806002070BDF80800DE -:108380006080BDF80A00A0800020E7E770B50546D0 -:108390000C46084608F0C2FA20B93CB1206808F043 -:1083A0009FFA08B1102070BDA08828B12146284648 -:1083B000BDE87040FDF7E4BE092070BD70B504460D -:1083C0000D46084608F066FA30B9601E1E2814D81B -:1083D000284608F05FFA08B1102070BD022C01D9C0 -:1083E000072070BD04B9FFDFBF4800EB840050F8E0 -:1083F000041C2846BDE870400847A4F120001F284F -:1084000005D829462046BDE87040F9F766BDF02C36 -:10841000E6D1A86808F03EFA0028DDD1284603F02E -:10842000E2FEBDE87040FFF7F5BA70B504460D46B0 -:10843000084608F055FA30B9601E1E280DD82846A7 -:1084400008F028FA08B1102070BD012C01D0022CD0 -:1084500001D1062070BD072070BDA4F120001F28A7 -:10846000F9D829462046BDE87040F9F773BD04F0FD -:1084700001B908B5002918D1FAF745FD9B4800223B -:108480004178C06803F0B5F998481030C0788DF88D -:10849000000010B1012802D004E0012000E000201B -:1084A0008DF80000684603F0C8FA08BD30B5904D5D -:1084B00004466878A04200D8FFDF686800EBC4007B -:1084C00030BD70B58A4800252C46467807E0204626 -:1084D000FFF7ECFF4078641C2844C5B2E4B2B44214 -:1084E000F5D1284670BD2DE9F041054680480C467F -:1084F000427A9600761CFF2E00D9FFDF2868F6B27C -:10850000C01C20F003022A600CBB794833460621C8 -:10851000203008F099F8002408E0062C0FD2DFE89C -:1085200004F0050307070903724804E0724802E0FB -:10853000724800E0724808F0A7F8074600E0FFDF45 -:10854000A74200D0FFDF641CE4B2062CE5D3286804 -:1085500000EB0610286099E5021D5143452900D221 -:1085600045210844C01CB0FBF2F0C0B270472DE9B1 -:10857000FC5F06465E484FF000088B46474644467F -:1085800090F8019022E02046FFF790FF050000D10F -:10859000FFDF687869463844C7B22846FFF752F8CB -:1085A000824601A92846FFF761F80346BDF804009A -:1085B0005246001D81B2BDF80000001D80B204F0DB -:1085C00039FD6A78641C00FB0288E4B24C45DAD1BC -:1085D0003068C01C20F003003060BBF1000F00D0F9 -:1085E00000204246394604F033FD316808443060CB -:1085F000BDE8FC9F3E49383108710020C8707047C3 -:108600003B493831CA782AB10A7801EB4211083166 -:10861000814201D001207047002070472DE9F041D0 -:1086200006460078154600F00F0400201080601EFA -:108630000F46052800D3FFDF2B482A46103000EBF9 -:108640008400394650F8043C3046BDE8F0411847F4 -:1086500038B50446407800F00300012803D0022812 -:108660000BD0072038BD606858B108F060F9D0B968 -:10867000606808F053F920B915E0606808F00AF95D -:1086800088B969462046FBF709FB0028EAD16078E3 -:1086900000F00300022808D19DF8000028B16068AE -:1086A00008F03CF908B1102038BD6189F8290DD8CF -:1086B000208988420AD8607800F003020C48012A19 -:1086C00006D1D731C26989B28A4201D2092038BDA8 -:1086D00094E80E0000F10C0585E80E000AB90021AF -:1086E0008182002038BD00004C8301001C00002066 -:1086F000640200200D1E0000DDB20000F12E00001B -:108700007BE7000070B50B2000F0AFF9082000F007 -:10871000ACF900210B2000F0BEF90021082000F088 -:10872000BAF9E54C01256560A5600020C4F8400158 -:10873000C4F84401C4F848010B2000F0A1F9082056 -:1087400000F09EF90B2000F085F9256070BD10B592 -:108750000B2000F08AF9082000F087F9D6480121A3 -:1087600041608160D5490A68002AFCD10021C0F827 -:108770004011C0F84411C0F848110B2000F080F9F6 -:10878000BDE81040082000F07BB910B50B2000F0C8 -:1087900077F9BDE81040082000F072B900B530B19B -:1087A000012806D0022806D0FFDF002000BDC44803 -:1087B00000BDC44800BDC348001D00BD70B5C2491E -:1087C0004FF000400860C14DC00BC5F80803C04819 -:1087D00000240460C5F840410820C43500F045F984 -:1087E000C5F83C41BB48047070BD08B5B24A0021D1 -:1087F00028B1012811D002281CD0FFDF08BD4FF49A -:108800008030C2F80803C2F84803AC483C3001602D -:10881000C2F84011BDE80840D0E74FF40030C2F87C -:108820000803C2F84803A54840300160C2F844116B -:10883000A4480CE04FF48020C2F80803C2F84803B3 -:108840009E4844300160C2F848119E48001D0068EF -:10885000009008BD70B516460D460446022800D9A2 -:10886000FFDF00229448012304F110018B4000EB4C -:108870008401C1F8405526B1C1F84021C0F8043345 -:1088800003E0C0F80833C1F84021C0F8443370BD9C -:108890002DE9F0411C46154630B1012834D002289C -:1088A00039D0FFDFBDE8F081891E002221F07F4131 -:1088B0001046FFF7CFFF012C24D00020854E834FB8 -:1088C000012470703C61824900203C39086002201C -:1088D000091D08607E490420303908607C483D3518 -:1088E0000560C7F80042082000F0CAF82004C7F865 -:1088F0000403082000F0AEF87349E007091F086080 -:108900003470CFE70120D9E7012B02D000220120EB -:1089100005E00122FBE7012B04D000220220BDE884 -:10892000F04197E70122F9E764480068704770B5A5 -:10893000614CD4F840010025012809D1D4F808037E -:10894000C00305D54FF48030C4F80803C4F8405183 -:10895000D4F8440101280CD1D4F80803800308D5C9 -:108960004FF40030C4F80803C4F84451012007F064 -:1089700048F8D4F8480101280ED1D4F80803400380 -:108980000AD54FF48020C4F80803C4F84851BDE864 -:108990007040022007F035B870BD10B54D4C2078FE -:1089A00050B1FFF70BFF6078002807D000206070FF -:1089B000BDE8104007F025B80320F9E710BD4FF0DF -:1089C000E0214FF40010C1F800027047152000F0BC -:1089D00057B83E4901200861082000F051B83B49D2 -:1089E0004FF47C10C1F808030020024601EB80031D -:1089F000C3F84025C3F84021401CC0B20628F5D377 -:108A00007047410A43F609525143C0F3080010FB76 -:108A100002F000F5807001EB5020704710B5430B59 -:108A200048F2376463431B0C5C020C602A4C03FB66 -:108A300004002A4B4CF2F72443435B0D13FB04F470 -:108A400004EB402000F58070401210700868184454 -:108A5000086010BD00F01F02012191404009800014 -:108A600000F1E020C0F80011704700F01F02012162 -:108A700091404009800000F1E020C0F8801170476B -:108A800000F01F02012191404009800000F1E02028 -:108A9000C0F8801270474907090E002806DA00F076 -:108AA0000F0000F1E02080F8141D704700F1E02075 -:108AB00080F800147047000000B0004004B500408A -:108AC0004081004044B1004008F501400080004072 -:108AD0004085004030000020F7C2FFFF6F0C01000E -:108AE00010B5EFF3108000F0010472B6F048417841 -:108AF000491C41704078012801D107F02FFB002C60 -:108B000000D162B610BD70B5E94CE07848B90125D6 -:108B1000E570FFF7E5FF07F029FB20B1002007F023 -:108B2000FCFA002070BD4FF080406571C0F804531E -:108B3000F7E770B5EFF3108000F0010572B6DC4C7A -:108B4000607800B9FFDF6078401E6070607808B917 -:108B500007F008FB002D00D162B670BDD44810B5F7 -:108B6000C17821B100214171C170FFF7E2FF0020FF -:108B700010BD10B5044607F0F9FACD49C978084090 -:108B800000D001202060002010BD2DE9F05FDFF84B -:108B900020934278817889F80620002589F807100B -:108BA000064689F8085000782F4620B101280FD0DA -:108BB00002280FD0FFDF07F0E6FA98B107F0EAFAD3 -:108BC000A8420FD1284607F0E9FA0028FAD047E07A -:108BD0000125F0E7FFF784FF07F0C8FA0028FBD073 -:108BE0000225E8E701208407E060C4F80471B14978 -:108BF0000D600107D1F84412AE4AC1F3423124326C -:108C00001160AC49343108604FF0020BC4F804B372 -:108C1000A060DFF8A4A2DAF80010C94341F3001104 -:108C200001F10108DAF8001041F01001CAF8001053 -:108C300000E020BFD4F804010028FAD0284607F04D -:108C4000ADFA0028FAD0B8F1000F05D1DAF800101B -:108C500021F01001CAF80010C4F808B3C4F8047178 -:108C600099F807004C4670B1307860B907F07EFA89 -:108C7000064607F0B1FB6FF0004116B1C4E90310DE -:108C800001E0C4E9030115B12771BDE8F09F01209F -:108C90002071BDE8F05F00F0AFB870B5050000D1FD -:108CA000FFDF4FF080424FF0FF30C2F80803002191 -:108CB000C2F80011C2F80411C2F80C11C2F8101168 -:108CC0007B4C617007F058FA10B10120E0706070C1 -:108CD0002846BDE8704058E72DE9F05F4FF080442A -:108CE000D4F8080110B14FF0010801E04FF000087E -:108CF000D4F8000100B101208146D4F8040108B184 -:108D0000012700E00027D4F80C0100B101208246C1 -:108D1000D4F8100108B1012600E0002648EA090154 -:108D200027EA010020EA0A00B04300D0FFDF002557 -:108D3000B8F1000F04D0C4F80851012007F0EDF994 -:108D40005FEA0900DFF87491DFF864814FF0010BEE -:108D500015D0C4F8005198F8050020B188F80550E6 -:108D6000002007F0DAF998F80010404639B1057094 -:108D700088F802B00222C9F80020C4F810B00FB180 -:108D8000C4F80451BAF1000F0DD0C4F80C5198F892 -:108D90000200474600B9FFDFC9F80050BD70C4F8B3 -:108DA00014B0FFF7C6FE002E09D0C4F8105198F891 -:108DB0000400002803D0BDE8F05F00F041B864E78C -:108DC00070B53B4DE87808B907F0CCF9012084076D -:108DD000A061A87858B100BFD4F80C0120B90020D8 -:108DE00007F0DCF90028F7D10020C4F80C014FF09F -:108DF000FF30C4F8080370BD2DE9F0411926B4070F -:108E0000C4F808630125A5610020C4F80001C4F876 -:108E10000C01C4F8100107F0A9F9254F28B1274922 -:108E2000BD7002200860256100E03D70FFF758FE2C -:108E30002049B87920310860C4F80463BDE8F081A6 -:108E40002DE9F0411A4C4FF080470125E079F0B14F -:108E5000012803D0217A401E814218DA07F086F9F2 -:108E6000064607F0B9FAE179012902D9217A491CAD -:108E700021720EB1216900E0E168411A022902DA8B -:108E800011F1020F0EDC0EB1206100E0E060FFF78F -:108E900027FE07F06BF938B10849022008603D61F0 -:108EA000A57002E07D61C9E7257000202072C5E74A -:108EB000340000201805004010ED00E0340C0040A4 -:108EC000F8B51D46DDE906470E000AD004F078F932 -:108ED0002346FF1DBCB231462A46009403F0A3FD91 -:108EE000F8BDD019224619460EF0C9FF2046F8BD3C -:108EF00070B50D46044610210FF040F8258117206B -:108F00006081A07B40F00A00A07370BD4FF6FF7235 -:108F10000A800146022007F071BC70470089704743 -:108F2000827BD30701D1920703D480890880002077 -:108F3000704705207047827B920700D5818170477A -:108F400001460020098841F6FE52114200D001205E -:108F5000704700B50346807BC00701D0052000BDE7 -:108F600059811846FFF7ECFFC00703D0987B40F00B -:108F700004009873987B40F001009873002000BDB6 -:108F8000827B520700D509B140897047172070478E -:108F9000827B61F3C302827370472DE9FC5F0E464A -:108FA000044601789646012000FA01F14DF6FF5281 -:108FB00001EA020962684FF6FF7B1188594502D128 -:108FC0000920BDE8FC9FB9F1000F05D041F6FE5520 -:108FD000294201D00120F4E741EA090111801D0076 -:108FE00014D04FF0000C85F800C02378052103222F -:108FF00067464FF0020A0E2B74D2DFE803F0F8093F -:10900000252F47626974479092B3D0D70420D8E7E0 -:10901000616820898B7B9B077DD5172848D30B89F6 -:10902000834245D38989172901D3814240D185F8EC -:1090300000A0A5F801003280616888816068817BAA -:1090400021F002018173C5E0042028702089A5F871 -:1090500001006089A5F803003180BBE0208A3188D7 -:10906000C01D1FFA80F8414522D3062028702089B0 -:10907000A5F801006089A5F80300A089A5F80500FE -:109080000721208ACDE9000163693EE0082B10D05A -:10909000082028702089A5F801006089A5F8030040 -:1090A00031806A1D694604F10C0005F0E6FC10B140 -:1090B0005FE01020EDE730889DF800100844308014 -:1090C00088E00A2028702089A5F80100328045E058 -:1090D0000C2028702089A5F801006089A5F80300FC -:1090E00031803BE083E02189338800EB41021FFAA5 -:1090F00082F843453DD3B8F1050F3AD30E222A70CA -:109100000BEA4101CDE90010E36860882A46714608 -:10911000FFF7D6FE00E04DE0A6F800805AE04020C0 -:10912000287060893188C01C1FFA80F8414520D31F -:109130002878714620F03F00123028702089A5F869 -:1091400001006089CDE9000260882A46E368FFF7E4 -:10915000B7FEA6F80080287840063BD461682089D5 -:10916000888037E0A0893288401D1FFA80F8424588 -:1091700001D204273EE0162028702089A5F80100BE -:109180006089A5F80300A089CDE9000160882A461E -:1091900071462369FFF794FEA6F80080DEE71820E9 -:1091A0002870207A6870A6F800A013E061680A8829 -:1091B000920401D405271DE0C9882289914201D07B -:1091C000062717E01E21297030806068018821F48D -:1091D00000510180B9F1000F0CD061887823002282 -:1091E000022007F061FA61682078887007E0A6F82D -:1091F00000C003276068018821EA09010180384620 -:10920000DFE62DE9FF4F85B01746129C0D001E4684 -:109210001CD03078C10703D000F03F00192801D9D5 -:10922000012100E000212046FFF7AAFEA8420DD34D -:109230002088A0F57F41FF3908D03078410601D45D -:10924000000605D5082009B0BDE8F08F0720FAE731 -:1092500000208DF800008DF8010030786B1E00F0C2 -:109260003F0C0121A81E4FF0050A4FF002094FF0F4 -:10927000030B9AB2BCF1200F75D2DFE80CF08B1013 -:10928000745E7468748C749C74B674BB74C974D541 -:1092900074E2747474F274F074EF74EE748B052DD0 -:1092A00078D18DF80090A0788DF804007088ADF822 -:1092B000060030798DF80100707800F03F000C282E -:1092C00029D00ADCA0F10200092863D2DFE800F00F -:1092D000126215621A621D622000122824D004DC7A -:1092E0000E281BD01028DBD11BE016281FD0182811 -:1092F000D6D11FE02078800701E0207840070028C1 -:1093000048DAEFE020780007F9E72078C006F6E7B2 -:1093100020788006F3E720784006F0E72078000602 -:10932000EDE72088C005EAE720884005E7E72088C8 -:109330000005E4E72088C004E1E72078800729D50C -:10934000032D27D18DF800B0B6F8010082E0217816 -:1093500049071FD5062D1DD381B27078012803D08F -:10936000022817D102E0CAE0022000E01020042207 -:109370008DF8002072788DF80420801CB1FBF0F28B -:10938000ADF8062092B242438A4203D10397ADF86A -:109390000890A7E07AE02078000777D598B2820895 -:1093A0008DF800A0ADF80420B0EB820F6ED10297CB -:1093B000ADF8061096E02178C90667D5022D65D371 -:1093C00081B206208DF80000707802285ED300BFBD -:1093D000B1FBF0F28DF80400ADF8062092B24243E2 -:1093E0008A4253D1ADF808907BE0207880064DD5B5 -:1093F000072003E0207840067FD508208DF8000084 -:10940000A088ADF80400ADF80620ADF8081068E0BB -:109410002078000671D50920ADF804208DF80000F1 -:10942000ADF8061002975DE02188C90565D5022DCB -:1094300063D381B20A208DF80000707804285CD3D1 -:10944000C6E72088400558D5012D56D10B208DF850 -:109450000000A088ADF8040044E021E026E016E01A -:10946000FFE72088000548D5052D46D30C208DF850 -:109470000000A088ADF80400B6F803006D1FADF839 -:109480000850ADF80600ADF80AA02AE035E02088C3 -:10949000C00432D5012D30D10D208DF8000021E01F -:1094A0002088800429D4B6F80100E080A07B000762 -:1094B00023D5032D21D3307800F03F001B2818D08E -:1094C0000F208DF80000208840F40050A4F8000020 -:1094D000B6F80100ADF80400ED1EADF80650ADF889 -:1094E00008B0039769460598FBF7BEFB050008D056 -:1094F00016E00E208DF80000EAE7072510E00825A9 -:109500000EE0307800F03F001B2809D01D2807D05E -:109510000220059907F072F9208800F4005020809D -:10952000A07B400708D52046FFF70AFDC00703D1FE -:10953000A07B20F00400A073284684E61FB5022813 -:1095400006D101208DF8000088B26946FBF78CFB3C -:109550001FBD0000F8B51D46DDE906470E000AD024 -:1095600003F02EFE2346FF1DBCB231462A4600946E -:1095700003F059FAF8BDD019224619460EF07FFCC7 -:109580002046F8BD2DE9FF4F8DB09B46DDE91B5706 -:10959000DDF87CA00C46082B05D0E06901F002F94B -:1095A00050B11020D2E02888092140F01000288016 -:1095B0008AF80010022617E0E16901208871E2694B -:1095C0004FF420519180E1698872E06942F601010F -:1095D0000181E069002181732888112140F0200079 -:1095E00028808AF80010042638780A900A203870FB -:1095F0004FF0020904F118004D460C9001F095FB64 -:10960000B04681E0BBF1100F0ED1022D0CD0A9EBBA -:109610000800801C80B20221CDE9001005AB524643 -:109620001E990D98FFF796FFBDF816101A98814203 -:1096300003D9F74800790F9004E003D10A9808B1E4 -:1096400038702FE04FF00201CDE900190DF116033B -:1096500052461E990D98FFF77DFF1D980088401B0C -:10966000801B83B2C6F1FF00984200D203461E99C8 -:109670000BA8D9B15FF00002DDF878C0CDE9032076 -:1096800009EB060189B2CDE901C10F980090BDF840 -:10969000161000220D9801F0CBFB387070B1C0B2EB -:1096A000832807D0BDF8160020833AE00AEB0901B1 -:1096B0008A19E1E7022011B0BDE8F08FBDF82C0057 -:1096C000811901F0FF08022D0DD09AF801204245C2 -:1096D00006D1BDF82010814207D0B8F1FF0F04D0A9 -:1096E0009AF801801FE08AF80180C9480068017873 -:1096F000052902D1BDF81610818009EB08001FFA78 -:1097000080F905EB080085B2DDE90C1005AB0F9A76 -:1097100001F00EFB28B91D980088411B4145BFF69A -:1097200071AF022D13D0BBF1100F0CD1A9EB0800C3 -:10973000801C81B20220CDE9000105AB52461E9982 -:109740000D98FFF707FF1D98058000203870002056 -:10975000B1E72DE9F8439C46089E13460027B26BFB -:109760009AB3491F8CB2F18FA1F57F45FF3D05D01B -:109770005518AD882944891D8DB200E000252919AE -:10978000B6F83C800831414520D82A44BCF8011085 -:1097900022F8021BBCF8031022F8021B984622F89C -:1097A000024B914603F0FAFC4FF00C0C41464A463E -:1097B0002346CDF800C003F002F9F587B16B002015 -:1097C0002944A41D2144088003E001E0092700E0AA -:1097D00083273846BDE8F88310B50B88848F9C42F8 -:1097E0000CD9846BE018048844B1848824F40044C4 -:1097F000A41D23440B801060002010BD0A2010BD62 -:109800002DE9F0478AB00025904689468246ADF89A -:10981000185007274BE0059806888088000446D436 -:10982000A8F8006007A8019500970295CDE90350BC -:109830004FF4007300223146504601F0F9FA04005B -:109840003CD1BDF81800ADF8200005980488818847 -:10985000B44216D10A0414D401950295039521F45B -:1098600000410097049541F48043428821465046C8 -:1098700001F0B4F804000BD10598818841F400414F -:10988000818005AA08A94846FFF7A6FF0400DCD09E -:109890000097059802950195039504950188BDF8F8 -:1098A0001C300022504601F099F80A2C06D105AA76 -:1098B00006A94846FFF790FF0400ACD0ADF8185059 -:1098C00004E00598818821F40041818005AA06A959 -:1098D0004846FFF781FF0028F3D00A2C03D020462A -:1098E0000AB0BDE8F0870020FAE710B50C46896B96 -:1098F00086B051B10C218DF80010A18FADF8081081 -:10990000A16B01916946FCF75EF900204FF6FF71EB -:10991000A063E187A08706B010BD2DE9F0410D4698 -:109920000746896B0020069E1446002911D0012BA2 -:109930000FD1324629463846FFF762FF002808D18A -:10994000002C06D0324629463846BDE8F04100F0EA -:1099500038BFBDE8F0812DE9FC411446DDE9087C03 -:109960000E46DDE90A15521DBCF800E092B296459C -:1099700002D20720BDE8FC81ACF8002017222A7033 -:10998000A5F80160A5F803300522CDE900423B4669 -:109990002A46FFF7DFFD0020ECE770B50C461546C0 -:1099A000482120460EF00CFB04F1080044F81C0F7F -:1099B00000204FF6FF71E06161842084A5841720A8 -:1099C000E08494F82A0040F00A0084F82A0070BD70 -:1099D0004FF6FF720A800146032006F00FBF30B534 -:1099E00085B00C460546FFF780FFA18E284629B1B9 -:1099F00001218DF800106946FCF7E5F80020E062CF -:109A00002063606305B030BDB0F8400070470000CF -:109A10004C00002090F84620920703D4408808802C -:109A20000020F3E70620F1E790F846209207EDD5F5 -:109A3000A0F84410EAE70146002009880A0700D58B -:109A4000012011F0F00F01D040F00200CA0501D54D -:109A500040F004008A0501D540F008004A0501D510 -:109A600040F010000905D1D540F02000CEE700B548 -:109A7000034690F84600C00701D0062000BDA3F8B9 -:109A800042101846FFF7D7FF10F03E0F05D093F8AD -:109A9000460040F0040083F8460013F8460F40F0FB -:109AA00001001870002000BD90F84620520700D534 -:109AB00011B1B0F84200A9E71720A7E710F8462F28 -:109AC00061F3C3020270A1E72DE9FF4F9BB00E00C6 -:109AD000DDE92B34DDE92978289D24D02878C107D9 -:109AE00003D000F03F00192801D9012100E0002136 -:109AF0002046FFF7D9FFB04215D32878410600F081 -:109B00003F010CD41E290CD0218811F47F6F0AD19B -:109B10003A8842B1A1F57F42FF3A04D001E0122910 -:109B200001D1000602D504201FB0C5E5F9491D98F2 -:109B30004FF0000A08718DF818A08DF83CA00FAA0C -:109B40000A60ADF81CA0ADF850A02978994601F044 -:109B50003F02701F5B1C04F1180C4FF0060E4FF013 -:109B6000040BCDF858C01F2A7ED2DFE802F07D7DBD -:109B7000107D267DAC7DF47DF37DF27DF17DF47D5D -:109B8000F07D7D7DEF7DEE7D7D7D7D7DED0094F82A -:109B90004610B5F80100890701D5032E02D08DF8D3 -:109BA00018B022E34FF40061ADF85010608003213B -:109BB0008DF83C10ADF84000D8E2052EEFD1B5F895 -:109BC00001002083ADF81C00B5F80310618308B1D3 -:109BD000884201D901207FE10020A07220814FF648 -:109BE000FF702084169801F0A0F8052089F8000085 -:109BF0000220029083460AAB1D9A16991B9801F029 -:109C000097F890BB9DF82E00012804D0022089F817 -:109C10000100102003E0012089F8010002200590D6 -:109C2000002203A90BA804F028FFE8BB9DF80C0054 -:109C3000059981423DD13A88801CA2EB0B018142FB -:109C400037DB02990220CDE900010DF12A034A46D3 -:109C500041461B98FFF77EFC02980BF1020B801C1B -:109C600080B217AA03A901E0A0E228E002900BA8A5 -:109C700004F003FF02999DF80C00CDE9000117AB39 -:109C80004A4641461B98FFF765FC9DF80C100AAB4D -:109C90000BEB01001FFA80FB02981D9A084480B26A -:109CA000029016991B9800E003E001F041F80028AB -:109CB000B6D0BBF1020F02D0A7F800B053E20A20E1 -:109CC0008DF818004FE200210391072EFFF467AFD3 -:109CD000B5F801002083ADF81C00B5F803206283BD -:109CE00000283FF477AF90423FF674AF0120A07296 -:109CF000B5F8050020810020A073E06900F052FD56 -:109D000078B9E16901208871E2694FF420519180AE -:109D1000E1698872E06942F601010181E069002190 -:109D20008173F01F20841E9860620720608416985B -:109D300000F0FBFF072089F800000120049002904A -:109D40000020ADF82A0028E01DE2A3E13AE1EAE0B4 -:109D500016E2AEE086E049E00298012814D0E069FE -:109D60008079012803D1BDF82800ADF80E000498D1 -:109D700003ABCDE900B04A4641461B98FFF7EAFB2A -:109D80000498001D80B20490BDF82A00ADF80C00C4 -:109D9000ADF80E00059880B202900AAB1D9A169994 -:109DA0001B9800F0C5FF28B902983988001D05905E -:109DB0008142D1D20298012881D0E06980790128BE -:109DC00005D0BDF82810A1F57F40FF3803D1BDF8BC -:109DD0002800ADF80E00049803ABCDE900B04A4668 -:109DE00041461B98FFF7B6FB0298BBE1072E02D055 -:109DF000152E7FF4D4AEB5F801102183ADF81C10F8 -:109E0000B5F80320628300293FF4E4AE91423FF6A7 -:109E1000E1AE0121A1724FF0000BA4F808B084F864 -:109E20000EB0052E07D0C0B2691DE26904F006FE2F -:109E300000287FF444AF4FF6FF70208401A906AAE2 -:109E400014A8CDF800B081E885032878214600F0F9 -:109E50003F031D9A1B98FFF795FB8246208BADF8B8 -:109E60001C0080E10120032EC3D14021ADF8501029 -:109E7000B5F801102183ADF81C100AAAB8F1000F43 -:109E800000D00023CDE9020304921D98CDF8048090 -:109E9000009038880022401E83B21B9800F0C8FF53 -:109EA0008DF8180090BB0B2089F80000BDF8280041 -:109EB00037E04FF0010C052E9BD18020ADF850000B -:109EC000B5F801102183B5F803002084ADF81C100B -:109ED000B0F5007F03D907208DF8180085E140F424 -:109EE0007C4222840CA8B8F1000F00D00023CDE9F9 -:109EF0000330CDE9018C1D9800903888401E83B254 -:109F00001B9800F095FF8DF8180028B18328A8D180 -:109F10000220BDE04C0000200D2189F80010BDF8A2 -:109F20003000401C1EE1032E04D248067FF537AEF8 -:109F3000002017E1B5F80110ADF81C102878400694 -:109F400002D58DF83CE002E007208DF83C004FF090 -:109F500000080320CDE902081E9BCDF810801D9853 -:109F60000193A6F1030B00901FFA8BF342461B9856 -:109F700000F034FD8DF818008DF83C8029784906F2 -:109F80000DD52088C00506D5208BBDF81C10884251 -:109F900001D1C4F8248040468DF81880E2E083287F -:109FA00001D14FF0020A4FF48070ADF85000BDF8B7 -:109FB0001C002083A4F820B01E98606203206084F7 -:109FC0001321CCE0052EFFF4EAADB5F80110ADF891 -:109FD0001C10A28F62B3A2F57F43FE3B28D008225B -:109FE0008DF83C204FF0000B0523CDE9023BDDF856 -:109FF00078C0CDF810B01D9A80B2CDF804C040F4FE -:10A0000000430092B5F803201B9800F0E7FC8DF8A0 -:10A010003CB04FF400718DF81800ADF85010832853 -:10A0200010D0F8B1A18FA1F57F40FE3807D0DCE059 -:10A030000B228DF83C204FF6FE72A287D2E7A4F8DF -:10A040003CB0D2E000942B4631461E9A1B98FFF795 -:10A0500080FB8DF8180008B183284BD1BDF81C0097 -:10A06000208355E700942B4631461E9A1B98FFF734 -:10A0700070FB8DF81800E8BBE18FA06B0844811DD0 -:10A080008DE882034388828801881B98FFF763FC70 -:10A09000824668E095F80180022E70D15FEA0800E0 -:10A0A00002D0B8F1010F6AD109208DF83C0007A851 -:10A0B00000908DF840804346002221461B98FFF710 -:10A0C0002CFC8DF842004FF0000B8DF843B050B9D6 -:10A0D000B8F1010F12D0B8F1000F04D1A18FA1F592 -:10A0E0007F40FF380AD0A08F40B18DF83CB04FF4CC -:10A0F000806000E037E0ADF850000DE00FA91B983C -:10A10000FBF761FD82468DF83CB04FF48060ADF8FE -:10A110005000BAF1020F06D0FC480068C07928B19F -:10A120008DF8180027E0A4F8188044E0BAF1000F79 -:10A1300003D081208DF818003DE007A80090434629 -:10A14000012221461B98FFF7E8FB8DF818002146F5 -:10A150001B98FFF7CAFB9DF8180020B9192189F850 -:10A160000010012038809DF83C0020B10FA91B98F9 -:10A17000FBF729FD8246BAF1000F33D01BE018E04F -:10A180008DF818E031E02078000712D5012E10D1AB -:10A190000A208DF83C00E088ADF8400003201B99B0 -:10A1A00006F02CFB0820ADF85000C1E648067FF50C -:10A1B000F6AC4FF0040A2088BDF850100843208008 -:10A1C000BDF8500080050BD5A18FA1F57F40FE386A -:10A1D00006D11E98E06228982063A6864FF0030AF5 -:10A1E0005046A1E49DF8180078B1012089F80000DC -:10A1F000297889F80110BDF81C10A9F802109DF803 -:10A20000181089F80410052038802088BDF85010F7 -:10A2100088432080E4E72DE9FF4F8846087895B011 -:10A22000012181404FF20900249C0140ADF820102B -:10A230002088DDF88890A0F57F424FF0000AFF3AB1 -:10A2400006D039B1000705D5012019B0BDE8F08F5F -:10A250000820FAE7239E4FF0000B0EA886F800B006 -:10A2600018995D460988ADF83410A8498DF81CB0DE -:10A27000179A0A718DF838B0086098F80000012824 -:10A280003BD0022809D003286FD1307820F03F005E -:10A290001D303070B8F80400E08098F800100320FA -:10A2A000022904D1317821F03F011B31317094F83B -:10A2B0004610090759D505ABB9F1000F13D000219D -:10A2C00002AA82E80B000720CDE90009BDF834009E -:10A2D000B8F80410C01E83B20022159800F0A8FD43 -:10A2E0000028D1D101E0F11CEAE7B8F80400A6F893 -:10A2F0000100BDF81400C01C04E198F805108DF8A9 -:10A300001C1098F80400012806D04FF4007A0228A7 -:10A310002CD00328B8D16CE12188B8F8080011F4DA -:10A320000061ADF8201020D017281CD3B4F84010DD -:10A33000814218D3B4F84410172901D3814212D1B5 -:10A34000317821F03F01C91C3170A6F801000321CA -:10A35000ADF83410A4F8440094F8460020F0020050 -:10A3600084F8460065E105257EE177E1208808F163 -:10A37000080700F4FE60ADF8200010F0F00F1BD0CD -:10A3800010F0C00F03D03888228B9042EBD199B9DE -:10A39000B878C00710D0B9680720CDE902B1CDF870 -:10A3A00004B00090CDF810B0FB88BA8839881598B1 -:10A3B00000F014FB0028D6D12398BDF82010401CD3 -:10A3C00080294ED006DC10290DD020290BD0402941 -:10A3D00087D124E0B1F5807F6ED051457ED0B1F5B4 -:10A3E000806F97D1DEE0C80601D5082000E010207C -:10A3F00082460DA907AA0520CDE902218DF8380073 -:10A40000ADF83CB0CDE9049608A93888CDE9000143 -:10A410005346072221461598FFF7B4F8A8E09DF8A7 -:10A420001C2001214FF00A0A002A9BD105ABB9F18B -:10A43000000F00D00020CDE902100720CDE900096F -:10A44000BDF834000493401E83B2218B002215987E -:10A4500000F0EEFC8DF81C000B203070BDF81400ED -:10A4600020E09DF81C2001214FF00C0A002A22D187 -:10A4700013ABB9F1000F00D00020CDE90210072086 -:10A48000CDE900090493BDF83400228C401E83B24C -:10A49000218B159800F0CCFC8DF81C000D2030703D -:10A4A000BDF84C00401CADF8340005208DF8380094 -:10A4B000208BADF83C00BCE03888218B88427FF4CB -:10A4C00052AF9DF81C004FF0120A00281CD1606AA0 -:10A4D000A8B1B878C0073FF446AF00E018E0BA680A -:10A4E0000720CDE902B2CDF804B00090CDF810B04D -:10A4F000FB88BA88159800F071FA8DF81C001320BB -:10A5000030700120ADF8340093E000004C000020D2 -:10A510003988208B8142D2D19DF81C004FF0160A59 -:10A520000028A06B08D0E0B34FF6FF7000215F4613 -:10A53000ADF808B0019027E068B1B978C907BED17D -:10A54000E18F0DAB0844821D03968DE80C02438811 -:10A550008288018809E0B878C007BCD0BA680DAB22 -:10A5600003968DE80C02BB88FA881598FFF7F3F97B -:10A5700005005ED0072D72D076E0019005AA02A9F1 -:10A580002046FFF729F90146E28FBDF80800824214 -:10A5900001D00029F1D0E08FA16B08440780019819 -:10A5A000E08746E09DF81C004FF0180A40B1208B70 -:10A5B000C8B13888208321461598FFF796F938E00E -:10A5C00004F118000090237E012221461598FFF720 -:10A5D000A4F98DF81C000028EDD11920307001205D -:10A5E000ADF83400E7E7052521461598FFF77DF91A -:10A5F0003AE0208800F40070ADF8200050452DD1DD -:10A60000A08FA0F57F41FE3901D006252CE0D8F8B7 -:10A6100008004FF0160A48B1A063B8F80C10A187E3 -:10A620004FF6FF71E187A0F800B002E04FF6FF702F -:10A63000A087BDF8200030F47F611AD07823002273 -:10A640000320159906F030F898F800002071208852 -:10A65000BDF82010084320800EE000E00725208888 -:10A66000BDF8201088432080208810F47F6F1CD014 -:10A670003AE02188814321809DF8380020B10EA95D -:10A680001598FBF7A0FA05469DF81C000028EBD0B2 -:10A6900086F801A001203070208B70809DF81C008E -:10A6A00030710520ADF83400DEE7A18EE1B11898D5 -:10A6B0000DAB0088ADF834002398CDE90304CDE953 -:10A6C0000139206B0090E36A179A1598FFF7FCF99F -:10A6D000054601208DF838000EA91598FBF773FA8E -:10A6E00000B10546A4F834B094F8460040070AD5F6 -:10A6F0002046FFF7A0F910F03E0F04D114F8460FE2 -:10A7000020F0040020701898BDF83410018028460D -:10A710009BE500B585B0032806D102208DF8000026 -:10A7200088B26946FBF74FFA05B000BD10B5384C4A -:10A730000B782268012B02D0022B2AD111E013786A -:10A740000BB1052B01D10423137023688A889A80EA -:10A750002268CB88D38022680B8913814989518173 -:10A760000DE08B8893802268CB88D38022680B8988 -:10A7700013814B8953818B89938109691161216808 -:10A78000FBF721FA226800210228117003D000286B -:10A7900000D0812010BD832010BD806B002800D028 -:10A7A000012070478178012909D10088B0F5205F28 -:10A7B00003D042F60101884201D1002070470720F2 -:10A7C0007047F0B587B0002415460E460746ADF831 -:10A7D000144010E0069801882980811DCDE90241CE -:10A7E00007210194049400918388428801883846A7 -:10A7F00000F0F4F830B906AA05A93046FEF7ECFFE0 -:10A800000028E7D00A2800D1002007B0F0BD0000E2 -:10A810004C00002010B58B7883B102789A4205D1A4 -:10A820000B885BB102E08B79091D4BB18B789A42A2 -:10A83000F9D1B0F801300C88A342F4D1002010BD4A -:10A84000812010BD072826D012B1012A27D103E0AC -:10A85000497801F0070102E04978C1F3C2010529F6 -:10A860001DD2DFE801F00318080C12000AB1032022 -:10A8700070470220704704280DD250B10DE0052822 -:10A8800009D2801E022808D303E0062803D003283B -:10A8900003D005207047002070470F2070478120AB -:10A8A0007047C0B282060BD4000607D5FE48807AF6 -:10A8B0004143C01D01EBD00080B27047084670478D -:10A8C0000020704770B513880B800B781C0625D5C7 -:10A8D000F54CA47A844204D843F01000087000209C -:10A8E00070BD956800F0070605EBD0052D78F540A2 -:10A8F00065F304130B701378D17803F0030341EA76 -:10A90000032140F20123B1FBF3F503FB151192681B -:10A91000E41D00FB012000EBD40070BD906870BD09 -:10A9200037B51446BDF8041011809DF804100A06CE -:10A930001ED5C1F30013DC49A568897A814208D885 -:10A94000FE2811D1C91DC9085A4228460DF00EFB38 -:10A950000AE005EBD00100F00702012508789540D8 -:10A96000A843934018430870207820F0100020700E -:10A970003EBD2DE9F0410746C81C0E4620F00300FD -:10A98000B04202D08620BDE8F081C74D0020344699 -:10A990002E60AF802881AA72E8801AE0E988491CFD -:10A9A000E980810614D4E17800F0030041EA002038 -:10A9B00040F20121B0FBF1F201FB12012068FFF728 -:10A9C00070FF2989084480B22881381A3044A06079 -:10A9D0000C3420784107E1D40020D4E72DE9FF4F63 -:10A9E00089B01646DDE9168A0F46994623F440459C -:10A9F000084600F00DFB04000FD0099802F066FA3B -:10AA00000290207800060AD5A748817A02988142F0 -:10AA100005D887200DB0BDE8F08F0120FAE7224667 -:10AA200001A90298FFF74EFF834600208DF80C0025 -:10AA30004046B8F1070F1AD001222146FFF702FF66 -:10AA40000028E7D12078400611D502208DF80C00AF -:10AA5000ADF81070BDF80400ADF81200ADF8146048 -:10AA60001898ADF81650CDF81CA0ADF818005FEAA4 -:10AA7000094004D500252E46A84601270CE0217880 -:10AA8000E07801F0030140EA012040F20121B0FB2F -:10AA9000F1F2804601FB12875FEA494009D5B845CB -:10AAA00007D1A178207901F0030140EA0120B042EA -:10AAB00001D3BE4201D90720ACE7A8191FFA80F9DB -:10AAC000B94501D90D20A5E79DF80C0028B103A9CF -:10AAD0000998FBF776F800289CD1B84507D1A078F3 -:10AAE0004FEA192161F30100A07084F804901A98CC -:10AAF00000B10580199850EA0A0027D0199830B1A2 -:10AB00000BEB06002A4619990DF0B9F90EE00BEB94 -:10AB100006085746189E099802F040FB2B46F61D82 -:10AB2000B5B239464246009501F049FF224601A9D7 -:10AB30000298FFF7C7FE9DF80400224620F010009F -:10AB40008DF80400DDE90110FFF7EAFE002061E75F -:10AB50002DE9FF4FDFF8509182461746B9F80610ED -:10AB6000D9F8000001EB410100EB810440F2012023 -:10AB7000B2FBF0F185B000FB11764D46DDF84C805C -:10AB800031460698FFF78DFE29682A898B46611A9F -:10AB90000C3101441144AB8889B28B4202D8842025 -:10ABA00009B038E70699CDB2290603D5A90601D523 -:10ABB0000620F5E7B9F806C00CF1010C1FFA8CFC71 -:10ABC000A9F806C0149909B1A1F800C0A90602D5D8 -:10ABD000C4F8088007E0104480B2A9F80800191AE8 -:10ABE00001EB0B00A0602246FE200699FFF798FEBD -:10ABF000E77026712078390A61F30100320AA178E2 -:10AC000040F0040062F30101A17020709AF8020084 -:10AC10006071BAF80000E08000262673280602D58D -:10AC200099F80A7000E00127A80601D54FF0000846 -:10AC30004D4600244FF007090FE0CDE90268019668 -:10AC4000CDF800900496E9882046129B089AFFF7F9 -:10AC5000C5FE0028A4D1641CE4B2BC42EDD30020A0 -:10AC60009EE72DE9F047804600F0D2F9070005D0B5 -:10AC7000002644460C4D40F2012919E00120BDE8B0 -:10AC8000F087204600F0C4F90278C17802F0030290 -:10AC900041EA0222B2FBF9F309FB13210068FFF736 -:10ACA00000FE304486B201E0A8040020641CA4B277 -:10ACB000E988601E8142E4DCA8F10100E88028896F -:10ACC000801B288100203870D9E710B5144631B1B7 -:10ACD000491E218002F0FAF8A070002010BD01206A -:10ACE00010BD10B5D24904460088CA88904201D3ED -:10ACF0000A2010BD096800EB400001EB800250798A -:10AD0000A072D08820819178107901F0030140EA87 -:10AD10000120A081A078E11CFFF7D4FD20612088EC -:10AD2000401C2080E080002010BD0121018270477E -:10AD30002DE9FF4F85B04FF6FF788246A3F80080DB -:10AD400048681F460D4680788DF8060048680088E0 -:10AD5000ADF8040000208DF80A00088A0C88A04293 -:10AD600000D304462C8241E0288A401C2882701DB2 -:10AD70006968FFF74FFDB8BB3988414501D1601EB6 -:10AD800038806888A04236D3B178307901F0030169 -:10AD900040EA012901A9701DFFF73CFD20BB29896C -:10ADA00041452CD0002231460798FFF74BFDD8B91A -:10ADB0002989494518D1E9680391B5F80AC0D6F840 -:10ADC00008B05046CDF800C002F0E8F9DDF800C048 -:10ADD0005A460CF1070C1FFA8CFC4B460399CDF830 -:10ADE00000C001F0B6FD50B1641CA4B2204600F0D2 -:10ADF0000FF90600B8D1641E2C820A20D0E67C80B0 -:10AE00007079B871F088B8803178F07801F003017A -:10AE100040EA01207881A7F80C90504602F056F8DD -:10AE2000324607F10801FFF74DFD38610020B7E613 -:10AE30002DE9FF4F87B081461C469246DDF860B091 -:10AE4000DDF85480089800F0E3F805000CD048467F -:10AE500002F03CF82978090608D57549897A8142BB -:10AE600004D887200BB0D6E50120FBE7CAF309061A -:10AE70002A4601A9FFF726FD0746149807281CD08B -:10AE800000222946FFF7DEFC0028EBD12878400697 -:10AE900013D501208DF808000898ADF80C00BDF816 -:10AEA0000400ADF80E00ADF81060ADF8124002A934 -:10AEB0004846FAF786FE0028D4D12978E87801F0D0 -:10AEC000030140EA0121AA78287902F0030240EA4E -:10AED0000220564507D0B1F5007F04D9611E81429A -:10AEE00001DD0B20BEE7864201D90720BAE7801BAF -:10AEF00085B2A54200D92546BBF1000F01D0ABF8C1 -:10AF00000050179818B1B9192A460CF0B8FFB8F1DB -:10AF1000000F0DD03E4448464446169F02F050F9BB -:10AF20002146FF1DBCB232462B46009401F07BFD4A -:10AF3000002097E72DE9F04107461D4616460846D2 -:10AF400000F066F804000BD0384601F0BFFF21780E -:10AF5000090607D53649897A814203D8872012E548 -:10AF6000012010E522463146FFF7ACFC65B121789F -:10AF7000E07801F0030140EA0120B0F5007F01D83C -:10AF8000012000E0002028700020FCE42DE9F041C1 -:10AF900007461D461646084600F03AF804000BD056 -:10AFA000384601F093FF2178090607D52049897AB0 -:10AFB000814203D88720E6E40120E4E422463146BA -:10AFC000FFF7AEFCFF2D14D02178E07801F00302EA -:10AFD00040EA022040F20122B0FBF2F302FB130030 -:10AFE00015B900F2012080B2E070000A60F301019F -:10AFF00021700020C7E410B50C4600F009F828B114 -:10B00000C18821804079A070002010BD012010BDB2 -:10B010000749CA88824209D340B1096800EB400061 -:10B020006FF00B0202EB800008447047002070476D -:10B03000A804002070B514460B880122A2401342D8 -:10B0400007D113430B8001230922011D01F019FED2 -:10B05000047070BD2DE9FF4F81B00878DDE90E7BEB -:10B060009A4691460E4640072CD4019802F0A8F863 -:10B07000040000D1FFDF07F1040820461FFA88F121 -:10B0800001F005FA050000D1FFDF204629466A4697 -:10B0900001F04FFC0098A0F80370A0F805A0284626 -:10B0A00001F0F5FC017869F306016BF3C71101703B -:10B0B00020461FFA88F101F02DFA00B9FFDF019850 -:10B0C00000F048FB06EB0900017E491C017605B043 -:10B0D000BDE8F08F2DE9F84F0E469A469146074697 -:10B0E000032101F029FF0446808CDFF888850025C4 -:10B0F00018B198F80000B0421ED1384602F060F84E -:10B10000070000D1FFDF09F10401384689B201F0E0 -:10B11000BEF9050010D0384629466A4601F009FC00 -:10B12000009800210A460180817000F07DFB0098A4 -:10B13000C01DCAF8000021E098F80000B04216D106 -:10B1400004F1220734F8301F012000FA06F911EA51 -:10B15000090F00D0FFDF2088012340EA090020808A -:10B160000922391D384601F0A7FD067006E0324677 -:10B1700004F1300104F12200FFF75CFF092188F897 -:10B1800000102846BDE8F88FFEB514460D46064669 -:10B1900002AB0C220621FFF79DFF002826D0029962 -:10B1A000687812220A70801C487008224A80A870B1 -:10B1B000208888806088C880A0880881E0884881CD -:10B1C00000240C20CDE90004052306222946304640 -:10B1D000FFF740FF2146002266F31F41F02310468F -:10B1E00005F062FA6878801C68700120FEBD10B519 -:10B1F0000446032101F0A0FE014600F110022046A2 -:10B20000BDE81040C0E72DE9FE4381465078164660 -:10B21000884640B1FFDF3168C8F804107168C8F88B -:10B220000810BDE8FE83B778022417B1022F13D0AF -:10B23000FFDF251D2A4602AB07214846FFF74AFFDC -:10B240000028E8D002980121022F01703178417066 -:10B250004480878002D005E00624EAE7B188C180F7 -:10B26000F18801810024CDE90054052307224146DD -:10B270004846FFF7EFFE88F80440D2E710B50446D1 -:10B28000032101F059FE0146021D2046BDE8104091 -:10B29000B9E7F84A002009211170704770B50C46D3 -:10B2A0001546342120460CF08BFE012060700921E8 -:10B2B00004F118000CF084FE05B9FFDF297820782E -:10B2C00061F30100207070BD7047002110B560F37C -:10B2D0001F41002005F092FA002010BDFEB5064681 -:10B2E0000F0CFCF777FD050007D06F80032138466F -:10B2F00001F022FE040008D106E003B03846BDE8A4 -:10B30000F0401321F7F752B9FFDF0EB1FFDFFEBDAA -:10B3100020782A4620F00800207002208DF80000D6 -:10B320004FF6FF70ADF80200ADF8040069463846EC -:10B33000F6F796FDFEBD00B5FFDF002000BD2DE94C -:10B34000FC410C461E4617468046032101F0F4FDE1 -:10B350000546092C0AD2DFE804F0050505050505B8 -:10B3600009090700042303E0062301E0FFDF0023AF -:10B37000CDE90076224629464046FFF76BFEBDE840 -:10B38000FC8138B50546A0F57F40FF381CD0284623 -:10B3900001F004FF040000D1FFDF204601F0A7FA0E -:10B3A000002810D001466A46204601F0C2FA0098F3 -:10B3B0000321B0F80540284601F0BEFD052C03D15D -:10B3C000007908B1002038BD012038BD2DE9F041D9 -:10B3D000044686B0408801F0E1FE050000D1FFDFA1 -:10B3E00003AA2846616800F034F9039D001F80B26B -:10B3F00035F8032F698882420AD104290BD0052928 -:10B4000018D0062904D16088291D6368F8F750F91F -:10B4100006B0BDE8F08116462D1D2246294630466D -:10B42000F9F7D7FE0828F3D1224629463046FAF725 -:10B43000EEFEEDE716466088032101F07DFD002158 -:10B440008DF80010042EE3D36A79002AE0D02B791E -:10B4500002274FF6FF78012B28D0122B01D0132B97 -:10B460000BD00491059169798DF81010638801461D -:10B4700004AA1846FFF7C7FECAE783789342C7D1EC -:10B4800002781307C4D5062EC2D122F0080202703A -:10B49000608860F31F41002005F0B0F98DF800705E -:10B4A000ADF802802889ADF8040017E0062EAFD36E -:10B4B00083789342ACD102781307A9D522F0080211 -:10B4C0000270608860F31F41002005F097F98DF845 -:10B4D00000702889ADF80200ADF80480608822462B -:10B4E0006946F6F7BDFC93E770B50D4606460321A5 -:10B4F00001F022FD040004D02078000704D51120BB -:10B5000070BD43F2020070BD2A4621463046FFF767 -:10B510003BFE18B92868206168686061207840F0B7 -:10B5200008002070002070BD2DE9F04F0E4691B04C -:10B530008046032101F000FD0446404601F040FE34 -:10B5400007460020079008900990ADF830000A9057 -:10B5500002900390049004B9FFDF0DF10809FFB9D0 -:10B56000FFDF1DE038460BA9002201F083F89DF8AB -:10B570002C0000F07F05092D00D3FFDF6019017E4C -:10B58000491E01769DF82C00000609D52A460CA913 -:10B5900007A8FFF74FFD19F80510491C09F8051019 -:10B5A000761EF6B2DED204F13000324D04F1220BE9 -:10B5B000DFF8C4A004F12607069010E0584606996B -:10B5C00000F049F806462870092800D3FFDF5AF832 -:10B5D000261040468847608CC05DB04202D0A08CE7 -:10B5E0000028EBD109202870234D4E4624350EE06B -:10B5F0000CA907A800F02FF80446375D55F8240081 -:10B6000000B9FFDF55F82420394640469047BDF881 -:10B610001E000028ECD111B05AE510B5032101F04D -:10B620008BFC040000D1FFDF092104F118000CF0AD -:10B63000C7FC207840F00400207010BD10B50C4607 -:10B64000032101F079FC2044007E002800D0012075 -:10B6500010BD01F06EB910B50C4601230922011D81 -:10B6600001F045FB0078218801228240914321802E -:10B6700010BD000054000020748301002DE9FC4738 -:10B680000C460646694600F006FE002860D106F02A -:10B6900009FAB0425CD02146304609F0C4F828BB14 -:10B6A000019D95F8EC00383518B9E87E08B1012005 -:10B6B00000E00020814695F837004FF000084FF079 -:10B6C000010AA0B195F83800800710D584F80180F0 -:10B6D00084F800A084F80280A68095F83910A17142 -:10B6E000698F2181A98F618185F837802DE03046EF -:10B6F00001F066FD070000D1FFDF384600F094FF3F -:10B7000040B184F801800D212170A680E08084F88A -:10B7100002A01AE0304601F041FD070000D1FFDF32 -:10B72000B9F1000F14D0384600F0D5FF80B1304693 -:10B7300006F05DF884F801800A21217084F8028007 -:10B74000A680297FA17185F81B800120BDE8FC87B8 -:10B750000020FBE71CB5694600F09DFD00B1FFDF4E -:10B76000684600F0A5FDFC4900208968A1F8B200F8 -:10B770001CBD2DE9FC4104460E46062001F088FB65 -:10B7800000250746A846064417E02088401C80B2E2 -:10B790002080B04202D34046A4F8008080B2B84274 -:10B7A00004D3B04202D20020BDE8FC81694600F01B -:10B7B00072FD0028F8D06D1CEDB2AE42E5D84FF610 -:10B7C000FF7020801220EFE710B506F081F80AF034 -:10B7D000A0FBE2484FF6FF710422418181810021E4 -:10B7E000017003218170C2701B228280C28001819E -:10B7F00010BD70B5D84C0D466060217005F0F5FFA6 -:10B8000000F066FDFFF7E0FF207809F057FE2846BC -:10B8100007F092FC06F082F92178606809F0C5F81B -:10B82000BDE870400AF075BB10B501240AB10020D4 -:10B8300010BD21B1012903D00024204610BD0221F2 -:10B840000BF0D7F8F9E72DE9F041040000D1FFDF54 -:10B85000C24802210C308046FFF78BFF00B1FFDFAA -:10B86000BE4D0620AF8901F013FB0646A889B04201 -:10B870001CD1204606F0BBF8F8B106F051FBC8B168 -:10B880002078132816D1A078A0B1A088062101F055 -:10B8900053FB050000D1FFDF288805F0A8FFA08832 -:10B8A000062101F05BFB28B1FFDF03E02146FFF733 -:10B8B000E5FE10B10120BDE8F08102214046FFF70E -:10B8C00058FF10B9A889B842D0D10020F3E710B5CD -:10B8D00000F0C2FC08B10C2010BD0AF053FB0020A0 -:10B8E00010BD10B50446007818B1012801D012200F -:10B8F00010BD00F0BCFC20B10AF0A1FB08B10C2087 -:10B9000010BD207800F092FCE21D04F11703611CC9 -:10B91000BDE810400AF04ABB10B50446007818B1E3 -:10B92000012801D0122010BD00F096FC08B10C20B7 -:10B9300010BD207800F07AFC611C0AF0FDFA08B115 -:10B94000002010BD072010BD10B50AF07CFB08B127 -:10B95000002010BD302010BD10B5044600F087FC5B -:10B9600008B10C2010BD20460AF065FB002010BD78 -:10B9700010B500F07CFC20B10AF061FB08B10C208E -:10B9800010BD0AF04AFB002010BDFF2181704FF668 -:10B99000FF718180704949680A7882718A880281C2 -:10B9A0004988418101214170002070471CB5002465 -:10B9B00012F1080F15D00CDC12F1280F11D012F182 -:10B9C000140F0ED012F1100F0BD012F10C0F0CD17E -:10B9D00007E012F1040F04D01AB1032A01D0042A9F -:10B9E00003D1012804D0032806D0122420461CBD10 -:10B9F000104606F090FAF9E708461446694600F04A -:10BA00004AFC08B10224F1E7019880F8374000248D -:10BA1000ECE710B5134601220AF047FD002010BDE7 -:10BA200010B5044600F023FC08B10C2010BD2146DF -:10BA3000002005F04EFF002010BD10B5044607F0B1 -:10BA4000B3FD20B1207807F09DFB002010BD0C2035 -:10BA500010BD10B5044600F00AFC08B10C2010BD62 -:10BA60002146012005F035FF002010BD38B5044601 -:10BA70004FF6FF70ADF80000A079E179884213D04D -:10BA800021791F2910D861791F290DD8002211466C -:10BA90000BF0DCFB40B90022E07911460BF0D6FB3D -:10BAA00010B9207A072801D9122038BD07F088FD87 -:10BAB00048B900216846FFF75CFE20B1204605F03A -:10BAC000E1F8002038BD0C2038BD2DE9FC4181781B -:10BAD00004461A2925D00EDC16292DD2DFE801F004 -:10BAE0002C2C2C2C2C212C2C2C2C2C2C2C2C2C2CA1 -:10BAF0002C2C2C2121212A291ED00BDCA1F11E0186 -:10BB00000C2919D2DFE801F018181818181818189D -:10BB10001818180D3A3904290ED2DFE801F00D0289 -:10BB20000D022088B0F5706F06D20127694600F03B -:10BB3000B2FB18B1022037E6122035E6019D6846B7 -:10BB40002E4605F5A87506F2511600F097FB08B1D0 -:10BB5000287828B10C2027E658000020B4040020E3 -:10BB60002F70A0783070684600F0A2FB00201BE622 -:10BB70001CB50C46694600F08EFB002118B121600F -:10BB8000217102201CBD01980246383080F8401017 -:10BB900093682360137B237190F84030002BF5D11C -:10BBA00000201CBD10B5044600F061FB20B10AF076 -:10BBB00046FA08B10C2010BD207800F037FBE2797E -:10BBC000611C0AF018FB08B1002010BD022010BD56 -:10BBD000887800B90320C97801B903211070197061 -:10BBE000002070471FB50446008801A900F053FBF0 -:10BBF000002806D1A08830B1012804D0022802D044 -:10BC0000122004B010BD6B4603AA214601A8FFF71D -:10BC1000DFFF0028F5D1029A012182F87B11029AF8 -:10BC200092F8AE213AB9029A92F87A211AB9029A98 -:10BC300092F85D200AB13A200CE0029A82F87A115B -:10BC4000029A9DF80C1082F87C11029A9DF800105F -:10BC500082F87D11029A002182F87B11D1E7817868 -:10BC6000CA0802D1C278D30801D012207047490710 -:10BC700001D4510701D511207047B3E7F0B5871FF4 -:10BC8000DDE9056540F67B44A74213D28F1FA7422A -:10BC900010D288420ED8B2F5FA7F0BD2A3F10A0077 -:10BCA000241FA04206D2521C4A43B2EB830F01DA92 -:10BCB000AE4201D90020F0BD0120F0BD1CB5828943 -:10BCC0004189CDE900120389C28881884088FFF745 -:10BCD000D5FF08B100201CBD30201CBDF8B51546AD -:10BCE0000E46044607F06CFC08B10C20F8BD204657 -:10BCF00000F002FB0028F9D161884FF01100CA065C -:10BD0000F4D5E27D032AF1D04906EFD4002030704B -:10BD1000A07555B9FF208DF800006946002006F097 -:10BD2000E6F86946002006F0CCF82046BDE8F84069 -:10BD300006F00FB80022D1E770B514460D4606464E -:10BD4000FB2919D813B11F2916D81BE006F001F9F9 -:10BD500020B11F2D10D8032C0ED104E0032C02D0EB -:10BD6000042C00D045B107F02BFC38B1032C05D0D2 -:10BD7000042C03D00C2070BD122070BD304605F09D -:10BD8000DBFE08B1002070BD422070BD70B50446D6 -:10BD9000C0780E46122510B106F03FF818B1607851 -:10BDA000042802D010E0284670BD07F009FC0028E6 -:10BDB000F9D006F07DF80028F5D106F0CAF8002881 -:10BDC000F1D1E0780028EED16278E178207833462E -:10BDD000FFF7B2FF0028E7D16178E07800F0D7FAEA -:10BDE00028B1E078211D06F082F8002070BD1120F6 -:10BDF00070BD0021CAE770B50446C0780D46122612 -:10BE000010B106F094F8A0B16278042A11D0E1785C -:10BE100020782B46FFF790FF002809D16178E07861 -:10BE200000F0B5FA38B1E078211D06F04AF800209C -:10BE300070BD304670BD112070BD0021DBE77CB5C0 -:10BE4000044640784225012808D8A07805F074FE01 -:10BE500020B120781225012802D090B128467CBD5F -:10BE600006F06EF820B1A0880028F7D08028F5D819 -:10BE700006F06DF860B160780028EFD020780128D6 -:10BE800008D006F047FD044607F01FF9002865D0EA -:10BE90000C207CBD05F091FE10B906F04FF868B398 -:10BEA00007F08EFB0028F3D105F0FCFDA0F57F41E3 -:10BEB000FF39EDD105F002FFA68842F2107046432B -:10BEC000A079314605F0B3FF06F02AF8C0B1002290 -:10BED000062101A801F002F8040018D0FA48032155 -:10BEE000846020460AF035FA204606F0D3F906F0C1 -:10BEF00030F8F64D68B1288901210EE012207CBD92 -:10BF00003146002007F041F938B3FFDF30E0092067 -:10BF10007CBD06F020F80146288907F0FAF90146B1 -:10BF2000A0620022204606F01CFD06F012F808B9B7 -:10BF300006F011F8E8780090AB78EA88A9882088A4 -:10BF400001F0B5F800B1FFDF208805F04FFC314665 -:10BF5000204607F01AF900B1FFDF09E044B120885C -:10BF600005F045FC2088062100F0F8FF00B1FFDF56 -:10BF700000207CBD002162E770B50D46062100F06F -:10BF8000DBFF040003D094F8530110B10AE0022053 -:10BF900070BD94F84500142801D0152802D194F8FA -:10BFA000940108B10C2070BD1022294604F5AA7036 -:10BFB0000BF065FF012084F85301002070BD10B51F -:10BFC000062100F0B9FF18B190F8531111B107E044 -:10BFD000022010BD90F84510142903D0152901D076 -:10BFE0000C2010BD022180F85311002010BD2DE956 -:10BFF000FC410D464BF680321221954213D895B183 -:10C00000694600F048F900280CD1019EB41C38366E -:10C0100027882A46394630460AF091F92088B842E6 -:10C02000F6D1002087E5084685E51CB50446008862 -:10C03000694600F030F9002808D10199A378084634 -:10C0400091F82C2038319A4201D10C201CBD7F225E -:10C050000A728A720022CA72E17880F82D10217962 -:10C0600080F82E10A17880F82C1010461CBD1CB54D -:10C070000C46694600F00FF9002806D1019890F8A7 -:10C08000530000B10120207000201CBD7CB50D467E -:10C090001446694600F0FFF8002805D1019890F891 -:10C0A0002C00012801D00C207CBD019890F8401094 -:10C0B000297090F84100207000207CBD70B50D46BD -:10C0C0001646062100F038FF18B381880124C38882 -:10C0D000428804EB4104AC4217D842F21074634327 -:10C0E000A4106243B3FBF2F2521E94B24FF4FA7200 -:10C0F000944200D91446A54200D22C46491C641C27 -:10C10000B4FBF1F24A43521E91B290F880211AB961 -:10C1100001E0022070BD01843180002070BD10B5A7 -:10C120000C46062100F008FF48B180F8BF4024B15A -:10C1300090F8BD1009B107F011F9002010BD0220E0 -:10C1400010BD017891B1417881B141881B290DD38F -:10C1500081881B290AD3C188022907D35B49026859 -:10C1600041F8022F40684860002070471220704755 -:10C1700010B507F09CF8002010BD70B514460A46B3 -:10C18000064600250121104607F0C3F8002800D814 -:10C19000284605460121304600F04FF806460121A9 -:10C1A000002000F04AF83118012296318D4206D95C -:10C1B00001F19600691AB1FBF0F0401C82B22280B6 -:10C1C000002070BD10B5044600F051F808B10C20F5 -:10C1D00010BD601C09F0FCFF207800F0010005F0A4 -:10C1E00006FD002010BD10B50446062000F042FEFA -:10C1F00008B10C2010BD2078C00711D00022607853 -:10C2000011460BF023F808B1122010BDA06808F009 -:10C2100020FF6078D4F8041008F024FF002010BD3F -:10C22000002008F016FF00210846F5E718B10228A3 -:10C2300001D0012070470020704710B5012904D0BB -:10C24000022905D0FFDF204610BDC000503001E0BC -:10C2500080002C3084B2F6E710B507F0B1F920B1B8 -:10C2600005F0A3FC08B1012010BD002010BD10B5E1 -:10C2700007F0A6F9002800D0012010BD416891F810 -:10C28000EC0091F8531021B918B1042801D0012015 -:10C2900070470020704710B50C46062100F04CFE98 -:10C2A000606018B101202070002010BD022010BD78 -:10C2B000416891F8BD20002A05D0002281F8BD20F8 -:10C2C000406807F04BB8704758000020B4040020C5 -:10C2D00008B54FF6FF70ADF8000006E00621BDF886 -:10C2E000000000F03BFE00B1FFDF00216846FFF7D1 -:10C2F00040FA0028F2D008BD38B504460078EF288F -:10C3000041D86088ADF80000009800F048F888B384 -:10C310006188080708D4D4E90120824233D8202A52 -:10C3200031D3B0F1807F2ED2207B18B307282AD8D2 -:10C33000607B28B1012803D0022801D0032822D134 -:10C340004A0703D4022801D0032805D1A07B08B1F5 -:10C35000012818D1480707D4607D28B1012803D0EF -:10C36000022801D003280ED1C806E07D03D501289C -:10C3700009D104E007E0012801D0032803D1E07EC1 -:10C3800018B1012801D0122038BD002038BD1F2867 -:10C3900001D8032901D0002095E7012093E780B25E -:10C3A000C1060CD401071AD481064FEAC07103D527 -:10C3B000A9B9800713D410E079B180070BE0C10759 -:10C3C0004FEA807104D0002902DB400705D406E063 -:10C3D000010704D44007002801DB012073E7002097 -:10C3E00071E7000030B5058825F4004421448CB283 -:10C3F0004FF4004194420AD2121B92B21B339A426C -:10C4000001D2A94307E005F40041214303E0A21A49 -:10C4100092B2A9431143018030BD08440830504313 -:10C420004A31084480B2704770B51D4616460B4627 -:10C43000044629463046049AFFF7EFFF0646B3420A -:10C4400000D2FFDF282120460BF0BAFD4FF6FF7027 -:10C45000A082283EB0B265776080B0F5004F00D969 -:10C46000FFDF618805F13C00814200D2FFDF608878 -:10C470000835401B343880B220801B2800D21B2096 -:10C4800020800020A07770BD8161886170472DE910 -:10C49000F05F0D46C188044600F12809008921F4A7 -:10C4A000004620F4004800F062FB10B10020BDE817 -:10C4B000F09F4FF0000A4FF0010BB0450CD9617F9F -:10C4C000A8EB0600401A0838854219DC09EB060083 -:10C4D0000021058041801AE06088617F801B471A37 -:10C4E000083F0DD41B2F00DAFFDFBD4201DC2946D7 -:10C4F00000E0B9B2681A0204120C04D0424502DD11 -:10C5000084F817A0D2E709EB06000180428084F886 -:10C5100017B0CCE770B5044600F12802C088E37D6F -:10C5200020F400402BB110440288438813448B420E -:10C5300001D2002070BD00258A4202D301804580CF -:10C5400008E0891A0904090C418003D0A01D00F0FD -:10C550001EFB08E0637F00880833184481B26288BC -:10C56000A01DFFF73FFFE575012070BD70B50346C4 -:10C5700000F12804C588808820F400462644A8429B -:10C5800002D10020188270BD98893588A84206D350 -:10C59000401B75882D1A2044ADB2C01E05E02C1A30 -:10C5A000A5B25C7F20443044401D0C88AC4200D9C9 -:10C5B0000D809C8924B1002414700988198270BDF3 -:10C5C0000124F9E770B5044600F12801808820F4C1 -:10C5D00000404518208A002825D0A189084480B24F -:10C5E000A08129886A881144814200D2FFDF28880F -:10C5F000698800260844A189884212D1A069807FF9 -:10C600002871698819B1201D00F0C1FA08E0637F24 -:10C6100028880833184481B26288201DFFF7E2FEA3 -:10C62000A6812682012070BD2DE9F04141898788CD -:10C630000026044600F12805B94218D004F10A0882 -:10C6400021F400402844418819B1404600F09FFA87 -:10C6500008E0637F00880833184481B2628840464E -:10C66000FFF7C0FE761C6189B6B2B942E8D1304608 -:10C67000BDE8F0812DE9F04104460B4627892830BA -:10C68000A68827F40041B4F80A8001440D46B74259 -:10C6900001D10020ECE70AB1481D106023B1627F90 -:10C6A000691D18460BF0EBFB2E88698804F1080021 -:10C6B00021B18A1996B200F06AFA06E0637F6288B7 -:10C6C0000833991989B2FFF78DFE474501D12089BA -:10C6D00060813046CCE78188C088814201D1012049 -:10C6E00070470020704701898088814201D1012074 -:10C6F00070470020704770B58588C38800F1280412 -:10C7000025F4004223F4004114449D421AD0838949 -:10C71000058A5E1925886388EC18A64214D313B1E4 -:10C720008B4211D30EE0437F08325C1922444088CB -:10C7300092B2801A80B22333984201D211B103E041 -:10C740008A4201D1002070BD012070BD2DE9F04763 -:10C750008846C1880446008921F4004604F1280770 -:10C7600020F4004507EB060900F001FA002178BB30 -:10C77000B54204D9627FA81B801A002503E06088B7 -:10C78000627F801B801A083823D4E28962B1B9F82D -:10C790000020B9F802303BB1E81A2177404518DB98 -:10C7A000E0893844801A09E0801A217740450ADB85 -:10C7B000607FE1890830304439440844C01EA4F841 -:10C7C0001280BDE8F087454503DB01202077E7E7CD -:10C7D000FFE761820020F4E72DE9F74F044600F1FE -:10C7E0002805C088884620F4004A608A05EB0A06BE -:10C7F00008B1404502D20020BDE8FE8FE08978B143 -:10C800003788B6F8029007EB0901884200D0FFDFB5 -:10C81000207F4FF0000B50EA090106D088B33BE0BF -:10C820000027A07FB9463071F2E7E18959B1607FF6 -:10C830002944083050440844B4F81F1020F8031D60 -:10C8400094F821108170E28907EB080002EB0801DF -:10C85000E1813080A6F802B002985F4650B1637F54 -:10C8600030880833184481B26288A01DFFF7BAFDF2 -:10C87000E78121E0607FE189083050442944084481 -:10C880002DE0FFE7E089B4F81F102844C01B20F812 -:10C89000031D94F82110817009EB0800E28981B230 -:10C8A00002EB0800E081378071800298A0B1A01DE2 -:10C8B00000F06DF9A4F80EB0A07F401CA077A07D19 -:10C8C00008B1E088A08284F816B000BFA4F812B0C6 -:10C8D00084F817B001208FE7E0892844C01B30F8A6 -:10C8E000031DA4F81F10807884F82100EEE710B52E -:10C8F000818800F1280321F400442344848AC288FB -:10C90000A14212D0914210D0818971B9826972B16D -:10C910001046FFF7E8FE50B91089283220F4004095 -:10C92000104419790079884201D1002010BD1846C1 -:10C9300010BD00F12803407F08300844C01E10607D -:10C94000088808B9DB1E136008884988084480B24B -:10C9500070472DE9F04100F12806407F1C46083061 -:10C960009046431808884D88069ADB1EA0B1C01C6B -:10C9700080B2904214D9801AA04200DB204687B2D0 -:10C9800098183A4641460BF04EFA002816D1E01BA3 -:10C9900084B2B844002005E0ED1CADB2F61EE8E715 -:10C9A000101A80B20119A94206D8304422464146E5 -:10C9B000BDE8F0410BF037BA4FF0FF3058E62DE9F3 -:10C9C000F04100F12804407F1E460830904643188D -:10C9D000002508884F88069ADB1E90B1C01C80B2E3 -:10C9E000904212D9801AB04200DB304685B29918C5 -:10C9F0002A4640460BF043FA701B86B2A84400203A -:10CA000005E0FF1CBFB2E41EEAE7101A80B28119EC -:10CA1000B94206D82118324640460BF030FAA81920 -:10CA200085B2284624E62DE9F04100F12804407F34 -:10CA30001E46083090464318002508884F88069AFD -:10CA4000DB1E90B1C01C80B2904212D9801AB04255 -:10CA500000DB304685B298182A4641460BF00FFAA3 -:10CA6000701B86B2A844002005E0FF1CBFB2E41E84 -:10CA7000EAE7101A80B28119B94206D8204432463A -:10CA800041460BF0FCF9A81985B22846F0E5401D97 -:10CA9000704710B5044600F12801C288808820F450 -:10CAA00000431944904206D0A28922B9228A12B9C1 -:10CAB000A28A904201D1002010BD0888498831B176 -:10CAC000201D00F064F800202082012010BD637F4B -:10CAD00062880833184481B2201DFFF783FCF2E717 -:10CAE0000021C18101774182C1758175704703883A -:10CAF0001380C28942B1C28822F4004300F12802A7 -:10CB00001A440A60C08970470020704710B5044677 -:10CB1000808AA0F57F41FF3900D0FFDFE088A08246 -:10CB2000E08900B10120A07510BD4FF6FF71818230 -:10CB300000218175704710B50446808AA0F57F41B9 -:10CB4000FF3900D1FFDFA07D28B9A088A18A8842E3 -:10CB500001D1002010BD012010BD8188828A914240 -:10CB600001D1807D08B1002070470120704720F47A -:10CB7000004221F400439A4207D100F4004001F43E -:10CB80000041884201D0012070470020704730B535 -:10CB9000044600880D4620F40040A84200D2FFDF82 -:10CBA00021884FF4004088432843208030BD70B571 -:10CBB0000C00054609D0082C00D2FFDF1DB1A1B240 -:10CBC000286800F044F8201D70BD0DB100202860D9 -:10CBD000002070BD0021026803E0938812681944A8 -:10CBE00089B2002AF9D100F032B870B500260D469E -:10CBF0000446082900D2FFDF206808B91EE0044679 -:10CC000020688188A94202D001680029F7D1818873 -:10CC10000646A94201D100680DE005F1080293B271 -:10CC20000022994209D32844491B0260818021686F -:10CC3000096821600160206000E00026304670BD78 -:10CC400000230B608A8002680A600160704700233D -:10CC50004360021D018102607047F0B50F460188F4 -:10CC6000408815460C181E46AC4200D3641B304465 -:10CC7000A84200D9FFDFA019A84200D9FFDF381968 -:10CC8000F0BD2DE9F04188460646018840881546EA -:10CC90000C181F46AC4200D3641B3844A84200D98C -:10CCA000FFDFE019A84200D9FFDF708838447080A8 -:10CCB00008EB0400BDE8F0812DE9F041054600884D -:10CCC0001E461746841B8846BC4200D33C442C8039 -:10CCD00068883044B84200D9FFDFA019B84200D9B3 -:10CCE000FFDF68883044688008EB0400E2E72DE944 -:10CCF000F04106881D460446701980B217468846E2 -:10CD00002080B84201D3C01B20806088A84200D296 -:10CD1000FFDF7019B84200D9FFDF6088401B6080D8 -:10CD200008EB0600C6E700002DE9F041BF4D0446C0 -:10CD30009046A8780E46A04200D8FFDF05EB860794 -:10CD4000786A50F8240000B1FFDFB868002816D0D8 -:10CD5000304600F032F90146B868FFF746FF05009B -:10CD60000CD0786A072E40F8245000D3FFDFB0487B -:10CD70004246294650F82630204698472846BDE8C6 -:10CD8000F0812DE9F84305000C46009524D00026DB -:10CD9000E81C20F00300A84200D0FFDFDFF88C82FF -:10CDA0000027314688F8007088F8014088F8024072 -:10CDB00088F8034088F8044088F8054088F8064061 -:10CDC000684600F003F9002042460099C91C21F092 -:10CDD0000301009116B10FE00126D9E702EB8003B1 -:10CDE0005962002106E000BFD3F824C04CF821703E -:10CDF000491CC9B2A142F7D30099401C01EB840140 -:10CE0000C0B200910728E0D3481BBDE8F88310B5F5 -:10CE1000044603F065FD08B1102010BD2078834A58 -:10CE2000618802EB800092780EE0436A53F821306B -:10CE300043B14A1C6280A180406A50F82100A06082 -:10CE4000002010BD491C89B28A42EED861800520BD -:10CE500010BD70B505460C46084603F041FD08B10B -:10CE6000102070BD072D01D3072070BD2570002054 -:10CE7000608070BD0EB56946FFF7EBFF00B1FFDFC4 -:10CE80006846FFF7C4FF08B100200EBD01200EBDAB -:10CE900010B50446072800D3FFDF6448005D10BDCD -:10CEA0003EB5054600246946FFF7D3FF18B1FFDF02 -:10CEB00001E0641CE4B26846FFF7A9FF0028F8D03F -:10CEC0002846FFF7E5FF001BC0B23EBD57498978F1 -:10CED000814201D9C0B27047FF2070472DE9F0416F -:10CEE00006291BD1514C00273B464FF6FF7604EB39 -:10CEF000810514F801C00AE0DC19D5F824E0A4B2D9 -:10CF00005EF824E0BEF1000F04D05B1C9BB29C4590 -:10CF1000F2D8344604802046B44201D100202EE7E6 -:10CF2000BDE8F04100E7A0F57F43FF3B01D00729B2 -:10CF300001D300207047F7E6A0F57F42FF3A0BD0FF -:10CF4000072909D2394A9378834205D902EB810136 -:10CF5000496A51F820007047002070472DE9F041E0 -:10CF600004460D46A4F57F4143F20200FF3902D08A -:10CF7000072D01D3072002E72C494FF000088A78DB -:10CF8000A242F8D901EB8506726A52F82470002F8C -:10CF9000F1D0274839461C3050F8252020469047CC -:10CFA000716A284641F8248000F007F802463946A5 -:10CFB000B068FFF745FE0020E1E61D49383131F841 -:10CFC00010004FF6FC71C01C084070472DE9F84373 -:10CFD000164E8846054600242868C01C20F0030031 -:10CFE00028602046FFF7E9FF315D4843B8F1000FA4 -:10CFF00001D0002200E02A680146009232B10027E9 -:10D000004FEA0D00FFF7D3FD1FB106E00127002016 -:10D01000F8E706EB8401009A8A602968641C0844DA -:10D02000E4B22860072CD7D3EFE60000C404002048 -:10D03000BC83010070B50E461D46114600F0D4F8C1 -:10D0400004462946304600F0D8F82044001D70BD43 -:10D050002DE9F04190460D4604004FF0000610D037 -:10D060000027E01C20F00300A04200D0FFDFDDB16C -:10D0700041460020FFF79BFD0C3000EB850617B101 -:10D0800012E00127EDE7614F04F10C00A9003C60BC -:10D090002572606000EB8500206060680AF090FFF8 -:10D0A00041463868FFF783FD3046BDE8F0812DE941 -:10D0B000FF4F564C804681B020689A46934600B98F -:10D0C000FFDF2068027A424503D9416851F8280001 -:10D0D00020B143F2020005B0BDE8F08F514602983E -:10D0E00000F082F886B258460E9900F086F885B2B4 -:10D0F0007019001D87B22068A14639460068FFF705 -:10D1000074FD04001FD0678025802946201D0E9DD8 -:10D1100007465A4601230095FFF786F920883146D5 -:10D1200038440123029ACDF800A0FFF77DF920884A -:10D13000C1193846FFF7A8F9D9F800004168002066 -:10D1400041F82840C7E70420C5E770B52F4C0546D5 -:10D15000206800B9FFDF2068017AA9420ED9426831 -:10D1600052F8251051B1002342F825304A88006852 -:10D17000FFF766FD216800200A7A08E043F202000A -:10D1800070BD4B6853F8203033B9401CC0B28242A6 -:10D19000F7D80868FFF71EFD002070BD70B51B4E64 -:10D1A00005460024306800B9FFDF3068017AA942E3 -:10D1B00004D9406850F8250000B1041D204670BD18 -:10D1C00070B5124E05460024306800B9FFDF3068A4 -:10D1D000017AA94206D9406850F8251011B131F8FA -:10D1E000040B4418204670BD10B50A460121FFF714 -:10D1F00014F9C01C20F0030010BD10B50A4601212F -:10D20000FFF70BF9C01C20F0030010BD64000020E4 -:10D2100070B50446C2F1100528190AF030FE15F069 -:10D22000FF0108D0491EC9B2802060542046BDE8E5 -:10D2300070400AF0A3BE70BD30B505E05B1EDBB2E6 -:10D24000CC5CD55C6C40C454002BF7D130BD10B51C -:10D25000002409E00B78521E44EA430300F8013B26 -:10D2600011F8013BD2B2DC09002AF3D110BD2DE93F -:10D27000F04389B01E46DDE9107990460D00044662 -:10D2800022D002460846F949FEF7C3FB1022214688 -:10D290003846FFF7DCFFE07B000606D5F34A394647 -:10D2A000102310320846FFF7C7FF102239464846C0 -:10D2B000FFF7CDFFF87B000606D5EC4A4946102360 -:10D2C00010320846FFF7B8FF102120460AF056FE3C -:10D2D0000DE0103EB6B208EB060110232246684668 -:10D2E000FFF7AAFF224628466946FEF792FB102E5A -:10D2F000EFD818D0F2B241466846FFF789FF1023F5 -:10D300004A46694604A8FFF797FF1023224604A95E -:10D310006846FFF791FF224628466946FEF779FBEB -:10D3200009B0BDE8F08310233A464146EAE770B5FC -:10D330009CB01E460546134620980C468DF8080002 -:10D34000202219460DF109000AF099FD20222146FC -:10D350000DF129000AF093FD17A913A8CDE90001EA -:10D36000412302AA31462846FFF781FF1CB070BD59 -:10D370002DE9FF4F9FB014AEDDE92D5410AFBB492E -:10D38000CDE90076202320311AA8FFF770FF4FF077 -:10D3900000088DF808804FF001098DF8099054F8C5 -:10D3A000010FCDF80A00A088ADF80E0014F8010CAA -:10D3B0001022C0F340008DF8100055F8010FCDF891 -:10D3C0001100A888ADF8150015F8010C2C99C0F3D0 -:10D3D00040008DF8170006A882460AF050FD0AA802 -:10D3E0008346102222990AF04AFDA04835230838C6 -:10D3F00002AA40688DF83C80CDE900760E901AA90B -:10D400001F98FFF734FF8DF808808DF80990206889 -:10D41000CDF80A00A088ADF80E0014F8010C102217 -:10D42000C0F340008DF810002868CDF81100A888DE -:10D43000ADF8150015F8010C2C99C0F340008DF8DB -:10D44000170050460AF01BFD5846102222990AF098 -:10D4500016FD86483523083802AA40688DF83C90AE -:10D46000CDE900760E901AA92098FFF700FF23B0AF -:10D47000BDE8F08FF0B59BB00C460546DDE9221003 -:10D480001E461746DDE92032D0F801C0CDF808C0AD -:10D49000B0F805C0ADF80CC00078C0F340008DF8BE -:10D4A0000E00D1F80100CDF80F00B1F80500ADF87D -:10D4B000130008781946C0F340008DF81500108855 -:10D4C000ADF8160090788DF818000DF119001022B3 -:10D4D0000AF0D5FC0DF12900102231460AF0CFFCEC -:10D4E0000DF13900102239460AF0C9FC17A913A81A -:10D4F000CDE90001412302AA21462846FFF7B7FEE5 -:10D500001BB0F0BDF0B5A3B017460D4604461E464D -:10D51000102202A828990AF0B2FC06A82022394657 -:10D520000AF0ADFC0EA8202229460AF0A8FC1EA98C -:10D530001AA8CDE90001502302AA314616A8FFF728 -:10D5400096FE1698206023B0F0BDF0B589B0044671 -:10D55000DDE90E070D463978109EC1F340018DF8C4 -:10D56000001031789446C1F340018DF8011019681C -:10D57000CDF802109988ADF8061099798DF8081049 -:10D580000168CDF809108188ADF80D1080798DF80B -:10D590000F0010236A46614604A8FFF74DFE22469D -:10D5A000284604A9FEF735FAD6F801000090B6F82F -:10D5B0000500ADF80400D7F80100CDF80600B7F873 -:10D5C0000500ADF80A000020039010236A462146AA -:10D5D00004A8FFF731FE2246284604A9FEF719FAEF -:10D5E00009B0F0BD1FB51C6800945B680193136817 -:10D5F000029352680392024608466946FEF709FA0A -:10D600001FBD10B588B0044610680490506805909E -:10D6100000200690079008466A4604A9FEF7F9F92B -:10D62000BDF80000208008B010BD1FB51288ADF80D -:10D6300000201A88ADF80220002201920292039283 -:10D64000024608466946FEF7E4F91FBD7FB5074B61 -:10D6500014460546083B9A1C6846FFF7E6FF22463B -:10D6600069462846FFF7CDFF7FBD00000A84010010 -:10D6700070B5044600780E46012813D0052802D064 -:10D68000092813D10EE0A06861690578042003F031 -:10D69000B5F8052D0AD0782300220420616903F033 -:10D6A00003F803E00420616903F0A8F8314620463E -:10D6B000BDE8704001F086B810B500F12D02C379C5 -:10D6C0009478411D64F003042340C371DB070DD03F -:10D6D0004B79547923404B710B79127913400B71BC -:10D6E0008278C9788A4200D9817010BD00224A71BF -:10D6F0000A71F5E74178012900D00C2101707047CB -:10D700002DE9F04F93B04FF0000B0C690D468DF8EA -:10D7100020B0097801260C2017464FF00D084FF075 -:10D72000110A4FF008091B2975D2DFE811F01B0020 -:10D73000C30206031E035D037003A203B703F803CD -:10D74000190461049304A004EC042A05340552056D -:10D750005D05EE053106340663067F06F9061D07F2 -:10D76000E606EB0614B120781D282AD0D5F80880EB -:10D770005FEA08004FD001208DF82000686A02227D -:10D780000D908DF824200A208DF82500A8690A90B4 -:10D79000A8880028EED098F8001091B10F2910D277 -:10D7A0007ED2DFE801F07D1349DEFEFDFCFBFAF9D5 -:10D7B00038089CF8F70002282DD124B120780C28D5 -:10D7C00001D00026EFE38DF82020CBE10420696A28 -:10D7D00003F014F8A8880728EED1204600F0EDFFEA -:10D7E000022809D0204600F0E8FF032807D9204688 -:10D7F00000F0E3FF072802D20120207004E0002C93 -:10D80000B8D020780128D7D198F80400C11F0A2980 -:10D8100002D30A2061E0C4E1A070D8F80010E162F0 -:10D82000B8F80410218698F8060084F83200012028 -:10D8300028700320207044E00728BDD1002C99D027 -:10D8400020780D28B8D198F8031094F82F20C1F350 -:10D85000C000C2F3C002104201D0062000E0072041 -:10D86000890707D198F805100142D2D198F806101F -:10D870000142CED194F8312098F8051020EA020236 -:10D880001142C6D194F8322098F806109043014214 -:10D89000BFD198F80400C11F0A29BAD2617D00E007 -:10D8A00006E281427ED8D8F800106160B8F8041012 -:10D8B000218198F80600A072012028700E202070A7 -:10D8C00003208DF82000686A0D9004F12D00099066 -:10D8D000601D0A900F300B9022E12875FDE341286E -:10D8E00091D1204600F069FF042802D1E078C007FA -:10D8F00004D1204600F061FF0F2884D1A88CD5F810 -:10D900000C8080B24FF0400BE669FFF747FC3246CF -:10D9100041465B464E46CDF80090FFF750F80B208D -:10D920008DF82000686A0D90E0690990002108A830 -:10D93000FFF79EFE2078042806D0A07D58B101286C -:10D9400009D003280AD049E305202070032028705D -:10D950008DF82060CDE184F800A032E7122020701D -:10D96000E9E11128BCD1204600F027FF042802D1AC -:10D97000E078C00719D0204600F01FFF062805D127 -:10D98000E078C00711D1A07D02280ED0204600F01B -:10D9900014FF08E0CAE081E06FE14EE121E101E11E -:10D9A000E7E017E0ADE111289AD1102208F101015A -:10D9B00004F13C000AF063FA607801287ED012205E -:10D9C0002070E078C00760D0A07D0028C8D0012872 -:10D9D000C6D05AE0112890D1204600F0EEFE08286B -:10D9E00004D0204600F0E9FE132886D104F16C0033 -:10D9F000102208F1010106460AF041FA20780828B1 -:10DA00000DD014202070E178C8070DD0A07D022829 -:10DA10000AD06278022A04D00328A1D035E0092078 -:10DA2000F0E708B1012837D1C80713D0A07D02283C -:10DA30001DD000200090D4E9062133460EA8FFF740 -:10DA400076FC10220EA904F13C000AF0ECF9C8B1F2 -:10DA5000042042E7D4E90912201D8DE8070004F1F3 -:10DA60002C0332460EA8616BFFF76FFDE9E7606B90 -:10DA7000C1F34401491E0068C84000F0010040F0B5 -:10DA80008000D7E72078092806D185F800908DF826 -:10DA9000209033E32870ECE30920FBE711289AD1AA -:10DAA000204600F08AFE0A2802D1E078C00704D19F -:10DAB000204600F082FE15288DD100E08DE104F1B2 -:10DAC0003C00102208F1010106460AF0D8F920783E -:10DAD0000A2816D016202070D4E90932606B611D27 -:10DAE0008DE80F0004F15C0304F16C0247310EA8CD -:10DAF000FFF7C0FC10220EA930460AF094F918B1C5 -:10DB0000F5E20B20207071E22046FFF7D5FDA078EA -:10DB1000216A0A18C0F1100110460AF02FFA23E317 -:10DB2000394608A8FFF7A4FD06463BE20228B6D115 -:10DB3000204600F042FE042804D3204600F03DFEBB -:10DB4000082809D3204600F038FE0E2829D32046A5 -:10DB500000F033FE122824D2A07D02289FD10E208F -:10DB60008DF82000686A0D9098F801008DF8240067 -:10DB7000F0E3022893D1204600F01FFE002810D0C9 -:10DB8000204600F01AFE0128F9D0204600F015FECC -:10DB90000C28F4D004208DF8240098F801008DF8AA -:10DBA00025005EE21128FCD1002CFAD0207817283D -:10DBB000F7D16178606A022911D0002101EB41019F -:10DBC000182606EBC1011022405808F101010AF0A5 -:10DBD00056F90420696A00F0E3FD2670F1E50121A1 -:10DBE000ECE70B28DDD1002CDBD020781828D8D129 -:10DBF0006078616A02281CD05FF0000000EB4002F0 -:10DC0000102000EBC2000958B8F8010008806078C5 -:10DC1000616A02280FD0002000EB4002142000EBC4 -:10DC2000C2000958404650F8032F0A604068486017 -:10DC300039E00120E2E70120EEE71128B1D1002C04 -:10DC4000AFD020781928ACD16178606A022912D04F -:10DC50005FF0000101EB41011C2202EBC101102227 -:10DC6000405808F101010AF00AF90420696A00F03D -:10DC700097FD1A20B6E00121ECE7082891D1002C8D -:10DC80008FD020781A288CD1606A98F8012001780A -:10DC900062F347010170616AD8F8022041F8012F50 -:10DCA000B8F8060088800420696A00F079FD8EE2E9 -:10DCB000072012E63878012894D1182204F11400C4 -:10DCC00079680AF021F9E079C10894F82F0001EA97 -:10DCD000D001E07861F30000E070217D002974D16B -:10DCE0002178032909D0C00725D0032028708DF89A -:10DCF0002090686A0D90412004E3607DA1788842FD -:10DD000001D90620E9E502262671E179204621F0B5 -:10DD1000E001E171617A21F0F0016172A17A21F0F4 -:10DD2000F001A172FFF7C8FC2E708DF82090686A90 -:10DD30000D900720E6E20420ACE6387805289DD156 -:10DD40008DF82000686A0D90B8680A900720ADF839 -:10DD500024000A988DF830B06168016021898180C3 -:10DD6000A17A817104202070F4E23978052985D1E7 -:10DD70008DF82010696A0D91391D09AE0EC986E82B -:10DD80000E004121ADF824108DF830B01070A88C31 -:10DD9000D7F80C8080B24026A769FFF711FA4146F8 -:10DDA0003A463346C846CDF80090FEF73CFE0021C7 -:10DDB00008A8FFF75DFCE07820F03E00801CE070D2 -:10DDC0002078052802D00F200CE049E1A07D20B189 -:10DDD000012802D0032802D002E10720BFE584F821 -:10DDE0000080EEE42070ECE4102104F15C0002F00D -:10DDF0005AFA606BB0BBA07D18B1012801D0052094 -:10DE0000FDE006202870F7486063A063BEE2387822 -:10DE1000022894D1387908B12875B3E3A07D02288F -:10DE200002D0032805D022E0B8680028F5D060634E -:10DE30001CE06078012806D0A07994F82E10012803 -:10DE400005D0E84806E0A17994F82E00F7E7B86815 -:10DE50000028E2D06063E078C00701D0012902D039 -:10DE6000E04803E003E0F8680028D6D0A06306206D -:10DE700010E68DF82090696A0D91E1784846C9074F -:10DE800009D06178022903D1A17D29B1012903D0EC -:10DE9000A17D032900D00720287031E138780528BA -:10DEA000BBD1207807281ED084F800A005208DF86B -:10DEB0002000686A0D90B8680A90ADF824A08DF82B -:10DEC00030B003210170E178CA070FD0A27D022A89 -:10DED0001AD000210091D4E9061204F15C03401C21 -:10DEE000FFF725FA67E384F80090DFE7D4E9092318 -:10DEF000211D8DE80E0004F12C0304F15C02401C8E -:10DF0000616BFFF722FB56E3626BC1F34401491ECC -:10DF10001268CA4002F0010141F08001DAE7387866 -:10DF20000528BDD18DF82000686A0D90B8680A9068 -:10DF3000ADF824A08DF830B0042100F8011B1022A8 -:10DF400004F15C0109F09BFF002108A8FFF790FB9A -:10DF50002078092801D0132044E70A2020709BE58F -:10DF6000E078C10742D0A17D012902D0022927D043 -:10DF700038E0617808A8012916D004F16C010091FD -:10DF8000D4E9061204F15C03001DFFF7BBFA0A2076 -:10DF9000287003268DF82080686A0D90002108A85B -:10DFA000FFF766FBDDE2C3E204F15C010091D4E916 -:10DFB000062104F16C03001DFFF7A4FA0026E9E72F -:10DFC000C0F3440114290DD24FF0006101EBB010F1 -:10DFD0004FEAB060E0706078012801D01020BEE404 -:10DFE0000620FFE6607801283FF4B7AC0A2051E52F -:10DFF000E178C90708D0A17D012903D10B20287041 -:10E0000004202FE028702DE00E2028706078616BCE -:10E01000012817D004F15C0304F16C020EA8FFF78D -:10E02000E1FA2046FFF748FBA0780EAEC0F11001E0 -:10E03000304409F0A3FF06208DF82000686A099695 -:10E040000D909AE004F16C0304F15C020EA8FFF756 -:10E05000C9FAE9E73978022903D139790029D1D001 -:10E0600029758FE28DF82000686A0D9058E53878A0 -:10E070000728F6D1D4E909216078012808D004F1F5 -:10E080006C00CDE90002029105D104F16C0304E0BB -:10E0900004F15C00F5E704F15C0304F14C007A68DC -:10E0A0000646216AFFF764F96078012821D1A0783B -:10E0B000216A0A18C0F11001104609F05FFFD4E987 -:10E0C0000923606B04F12D018DE80F0004F15C035E -:10E0D00004F16C0231460EA800E055E2FFF7CAF9E0 -:10E0E00010220EA904F13C0009F09DFE08B10B209E -:10E0F000AFE485F8008000BF8DF82090686A0D902D -:10E100008DF824A00CE538780528AAD18DF82000D8 -:10E11000686A0D90B8680A90ADF824A08DF830B008 -:10E1200080F80080617801291AD0D4E9093204F11D -:10E130002D01A66B03920096CDE9011304F16C0347 -:10E1400004F15C0204F14C01401CFFF793F900213B -:10E1500008A8FFF78DFA6078012805D0152041E660 -:10E16000D4E90923611DE4E70E20287006208DF80C -:10E170002000686ACDF824B00D90A0788DF82800B2 -:10E18000CEE438780328C0D1E079C00770D00F20E2 -:10E190002870072066E7387804286BD11422391DCF -:10E1A00004F1140009F0B0FE616A208CA1F80900A6 -:10E1B000616AA078C871E179626A01F003011172A5 -:10E1C000616A627A0A73616AA07A81F82400162073 -:10E1D00060E485F800A08DF82090696A50460D91A2 -:10E1E00090E000000A8401003878052842D1B86820 -:10E1F000A8616178606A022901D0012100E0002154 -:10E2000001EB4101142606EBC1014058082102F040 -:10E210004AF86178606A022901D0012100E00021FA -:10E2200001EB410106EBC101425802A8E169FFF789 -:10E230000DFA6078626A022801D0012000E0002017 -:10E2400000EB4001102000EBC1000223105802A98E -:10E250000932FEF7F1FF626AFD4B0EA80932A1698F -:10E26000FFF7E3F96178606A022904D0012103E035 -:10E2700042E18BE0BDE0002101EB4101182606EBF5 -:10E28000C101A27840580EA909F0F9FD6178606AD1 -:10E29000022901D0012100E0002101EB410106EB40 -:10E2A000C1014058A1780844C1F1100109F066FE8F -:10E2B00005208DF82000686A0D90A8690A90ADF8D5 -:10E2C00024A08DF830B0062101706278616A022ABC -:10E2D00001D0012200E0002202EB420206EBC20262 -:10E2E000401C8958102209F0CAFD002108A8FFF738 -:10E2F000BFF91220C5F818B028708DF82090686A10 -:10E300000D900B208DF824000AE43878052870D190 -:10E310008DF82000686A0D90B8680A900B20ADF85F -:10E3200024000A98072101706178626A022901D0ED -:10E33000012100E0002101EB4103102101EBC301A9 -:10E3400051580988A0F801106178626A022902D048 -:10E35000012101E02FE1002101EB4103142101EB38 -:10E36000C30151580A6840F8032F4968416059E0D9 -:10E370001920287001208DF8300077E616202870CB -:10E380008DF830B0002108A8FFF772F9032617E1D5 -:10E3900014202870B0E6387805282AD18DF820009E -:10E3A000686A0D90B8680A90ADF824A08DF830B076 -:10E3B00080F800906278616A4E46022A01D00122FC -:10E3C00000E0002202EB42021C2303EBC202401CCD -:10E3D0008958102209F053FD002108A8FFF748F9D9 -:10E3E000152028708DF82060686A0D908DF82460E3 -:10E3F0003CE680E0387805287DD18DF82000686AF9 -:10E400000D90B8680A90ADF82490092101706169F7 -:10E41000097849084170616951F8012FC0F802205C -:10E420008988C18020781C28A8D1A1E7E078C0079E -:10E4300002D04FF0060C01E04FF0070C6078022884 -:10E440000AD04FF0000000BF00EB040101F1090108 -:10E4500005D04FF0010004E04FF00100F4E74FF069 -:10E4600000000B78204413EA0C030B7010F8092FFE -:10E4700002EA0C02027004D14FF01B0C84F800C0B9 -:10E48000D2B394F801C0BCF1010F00D09BB990F851 -:10E4900000C0E0465FEACC7C04D028F0010606709C -:10E4A000102606E05FEA887C05D528F00206067093 -:10E4B00013262E70032694F801C0BCF1020F00D081 -:10E4C00092B991F800C05FEACC7804D02CF0010634 -:10E4D0000E70172106E05FEA8C7805D52CF0020655 -:10E4E0000E701921217000260078D0BBCAB3C3BBBF -:10E4F0001C20207035E012E002E03878062841D177 -:10E500001A2019E4207801283CD00C283AD0204663 -:10E51000FFF7F0F809208DF82000686A0D9031E0CF -:10E520003878052805D00620387003261820287072 -:10E5300046E005218DF82010686A0D90B8680A90B1 -:10E540000220ADF8240001208DF830000A980170F7 -:10E55000297D4170394608A8FFF78AF80646182039 -:10E560002870012E0ED02BE001208DF82000686A63 -:10E570000D9003208DF82400287D8DF8250085F866 -:10E5800014B012E0287D80B11D2020701720287063 -:10E590008DF82090686A0D9002208DF8240039468D -:10E5A00008A8FFF765F806460AE00CB1FE202070C7 -:10E5B0009DF8200020B1002108A8FFF759F810E4C9 -:10E5C00013B03046BDE8F08F2DE9F04387B00C461C -:10E5D0004E6900218DF8041001202578034602279A -:10E5E0004FF007094FF0050C85B1012D53D0022DD6 -:10E5F00039D1FE2030708DF80030606A059003201C -:10E600008DF80400207E8DF8050063E02179012952 -:10E6100025D002292DD0032928D0042923D1B17D6A -:10E62000022920D131780D1F042D04D30A3D032D7A -:10E6300001D31D2917D12189022914D38DF8047023 -:10E64000237020899DF8041088421BD2082001E025 -:10E65000028401008DF80000606A059057E0707830 -:10E660000128EBD0052007B0BDE8F0831D203070F5 -:10E67000E4E771780229F5D131780C29F3D18DF8CE -:10E680000490DDE7083402F804CB94E80B0082E83C -:10E690000B000320E7E71578052DE4D18DF800C0C5 -:10E6A000656A0595956802958DF8101094F80480B8 -:10E6B000B8F1010F13D0B8F1020F2DD0B8F1030F4C -:10E6C0001CD0B8F1040FCED1ADF804700E20287024 -:10E6D000207E687000216846FEF7CAFF0CE0ADF8A6 -:10E6E00004700B202870207E002100F01F0068704D -:10E6F0006846FEF7BDFF37700020B4E7ADF8047040 -:10E700008DF8103085F800C0207E687027701146A3 -:10E710006846FEF7ADFFA6E7ADF804902B70207FAA -:10E720006870607F00F00100A870A07F00F01F00FB -:10E73000E870E27F2A71C0071CD094F8200000F036 -:10E740000700687194F8210000F00700A87100210B -:10E750006846FEF78DFF2868F062A8883086A879A1 -:10E7600086F83200A069407870752879B0700D2065 -:10E770003070C1E7A9716971E9E700B587B0042875 -:10E780000CD101208DF800008DF8040000200591C7 -:10E790008DF8050001466846FEF76AFF07B000BD28 -:10E7A00070B50C46054602F029F821462846BDE81A -:10E7B00070407823002201F077BF08B100787047DD -:10E7C0000C20704770B50C0005784FF000010CD09C -:10E7D00021702146F4F720FD69482178405D884288 -:10E7E00001D1032070BD022070BDF4F715FD00209B -:10E7F00070BD0279012A05D000220A704B78012BE6 -:10E8000002D003E0042070470A758A610279930000 -:10E81000521C0271C15003207047F0B587B00F46FB -:10E8200005460124287905EB800050F8046C7078C7 -:10E83000411E02290AD252493A46083901EB8000AA -:10E84000314650F8043C2846984704460CB1012C48 -:10E8500011D12879401E10F0FF00287101D0032447 -:10E86000E0E70A208DF80000706A0590002101960B -:10E870006846FFF7A7FF032CD4D007B02046F0BDB1 -:10E8800070B515460A46044629461046FFF7C5FFEF -:10E89000064674B12078FE280BD1207C30B10020D0 -:10E8A0002870294604F10C00FFF7B7FF2046FEF759 -:10E8B00021FF304670BD704770B50E4604467C217E -:10E8C00009F07EFB0225012E03D0022E04D0052084 -:10E8D00070BD0120607000E065702046FEF70AFF01 -:10E8E000A575002070BD28B1027C1AB10A4600F15E -:10E8F0000C01C5E70120704710B5044686B004201E -:10E9000001F07CFF2078FE2806D000208DF8000062 -:10E9100069462046FFF7E7FF06B010BD7CB50E46FE -:10E9200000218DF804104178012903D0022903D079 -:10E93000002405E0046900E044690CB1217C89B140 -:10E940006D4601462846FFF754FF032809D1324699 -:10E9500029462046FFF794FF9DF80410002900D0B7 -:10E9600004207CBD04F10C05EBE730B40C460146F5 -:10E97000034A204630BC034B0C3AFEF756BE00005B -:10E98000488401000284010070B50D46040011D0D6 -:10E9900085B12101284609F0F1FA10224E49284696 -:10E9A00009F06DFA4C480121083801804480456027 -:10E9B000002070BD012070BD70B5474E0024054693 -:10E9C000083E10E07068AA7B00EB0410817B914246 -:10E9D00008D1C17BEA7B914204D10C22294609F07F -:10E9E00022FA30B1641C30888442EBDB4FF0FF30F8 -:10E9F00070BD204670BD70B50D46060006D02DB125 -:10EA0000FFF7DAFF002803DB401C14E0102070BD84 -:10EA1000314C083C20886288411C914201D9042075 -:10EA200070BD6168102201EB0010314609F027FA31 -:10EA30002088401C20802870002070BD70B51446CE -:10EA40000D0018D0BCB10021A170022802D01028FE -:10EA500011D105E0288870B10121A170108008E073 -:10EA60002846FFF7A9FF002805DB401CA070A889F5 -:10EA70002080002070BD012070BD70B50546144691 -:10EA80000E000BD000203070A878012808D005D9DE -:10EA90001149A1F108010A8890420AD9012070BDEC -:10EAA00024B1287820702888000A5070022008704D -:10EAB0000FE064B14968102201EB001120461039C3 -:10EAC00009F0DDF9287820732888000A6073102087 -:10EAD0003070002070BD0000700000202DE9F04172 -:10EAE00090460C4607460025FE48072F00EB881687 -:10EAF00007D2DFE807F00707070704040400012531 -:10EB000000E0FFDF06F81470002D13D0F5488030C8 -:10EB100000EB880191F82700202803D006EB400085 -:10EB2000447001E081F8264006EB4402202050703A -:10EB300081F82740BDE8F081F0B51F4614460E4627 -:10EB40000546202A00D1FFDFE649E648803100EB88 -:10EB5000871C0CEB440001EB8702202E07D00CEB46 -:10EB6000460140784B784870184620210AE092F818 -:10EB70002530407882F82500F6E701460CEB41008D -:10EB800005704078A142F8D192F82740202C03D09C -:10EB90000CEB4404637001E082F826300CEB410476 -:10EBA0002023637082F82710F0BD30B50D46CE4BA0 -:10EBB00044190022181A72EB020100D2FFDFCB4881 -:10EBC000854200DDFFDFC9484042854200DAFFDFB1 -:10EBD000C548401C844207DA002C01DB204630BDCA -:10EBE000C148401C201830BDBF48C043FAE710B5EB -:10EBF00004460168407ABE4A52F82020114450B1C0 -:10EC00000220084420F07F40F9F7FBFE94F9081039 -:10EC1000BDE81040C9E70420F3E72DE9F047B14E05 -:10EC2000803696F82D50DFF8BC9206EB850090F800 -:10EC3000264034E009EB85174FF0070817F8140059 -:10EC4000012806D004282ED005282ED0062800D072 -:10EC5000FFDF01F0E3F8014607EB4400427806EBE2 -:10EC6000850080F8262090F82720A24202D1202299 -:10EC700080F82720084601F0DCF82A4621460120CA -:10EC8000FFF72CFF9B48414600EB0410026820462A -:10EC9000904796F82D5006EB850090F82640202CE2 -:10ECA000C8D1BDE8F087022000E003208046D0E70D -:10ECB00010B58C4C2021803484F8251084F826105F -:10ECC00084F82710002084F8280084F82D0084F8A8 -:10ECD0002E10411EA16044F8100B20746074207344 -:10ECE0006073A0738449E077207508704870002134 -:10ECF0007C4A103C02F81100491CC9B22029F9D302 -:10ED00000120F9F772FD0020F9F76FFD012084F86A -:10ED10002200F4F74FF87948F4F75BF8764CA41E1C -:10ED200020707748F4F755F86070BDE81040F9F7A7 -:10ED3000E9BC10B5F9F70BFD6F4CA41E2078F4F771 -:10ED400061F86078F4F75EF8BDE8104001F09EB815 -:10ED5000202070472DE9F34F624E0025803606EBE8 -:10ED6000810A89B09AF82500202822D0691E0291D4 -:10ED70006049009501EB00108146D0E90112C0689E -:10ED80000391CDE90420B08BADF81C00B07F8DF865 -:10ED90001E009DF81500C8B10227554951F82040C2 -:10EDA0000399E219114421F07F41019184B10221BC -:10EDB0000FE00120F9F719FD0020F9F716FDF9F72A -:10EDC000E4FC01F063F886F82F50A0E00427E4E7A4 -:10EDD00000218DF81810022801D0012820D10398B5 -:10EDE000391901440998081A9DF81C1020F07F4039 -:10EDF00001B10221333181420BD203208DF815007D -:10EE00000398C4F13201401A20F07F40322403906D -:10EE10000CE096F8240018B901F0A8F900284CD0AD -:10EE2000322C03D214B101F025F801E001F02EF8E4 -:10EE3000314A107818B393465278039B121B002175 -:10EE40009DF81840984601281AD0032818D00020B1 -:10EE50008DF81E00002A04DD981A039001208DF819 -:10EE600018009DF81C0000B102210398254A20F0EB -:10EE70007F40039003AB099801F014F810B110E043 -:10EE80000120E5E79DF81D0018B99BF80000032854 -:10EE900012D08DF81C50CDF80C808DF818408DF8EC -:10EEA0001E509DF8180058B103980123C119002283 -:10EEB0001846F9F7EDFC06E000200BB0BDE8F08F36 -:10EEC0000120F9F792FC99F90C2001230020019907 -:10EED000F9F7DEFC012086F82F008AF8285020225E -:10EEE000694611E004070020FF7F841E0020A1076F -:10EEF000588401000405002082000020570501000D -:10EF00001BEC0000FFFF3F00F94808F0FDFF012067 -:10EF1000D3E72DE9F05FDFF8D883064608EB8600DB -:10EF200090F82550202D1FD0A8F180002C4600EB32 -:10EF30008617A0F50079DFF8BCB305E0A24607EB21 -:10EF40004A004478202C0AD0F9F7EEFC09EB0413B0 -:10EF50005A4601211B1D00F0A5FF0028EED0AC424F -:10EF600002D0334652461EE0E34808B1AFF30080BA -:10EF7000F9F7DAFC98F82F206AB1D8F80C20411C78 -:10EF8000891A0902CA1701EB12610912002902DD70 -:10EF90000020BDE8F09F3146FFF7DCFE08B10120FC -:10EFA000F7E733462A4620210420FFF7C5FDEFE7A7 -:10EFB0002DE9F041CE4C2569F9F7B6FC401B000263 -:10EFC000C11700EB1160001200D4FFDF94F822009B -:10EFD00000B1FFDF012784F8227094F82E0020286A -:10EFE00000D1FFDF94F82E60202084F82E00002549 -:10EFF00084F82F5084F8205084F82150BF482560B1 -:10F000000078022833D0032831D000202077A06870 -:10F01000401C05D04FF0FF30A0600120F9F7E5FB60 -:10F020000020F9F7E2FBF9F7DAFCF9F7D2FCF9F77F -:10F03000ACFB08F0A7F9B248056005604FF0E0218D -:10F040004FF40040B846C1F88002F3F721FE94F86F -:10F050002D703846FFF75DFF0028FAD0A4488038AD -:10F0600000EB871010F81600022802D006E00120FD -:10F07000CCE73A4631460620FFF730FD84F823807E -:10F0800004EB870090F82600202804D09B48801EBF -:10F090004078F3F7BDFE207F002803D0F9F78FFCFE -:10F0A0002577657746E50146914810B590F82D2003 -:10F0B0000024803800EB821010F814302BB1641C4F -:10F0C000E4B2202CF8D3202010BD8E4800EB0410B1 -:10F0D000016021460120FFF701FD204610BD10B55B -:10F0E000012801D0032800D171B3814A92F82D3054 -:10F0F0007F4C0022803C04EB831300BF13F81240C6 -:10F100000CB1082010BD521CD2B2202AF6D37B4A83 -:10F1100048B1022807D0072916D2DFE801F015060A -:10F12000080A0C0E100000210AE01B2108E03A2119 -:10F1300006E0582104E0772102E0962100E0B521A5 -:10F1400051701070002010BD072010BD6B4810B525 -:10F150004078F9F756FC80B210BD10B5202811D2C6 -:10F16000634991F82D30A1F1800202EB831414F869 -:10F1700010303BB191F82D3002EB831212F81020C1 -:10F18000012A01D0002010BD91F82D200146002059 -:10F19000FFF7A4FC012010BD10B5F9F7C5FBBDE8D1 -:10F1A0001040F9F72EBC2DE9F0410E46504F017882 -:10F1B0002025803F0C4607EB831303E0254603EB35 -:10F1C00045046478944202D0202CF7D108E0202C2A -:10F1D00006D0A14206D103EB41014978017007E056 -:10F1E0000020A7E403EB440003EB4501407848709E -:10F1F000454F7EB127B1002140F2DA30AFF30080F5 -:10F200003078A04206D127B1002140F2DD30AFF3C3 -:10F210000080357027B1002140F2E230AFF300806A -:10F22000012087E410B542680B689A1A1202D417BD -:10F2300002EB1462121216D4497A91B1427A82B961 -:10F24000324A006852F82110126819441044001D17 -:10F25000891C081A0002C11700EB11600012322845 -:10F2600001DB012010BD002010BD2DE9F0478146D3 -:10F270001F48244E00EB8100984690F8254020203E -:10F28000107006F50070154600EB81170BE000BF0B -:10F2900006EB04104946001DFFF7C4FF28B107EB39 -:10F2A00044002C704478202CF2D1297888F8001082 -:10F2B00013E000BF06EB0415291D4846FFF7B2FF17 -:10F2C00068B988F80040A97B99F80A00814201D802 -:10F2D0000020E6E407EB44004478202CEAD101202A -:10F2E000DFE42DE9FC410E4607460024054D18E0F9 -:10F2F00084070020FFFF3F00000000008200002084 -:10F3000000F50040040500200000000058840100C2 -:10F310009DF8000005EB00108168384600F0D6FD2E -:10F3200001246B4601AA31463846FFF79EFF0028AC -:10F33000EED02046BDE8FC8170B50446FF480125AB -:10F34000A54300EB841100EB8510402208F097FDE7 -:10F35000FB4E26B1002140F25C40AFF30080F7483D -:10F36000803000EB850100EB8400D0F82500C1F867 -:10F37000250026B100214FF48C60AFF300802846B1 -:10F3800070BD2DE9FC418446EC481546089C00EB15 -:10F3900085170E4617F81400012803D0022801D063 -:10F3A0000020C7E70B46E74A0121604600F07AFDDE -:10F3B000A8B101AB6A4629463046FFF756FF70B147 -:10F3C000DE489DF804209DF80010803000EB850693 -:10F3D0008A4208D02B460520FFF7AEFB0BE02A46F9 -:10F3E0002146042014E0202903D007EB4100407897 -:10F3F00001E096F8250007EB440148709DF80000F5 -:10F40000202809D007EB400044702A4621460320FB -:10F41000FFF764FB01208DE706F8254F0120F0700F -:10F42000F3E7C94901EB0010001DFFF7E0BB7CB515 -:10F430001D46134604460E4600F1080221461846B2 -:10F44000F9F7ECFA94F908000F2804DD1F38207250 -:10F450002068401C206096B10220BC4951F826105B -:10F46000461820686946801B20F07F40206094F990 -:10F4700008002844C01C1F2803DA012009E00420EA -:10F48000EBE701AAF9F7CAFA9DF8040010B1009859 -:10F49000401C00900099206831440844C01C20F0B2 -:10F4A0007F4060607CBD2DE9FE430C46064609782E -:10F4B00060799072207998461546507241B19F4804 -:10F4C000803090F82E1020290AD00069401D0BE0F2 -:10F4D000D4E90223217903B02846BDE8F043A6E72A -:10F4E0009B484178701D084420F07F472179002215 -:10F4F0002846A368FFF79BFF3946284600F0E6FC44 -:10F50000D4E9023221796846FFF791FF4146284647 -:10F51000019CFFF7E6FE2B4622460021304600F014 -:10F52000C1FC002803D13146284600F0CFFCBDE8DD -:10F53000FE832DE9FE4F814600F084FC30B10027A8 -:10F5400099F8000020B10020BDE8FE8F0127F7E701 -:10F550007A4D7B4C4FF0000A803524B1002140F2F7 -:10F56000D340AFF3008095F82D8085F823A00026C6 -:10F5700024B100214FF49B60AFF300801FB94046D7 -:10F58000FFF7DAFE804624B100214FF49C60AFF310 -:10F590000080F9F7C9F943466A464946FFF783FFF9 -:10F5A00024B1002140F2E640AFF3008095F82E0030 -:10F5B00020280CD029690098401A0002C21700EBDD -:10F5C0001260001203D5684600F080FC012624B1C9 -:10F5D00000214FF49E60AFF3008095F823000028CF -:10F5E000BBD124B1002140F2F640AFF30080F9F71F -:10F5F0009BF96B46534A002100F054FC0028A3D02D -:10F6000027B941466846FFF76CFE064326B16846B7 -:10F61000FFF7EDFAC9F8080024B1002140F20950C3 -:10F62000AFF3008001208FE72DE9FF5F8A46814616 -:10F6300000F008FC414C803410B39AF80000002719 -:10F6400010B1012800D0FFDF3D4D25B1002140F26F -:10F650007F50AFF300800120A84600905FEA0806C3 -:10F6600004D0002140F28750AFF30080009800F0F2 -:10F67000E0FB94F82D50002084F8230067B119E0D6 -:10F6800094F82E000127202800D1FFDF9AF800000F -:10F690000028D9D0FFDFD7E72846FFF74DFE054603 -:10F6A00026B1002140F29150AFF3008094F823007E -:10F6B0000028D3D126B1002140F29B50AFF3008047 -:10F6C000F9F732F983462B4601AA5146FFF7EBFEC4 -:10F6D0005FEA060804D0002140F2A250AFF3008098 -:10F6E0003B462A4601A95846CDF80090FFF749FE4F -:10F6F000064604EB850090F828B0B8F1000F04D05E -:10F70000002140F2A950AFF3008000F087FB009089 -:10F71000B8F1000F04D0002140F2AF50AFF30080E9 -:10F7200094F82300002899D1B8F1000F04D00021EB -:10F7300040F2B750AFF3008003490BE0040700200C -:10F7400000000000FFFF3F00040500205884010076 -:10F750008200002001EB09100DF1040C00F10400FF -:10F760009CE80E0080E80E004EB35FEA080604D065 -:10F77000002140F2C450AFF300803BEA070012D0F2 -:10F7800094F82E0020280ED126B1002140F2C95055 -:10F79000AFF300802846FFF7BCFB20B99AF80000C1 -:10F7A000D8B3012849D0B8F1000F04D0002140F2AD -:10F7B000E650AFF30080284600F029FB01265FEAFF -:10F7C000080504D0002140F2EF50AFF3008000980C -:10F7D00000F02FFB25B1002140F2F350AFF3008081 -:10F7E0008EB194F82D0004EB800090F826002028BC -:10F7F00009D025B1002140F2FA50AFF30080F9485A -:10F800004078F3F705FB25B1002140F2FF50AFF33C -:10F81000008004B03046BDE8F09FFFE7B8F1000F6C -:10F8200004D0002140F2D150AFF3008094F82D2095 -:10F8300049460420FFF752F9C0E7002E3FF40EAF0F -:10F84000002140F2DC50AFF3008007E72DE9F84FCC -:10F85000E54D814695F82D004FF00008E34C4FF040 -:10F86000010B474624B1002140F20D60AFF3008048 -:10F87000584600F0DEFA85F8237024B1002140F2EA -:10F880001260AFF3008095F82D00FFF755FD064696 -:10F8900095F8230028B1002CE4D000214FF4C36078 -:10F8A0004BE024B1002140F21C60AFF30080CE4851 -:10F8B000803800EB861111F81900032856D1334621 -:10F8C00005EB830A4A469AF82500904201D10120AF -:10F8D00000E0002000900AF125000021FFF763FC02 -:10F8E00001460098014203D001228AF82820AF7710 -:10F8F000E1B324B1002140F22160AFF30080324631 -:10F9000049460120FFF7EAF89AF828A024B100211F -:10F9100040F22C60AFF3008000F080FA834624B1FF -:10F92000002140F23160AFF3008095F8230038B138 -:10F93000002C97D0002140F23560AFF3008091E7B2 -:10F94000BAF1000F07D095F82E00202803D13046D9 -:10F95000FFF7DFFAE0B124B1002140F24960AFF3D4 -:10F960000080304600F053FA4FF0010824B1002126 -:10F9700040F25260AFF30080584600F05AFA24B1CA -:10F98000002140F25660AFF300804046BDE8F88F9A -:10F99000002CF1D0002140F24460AFF30080E6E794 -:10F9A0000020F8F7FBBE0120F8F7F8BE8D4800787C -:10F9B00070472DE9F0418C4C94F82E0020281FD17F -:10F9C00094F82D6004EB860797F82550202D00D180 -:10F9D000FFDF8549803901EB861000EB4500407858 -:10F9E00007F8250F0120F87084F82300294684F8D1 -:10F9F0002E50324602202234FFF770F8002020708B -:10FA00000FE42DE9F0417A4E774C012538B10128F9 -:10FA100021D0022879D003287DD0FFDFF0E700F065 -:10FA200029FAFFF7C6FF207E00B1FFDF84F82150DE -:10FA30000020F8F7DAFEA168481C04D00123002258 -:10FA40001846F8F725FF14F82E0F217806EB011160 -:10FA50000A68012154E0FFF7ACFF0120F8F7C5FE6A -:10FA600094F8210050B1A068401C07D014F82E0F64 -:10FA7000217806EB01110A68062141E0207EDFF8BB -:10FA80006481002708F10208012803D002281ED053 -:10FA9000FFDFB5E7A777F8F792FF98F80000032893 -:10FAA00001D165772577607D524951F8200094F89F -:10FAB000201051B948B161680123091A0022184683 -:10FAC000F8F7E6FE022020769AE7277698E784F892 -:10FAD000205000F0CFF9A07F50B198F80100616884 -:10FAE0000123091A00221846F8F7D2FE257600E015 -:10FAF000277614F82E0F217806EB01110A680021F1 -:10FB0000BDE8F041104700E005E036480078BDE868 -:10FB1000F041F3F77DB9FFF74CFF14F82E0F217871 -:10FB200006EB01110A680521EAE710B52E4C94F89E -:10FB30002E00202800D1FFDF14F82E0F21782C4A48 -:10FB400002EB01110A68BDE81040042110477CB5A2 -:10FB5000254C054694F82E00202800D1FFDFA06830 -:10FB6000401C00D0FFDF94F82E00214901AA01EBD0 -:10FB70000010694690F90C002844F8F74FFF9DF9F2 -:10FB800004000F2801DD012000E000200099084456 -:10FB90006168084420F07F41A16094F821000028AA -:10FBA00007D002B00123BDE8704000221846F8F7E4 -:10FBB0006FBE7CBD30B5104A0B1A541CB3EB940FCA -:10FBC0001ED3451AB5EB940F1AD3934203D9101ADA -:10FBD00043185B1C14E0954210D9511A0844401C8C -:10FBE00043420DE080000020840700200000000058 -:10FBF0000405002058840100FF7F841EFFDF0023DE -:10FC0000184630BD0123002201460220F8F740BE0D -:10FC10000220F8F7EABDF8F787BE2DE9FC47B14CA2 -:10FC2000054694F82E00202800D1FFDF642D58D31C -:10FC3000AD4A0021521B71EB010052D394F82E20E3 -:10FC4000A0462046DFF8A49290F82D7009EB02142C -:10FC5000D8F8000001AA28446946F8F7DFFE9DF9AC -:10FC60000400002802DD0098401C0090A068009964 -:10FC700062684618B21A22F07F42B2F5800F30D285 -:10FC800008EB8702444692F82520202A0AD009EB87 -:10FC900002125268101A0002C21700EB1260001222 -:10FCA00088421EDBA068401C10D0F8F73DFEA1681A -:10FCB000081A0002C11700EB11600012022810DDC3 -:10FCC0000120F8F792FD4FF0FF30A0602068284433 -:10FCD000206026F07F402061012084F82300BDE8E9 -:10FCE000FC870020FBE72DE9F0477E4C074694F89F -:10FCF0002D00A4F1800606EB801010F8170000B963 -:10FD0000FFDF94F82D50A046794C24B1002140F635 -:10FD10006500AFF3008040F6710940F67A0A06EB01 -:10FD2000851600BF16F81700012818D0042810D037 -:10FD300005280ED006280CD01CB100214846AFF390 -:10FD4000008020BF002CEDD000215046AFF3008092 -:10FD5000E8E72A4639460120FEF7C0FEF2E74FF0F9 -:10FD6000010A4FF00009454624B1002140F6810008 -:10FD7000AFF30080504600F05CF885F8239024B182 -:10FD8000002140F68600AFF3008095F82D00FFF7C4 -:10FD9000D3FA064695F8230028B1002CE4D00021C0 -:10FDA00040F68C001FE024B100214FF40960AFF34E -:10FDB000008005EB860000F1270133463A462630E5 -:10FDC000FFF7F1F924B1002140F69400AFF3008071 -:10FDD00000F024F8824695F8230038B1002CC3D0F7 -:10FDE000002140F69A00AFF30080BDE785F82D6052 -:10FDF000012085F82300504600F01BF8002C04D0A9 -:10FE0000002140F6A700AFF30080BDE8F087354938 -:10FE100081F82D00012081F82300704710B5354886 -:10FE200008B1AFF30080EFF3108000F0010072B66C -:10FE300010BD10B5002804D12F4808B1AFF30080E1 -:10FE400062B610BD2D480068C005C00D10D0103836 -:10FE500040B2002806DA00F00F0000F1E02090F830 -:10FE6000140D03E000F1E02090F800044009704711 -:10FE70000820704710B51B4C94F82400002804D1CA -:10FE8000F8F72EFE012084F8240010BD10B5154CA3 -:10FE900094F82400002804D0F8F74BFE002084F8E2 -:10FEA000240010BD10B51C685B68241A181A24F0D1 -:10FEB0007F4420F07F40A14206D8B4F5800F03D2E2 -:10FEC000904201D8012010BD002010BDD0E90032C1 -:10FED000D21A21F07F43114421F07F41C0E9003163 -:10FEE0007047000084070020FF1FA10704050020C1 -:10FEF00000000000000000000000000004ED00E031 -:10FF00002DE9F041044680074FF000054FF001064F -:10FF100004D55C480560066024F00204E0044FF05C -:10FF2000FF3705D558484660C0F8087324F480545C -:10FF3000600003D55548056024F08044E0050FD5E6 -:10FF40005348C0F80052C0F8087352490D60091DAB -:10FF50000D60504A04210C321160066124F4807453 -:10FF6000A00409D54C484660C0F80052C0F8087398 -:10FF70004A48056024F40054C4F38030C4F3C0310F -:10FF8000884200D0FFDF14F4404F14D0444846604C -:10FF9000C0F8087343488660C0F80052C0F8087380 -:10FFA00041490D600A1D16608660C0F808730D6037 -:10FFB000166024F4404420050AD53C48466086601B -:10FFC000C0F80873C0F848733948056024F4006429 -:10FFD00007F0B2F93748044200D0FFDFBDE8F081F6 -:10FFE00070B520250022134620FA02F1C90719D066 -:10FFF00051B201F01F060124B4404E09B60006F1CB -:020000040001F9 -:10000000E026C6F88041C6F88042002906DA01F0F1 -:100010000F0101F1E02181F8143D03E001F1E0213D -:1000200081F80034521CAA42DED370BD70B5224C58 -:100030000D462060FFF764FF2068FFF7D1FF2846D8 -:10004000F8F72BFE06F0EEFD00F0DDF807F074F98E -:1000500007F0BFF8F2F7AEFEBDE8704006F090BEC4 -:1000600010B5154C2068FFF74BFF2068FFF7B8FF6D -:1000700007F062F9F8F7A4FE0020206010BD0A2006 -:1000800070470000FC1F004000C0004004E5014034 -:10009000008000400485004000D0004004D50040AE -:1000A00000E0004000F0004000F5004000B00040DB -:1000B00008B50040FEFF0FFD8400002070B5264902 -:1000C0000A680AB30022154601244B685B1C4B608A -:1000D000092B00D34D600E7904FA06F30E681E4218 -:1000E0000FD0EFF3108212F0010272B600D001229D -:1000F0000C689C430C6002B962B64968016000203C -:1001000070BD521C092AE0D3052070BD4FF0E021DC -:100110004FF48000C1F800027047EFF3108111F036 -:10012000010F72B64FF0010202FA00F20A480368AA -:1001300042EA0302026000D162B6E7E70648002106 -:100140000160416070470121814003480068084018 -:1001500000D00120704700008800002001208107A6 -:1001600008607047012081074860704712480068A6 -:10017000C00700D0012070470F48001F0068C0076B -:1001800000D0012070470C4808300068C00700D03C -:1001900001207047084810300068704706490C314C -:1001A0000A68D20306D5096801F00301814201D132 -:1001B00001207047002070470C0400402DE9F041F9 -:1001C00015460E460446002700F0E7F8A84215D36E -:1001D000002341200FE000BF94F84220A25CF254BB -:1001E00094F84210491CB1FBF0F200FB12115B1CA9 -:1001F00084F84210DBB2AB42EED3012700F0D9F80D -:100200003846BDE8F081704910B5802081F80004BF -:100210006E49002081F8420081F84100433181F8A5 -:10022000420081F84100433181F8420081F84100E9 -:10023000674806F017FF6648401C06F013FFF2F708 -:1002400033FDBDE8104000F0B4B8402070475F486F -:1002500000F0A3B80A4601465C48AFE7402070476B -:100260005A48433000F099B80A460146574843308F -:10027000A4E7402101700020704710B504465348A0 -:10028000863000F08AF82070002010BD0A46014632 -:100290004E4810B58630FFF791FF08B1002010BD21 -:1002A00042F2070010BD70B50C460546412900D941 -:1002B000FFDF48480068103840B200F050F8C6B27E -:1002C0000D2000F04CF8C0B2864203D2FFDF01E0FF -:1002D000F2F732FD224629463C48FFF76FFF00281F -:1002E000F6D070BD2DE9F041394F002506463F1D7F -:1002F00057F82540204600F041F810B36D1CEDB2D0 -:10030000032DF5D33148433000F038F8002825D0CC -:100310002E4800F033F8002820D02C48863000F01A -:100320002DF800281AD0F2F7E5FC294806F0A2FEC5 -:10033000B0F5005F00D0FFDFBDE8F041244806F0D3 -:10034000AFBE94F841004121265414F8410F401CDF -:10035000B0FBF1F201FB12002070D3E751E7002857 -:1003600006DA00F00F0000F1E02090F8140D03E031 -:1003700000F1E02090F800044009704710F8411F98 -:100380004122491CB1FBF2F302FB13114078814278 -:1003900001D1012070470020704710F8411F4078BC -:1003A000814201D3081A02E0C0F141000844C0B202 -:1003B000704710B5064806F05DFE002803D1BDE881 -:1003C0001040F2F782BC10BD0DE000E0B407002041 -:1003D0009000002004ED00E02DE9F0410125280304 -:1003E0004FF0E0210026C1F880011E4CC4F80061E6 -:1003F0000C2000F02CF81C4801680268C94341F346 -:10040000001142F010020260C4F804532560491C38 -:1004100000E020BFD4F80021002AFAD019B9016801 -:1004200021F010010160114807686560C4F80853A5 -:10043000C4F800610C2000F00AF83846BDE8F081ED -:1004400010B50446FFF7C8FF2060002010BD00F083 -:100450001F02012191404009800000F1E020C0F816 -:100460008012704700C0004010ED00E008C5004059 -:100470002DE9F047FF4C0646FF21A06800EB06126D -:1004800011702178FF2910D04FF0080909EB0111F4 -:1004900009EB06174158C05900F0F4F9002807DDB0 -:1004A000A168207801EB061108702670BDE8F0877E -:1004B00094F8008045460DE0A06809EB051141580D -:1004C000C05900F0DFF9002806DCA068A84600EB60 -:1004D00008100578FF2DEFD1A06800EB061100EBA6 -:1004E00008100D700670E1E7F0B5E24B04460020FD -:1004F00001259A680C269B780CE000BF05EB0017DD -:10050000D75DA74204D106EB0017D7598F4204D01C -:10051000401CC0B28342F1D8FF20F0BD70B5FFF798 -:100520007AFBD44C08252278A16805EB0212895881 -:1005300000F0A8F9012808DD2178A06805EB011179 -:100540004058BDE87040FFF75DBBFFF72FFABDE8EC -:100550007040F2F75DBC2DE9F041C64C2578FFF7FD -:100560005AFBFF2D6ED04FF00808A26808EB051665 -:10057000915900F087F90228A06801DD80595DE0FB -:1005800000EB051109782170022101EB0511425C95 -:100590005AB1521E4254815901F5800121F07F4128 -:1005A00081512846FFF764FF34E00423012203EB66 -:1005B000051302EB051250F803C0875CBCF1000F75 -:1005C00010D0BCF5007F10D9CCF3080250F806C05B -:1005D0000CEB423C2CF07F4C40F806C0C3589A1AF2 -:1005E000520A09E0FF2181540AE0825902EB4C32A1 -:1005F00022F07F428251002242542846FFF738FF02 -:100600000C21A06801EB05114158E06850F8272043 -:10061000384690472078FF2814D0FFF7FCFA22785C -:10062000A16808EB02124546895800F02BF9012811 -:1006300093DD2178A06805EB01114058BDE8F04139 -:10064000FFF7E0BABDE8F081F0B51D4614460E464E -:100650000746FF2B00D3FFDFA00700D0FFDF854850 -:10066000FF210022C0E90247C57006710170427087 -:1006700082701046012204E002EB0013401CE1549A -:10068000C0B2A842F8D3F0BD70B57A4C0646657882 -:100690002079854200D3FFDFE06840F8256060786C -:1006A000401C6070284670BD2DE9FF5F1D468B46DB -:1006B0000746FF24FFF7AFFADFF8B891064699F82E -:1006C0000100B84200D8FFDF00214FF001084FF0D1 -:1006D0000C0A99F80220D9F808000EE008EB011383 -:1006E000C35CFF2B0ED0BB4205D10AEB011350F8BF -:1006F00003C0DC450CD0491CC9B28A42EED8FF2C9D -:1007000002D00DE00C46F6E799F803108A4203D1B7 -:10071000FF2004B0BDE8F09F1446521C89F8022067 -:1007200008EB04110AEB0412475440F802B004210C -:10073000029B0022012B01EB04110CD040F8012098 -:100740004FF4007808234FF0020C454513D9E90512 -:10075000C90D02D002E04550F2E7414606EB4132B6 -:1007600003EB041322F07F42C250691A0CEB04120F -:10077000490A81540BE005B9012506EB453103EB2D -:10078000041321F07F41C1500CEB0411425499F83D -:1007900000502046FFF76CFE99F80000A84201D0F7 -:1007A000FFF7BCFE3846B4E770B50C460546FFF7C8 -:1007B00032FA064621462846FFF796FE0446FF28F1 -:1007C0001AD02C4D082101EB0411A868415830467D -:1007D00000F058F800F58050C11700EBD1404013ED -:1007E0000221AA6801EB0411515C09B100EB412020 -:1007F000002800DC012070BD002070BD2DE9F0470D -:1008000088468146FFF770FE0746FF281BD0194D2A -:100810002E78A8683146344605E0BC4206D026460C -:1008200000EB06121478FF2CF7D10CE0FF2C0AD055 -:10083000A6420CD100EB011000782870FF2804D0EC -:10084000FFF76CFE03E0002030E6FFF7E1F94146D8 -:100850004846FFF7A9FF0123A968024603EB0413EA -:10086000FF20C854A878401EB84200D1A87001EB00 -:10087000041001E08008002001EB061100780870E8 -:10088000104613E6081A0002C11700EB11600012AF -:100890007047000070B50446A0F500002D4EB0F181 -:1008A000786F02D23444A4F500042B48844201D26C -:1008B000012500E0002500F043F848B125B9B44215 -:1008C00004D32648006808E0012070BD002070BDF8 -:1008D000002DF9D1B442F9D321488442F6D2F3E78E -:1008E00010B50446A0F50000B0F1786F03D21948A6 -:1008F0000444A4F5000400F023F84FF0804130B127 -:100900001648006804E08C4204D2012003E0144839 -:100910008442F8D2002080F0010010BD10B520B153 -:10092000FFF7DEFF08B1012010BD002010BD10B59B -:1009300020B1FFF7AFFF08B1012010BD002010BDAE -:10094000084809490068884201D101207047002009 -:1009500070470000000000200090010020000020EF -:1009600008000020A4000020BEBAFECA0348044AC2 -:100970000168914201D1002101607047A40000206C -:10098000BEBAFECA45480021017041701021817035 -:10099000704770B5054616460C460220F2F739F945 -:1009A0003E490120F61E08703D4806603C48083864 -:1009B0000560001F046070BD10B50220F2F729F930 -:1009C00036490120087000F051F836494FF4000014 -:1009D000086010BD10B5314C207888B131494FF412 -:1009E0000000091D086000F04AF8002120B1012034 -:1009F00060702D48006801E061701020A0702170C7 -:100A0000BDE810400020F2F704B9244810B5017881 -:100A100059B12648D0F8000128B100F030F800287C -:100A200000D0012010BD022010BD407810BD10B5CF -:100A3000C824641EE4B2FFF7E8FF022803D00128AF -:100A400000D0002010BD002CF3D1FFDFF9E71348E0 -:100A500010B5017841B100F012F818B112480068E1 -:100A6000C0B210BD102010BD807810BD0F4800210D -:100A7000C0F80011C0F80411C0F8081170470B4805 -:100A8000D0F8001129B1D0F8041111B1D0F8080143 -:100A900008B100207047012070470000A800002026 -:100AA00010F5004004F5014000F4004000F0004063 -:100AB0004548002101704170704770B506461446E4 -:100AC0000D460120F2F7A5F840480660001D0460BD -:100AD000001D056070BD70B53B4B012540EA024228 -:100AE0001D703A4B1B1F1A60384A10321160384C87 -:100AF0000026C4F80461374A4FF04071116058B1C4 -:100B0000012800D0FFDFC4F80062256031494FF0B2 -:100B10000070091F086070BDC4F80052256070BDE8 -:100B20002948017871B12B4A4FF040711160284972 -:100B3000D1F8042100211AB1274A1268427000E05E -:100B4000417001700020F2F764B81F48017841B18C -:100B50001F48D0F80401002802D01F480068C0B226 -:100B600070474078704770B5002827D01648007845 -:100B700000B9FFDF1648D0F8041100291ED1022366 -:100B8000C0F8043315490A680C68D24342F30012D6 -:100B900044F010040C609C034FF0E025521C02E06E -:100BA000C5F8804220BFD0F80461002EF8D01AB9F1 -:100BB0000A6822F010020A60C0F8083370BD0449C8 -:100BC0000120886070470000AB00002008F500405D -:100BD00000F0004008F5014000F4004010ED00E096 -:100BE000FA4808B50021C0F80011C0F80C11C0F88F -:100BF0001011C0F80411C0F81411C0F81811F4480D -:100C00000068009008BD70B5F24D00246C702C7027 -:100C100000F02FFD85F82140AC62092105F1140098 -:100C20006C6307F0CDF9EC49601E0860091D08608F -:100C3000091D0C60091D0860091D0C60091D086074 -:100C4000091D0860091D0860091D0860091D08606C -:100C5000091D0860091D0860091D0860091D08605C -:100C600070BDDE4800B5016801F00F01032905D011 -:100C7000006800F00F00042802D0FFDF012000BD53 -:100C8000022000BD70B5D3490268D54C4A61426864 -:100C90008A61007A08770C3C0A7DD14B251F012020 -:100CA00042B10E7E00FA06F21A608E7D0EB122600D -:100CB00000E02A604A7D002A05D04A7E90401860F4 -:100CC000C97D09B1206070BD286070BD00F0D8BC3E -:100CD00010B500F0D5FCBD48D0F80001002800D0C8 -:100CE000FFDF10BD10B5012000F0ADFCBD480024B1 -:100CF000046001210160B94A40F25B602832106053 -:100D0000121F40F203101060101F0160B34903204E -:100D10000860B249962034310860B449B24808608E -:100D2000B249B3489C310860A9480838091F0860D7 -:100D3000012000F093FCA5491020C1F80403A54848 -:100D400080F82D4010BDA34A0368C2F802308088A5 -:100D5000D080117270479F4890F8210070479D4ADB -:100D6000517010707047F0B50546840097488B8825 -:100D70002044C0F820360B78D1F8011043EA012155 -:100D8000C0F8001605F1080001279A4C07FA00F692 -:100D900052B1012A00D0FFDF206830432060206874 -:100DA000AF4038432060F0BD2068B043F6E706F05E -:100DB000FBBB884890F82E007047884AC1781432EF -:100DC00011600068854900020C31086070472528D1 -:100DD00007D0262807D0272807D00A2807D80422BA -:100DE00006E0022107E01A2105E0502103E0062277 -:100DF00002EB4001C9B2794A083A1160774944319F -:100E0000086070477348817A012915D0022912D1F0 -:100E1000417D00290FD0827E0121C37E01FA02F2BA -:100E200099400A4371490A60007F734A002102EB2E -:100E30008000C0F810157047017DEAE72DE9F04702 -:100E400082466448847A012C10D0022C7DD1437DE7 -:100E5000002B7AD0694BDFF8A8914FF47A77012CF8 -:100E600006D0467EC47D7CB3012535E0037DEFE7E7 -:100E7000067E847D0CB1012500E000254FF4C86496 -:100E800040F6980C40F6E44801290ED0022A1CD006 -:100E9000012A03D0042A1BD05A4B4446191901F5E4 -:100EA000FA7100BFB1FBF7F123E0022A08D0012A52 -:100EB00002D0042A06D0444649F6FC612144F1E7F9 -:100EC0003C46F9E76446F7E705E04F4B3C46E5E76B -:100ED0004B466446E2E70025012940D0022A40D073 -:100EE000012A02D0042A3FD0484B03F2E143B3FB6E -:100EF000F7F1474A491F514411603D4A0021403AE9 -:100F0000C2F84C11310285F0010241EA025141F070 -:100F10000313027F384901EB8204C4F81035847E44 -:100F20003C4D01EB820305EBC401C1F814353A4A8C -:100F3000C1F81025C27E05EBC200C0F81435244963 -:100F40000839C0F81015012000E006E000FA04F1AD -:100F5000904001432548001F0160BDE8F08729212A -:100F6000C7E7294B643BC0E74B46BEE72DE9F0419C -:100F70000F461649054603201646C1F800021B4CD1 -:100F80002648241F2060384606F046FB304606F00F -:100F900035FB104815B1012D09D011E001218172F6 -:100FA000416B41F4801141634FF4801007E002214E -:100FB0008172416B41F4001141634FF400102060D5 -:100FC00032463946BDE8F041002037E700100040C6 -:100FD0001811004090080020000E0040101500403D -:100FE00018050050FC1F004000000C0408F50140EB -:100FF000408000404016004000600040A2240200F3 -:10100000D0FB010030D3010068360200C0D40100DB -:101010004C85004000F001404C8100400000040479 -:1010200008B5FF208DF80000F8480021C0F8101125 -:101030000121016105E000BF9DF80010491E8DF8F7 -:1010400000109DF8001019B1D0F810110029F3D04C -:101050009DF80000002800D1FFDF08BD2DE9FF5FEB -:10106000EA4E0746002503209B468946C6F8000243 -:10107000DFF8A083E649C8F80010029806F0CCFA21 -:10108000584606F0BBFAE348E34CA8304FF0010A9B -:1010900017B1012F1DD02EE0066094F82D00012815 -:1010A00005D002280BD0FFDF84F80AA023E094F8D3 -:1010B0002C205B464846029906F02CFB06E094F88B -:1010C0002C305A464846029906F0B3FAA16A4518F0 -:1010D000EAE7CE49091D016094F82D0094F82C2010 -:1010E000012802995B4648463BD006F05CFBA16AAA -:1010F00045180220A072C9480560C649C848A431F5 -:101100000860606B40F400206063D6F80072102421 -:10111000C6F808430020C6F80002BE494FF48029F3 -:10112000091DC1F8009006F50076FFF779FFFFF77B -:1011300057FD3760C8F80090C6F80441E103C8F8CD -:101140000010B849C1F84CA0B448001D0068A8427E -:1011500000D3FFDF029904B05A462846BDE8F05F8D -:101160006CE606F0A3FAC2E72DE9F041A74CD4F8EB -:10117000000220F00B06D4F804031027C0F300157A -:10118000C4F808734FF00008C4F80082A149A648CB -:10119000091D086004F50074FFF734FEFFF740FFF7 -:1011A00044F8F08C00F065FA2660A4F50074002D78 -:1011B00001D0C4F80473BDE8F08100689B4920F0B9 -:1011C0007F400860704710B5012000F03CFABDE890 -:1011D0001040012000F042BA4FF0E0210220C1F897 -:1011E000000170479249087070479049383908608B -:1011F000704770B5884D0446A86AA04200D3FFDF4F -:1012000001202873874900202C61C1F844018348DC -:10121000001F0460BDE8704000F048BA70B57E4C15 -:10122000064602200D462073FFF71BFD024694F888 -:101230002D0094F82C1001280ED0304606F00BFB40 -:10124000784920610020C1F844012169A06A08445E -:101250007249091F086070BD2B46304606F0CBFA74 -:10126000EEE76C494FF48000091D08606A48416B45 -:1012700021F4800141630021017370476E4A10B56B -:1012800002EBC0026B4BC2F81035C2F814150121F5 -:101290008140604801606048426B0A43426310BD70 -:1012A000604801214160C1600021C0F844115B48E1 -:1012B000001F01605848816270475C492431086012 -:1012C0005248D0F8001241F04001C0F800127047B7 -:1012D0004E48D0F8001221F04001C0F800125349E6 -:1012E00000202431086070474848D0F8001221F0EF -:1012F0001001C0F8001201218161704743480021AC -:10130000C0F81C11D0F8001241F01001C0F8001212 -:1013100070473E4908B5D1F81C21012A01D00020B0 -:1013200008BD424A0C32126802F07F02524202703B -:101330000020C1F81C013F481830006800900120CF -:1013400008BD30B50C00054600D1FFDFE00702D034 -:10135000012C00D0FFDF55B102212F480129417235 -:10136000C4722A4805D0022908D0FFDF30BD012110 -:10137000F3E7D0F8001241F0040103E0D0F80012C6 -:1013800041F00801C0F8001230BD70B5224C1F4B6F -:101390002246E17A527A8D074FF0010603D5850780 -:1013A00001D5450713D4CD0605D594F82F5015B1B6 -:1013B00094F831505DB10D0702D594F8205035B93D -:1013C000490702D594F8211009B1C00703D082B1B2 -:1013D000BDE87040C8E662B10025012A2ED0022A7D -:1013E0003CD0FFDFA06A01222844BDE87040002104 -:1013F00024E508490648091D0860D3F8000220F0DA -:101400000300C3F80002E67270BD00000010004047 -:101410000000040404F501409008002048850040C5 -:10142000488100400080004000000C043C15004052 -:10143000AD0000200411004000F00140D3F800028C -:1014400020F00400C3F8000200F013F90123A67293 -:101450001A460021962006F0ECF80FE0D3F80002BF -:1014600020F00800C3F8000200F003F90220A07287 -:1014700001231A460021962006F018F90546B1E727 -:101480002DE9F047BF4F3878042800D3FFDFDFF89D -:10149000F8A2DAF84C0108B1FFF7B4FCBB4CBC4928 -:1014A000606B08600026666300F00BF9DFF8E482E9 -:1014B0000546D8F800006062A8F104000068A06248 -:1014C000FFF7CFFB84F82C00A07ADFF8CC9284F8E9 -:1014D0002D00022808D1607830B1D9F800100978C1 -:1014E0000140207888430ED084F82060A80706D5F4 -:1014F0003978AA4A4908606A52F821108847E807F3 -:1015000005D000210AE0012084F82000EEE7A807BA -:1015100001D5012102E0280707D502219F4A3B7827 -:101520004832A06A52F8232090473878C0071DD16E -:10153000D9F800104846097801F00F01072913D2A5 -:1015400001680622A01C093106F06DFC40B9217A21 -:10155000D9F800000078B1EBD01F01D1012000E0E4 -:10156000002084F8210001E084F821602846FFF77C -:101570000CFFE80702D08948083014E0A80709D515 -:1015800086483978183050F8211045F38000401C07 -:1015900088470EE0280702D58048283003E0E80697 -:1015A00006D57E483830397850F82100804700E071 -:1015B000FFDFA07A022819D1207B002816D0CAF8B4 -:1015C000446102280ED0012800D0FFDFA16A206903 -:1015D000884200D8FFDF2169C8F80010BDE8F04755 -:1015E00000F064B82169A06A0144F5E7B5E400B5EC -:1015F000012802D0022802D0FFDF282000BD1820D9 -:1016000000BD10B541F6A474012802D0022802D012 -:10161000FFDF204610BD41F2883010BD10B541F209 -:10162000D474012802D0022802D0FFDF204610BD6A -:1016300041F2040010BD00B5012802D0022800D0FC -:10164000FFDF002000BD00F01F0201219140400992 -:10165000800000F1E020C0F88011704700F01F0208 -:10166000012191404009800000F1E020C0F8801283 -:10167000704746480021417281720121C172704752 -:1016800030B500240546012902D002290BD0FFDF26 -:1016900043480443404810300460424805433E48F4 -:1016A0001430056030BD4FF08074F1E73748416B6E -:1016B00041F48001416336494FF48000091F0860FE -:1016C0007047F8B5314C304E0020217B19B1D6F867 -:1016D0004411012907D00023A27A3349012A04D0FA -:1016E000022A0AD019E00123F6E7D1F80C010128FB -:1016F00001D0002011E008200FE0D1F80C010128F2 -:1017000006D0002229480068012803D0042002E006 -:101710000222F7E7002010431843D1F81021012AD4 -:101720002ED0002505432248026812F0FF0F03D097 -:10173000D1F81421012A00D0002284F82E2000685C -:1017400010F0FF0F03D0D1F81801012800D00020BD -:1017500084F82F0015481030006884F83000FFF737 -:1017600054F9012800D0002084F83100FFF738FA3E -:101770000020C6F844010F48006800902846F8BDD4 -:101780001025CFE7AD000020008000409008002029 -:1017900008F50140448500400415004070840100B4 -:1017A0000801100000000302001000400014004077 -:1017B000401600404481004010B54348222106F005 -:1017C000DDFB41480024017821F010010170012166 -:1017D00005F00FF93C494FF6FF70263981F8224099 -:1017E00088843A490880488010BDE5E7704700F0DA -:1017F0005FB8354901607047344908807047324905 -:1018000026398A8CA2F57F43FF3B02D0002101607C -:1018100008E091F822202C492639012A02D00160E3 -:1018200001207047002070472748263810F8221FF3 -:10183000012908D001210170244823492639008854 -:1018400088840120704700207047204948807047F5 -:101850001D491E4B26398A8C5B889A4205D191F826 -:10186000222012B101600120704700207047164805 -:10187000164A2638818C5288914209D14FF6FF7161 -:10188000818410F8221F19B10021017001207047D6 -:10189000002070470C480D4A2638818C52889142AE -:1018A00004D190F8220008B1002070470120704751 -:1018B000054926398A8C824205D1002081F8220010 -:1018C0004FF6FF7088847047EE080020AE000020BD -:1018D00070473C4A012338B1012804D113700868CD -:1018E000906088889081704753700868C2F8020041 -:1018F0008888D0807047334A10B1012807D00EE0A5 -:10190000507860B1D2F802000860D08804E0107806 -:1019100028B1906808609089888001207047002075 -:101920007047284910B1012802D005E0487800E04E -:10193000087808B1012070470020704730B50C4688 -:1019400005468DB04FF0030104F1030012B1FEF71C -:101950008BFC01E0FEF7A7FC60790D2120F0C000B0 -:1019600040F04000607104A806F02AFBE0788DF892 -:101970001F0020798DF81E0060798DF81D0010225F -:101980002946684606F07BFA684605F0E5F99DF8B9 -:101990002F0020709DF82E0060709DF82D00A07023 -:1019A0000DB030BD10B5002904464FF0060102D03D -:1019B000FEF75AFC01E0FEF776FC607920F0C000EB -:1019C000607110BDB2000020FE4A137882F8EF303B -:1019D000A2F8F00082F8EE10012082F8EC0092F8F4 -:1019E000C00008B192F8BC0082F8F200704770B5F0 -:1019F000F54E0446316891F8FA00002501280DD013 -:101A000091F8F400012818D091F8CA0001281ED0DE -:101A100091F8EC00012838D0002070BD65701720C7 -:101A2000207051F8FB0FC4F802004868C4F80600A3 -:101A3000087AA07201F8015C32E065700520207020 -:101A4000D1F8F600C4F8020081F8F45028E065707F -:101A5000112020702022A01CCC3106F010FA0121A8 -:101A6000A171306880F8CA50D648B0F8CE20A0F8EE -:101A7000F6207268537B80F8F83080F8F4101088F4 -:101A8000FBF78CFBFBF751F80AE065701320207020 -:101A900051F8EE0FC4F802008888E08001F8025C7B -:101AA000012070BDC848006890F8CA1011B1B0F8A4 -:101AB000CE0070474FF6FF70704770B5C24C20687B -:101AC00000B9FFDF2068417811B10C25284670BDB0 -:101AD00000254FF4827106F073FA2168FF20087028 -:101AE0007F2081F8360013204884282081F8C80020 -:101AF000012081F8B800002081F8BB00FFF7E8FB67 -:101B0000FEF768FFB14804F0E1FEB048283004F069 -:101B1000DDFEAE48503004F0D9FED7E710B5AA4C30 -:101B2000206800B9FFDF216800204870FFF7C5FF7B -:101B3000002800D0FFDF10BDA34909680978814261 -:101B400001D101207047002070479F4800B501680F -:101B500091F82400498CC0F38002C0F340031A447A -:101B600000F001001044132915D004DC102909D01D -:101B7000122904D10FE0152908D01D2904D0FFDF58 -:101B8000002000BD924903E0924800BD9049083111 -:101B900031F8100000BD8E490839F9E78A4840F253 -:101BA00071210068806A484370478748006890F850 -:101BB0003500002800D00120704710B5814C207BF3 -:101BC00000F024FE40B1207D04F1150104F04BFA31 -:101BD000082801D0012010BD207B30B1022804D09C -:101BE0000120BDE81040FFF79CBE0020F9E77649D0 -:101BF000096881F83000704770B50546714890F863 -:101C00002D0004F045FA040018D0102104F031FC36 -:101C1000002813D16C4E01202A463168C876204630 -:101C20001C31FFF78BFE316868481C3104F07BFEE5 -:101C3000BDE870400121654804F084BE70BD2DE907 -:101C4000F041604C074694F82D0004F017FA064660 -:101C500094F82F0004F10E0528B126B1102130466A -:101C600004F007FCA0B194F83000002824D094F8C8 -:101C70002E00002820D0607B294600F0D8FDA8B1B6 -:101C800004F0ABFA3A462946BDE8F041FFF756BEEC -:101C9000012060733A4629463046FFF74FFE94F81C -:101CA0002D102846BDE8F04104F081BA3946284697 -:101CB000BDE8F041FFF776BEBDE8F08170B5424C5B -:101CC0002168087BB0B1022814D0012048730E317E -:101CD000FFF711FE2068007B00F098FD216881F875 -:101CE0002F00082081F82D00487B0E3100F096FD72 -:101CF00040B901E00020E9E72168487B0E3100F09F -:101D000096FD00B10120216881F82E0091F82F0086 -:101D100018B991F82200400706D5087D153104F066 -:101D2000A2F9216881F82D00206800254560FDF7A3 -:101D300033FA216888600020FFF781FF2068C576AC -:101D400090F82200400703D5BDE87040002053E71B -:101D500070BD78B51B4904461B4D407B08732A684B -:101D6000207810706088ADF8000080B200F00101AA -:101D7000C0F3400341EA4301C0F3800341EA830119 -:101D8000C0F3C00341EAC301C0F3001341EA0311E9 -:101D9000C0F3401341EA4311C0F3801041EA8010C0 -:101DA0005084E07D012830D0022830D0FFDF286841 -:101DB00080F8BA60217B80F82410418C1D2928D03E -:101DC000616809E010090020C0000020140A00200A -:101DD000D8840100F18913008162617D80F835109B -:101DE000A17BC1B1022916D00121017554F80F1F42 -:101DF000C0F81510A188A0F81910217B012900D086 -:101E0000002180F83410002078BD0126CFE702269B -:101E1000CDE70021D5E70021E7E7FE48006890F80C -:101E20002200400701D50020704701207047F94A81 -:101E300010B512680023C2F8BC30548C1D2C0BD096 -:101E400079B1936A40F2712463431944491EB1FB8E -:101E5000F3F1C2F8C41006E0C2F8C43082F8C03012 -:101E600010BDC2F8C43082F8C00010BD0346E94876 -:101E700010B50168D1F8C4204AB1D1F8BC4034B1E2 -:101E80009A4206D90124D01AC1F8C4000EE00124F8 -:101E90000CE091F822100024C90703D040684321C8 -:101EA000008801E043210020FFF78EFD204610BD91 -:101EB000D848006890F8B70008B1002070470120AA -:101EC000704770B51F2801D2044600E01F24D14D91 -:101ED0000022286880F8B9202246783005F0CFFF2C -:101EE0002868012180F8974080F8B91070BD10B5BE -:101EF0001F2800D31F20C74CC2B20023206880F8DF -:101F0000B83080F8B720983005F0B9FF216801207B -:101F100081F8B80010BDBF49096881F8BB0070475F -:101F2000BC48006890F8220000F001007047B948F2 -:101F3000006890F82200C0F340007047002070470E -:101F4000B448006890F82200C0F3C0007047012038 -:101F50007047012070470120704770B500F085FC84 -:101F6000AC4C206850F8BC1F491C016010F8890C6B -:101F7000002530B1FFF7ACF9FEF72CFD206880F8A2 -:101F800033502068457090F8C01089B1D0F8BC205B -:101F900091420DD8022001F09DFA206890F82200AD -:101FA000C00703D060684321008816E043211BE08E -:101FB000D0F8C41019B1D0F8BC20914202D990F8E1 -:101FC0003700A8B1022001F085FA206890F82200BD -:101FD000C00708D060683C210088FFF7F5FCBDE829 -:101FE000704000F038BC3C21BDE870400020EBE4BC -:101FF000BDE87040002001F06DBA10B501280DD089 -:1020000002280DD004280FD0FFDF8248006890F826 -:10201000BA10BDE810402520FEF758BE252000E08C -:102020002620FEF7D4FEF0E72720FAE7024600203C -:10203000D30701D0CB0705D0930705D58B0703D471 -:1020400002207047012070475207FCD54907FAD497 -:10205000042070472DE9F0416E4C206800B9FFDF85 -:1020600020684178B1BB0178FF2934D0002580F881 -:102070003150857080F837502846FFF7B3F8FEF7E7 -:1020800031FE206890F9BB00FEF791FE6248FEF732 -:1020900094FE6148C01EFFF790F82068002190F878 -:1020A0002400FFF7C3FFFFF7A8FF206880F82C503B -:1020B000FFF792F82068002190F8BA200846FEF752 -:1020C00055FF0F210520FEF74AFE206890F82E10DC -:1020D00051B902E0FFE70C20EEE590F82F1019B996 -:1020E00090F8220040072AD5FDF756F806462068EA -:1020F00031468068FDF75EFD484990FBF1F701FB32 -:10210000170041423046FCF750FD014620688160CF -:1021100041683944416003F0A2FF014620684268EB -:1021200091420CD8C0E901560120FFF788FD2068D4 -:1021300090F82200400702D50120FFF75DFD2068DE -:10214000417B0E30FEF7FFFD206890F8B81059B1C2 -:1021500090F8B72080F8772000F19801583005F00A -:10216000D3FE206880F8B850206890F8B91059B1B3 -:1021700090F8972080F8572000F17801383005F06A -:10218000C3FE206880F8B9502068254E0021C77E24 -:102190003580304600F056FB2068408C13284FD025 -:1021A00004DC102871D0122804D16BE0152850D01F -:1021B0001D284ED0FFDF1A491948F639884604F029 -:1021C000ACFB184F1648797B04F0B3FB2168488CB0 -:1021D0001D2807D0152805D091F8772030465831B2 -:1021E00004F0B7FB0E4E042150363046358004F023 -:1021F00070FB4146304604F090FB797B304604F09A -:1022000098FB2168304691F85720383104F0B1FB33 -:102210000AE00000C0000020CB84010040420F0013 -:10222000140A00201009002003F079FF032106F1B1 -:10223000280003F0AAFF216881F8330000203BE565 -:102240000021304604F045FB0121304600F0FAFA47 -:10225000B1E70121304604F03CFB0121304600F09B -:10226000F1FA2168304627B11C3104F05CFB0121F2 -:1022700004E0153104F057FB2068017D304604F07E -:1022800061FB98E7062101E0FFE70221304604F0F8 -:1022900020FB90E7FE494860704770B5FC4C06464D -:1022A000206890F8312032B1408C1D2800D1FFDF2A -:1022B000BDE8704051E6002938D1F648FEF795FF99 -:1022C000206890F82C1090F82400FFF7AFFE054628 -:1022D00046B1FFF792FE002201234FF4967110469B -:1022E000FEF7BCFE216891F82C00284381F82C00F1 -:1022F00091F8242082434FF0010004D14A8C1D2A1A -:102300000BD081F831004870488C13280FD008DCBE -:1023100010280BD0122808D109E0002281F82C20C7 -:10232000F1E7152803D01D2801D0FFDF70BDBDE8FF -:10233000704001210846FFF704B8D54810B5006881 -:10234000417841B90078FF2805D000210846FFF701 -:10235000A4FF002010BD00F088FA0C2010BDCC496D -:102360000120096881F837007047C949096881F878 -:102370003200704770B5002500F09CFF50B1C44C8E -:1023800020684178012908D0022901D0032938D0DA -:10239000FFDF70BDBDE87040DFE581780029F8D12E -:1023A000418C102917D090F8330020B1FEF704FBC0 -:1023B0004020FEF782FFB7487830FEF716FF20680E -:1023C00090F8221049070ED490F83500012804D067 -:1023D000032802D002E0002117E0102545F00E018D -:1023E0000020FEF7AEFF206890F8340008B1FEF739 -:1023F00085FF00219620FEF711FF2168022048701A -:1024000070BD81780029FBD18178BDE87040012042 -:1024100043E7A2E510B59E4C206890F8340008B15F -:1024200000F02EFA206890F8330018B1FEF750FF44 -:10243000FEF7D0FA00F03EFF88B12068407802280D -:1024400000D0FFDF00210120FFF727FF206841783F -:10245000002903D04078012800D0FFDF10BDBDE87F -:1024600010407AE510B503F0FEFD044603F0B7FE18 -:1024700038B1204603F00CFE18B1102103F0F9FF2B -:1024800008B1002010BD012010BD2DE9F041804CA5 -:1024900005460F46206890F8CA0000B1FFDF2168AA -:1024A000002681F8CC602888A1F8CE006888A1F8C1 -:1024B000E400A888A1F8E600E888A1F8E80095F80B -:1024C0004C0181F8EA0091F82F0020B1487B0E31D1 -:1024D00000F0ADF940B9216891F8300068B1487B4F -:1024E0000E3100F09BF940B12068D0F80E10C0F812 -:1024F000D810418AA0F8DC1003E0206840F8D86FBB -:102500008680644863497830091F0078FF2FC0F344 -:102510008010687651F87F0FC5F81A008988E98322 -:10252000216813D0C1F8DE00E88BA1F8E20001F1C8 -:10253000D2023846D13103F0B5FD00B9FFDF206883 -:1025400010F8D11F41F002010170C5E501F1D20080 -:1025500041F8DE6F8E806A7E01F80D2CD5F81A10D6 -:102560000160E98B8180B7E52DE9F047DFF820A114 -:102570000F460646032809D0FFF7D2FC0446DAF8D6 -:10258000000090F8320020B1012003E0FFF7CFFCFB -:10259000044600208046FEF70CFC0546032E2CD096 -:1025A0000120814634EA080451D0DAF80000394CA1 -:1025B000564690F83300783460B103F096FD3870D9 -:1025C0000146FF2806D0E01C03F083FD387803F0B5 -:1025D00096FD0543316820780A7DC0F38010904253 -:1025E00005D10622E01C153105F01DFC38B1002094 -:1025F0003978FF290BD0D0B903E00220D1E70120C0 -:10260000F6E7306890F82D00884210D007E030B12E -:102610002078E11CC0F38010FFF724FF38B10020C0 -:10262000316891F82210490703D598B90FE00120CD -:10263000F6E77DB9184890F8350008B1484506D14D -:102640002078E11CC0F38010FFF70CFF10B10020D0 -:10265000BDE8F0870120FBE7F8B5FF208DF800000A -:10266000012569460520FFF77FFF002859D0084C57 -:1026700022689078E8BB07496068783111F80F6BE1 -:10268000437BC6F3401633404373012306E000004A -:10269000C0000020140A00201009002051F8086929 -:1026A000C0F80E608E8946828E7B0675CE7B46759D -:1026B0000E8AC6824E8A46808E8A8680CE8AC680E0 -:1026C0008E6986600E7F06734E7F06F01F060676C3 -:1026D000497F490980F84C1180F8343080F8353052 -:1026E00092F8C81080F8361092F8BB1080F83710B6 -:1026F00000E017E09DF80010FFF7C7FE20680121F9 -:1027000000F8CA1F81788088FFF75EF900F0A3F80F -:1027100021680020487000F0A8F8012000F0DAFEDF -:1027200000E000252846F8BDF8B5784C074600259E -:1027300020684078022800D0FFDF206890F834003D -:1027400008B100F09DF8724804F0E3F806465FB364 -:102750006F4804F01EF938B3FEF7FDFA20B3062ED9 -:1027600022D2DFE806F021212103213BFF208DF852 -:10277000000069460320FFF7F7FE0028206811D00B -:1027800090F8341031B190F8FA0018B99DF80000B3 -:1027900000F085F85E482838FEF727FD2168032001 -:1027A000487002E0807800B90125206890F8330075 -:1027B00018B1FEF78DFDFEF70DF91DB100210120C6 -:1027C000FFF76BFD20684178002906D04178012988 -:1027D00003D04078032800D0FFDFF8BDFFF73CFFAF -:1027E000E1E770B5494E05460C4630688078002810 -:1027F0000BD1FEF736FA03463068214690F8BA202E -:102800002846BDE8704000F09CBE70BD022803D091 -:10281000032801D00020704701207047012802D111 -:102820004879800901D000207047012070470128B5 -:1028300006D148790121B1EB901F01D101207047E9 -:10284000002070470278202322F0200203EA411181 -:102850000A43027070472D4810B540680088FAF7A7 -:102860009DFCBDE81040FAF751B910B5FEF718FD10 -:10287000FEF7F7FCFEF778FCBDE81040FEF7A3BCBE -:1028800010B5224C20683630FEF743FD18B9216898 -:102890007F2081F83600BDE81040FEF725BD70B5F9 -:1028A0001A4C0122216881F8FA200A7881F8FB206D -:1028B000FF280DD001F1FD02FC3103F0F3FB00B95C -:1028C000FFDF206810F8FC1F41F0020101700DE0ED -:1028D0000F480078C0F3801081F8FC000C487C3869 -:1028E00050F87F2F41F8FD2F80888880256895F863 -:1028F000360005F203157F2800D1FFDF206810F8AD -:10290000361F29707F21017070BD0000C0000020BB -:102910008C0A0020FE484068704770B506460D4698 -:1029200014461046FEF76DFE022C14D0012C14D074 -:10293000042C14D0F74908444FF47A7100F2E140B6 -:10294000B0FBF1F000EB460005442046FEF74FFED9 -:102950002844603070BDF049EDE7F049EBE7F049FD -:10296000E9E72DE9F0410E460746014614460120ED -:1029700003F08AFE054697F83500FEF742FE014651 -:1029800097F8350002281CD001281CD004281CD040 -:10299000E04840F2712208444FF47A7100F2E140BD -:1029A000B0FBF1F178885043C1EB4000041BA4F563 -:1029B000597402F051FB00B11E3CAE4207D22846CA -:1029C00006E0D548E5E7D548E3E7D548E1E73046F6 -:1029D000A04204D2AE4201D22C4600E034467C62D2 -:1029E000BDE8F0812DE9FF4F89B0044690F83580AD -:1029F00016989A4640EA0A00079094F84500002588 -:102A0000164619460D2803D00020059011B131E07B -:102A10000120FAE794F8EC0003282BD1059848B37D -:102A2000B4F86E01B04225D1D4F8F400C4F8E00047 -:102A3000608840F2E2414843C4F8E400B4F83A0147 -:102A4000B4F8C6100844C4F8E800204602F00EFBB3 -:102A5000B4F87201E08294F870016075B4F8740102 -:102A60006080B4F87601A080B4F87801E08002209C -:102A700084F8EC00D4F844010490B4F8C600D4F80B -:102A800040B10090B4F83811D4F834010390BAF191 -:102A9000000F04D094F8000100287DD108E004F56F -:102AA0009A70029004F5907704F1C009001D07E0C8 -:102AB00004F58C70029004F5827704F58A79001D84 -:102AC0000690208F301A00B20190701A00B20028D0 -:102AD00005DAD4F83001039001200790019894F8AA -:102AE000EC1041B301297DD002297CD003297BD091 -:102AF000FFDF29460398FCF758F80299012540F2B8 -:102B00007122086006980680002038703D71029896 -:102B10000068B8606088D4F8F4105043C1EB4001FD -:102B20008048A1F54D718161406988427BD9084692 -:102B3000C9F8001079E1BBF1000F00D1FFDF0121DE -:102B4000002003F008FE8046E18A40F271204143F4 -:102B500008EB41000A9900F075FDC4F8F0006088A8 -:102B600040F2E24148430A9900F06CFDC4F8F400D9 -:102B700082B22046A16AFFF7F4FE14F8350FFEF783 -:102B80005AFD4FF47A7100F2E140B0FBF1F101EB34 -:102B90000B000090207800E07EE1FEF74CFD02463D -:102BA00014F8350902283FD001283FD004283FD02F -:102BB00058495518FEF725FD28444FF47A7100F264 -:102BC000DB50B0FBF1F2E08A40F27121484308EBA0 -:102BD0004000811AD4F8F0000A1A0099551894F8A8 -:102BE000352002E0A8E025E0C6E0617D40F2E24346 -:102BF00011FB03F1203DFFF790FE4A49801C48611C -:102C000094F83500FEF717FD4FF47A7100F2E140B9 -:102C1000B0FBF1F101EB0B00281AB0F53D7FBFF4DA -:102C200068AFFFDF65E7FEE03B49C2E73B49C0E72D -:102C30003B49BEE7E08A40F27122D4F8E4105043E9 -:102C400001EB40000A9900F0FDFCC4F8F000608838 -:102C500040F2E24148430A9900F0F4FCC4F8F40061 -:102C600082B22046A16AFFF77CFE009880BB1698CE -:102C700070B394F835804046FEF7C3FC0146B8F1C6 -:102C8000020F21D0B8F1010F20D0B8F1040F20D0ED -:102C9000204840F2712308444FF47A7100F2E14079 -:102CA000B0FBF1F0D4F8F010D4F8E4200144E08A4D -:102CB000584302EB4000451A4046FEF798FC049941 -:102CC000081A0544203D11E01348E2E71348E0E705 -:102CD00001E01348DDE7E08A40F27122D4F8E41005 -:102CE000504301EB4000D4F8F010451AD4F8E82026 -:102CF000D4F8E010D4F8F00040F2E24301FB020007 -:102D000094F83520617D11FB03F1D0340CE0000014 -:102D1000B40A0020C0D4010004360200A22402003C -:102D2000D0FB0100C8000020FFF7F7FDFC49486117 -:102D300001202077D03CDCE6628840F27123D4F891 -:102D4000F4105A43C1EB42054543DDE9000210444B -:102D5000D4F8E820D4F8E0C0801AD4F8F030401E4F -:102D60000CFB023200FB012094F83520617D40F21B -:102D7000E24311FB03F14BE0618840F27123D4F888 -:102D8000F4205943C2EB4105454394F844002128FF -:102D900003D094F84500212809D1B4F86E01301A07 -:102DA00000B2002803DB94F8710100B18046079857 -:102DB00030B3009820BB049810B1BBF1000F00D1D4 -:102DC000FFDF94F83500FEF71CFC0146B8F1020F56 -:102DD00023D0B8F1010F22D0B8F1040F21D0D1488F -:102DE00008444FF47A7100F2E140B0FBF1F02D1A83 -:102DF00094F83500FEF7FBFB0499081A0544203DC2 -:102E0000DDE900010844D4F8F410424648430021AB -:102E1000FFF783FDC24948616BE6C348E0E7C3485A -:102E2000DEE7C348DCE7C9F80000616A084400F542 -:102E3000D270F86002F010F910B1F8681E30F86036 -:102E40007D71B4F8B000801B00B2002801DD0320C2 -:102E5000787105980028169822D0B8B1B4F8D81027 -:102E6000B9B3B4F8DA0000BFA4F8DA0094F8DC20B3 -:102E7000401C42438A4209D27879401E002805DD71 -:102E80007D71B4F8DA00401CA4F8DA00BAF1000F42 -:102E900026D094F80001F8B102200DB0BDE8F08F03 -:102EA0000028DBD194F8EC000028EFD0608840F2D5 -:102EB0007122D4F8F4105043C1EB4001384603F0BE -:102EC00098FB0004000CE1D0179901B108800120A3 -:102ED000E3E7FFE70020C7E794F83C01FCF7B6FC06 -:102EE00094F83C01394600F093FB18B18AF00100D8 -:102EF00084F801010020D0E7FEB50446FCF74CF948 -:102F00000146D4F83001FCF755FE214600F0A4FB41 -:102F100094F845100D2909D0228FB4F8FE1013182B -:102F2000994206DB491CA4F8FE1006E0B4F8FE0046 -:102F30000CE0401C1044A4F8FE0094F8020140B9D3 -:102F4000B4F8FE00B4F8B410884202D1401CA4F8D2 -:102F5000FE00B4F83A01724D401CA4F83A01B4F8EE -:102F60006000B4F85E10401A218F401E084486B2FB -:102F700018E0287800F039FB074694F84C0100F07F -:102F800034FB384481B2002002AACDE90002034696 -:102F9000B4F8FE202046FFF725FD002821D00128A7 -:102FA00017D0FFDFB4F8FE00301A00B20028E0DAD4 -:102FB000082084F85400012084F85300204601F0D2 -:102FC000FEFC204600F026FB2879BDE8FE40EFF726 -:102FD0001FBFB4F8FE00BDF808100844A4F8FE00B6 -:102FE000E0E7FEBD2DE9F041524C0327012527758E -:102FF0000020207494F8280004F1100650B14FF41A -:103000007A71A069FBF7D1FDA0610021304603F081 -:10301000F0FA10E0002000F05EFB0546FEF7BEFD72 -:1030200005442946A069FBF7C0FDA061294630464A -:1030300003F0DFFA451C208C411C0A2901D22844E8 -:103040002084606830B1208C401C0A2802D3022002 -:10305000607500E067752846FEF708FF002809D074 -:10306000607A002806D1207B314600F0D1FA002892 -:1030700000D1FFDFB4E42DE9F04106462D480F46AC -:103080000178274D032909D1017BB14206D140685F -:1030900028613846BDE8F04100F032BB304600F010 -:1030A000ADFA0621F9F748FF040000D1FFDF3046F2 -:1030B00000F0A4FA2188884200D0FFDF214638467C -:1030C0002C61BDE8F04100F0D4BA10B5194C20785D -:1030D00048B101206072FFF748F92078032804D036 -:1030E000207A002800D00C2010BD207BFCF7AEFB1E -:1030F000207BFCF7F8FD207BFCF72FF800B9FFDF01 -:103100000020207010BD10B5FFF7DFFF00F025FB99 -:103110000848002180F82810C172084610BD000040 -:10312000C8000020C0D4010004360200A22402001E -:10313000D0FB0100B40A002070B50446012000F065 -:1031400045FAC5B20B2000F041FAC0B2854200D06A -:10315000FFDF6FF0040000F039FAC5B2192000F06B -:1031600035FAC0B2854200D0FFDFFE4900200122BF -:103170000C7188700A704870C870FB490870BDE80F -:103180007040C0E7F749087070472DE9F047F64CEA -:10319000064689462078D8BBF448FBF784FF2073A5 -:1031A000202840D0032766602770002565722572AD -:1031B0007EB1012106F1DC00FDF775F80620F9F774 -:1031C00067FE16F8DC1FB1FBF0F200FB1210401C8A -:1031D0003070FBF7BBFF40F2F651884200D2084640 -:1031E00000F23D1086B2FEF7B0FCE061FEF7D6FCBF -:1031F0004FF00108D0B184F80A80002000F06BFA8B -:103200000644FBF7C9FF3146FBF7CFFCA06100E0A5 -:1032100009E027756775D4492574207B103100F0CB -:10322000F7F988B90FE00C20BDE8F087FBF7B4FF91 -:103230003146FBF7BAFCA061A57284F82880A9F298 -:103240002650E062E3E7FFDF25840020FFF78DF8DA -:103250000020E9E77CB50025044680F8EC50A0F892 -:103260003851C048007800F0C0F9064694F84C0187 -:1032700000F0BBF9304481B2002300951A46204685 -:103280000195FFF7AFFB00B1FFDF44F8E85F0120D5 -:1032900044F8085C2071E582A582A57634F8B00C6C -:1032A000401E24F8B00CA4F8525000207CBDAD495B -:1032B00048707047AC4810B5417A012409B1002428 -:1032C00009E090F8281031B1416AC06A814202D900 -:1032D0000024FFF744F8204620E770B5A14C0646CD -:1032E000E088401CE080D4E902016278D6F84051C1 -:1032F00012B12A4603F0A7F9A060854205D896F8D6 -:10330000EC00012801D0E07808B1002070BD012058 -:1033100070BD70B505460C460846FEF772F9022CE2 -:1033200014D0012C14D0042C14D0914908444FF42B -:103330007A7100F2E140B0FBF1F040F2E2414D431E -:1033400000F54D70854207D9281A70BD8949EDE70F -:103350008949EBE78949E9E7002070BDFEB5002601 -:10336000044680F8006190F8BE00002849D194F826 -:10337000EC00032845D1FBF70FFF0146D4F83001DC -:10338000FCF718FC00283CDD214600F065F9411CE3 -:10339000208F0144A4F8FC10B4F8FC10B4F8B42059 -:1033A000511A09B200292CDD012184F80211B4F868 -:1033B0006010B4F85E20891A491E084485B21AE0EC -:1033C0006848007800F011F9074694F84C0100F0C5 -:1033D0000CF9384481B202A8CDE90060B4F8FC20B1 -:1033E00001232046FFF7FEFA00280AD0012809D061 -:1033F000022806D0FFDFB4F8FC00281A00B200282B -:10340000DEDAFEBDB4F8FC00BDF808100844A4F8EC -:10341000FC00F0E72DE9FC4100250446012902D11A -:103420005048C17869B1042084F8EC00FBF7C0FD76 -:10343000A4F83A51208FA4F8FE0084F80251BDE8A8 -:10344000FC81007800F0D1F886B294F8EC000127F6 -:10345000032813D00128E9D194F84C0100F0C5F8F5 -:10346000CDE900753044B4F8B42081B20023204681 -:10347000FFF7B8FA0028D9D0FFDFD7E7C4F8E85043 -:10348000C4F8E05094F84C01B43400F0AEF8CDE943 -:103490000075304481B234F8B429E7E710B5062945 -:1034A00016D2DFE801F00509030C0C0D002100E045 -:1034B0000121BDE81040ADE7032180F8EC102DE6B6 -:1034C000B0F8F4108AB2816ABDE81040FFF749BA3B -:1034D000FFDF23E610B530B12349012807D00228C9 -:1034E0000BD0FFDF1AE6BDE8104000F062B9486A71 -:1034F000BDE81040002100F082B9002081F82800CA -:10350000FBF756FD17480079BDE81040EFF780BC87 -:1035100070B5144CA178022912D1E18800290FD18D -:103520002569C5F8440195F83500C835FEF75FF800 -:10353000E96F081AA1680144A160E1680844E060ED -:1035400070BD70B5054607488478022C18D0064C2B -:10355000243439B34FF47A76012915D0022917D0D3 -:10356000FFDF70BDC8000020B40A002077300100E2 -:10357000C0D4010004360200A2240200D0FB0100E6 -:10358000046904F5A074E4E71846FEF754F802E075 -:103590001046FEF743F800F2E140B0FBF6F0281ABF -:1035A0002060DEE72560DCE7EF4810B5007808B161 -:1035B0000020B3E50620F9F75DFC80F00100ADE5E1 -:1035C000E9480078002800D001207047002806DA7A -:1035D00000F00F0000F1E02090F8140D03E000F17E -:1035E000E02090F800044009704710B504460C280C -:1035F00000D3FFDFDD4830F814008FE510B5044636 -:10360000202800D3FFDFD848303030F8140085E59B -:10361000FCF70AB870B50446002084F8EC0094F872 -:103620003C514FF6FF76202D00D3FFDFCE483030DF -:1036300020F8156094F83C01FBF78FFD202084F8FA -:103640003C018EE702460020002904D0C8485143BF -:10365000B1FBF0F0401C7047002809D0D1F8F420ED -:10366000498840F271235943C2EB4101B0FBF1F0AC -:10367000704770B50125BF4E0C46082829D2DFE8F7 -:1036800000F0040F17171228281B204600F02BF912 -:10369000204600F0E3F884F800510220B07060E7A3 -:1036A00001F0D5FC01E0FDF7EBFE84F8005158E78E -:1036B0002046BDE870401FE494F8EC00042800D0D8 -:1036C000FFDF2046FFF7A6FF3079BDE87040EFF737 -:1036D0009FBBFFDF45E708B500284FF001016846B2 -:1036E00002D0FCF7C1FD01E0FCF7B4FD9DF800003D -:1036F00042F210710002B0FBF1F201FB120008BDB2 -:1037000070B5994C05462078032800D0FFDF0026CD -:10371000082D20D2DFE805F0040D1717131F1F1A1C -:103720006662FEF797FC00B1FFDF924903208870C4 -:1037300017E7FEF702FE0028FAD0FFDF11E7BDE829 -:103740007040FDF79DBEBDE870404BE4207BFBF769 -:1037500004FD267005E7FFDF03E7FEB5854C012079 -:10376000E0704FF6FF750CE00621F9F7E5FB060067 -:1037700000D1FFDF96F83C01FCF7B5FA3046FFF7C1 -:1037800049FF69460620F9F764FB50B1FFDF08E006 -:10379000029830B190F8EC1019B10088A842E3D13A -:1037A00004E06846F9F733FB0028F1D00020E07010 -:1037B000FEBD70B56C4C0025A07A18B10120FFF752 -:1037C0008AFF0546FEF7EAF94119A069FBF7EDF912 -:1037D0000025A061257403206075607A30B96249C4 -:1037E000207B1031FFF714FF00B9FFDF2584FBF7C2 -:1037F000DFFB60480079BDE87040EFF709BB2DE9B9 -:10380000F041594C0746002084F82800A669E07270 -:103810002070012020720021606802F09AFD60682B -:10382000C0F83061257B80F83C51C0F84071C0F889 -:1038300034610688202D00D3FFDF4B48303020F85C -:1038400015606068FFF706FD00B1FFDFFBF7B0FB16 -:1038500048480079BDE8F041EFF7DABA70B505469F -:10386000FBF774FC95F8356004463046FDF7C9FE59 -:10387000022E2AD0012E2AD0042E2AD03E4940F210 -:10388000712208444FF47A7100F2E140B0FBF1F08C -:10389000D5F8F410014468885043C1EB4006303E2F -:1038A000B72C00D8B7242946012002F0EDFE2044B1 -:1038B000341A29460120A4F2193402F0E5FE696A9F -:1038C0009C30814207D9081A06E02C49D7E72C49D9 -:1038D000D5E72C49D3E700202649A042CC6000D38D -:1038E000204688603DE610B5044622490020C4F811 -:1038F0004001C880C4F8440194F8010138B9FBF7CD -:103900004BFCD4F80C11FCF755F9002811DCB4F885 -:10391000FE10208F814201D1B4F8B410081AA4F827 -:10392000B6002187D4F82801C4F80C01C4F830018E -:1039300014E034F8FC0F34F8C41C401A24F8460C88 -:10394000208824F8C40C2069E0626063A06944F810 -:103950003C0CE069A063208CA087FC3C2046BDE8BD -:10396000104001F061BA0000B40A0020E8840100B0 -:1039700040420F00C8000020C0D4010004360200FD -:10398000A2240200D0FB01002DE9F0410E460446BE -:1039900003F0F3F80546204603F0F1F8044602F080 -:1039A00091FEFA4F010015D0386990F834208A4210 -:1039B00010D090F87A311BB190F87C3123421FD09F -:1039C0002EB990F83130234201D18A4218D890F8AC -:1039D0007A01A8B1284602F075FE70B1396991F8F4 -:1039E0003520824209D091F87A0118B191F87D0111 -:1039F000284205D091F87A0110B10120BDE8F0818C -:103A00000020FBE730B5E14C85B0E06900285CD0D0 -:103A10001421684604F0D4FA206990F83500FDF7C7 -:103A2000F0FD4FF47A7100F5FA70B0FBF1F5206902 -:103A300090F83500FDF7DBFD2844ADF8060020695D -:103A40000188ADF80010018FADF804104188ADF881 -:103A5000021090F8660130B1A069C11C039102F018 -:103A6000C6FF8DF81000206990F865018DF80800F8 -:103A7000E169684688472069002180F8661180F86E -:103A800065110399002920D090F8641100291CD1F8 -:103A900090F84410242918D09DF81010039A00299A -:103AA00013D013780124FF2B11D0072B0DD102293D -:103AB0000BD15178FF2908D180F864410399C0F8EF -:103AC00068119DF8101080F8671105B030BD1B29F2 -:103AD000F2D9FAE770B5AD4C206990F845001B2883 -:103AE00000D0FFDF2069002580F86D5090F88C0130 -:103AF00000B1FFDF206990F86E1041B180F86E5080 -:103B00000188A0F8901180F88E510C2108E00188FE -:103B1000A0F8901180F88E51012180F892110B21AC -:103B200080F88C110088F9F739FBF8F7EFFF20795E -:103B3000EFF76EF9206980F8455070BD70B5934C71 -:103B4000A079800729D5A078002826D1626920466F -:103B5000D17805690C2905F1380069D00CDCA1F198 -:103B600002014FF001060A2916D2DFE801F017150D -:103B7000414D5E2415291537132967D006DC0D2920 -:103B800049D0112947D0122906D155E0162966D00F -:103B9000172973D0FF2979D0FFDF70BD012395F875 -:103BA0004720194602F0E1FC0028F6D121690820DF -:103BB00081F8470070BD1079BDE8704001F0F1BA9E -:103BC00095F84600C00700D1FFDF01F0A9FA20698F -:103BD00010F8461F21F00101017070BD95F84500F5 -:103BE000102800D0FFDF2069112180F86D6008E007 -:103BF00095F84500142800D0FFDF2069152180F8D2 -:103C00006D6080F8451070BD95F84500152800D00E -:103C1000FFDF172005E095F84500152800D0FFDFED -:103C20001920216981F8450070BDBDE8704051E759 -:103C3000BDE8704001F089BA95F8442001230021C5 -:103C400002F093FC00B9FFDF0E2011E015F8460FDB -:103C500020F004002870BDE8704001F061BA95F8CA -:103C600044200123002102F080FC00B9FFDF1C206A -:103C7000216981F8440070BD00E007E095F8450037 -:103C80001E2801D000B1FFDF1F20CAE7BDE8704049 -:103C900001F052BA3D48016991F84620130702D558 -:103CA00001218170704742F0080281F84620806946 -:103CB000C07881F8A90001F02ABA10B5334C216907 -:103CC0000A88A1F8B82181F8B60191F8340001F012 -:103CD00012FA216981F8BA0191F8350001F00BFA66 -:103CE000216981F8BB01012081F8B401002081F82D -:103CF0007A012079BDE81040EFF78AB810B5234C5F -:103D000001230921206990F84420383002F02DFC6D -:103D100038B12169002001F85C0F087301F8180C14 -:103D200010BD0120A07010BD70B5184C01232146B4 -:103D30002069896990F8442009790E2A01D1122955 -:103D400003D000251D2A03D004E0BDE87040D5E76C -:103D5000162906D0232A01D1162902D0172909D005 -:103D60000CE000F8445F80F8245040781E2882D090 -:103D70001A2019E090F845201F2A09D0E269002A8C -:103D800003D0FF2901D180F8663174E7E4000020F8 -:103D900080F8455001F0C4F9206980F85D5090F832 -:103DA0007A010028F1D00020BDE8704085E72DE9B8 -:103DB000F843FE4C206990F844101D2908D00027D4 -:103DC00090F845101F2905D077B300F1440503E0B2 -:103DD0000127F5E700F1450510F8761F41F00401D1 -:103DE0000170A06902F0CFFE4FF001080026F8B183 -:103DF0003946A069FFF7C8FDD0B16A46A1692069BC -:103E000002F06EFC80B3A06902F0BBFE2169A1F84C -:103E10006E01098F01F055F938B32069282180F827 -:103E2000541080F8538047E00220A070BDE8F8836A -:103E3000206990F87A0110B11E20FFF73EFFAFB164 -:103E4000A0692169C07881F8AA0008FA00F1C1F3DD -:103E5000006000B9FFDF20690A2180F8441090F863 -:103E6000680040B9FFDF06E009E01AE02E7001F0BB -:103E700057F9FFF70FFF206980F85D60D6E72069EA -:103E800090F87A0118B10020FFF717FF2E70206913 -:103E900000F1450180F85D608D420DD180F84560EC -:103EA0000AE020699DF8001080F870119DF801105B -:103EB00080F8711121202870206900F145018D42A0 -:103EC00003D1BDE8F84301F02BB980F86860ADE795 -:103ED00070B5B64C01230B21206990F8452038308D -:103EE00002F043FB202650BB20690123002190F8FB -:103EF0004520383002F039FB0125F0B1206990F8F7 -:103F0000440021281BD0A06902F02DFEC8B1206911 -:103F100090F8761041F0040180F87610A1694A7992 -:103F200002F0070280F83120097901F0070180F8DA -:103F3000301090F87B311BBB06E0A5709BE6A670A5 -:103F400099E6BDE87040A5E690F87A31C3B900F172 -:103F500034035E788E4205D11978914202D180F8FF -:103F60005D500DE000F5D7710D7002884A8090F821 -:103F700030200A7190F8310048712079EEF748FF3F -:103F800021691E2081F84500BDE8704001F0BFB8EE -:103F900070B5864C206990F84610890707D590F8CF -:103FA000442001230821383002F0DFFAE8B120690B -:103FB00090F87000800712D4A06902F0C8FD216952 -:103FC00081F87100A06930F8052FA1F872204088AF -:103FD000A1F8740011F8700F40F002000870206919 -:103FE00090F87010C90703D00FE00120A07042E6DE -:103FF00090F84600800700D5FFDF206910F8461FC3 -:1040000041F00201017001F082F82069002590F86A -:104010004410062906D180F8445080F86850207971 -:10402000EEF7F6FE206990F86C110429DFD180F8D4 -:104030006C512079EEF7ECFE206990F844100029CD -:10404000D5D180F8685016E670B5584C0123002190 -:10405000206990F84520383002F087FA012578B9B8 -:10406000206990F84520122A0AD001230521383012 -:1040700002F07BFA10B10820A070FCE5A570FAE50B -:10408000206990F86E0008B901F041F82169A06933 -:10409000C83102F04AFD2169A069A03102F04BFD50 -:1040A000206990F8940100B1FFDF21690888A1F828 -:1040B000960101F5CC71A06902F02FFD2169A0697C -:1040C00001F5D07102F02EFD206980F89451142181 -:1040D00080F845102079BDE87040EEF799BE70B5C4 -:1040E000324C01230021206990F84520383002F03D -:1040F0003CFA0125A0B1A06902F0E5FC90B1A069ED -:104100002169B0F80D00A1F86E01098F00F0D9FF08 -:1041100058B12069282180F8541080F85350AAE53E -:10412000A570A8E5BDE87040B4E5A06921690279F1 -:1041300081F87021B0F80520A1F8722102F0BAFCD4 -:104140002169A1F87401A06902F0B7FC2169A1F806 -:104150007601A06902F0B4FC2169A1F878010D2074 -:1041600081F8450087E57CB5104CA079C00736D0B2 -:10417000A06901230521C578206990F845203830D1 -:1041800002F0F3F968B1AD1E0A2D06D2DFE805F0A2 -:1041900009090505090905050909A07840F0080085 -:1041A000A070A07800281AD1A06901E0E4000020E6 -:1041B000C57802261DB1012D01D0162D18D1206918 -:1041C00090F8440002F0B9F990B1216991F84400E7 -:1041D0001C280DD01D2803D0162D15D0A6707CBD2F -:1041E000232081F84400162D02D02A20FFF765FD18 -:1041F0000B2D3AD00BDC76D2DFE805F0312E1B40D8 -:104200009F9F4396549F34002020A0707CBD0120C6 -:10421000132D6AD006DC0C2D41D0112D6FD0122D3C -:1042200061D165E0162D76D0182D77D0FF2D5AD1AB -:104230007DE020690123194690F84720383002F0CC -:1042400094F920BBA06902F066FC216981F8520153 -:10425000072081F8470072E001F007F86FE0FFF7F0 -:104260003EFF6CE000F0E1FF69E0206990F8451046 -:1042700011290BD1122180F8451060E0FFF7E4FE10 -:104280005DE0206990F84500172801D0A67056E03F -:1042900000F046FF21691B2081F845004FE0FFF741 -:1042A00077FE4CE0206990F84600C00703D0A07864 -:1042B00040F0010021E06946A06902F04AFC9DF847 -:1042C000000000F00501206900F8761F9DF801103C -:1042D00001F04101417000F01AFF206910F8461FFB -:1042E00041F0010115E028E0FFE7FFF707FD26E0B8 -:1042F000216991F84610490704D5A0701FE010E02D -:1043000009E00BE000F003FF206910F8461F41F0C0 -:104310000401017013E0FFF7DBFD10E0FFF747FD3C -:104320000DE000F061FF0AE0FFF7FEFC07E0E16945 -:1043300019B1216981F8660101E0FFF7ABFC206942 -:10434000F0E92212491C42F10002C0E900127CBDD2 -:1043500070B5F84CA07900074AD5A078002847D15D -:10436000206990F8AB00FE2800D1FFDF2069FE2114 -:10437000002580F8AB1090F84510192906D180F877 -:104380006D5000F0CDFE206980F84550206990F80E -:1043900044101C2902D0242921D119E090F84500AD -:1043A00002F0CBF878B120692321012380F8441072 -:1043B00090F845200B21383002F0D7F878B92A2040 -:1043C000FFF77BFC0BE021691D2081F8440006E02B -:1043D000012180F8651180F8445080F86850206908 -:1043E00090F84710082903D10221217080F8AB1002 -:1043F00041E4D049096991F870210AB991F8342053 -:1044000081F8342091F871210AB991F8352081F8AA -:104410003520002801D000204FE4704770B5C54C0E -:1044200006460D46206990F8AB00FE2800D0FFDF5D -:104430002269002082F8AB6015B1A2F86A001AE484 -:1044400022F8640F0120107115E470B5B94C0123F6 -:104450000021206990F84420383002F086F80028C6 -:104460003FD0206990F87A1139B390F87B1121BBC5 -:1044700090F8452001230B21383002F076F8E0B99E -:10448000206990F8340000F036FE0546206990F867 -:10449000350000F030FE0646206990F87C11284671 -:1044A00000F01BFE50B1206990F87D11304600F0FD -:1044B00014FE18B10020FFF700FC11E02069012371 -:1044C000032190F84520383002F04FF840B92069B8 -:1044D0000123022190F84520383002F046F808B157 -:1044E000002052E400211620FFF798FF01204CE441 -:1044F00070B5904C206990F8AB10FE2978D1A17866 -:10450000002975D190F8472001231946383002F070 -:104510002CF800286CD1206990F8501149B1002185 -:10452000A0F8621090F8511180F8AC100021022020 -:104530005BE090F8452001230421383002F015F8A3 -:10454000054600F0F5FE002852D1284600F01AFF7B -:1045500000284DD120690123002190F844203830F3 -:1045600002F003F878B120690123042190F8452076 -:10457000383001F0FAFF30B9206990F85C0010B1D2 -:104580000021122031E0206990F844200A2A0DD041 -:10459000002D2DD101230021383001F0E6FF78B144 -:1045A000206990F86C1104290AD105E010F8AA1FBF -:1045B00081700021072018E090F87000800718D063 -:1045C000FFF743FF002813D120690123002190F851 -:1045D0004420383001F0C9FF002809D0206990F844 -:1045E0006401002804D00021FF20BDE8704015E7D9 -:1045F00009E000210C20FFF711FF206910F8701F5F -:1046000041F00101017099E43EB505466846FDF7A9 -:10461000F6F800B9FFDF2221009803F0AFFC032178 -:10462000009802F0FBF90098017821F01001017068 -:10463000294602F022FA3F4C0C2D27D00ADCA5F1C6 -:1046400002050A2D16D2DFE805F01C154416161CCB -:10465000154F1516132D0ED006DC0D2D2CD0112D57 -:1046600021D0122D06D106E0162D29D0172D4CD0C1 -:10467000FF2D55D0FFDFFDF7D7F8002800D1FFDF71 -:104680003EBD2169009891F8AC1017E0E2680098EF -:104690001178017191884171090A81715188C17144 -:1046A000090A0172E7E70321009802F084FA062163 -:1046B000009802F084FADEE7009806210171DAE73B -:1046C0000098216991F87C21027191F87D11417166 -:1046D000D1E721690098D03102F031FA21690098C0 -:1046E000A43102F031FAC6E71349D1E90001CDE95E -:1046F0000101206901A990F8760000F005008DF80D -:104700000400009802F02AFAB5E7216991F87A01CD -:1047100000280098D6D111F8342F02714978D6E7D5 -:10472000206990F86721D0F86811009802F0B3F979 -:10473000A1E70000E400002000850100F84810B562 -:10474000006990F84A1041B990F8452001230621EC -:10475000383001F00AFF002800D0012010BD70B5EC -:10476000EF4D286990F8481039B1012905D0022988 -:1047700006D0032904D0FFDF39E4B0F8B41041E0DB -:1047800090F84710082934D0B0F85E10B0F86020D7 -:1047900000248B1C9A4206D3511A891E0C04240C47 -:1047A00001D0641EA4B290F85C1039B190F8442096 -:1047B00001230921383001F0D8FE30B3FFF7BEFFE6 -:1047C00078B129690020B1F85820B1F856108B1C37 -:1047D0009A4203D3501A801E00D0401EA04200D23D -:1047E00084B20CB1641EA4B22869B0F8B41021449C -:1047F00008E0B0F85E100329BFD3018FB0F8602045 -:104800001144491CA0F8B0101DE40024ECE770B579 -:104810000C4605464FF4E071204603F0D1FB25809D -:1048200011E4F8F792BC2DE9F0410D460746062148 -:10483000F8F782FB04003DD094F880010026B8B15F -:104840006E70072028700DE0268484F88061D4F80B -:104850008201C5F80200D4F88601C5F80600B4F854 -:104860008A01688194F880010028EDD1AE7094E04F -:1048700094F88C0190B394F88C010B2813D00C2879 -:1048800001D0FFDF89E02088F8F788FC0746F8F7B9 -:1048900052F978B96E700C20287094F88E01A870C7 -:1048A0002088A88014E02088F8F778FC0746F8F7FD -:1048B00042F910B10020BDE8F0816E700B20287025 -:1048C00094F88E01A8702088A88094F89201A871AD -:1048D00084F88C613846F8F728F95EE0FFE794F831 -:1048E000AC0130B16E700E20287084F8AC616F801E -:1048F00053E094F8940180B16E70082028702088ED -:104900006880D4F898116960D4F89C11A960B4F853 -:10491000A001A88184F894613FE094F8A20140B11D -:104920006E7015202870B4F8A401688084F8A26124 -:1049300033E094F8A60170B16E701620287005E07F -:1049400084F8A661D4F8A801C5F8020094F8A6017D -:104950000028F5D121E094F8AE0140B1182028706C -:1049600084F8AE61D4F8B001C5F8020015E094F8FF -:10497000B40100289FD06E701220287009E000BF9B -:1049800084F8B461D4F8B601C5F80200B4F8BA01ED -:10499000E88094F8B4010028F2D101208BE7604848 -:1049A0000021C16101620846704730B55C4D0C467C -:1049B000E860FFF7F4FF00B1FFDF2C7130BD00218C -:1049C00080F8441080F8451080F8481090F8BE1028 -:1049D00009B1022100E00321FEF760BD2DE9F0419D -:1049E0004F4C0546206909B1002104E0B0F8C6101B -:1049F000B0F8B6201144A0F8C61090F8501139B99B -:104A000090F8472001231946383001F0AEFD30B14F -:104A1000206930F8621FB0F85420114401802069E9 -:104A200090F8683033B1B0F86410B0F8B620114493 -:104A3000A0F8641090F96C70002F06DDB0F86A10D1 -:104A4000B0F8B6201144A0F86A1001213D2615B136 -:104A500080F8546013E02278022A0AD0012A11D08B -:104A6000A2782AB380F8531012F0140F0DD01E2133 -:104A700013E090F8AC20062A3CD016223AE080F8E9 -:104A8000531044E090F8522134E0110702D580F829 -:104A900054603CE0910603D5232180F8541036E0A1 -:104AA000900700D1FFDF21692A2081F854002AE015 -:104AB0002BB1B0F86420B0F866309A4210D2002FC3 -:104AC00005DDB0F86A20B0F866309A4208D2B0F836 -:104AD0006230B0F86020934204D390F850310BB1AB -:104AE000222207E090F848303BB1B0F85E309342A4 -:104AF00009D3082280F85420C1E7B0F85E20062AC6 -:104B000001D33E22F6E7206990F8531019B12069CD -:104B1000BDE8F04153E7BDE8F0410021FEF7BEBC1F -:104B2000E40000202DE9F047FF4C81460D46206946 -:104B30000088F8F745FB060000D1FFDFA078284386 -:104B4000A070A0794FF000058006206904D5A0F878 -:104B50005E5080F8C45003E030F85E1F491C0180AD -:104B6000FFF7ECFD012740B3E088000506D520697A -:104B700090F84A1011B1A0F856501EE02069B0F824 -:104B80005610491C89B2A0F85610B0F858208A4235 -:104B900001D3531A00E00023B4F808C00CF1050C4F -:104BA000634501D880F85C70914206D3A0F8565056 -:104BB00080F8AC712079EEF72BF9A0794FF002085C -:104BC00010F0600F0ED0206990F8481011B1032941 -:104BD00008D102E080F8487001E080F848800121A7 -:104BE000FEF75CFC206990F84810012904D1E188A7 -:104BF000C90501D580F84880B9F1000F70D1E1886E -:104C0000890502D5A0F8D85003E030F8D81F491C18 -:104C1000018000F054FBFEF7F5FEFFF769FC00F0A1 -:104C20006AFD0028206902D0A0F8B85003E030F8EF -:104C3000B81F491C018000F061FD38B1216991F86D -:104C4000C400022807D8401C81F8C400206990F8ED -:104C5000C400022804D9206920F8B85F4580057394 -:104C600020690123002190F84520383001F07DFCB7 -:104C700020B9206990F845000C2859D120690123FA -:104C8000002190F84420383001F06FFC48B32069CF -:104C90000123002190F84720383001F066FC00B372 -:104CA000206990F84810022942D190F8C400C0B998 -:104CB0003046F7F710FDA0B1216991F8AB00FE284E -:104CC00036D1B1F8B200012832D981F8BD70B1F8FF -:104CD0006000B1F85E20831E9A4203DB012004E0ED -:104CE00031E025E0801A401E80B2B1F8B820238957 -:104CF0009A4201D3012202E09A1A521C92B29042C7 -:104D000000D91046012801D181F8BD5091F8482101 -:104D100092B1B1F8BA20B1F84A118A4201D3012107 -:104D200002E0891A491C89B2884205D9084603E085 -:104D30002169012081F8BD5021690A8F1044A1F832 -:104D4000B400FFF70CFDE088C0F340214846FFF7B0 -:104D500045FE206980F8BE50BDE8F047FCF787BDEE -:104D6000714902468878CB7818430DD1084600690E -:104D700042B18979090703D590F84700082803D084 -:104D800001207047FEF7A9BA0020704770B5664C45 -:104D900005460E46E0882843E080A80703D5E807CB -:104DA00000D0FFDF6661EA074FF000014FF001001D -:104DB0001AD0A661F278062A02D00B2A14D10AE092 -:104DC000226992F84530172B0ED10023E2E92033F7 -:104DD00002F8370C08E0226992F84530112B03D114 -:104DE00082F8491082F86E00AA0718D56269D27855 -:104DF000052A02D00B2A12D10AE0216991F8452038 -:104E0000152A0CD10022E1E9222201F83E0C06E02D -:104E1000206990F84520102A01D180F84A10280610 -:104E200001D50820E070A7E42DE9F84F3E4C00259D -:104E30004FF00108E580A570E5704146257061F3EB -:104E4000070220619246814680F8BE800088F8F70C -:104E5000B7F9070000D1FFDF20690088FCF7CCFC20 -:104E600020690088FCF7F1FC2069B0F8B21071B13C -:104E700090F8AB10FE290FD190F8501191B190F835 -:104E8000472001231946383001F06FFB80B12069BB -:104E900090F8AB00FE2805D0206990F8AB0000BF69 -:104EA000FFF7B2FB206990F8BF1089B1258118E0A7 -:104EB0002069A0F8625090F8511180F8AC100021E0 -:104EC0000220FFF7ABFA206980F8BD500220E7E727 -:104ED00090F8801119B9018C8288914200D881889C -:104EE0002181B0F8B610491E8EB2B0F8B810314426 -:104EF000A0F8B81090F8BC1021B1A0F8BA5080F812 -:104F0000BC5004E0B0F8BA103144A0F8BA1030F840 -:104F10005E1F31440180FFF711FC20B1206930F899 -:104F2000561F3144018001E0E40000202069B0F800 -:104F3000B210012902D8491CA0F8B2100EB180F8B5 -:104F4000C45090F8BD10A1B1B0F8B80021898842D2 -:104F50000FD23846F7F7BFFB58B1206990F84811D7 -:104F600039B1B0F8BA10B0F84A01814201D300F06B -:104F7000C8FB206980F8BD5090F845100B2901D07E -:104F80000C2915D1028FB0F86E31D21A12B2002A54 -:104F90000EDBD0F87011816090F87411017302215A -:104FA00001F0D7F9206980F8455080F8788024E036 -:104FB00021290FD1018FB0F86E21891A09B2002979 -:104FC00008DB90F87A01FFF714FA206900F8455FD2 -:104FD000057612E090F84410212901D022290CD145 -:104FE000018FB0F86E01081A00B2002805DB01201D -:104FF000FFF7FFF9206980F8445020690146B0F8B6 -:10500000B620383001F022FA206990F8481109B131 -:10501000A0F8BA50F9480090F94BFA4A4946504670 -:1050200000F0DCFA216A11B16078FCF727F92069F9 -:105030000123052190F84520383001F096FA002828 -:1050400003D0BDE8F84F00F042BABDE8F88F00F099 -:1050500022BBED49C8617047EB48C069002800D009 -:1050600001207047E84A50701162704710B504463D -:10507000B0F874214388B0F87611B0F878019A42FC -:1050800005D1A388994202D1E38898420FD02388A2 -:10509000A4F88431A4F88621A4F88811A4F88A0120 -:1050A000012084F88001D8480079EDF7B1FE012194 -:1050B000204601F04EF9002004F8450F0320E0706F -:1050C00010BD401A00B247F6FE71884201DC00288C -:1050D00001DC0120704700207047012802D002281F -:1050E00005D102E0012904D001E0022901D000200D -:1050F00070470120704710B5012804D0022804D061 -:10510000FFDF204610BD0124FBE70224F9E7BE487B -:105110000021006920F86A1F8178491C817070475E -:10512000B94800B5016911F86C0F401E40B2087013 -:10513000002800DAFFDF00BDB3482421006980F8B1 -:105140004410002180F86411704710B5AE4C2069FE -:1051500090F86C11042916D190F844200123002105 -:10516000383001F002FA00B9FFDF206990F87010C2 -:10517000890703D4062180F8441004E0002180F858 -:10518000681080F86C11206990F84600800707D5F8 -:10519000FFF7C6FF206910F8461F21F002010170D9 -:1051A00010BD994910B5096991F844200A2A09D11E -:1051B00091F8AA20824205D1002081F8440081F8AC -:1051C000680010BD91F84620130706D522F00800AC -:1051D00081F84600BDE81040A2E7FF2801D0FFDFBC -:1051E00010BDBDE81040A7E710B5874C206910F846 -:1051F000761F41F004010170A06901F0DEFC162861 -:1052000006D1206990F844001D2802D0232805D03B -:1052100010BDA06901F0D5FCFEF74FFD216900200B -:1052200081F8440081F8680010BD10B5764C012368 -:105230000021206990F84520383001F096F930B10E -:10524000FFF765FF2169102081F8450010BD206936 -:105250000123052190F84520383001F086F908B186 -:10526000082000E00120A07010BD70B5664C01233D -:105270000021206990F84520383001F076F90125A9 -:1052800080B1A06901F044FC2169A1F86E01098F89 -:10529000FFF717FF40B12069282180F8541080F8EB -:1052A0005350C0E5A570BEE52169A06901F5B8714C -:1052B00001F029FC21690B2081F84500B3E510B508 -:1052C000FFF746F8FEF74FFF4F4CA079400708D58F -:1052D000A07830B9206990F84700072801D1012053 -:1052E0002070FEF72BFCA079C00609D5A07838B94C -:1052F000206990F845100B2902D10C2180F8451047 -:10530000E07800070ED520690123052190F845209B -:10531000383001F02AF930B10820A070216900204E -:1053200081F88C0110BDBDE81040002000F048BBA2 -:1053300010B528BB344C216991F84600C20702D051 -:105340000121092018E082070AD501210C20FFF76E -:1053500065F8206910F8701F41F0010101700DE03F -:10536000420702D50121132006E0000708D511F8F5 -:10537000A90FC87001210720FFF750F8012010BDC8 -:10538000002010BD10B5204C216991F8452040B394 -:10539000102A06D0142A07D0152A19D01B2A2BD17F -:1053A00019E001210B2018E0FAF75AFF0C2816D358 -:1053B00020690821D030FAF757FF28B1206904216D -:1053C000A430FAF751FF00B9FFDF0121042004E007 -:1053D00000F01FF803E001210620FFF71FF801206D -:1053E00010BD1E2A08D191F85D0078B991F87A01B4 -:1053F00010B191F87B0148B1002010BD254B010090 -:10540000614D01008D4D0100E400002001211720B5 -:10541000E3E770B5174C0025206990F85311012976 -:105420000AD0022925D190F86E10A9B1062180F882 -:10543000AC100121022017E090F88C11002918D13E -:1054400000F1900300F1C801002200F5AA7001F0FC -:105450002CF80121052007E090F87600400701D5DF -:10546000112000E00D200121FEF7D8FF206980F80F -:105470005351D8E4E400002011F00C0F6FF00D023E -:105480000BD0B0F5747F01D2002070475038C1179F -:1054900000EB916002EBA01003E0022903D002EBC5 -:1054A000D00080B270476FF00E0101EB9000F8E77A -:1054B000F8480078002800D00C20704710B504464A -:1054C000FFF7F6FF00B1FFDFF248447210BDF1496B -:1054D00001200872704770B5EE4934314C6804F110 -:1054E000380580B194F83510204601F0BEF882B23C -:1054F0001B2114F8353FA87C00F008FC2178BDE89A -:105500007040FBF7E5BB1F2094F83410F7E72DE956 -:10551000F047E04E814634367468204694F83510E2 -:1055200001F0A3F880B294F83510FFF7A5FF1B2116 -:105530001B2800D90846D74D0746D74868627668C9 -:1055400001203836FFF7C7FFB07C4FF0000840B3AA -:1055500006F15801D04891E80E1000F1480A8AE897 -:105560000E10B16EC0F86110F16EC0F865102230F7 -:10557000FBF73BFEC848012148300176D6E91412FA -:10558000C0E90412A0F12602696AFBF796FA94F8C2 -:10559000350000F0B1FB0246F9B20120FBF79BFA9F -:1055A00004E0686AFBF721FEFBF7BAFAB9F1000FD5 -:1055B0000AD1012294F8353096211046FBF74EFDB2 -:1055C00041469620FBF72AFE94F82C00012801D1D1 -:1055D000FBF794FE02202870BDE8F0872DE9F04724 -:1055E000AC4C8046089F20781D461646894610B967 -:1055F0000EB105B107B9FFDFE761C4E90565002019 -:10560000C4E90D892072E0712071E0706071A14FD2 -:10561000A071A0703437A0817E68354636F8380B0B -:10562000F7F7CEFDE0622888F7F7B8FD2063FBF7B7 -:1056300059FB95F93700FBF7BAFB05F11200FBF7B0 -:10564000BCFD05F10E00FBF7B8FB0120FBF7CAFD1E -:10565000B07EFBF7BCFBFBF7BFFD95F83510284685 -:1056600001F003F882B21B2115F8353FB07C00F041 -:105670004DFB2C782146FBF72BFB22460021012015 -:10568000FBF774FC7868D0F8C000FBF7B2FDBDE80A -:10569000F04701203BE77F4800B50078022800D0A2 -:1056A000FFDF00BD7B4810B534304468FBF7F8FDE0 -:1056B000FBF7D7FDFBF758FDFBF785FDFBF730FA4D -:1056C00094F82C00012801D1FBF70EFE714CA08943 -:1056D00000F02BFBE269E179E07890470020207030 -:1056E00010BD6C4810B50078022800D0FFDFBDE87F -:1056F0001040D7E7D6E7674840797047654800799A -:1057000070476449012088717047624810B5343091 -:10571000446804F13800017B21290BD0407B21280B -:1057200008D01C2909D01D2907D01F280FD094F8B4 -:10573000340010BD94F8701106E01F2807D094F8CB -:105740007C0100F0CFFA014694F8340008E094F8A8 -:105750007C0114F8311F084000F0C4FA0146E078DB -:10576000BDE8104000F0ECBA2DE9F14F4948494F2F -:105770003430A0F1140B466882B006F138041B25C2 -:1057800060794FF0000A4FF0010958B3012868D042 -:1057900002286AD0032875D0FFDF386A0825B8468A -:1057A000017821F008010170A37905EAC3031943C8 -:1057B00021F004010170E379042505EA830319430C -:1057C00021F0100101706779D8F82C00F6F793FFEB -:1057D0000546FCF75FF8022F60D0012F5ED0032F43 -:1057E0005FD061E0FFF791FF8046FFF78EFF014633 -:1057F000304600F03DFF80B24146FFF73DFE1B28DA -:1058000000D92846ADF804005846FCF721F830B11D -:105810004FF48060396A00F08DFA03201FE06A4679 -:1058200001A9F86A00F05CFA386210B194F83510FA -:1058300029B15846FBF7DDFF84F80590ADE79DF8E8 -:10584000001031B9A0F800A080F802A0012101F0F9 -:10585000E5F8BDF80410386A01F0B5F9022060716E -:105860009BE75846FBF7C5FF97E7ADF804506A463B -:1058700001A9F86A00F034FA386200288DD1FFDF00 -:105880008BE7FFE75846FBF7E3FF002885D1FFDFF2 -:1058900083E703E008010020280B0020A84301D083 -:1058A00002E00DB1012100E00021D8F820004546BA -:1058B000027842EA01110170617C51B361790129DA -:1058C00027D004F15801FC488EC900F1480888E847 -:1058D0008E00A16EC0F86110E16EC0F86510223034 -:1058E000FBF783FCF448483080F818A0D4E9121282 -:1058F000C0E90412A0F126012A6AFBF7DEF896F847 -:10590000340000F0F9F90246FB210020FBF7E3F830 -:1059100003E0FBF76AFCFBF703F9029830B996F84D -:105920003430012296210020FBF798FB85F8059082 -:10593000296A0A88EA818978297485F80090BDE887 -:10594000FE8F70B5DD4C054639B9012D05D12079A2 -:10595000401CC0B22071012820D8A1692846884780 -:10596000E0B1A179D44831B1012D04D1417811B908 -:105970000178C90612D5E17981B98DB9CF490E31C7 -:105980000978CA0602D40078C00607D5A07828B9DD -:10599000A06A28B9608918B1C80601D4012070BD79 -:1059A000002070BD10B5C54CA06A00B9FFDF628948 -:1059B000D4E90910D21C02F062FAA06A606210BD3C -:1059C0002DE9F0470600BD48BC4D00F134004468A5 -:1059D000686A04F13804477801D0012E03D1296B9D -:1059E00001F072FF687068784FF000084FF001090D -:1059F00038B1012817D0022830D0032845D0FFDF66 -:105A0000EAE5012E31D0FFF7CDFF39460122286BA0 -:105A1000F6F7E2FE27E000BF84F8078030E000BF21 -:105A200084F807902CE0012E08D0FFF7BBFF394621 -:105A30000022286BF6F7D0FE022EE1D0D4E9140143 -:105A4000401C41F10001C4E91401E079012802D0B1 -:105A500084F80790C0E584F80780BDE5012E04D0E6 -:105A6000286BF7F73DF8022ECAD0D4E91401401C88 -:105A700041F10001C4E91401E0790128D0D1CBE75C -:105A8000687ABDE8F047EDF7C3B9012EB8D0286BAE -:105A9000F7F726F8F4E72DE9F04101468748874DEE -:105AA000343000274468686A01263834027802F0EE -:105AB0000302012A1BD0022A19D0032A03D0E87955 -:105AC00040F0040011E000F0C2FF20B3A670A889E6 -:105AD00040F40060A8810120696A00F02BF91EE003 -:105AE000E771BDE8F081E671FBE7E871F9E740781E -:105AF000A8B1AA8942F40062AA81AA6A002AF0D059 -:105B00001B2808D8287A20B1BDE8F041802000F099 -:105B10000CB90E70E5E7E87940F01000E5E7E079B0 -:105B20000128E0D1DCE770B56448644D3430446846 -:105B300028783834012800D0FFDFA078012630B162 -:105B40000020A0700146042000F0F4F82671286AB5 -:105B50000078C043800706D1E07820B9E6700220C3 -:105B6000296A00F0E7F801210020FFF7EAFE10B1F2 -:105B7000BDE8704096E5BDE870400020C7E42DE91F -:105B8000F84F4E4F4D4C343700267D6882468DF8D5 -:105B9000006020783835022800D0FFDFA08940F46B -:105BA0000070A0810020FFF796FCA87CBAF1000FDE -:105BB0005BD0FAF7D8FFFAF7C8FF4FF0010968B9D0 -:105BC000A87C58B1606A417841B10078E979C0F3A6 -:105BD000C000884202D184F8039059E0606A41789D -:105BE000618121B1206BF6F7B1FDA06200E0A662F1 -:105BF000A089B84640F02000A0812671786800F1A5 -:105C00003807064690F82C00012816D1FBF76CFBEC -:105C10003946304600F067FC78B1D8F80400318886 -:105C2000A0F8A811397A80F8AA11797A80F8AB1116 -:105C300080F8A691607AEDF7EBF8606AA9790078B0 -:105C4000C0F38000884205D000F084F8A08940F4B9 -:105C50008070A081606AE9790078C0F3C000884252 -:105C60000AD16846FFF717FF06E008B1FAF7A7FF69 -:105C7000A08940F04000A08151460120FFF761FE5D -:105C800000289DF8000007D010B10020FFF798FE13 -:105C9000FFF708FDBDE8F88F10B10120FFF790FE77 -:105CA0000020FFF761FD9DF800000028F2D00220DF -:105CB000FFF786FEEEE70000280B00200801002019 -:105CC00070B5064642480D464468FAF7CAFF0346D7 -:105CD00094F8342029463046BDE87040FDF731BCC9 -:105CE000F6F744BCC10701D001207047800701D5F9 -:105CF000022070470020704700B5012802D002281A -:105D000002D0FFDF002000BD012000BD70B50C46B1 -:105D1000054619461046FFF7AFFB844200D22046E5 -:105D20000DB1001D80B2C0B270BD294A0021343AC5 -:105D300052691047264A0123343A9370526910473A -:105D4000002904D0012803D0012901D00220704786 -:105D50000120704770B51E48446894F83D003834FF -:105D6000002832D0022810D1194D343DE86AF6F7E8 -:105D700029FC00B9FFDFD4E91201401C41F1000108 -:105D8000C4E91201687AEDF743F8002565712079BE -:105D900020B1257100211020FFF7CCFFE07878B109 -:105DA000E570FBF764FD00B9FFDF00210820FFF775 -:105DB000C1FFD4E91201401C41F10001C4E9120104 -:105DC000A079012802D00120A07170BDA57170BD1D -:105DD0003C0100202DE9F0410F4606460024FA4D13 -:105DE0000FE000BF05EBC40090F84311B14206D1AB -:105DF0000622394600F5A27002F015F838B1641C8D -:105E0000E4B22878A042EDD81020BDE8F081204609 -:105E1000FBE7F0B50746EC4816460478621C0270B2 -:105E200000EBC4050868C5F844018888A5F8480156 -:105E3000102C00D3FFDF85F8437185F84A612046B6 -:105E4000F0BD70B5054600F0F9F910281CD1DE4C04 -:105E50002078401EC0B22070A84215D004EBC002CA -:105E600004EBC50102F58070D2F84321C1F843214B -:105E7000D0F84700C1F84701207800F0DFF910287A -:105E800002D0204480F8035170BD2DE9F047CE4C7C -:105E90000646A719A078401EC5B2A57097F80381E1 -:105EA000AE422AD004EB051A04EB06190AF10301ED -:105EB00009F10300102201F0E2FF0AF1830109F168 -:105EC0008300102201F0DBFF601905EB450290F81A -:105ED000031187F8031106EB460104EB420204EBC1 -:105EE0004101D2F80B31C1F80B31B2F80F21A1F802 -:105EF0000F2190F83B0187F83B0104EBC80090F8B4 -:105F00004A01C00703D14046BDE8F04799E7BDE824 -:105F1000F08710B540F2C311AB4802F02FF8FF2212 -:105F20000821AA4802F022F8A84800210A38417046 -:105F30004FF46171418010BD70B50D460646FFF704 -:105F400049FFA14C102807D004EBC00191F84A1179 -:105F5000C90701D0012070BD6178082910D210282E -:105F600008D004EBC000012180F84A116078401C81 -:105F70006070EFE7012229463046FFF74AFFF5E758 -:105F8000002070BD70B5904D2878401E44B20AE0E4 -:105F900005EBC40090F84A01C00702D0E0B200F05F -:105FA0005EF9641E64B2002CF2DA70BD2DE9F04790 -:105FB000984691460C460746FFF70CFF0546102809 -:105FC00005D000F03BF9102801D012209FE77E4E4B -:105FD000B07808281FD2102D05D10022214638465E -:105FE000FFF717FF0546B4781022601CB07006EB6F -:105FF0000417F81C494600F04BFA07F18300102201 -:10600000414600F045FA3019002180F8035180F82C -:106010003B1108467BE7072079E76B4810B580788D -:10602000401E44B204E0E0B2FFF72FFF641E64B2EA -:10603000002CF8DA10BD65490A394870704763488A -:106040000A384078704740B14AF2B811884204D803 -:106050005E490A39488001207047002070475B483C -:106060000A384088704710B5FFF7B4FE102803D0F7 -:1060700000F0E4F8102800D1082010BD52498A78B9 -:10608000824203D901EB0010833070470020704733 -:106090004D498A78824203D901EB0010C01C704739 -:1060A00000207047484B10B59C7884420FD91844A3 -:1060B00090F8030103EBC00090F843310B70D0F867 -:1060C00044111160B0F848019080012010BD0020FB -:1060D00010BD3D4A114491F803213C490A390A7028 -:1060E00002684A6080880881704710B5FAF79FFC03 -:1060F00018B1BDE81040FAF7AABCFF2010BD324924 -:106100008A78824209D9084490F8030101EBC00063 -:1061100090F84A0100F001007047002070472DE917 -:10612000F04700252F46284E2BE000BF06EBC704A2 -:1061300004F5A271884694F84301FFF794FF814665 -:10614000FFF7A6FF94F84A11C90718D060B1B9F15A -:10615000080F05D206EB090191F83B11012903D084 -:10616000102100F086F950B11849284601F8059031 -:106170006D1C94F843214146EDB2FAF7F4FD7F1C03 -:10618000FFB23078B842D1D8C1E603460F4810B507 -:106190000A380A46407840B10B48817829B11A4440 -:1061A000C01CFAF7F6FB012010BD002010BD064A06 -:1061B00001EB410102EB41010268C1F80B2180882B -:1061C000A1F80F0170470000980B00204E0100203D -:1061D00001461022274800F05BB92648F2E726491D -:1061E0008A78824203D9084490F83B0108B1002024 -:1061F000E8E70120E6E72DE9F0410E46074615469F -:106200000621304600F035F91B4C58B1002004E05F -:106210002118401C81F83B51C0B2A1788142F7D8C7 -:106220000120F2E531463846FFF71DFF082803D06C -:10623000204480F83B51F3E70020E6E50E4910B515 -:10624000034600208A7806E00C1894F803419C422B -:1062500004D0401CC0B28242F6D8102010BD0649BE -:106260004A78521E4A7001EBC001002281F84A218F -:10627000E7E500005B0D0020980B002000F0010115 -:10628000400800F001021144400800F001021144EE -:10629000400800F001021144400800F001021144DE -:1062A000400800F001021144400800F001021144CE -:1062B00001EB5000704710B50024C484448DDB000E -:1062C0004C43B3FBF2F394FBF2F45B1C44859BB2AA -:1062D00003FB02F40385B4F5C84F01DD5B1E0385A3 -:1062E0004FF4FA43B3FBF2F35B1CC385438C02EB20 -:1062F000C3035B1EB3FBF2F30384C38B4B43B3FBBB -:10630000F2F1C18310BD70B50546087B0E4600F062 -:106310001F0008730020287604463019007AFFF722 -:10632000ADFF2919641CC874297EE4B2084428769C -:10633000052CF2D3C0B2252800D9FFDF70BD0023A1 -:10634000C383428401EBC202521EB2FBF1F101840D -:10635000704770B50025044600F13806032909D0BE -:10636000E9B3012967D002294ED101463046BDE884 -:106370007040C8E77821304601F022FEB571F57112 -:1063800035737573F573357475717576B57601204F -:1063900086F83E00412186F83F10FE2186F87310F2 -:1063A00084F82C50258484F8340084F835002821A2 -:1063B00084F8361060734FF448606080A4F8B050E1 -:1063C000A4F8B250A4F8B450A4F8B650A4F8B85049 -:1063D000A4F8BA5084F8BD5084F8BF5000E014E02F -:1063E000A4F8C65084F8C450A4F8D850A4F8DA50E1 -:1063F00084F87A5184F87B5184F8485184F85051DC -:1064000084F8535184F86C5170BDA4F8C65084F8D8 -:10641000BE506188F9480A460844B0FBF1F0A4F880 -:1064200058004BF68030A4F85A00E3883046FFF756 -:1064300042FF21469AE7A4F8C6504188B4F8783163 -:10644000B4F874213046BDE8704034E7037E0BB1E8 -:10645000252B01D9122070472AB14B7B2BB1012B80 -:1064600005D01F2070470020704700F0EEB900F003 -:1064700092B910B500231A4603E0845C2343521CF2 -:10648000D2B28A42F9D30BB1002010BD012010BD59 -:1064900030B5134606E0CC18D51A14F8014C5B1E33 -:1064A0004455DBB2002BF6D130BD70B50E468CB032 -:1064B000144601461D4610226846FFF7E9FF1022E8 -:1064C000314604A8FFF7E4FF684600F045FC08A940 -:1064D0004FF0100228461CB1FFF7DAFF0CB070BD78 -:1064E00001F0CDFCFAE738B505460C466846FAF7E8 -:1064F00010FF002820D09DF900002072A17E61725B -:1065000094F90A100022411A00D5494295F82D301D -:106510008B4210DCFF2B0ED0E17A491CC9B2E1722C -:1065200095F82E30994202D8A17A7F2903D1A07222 -:106530000020E0720122104638BD0C2813D00B2831 -:1065400011D00D280FD01C280DD01D280BD01E28CF -:1065500009D01F2807D0202805D0212803D02328C0 -:1065600001D0002070470120704710B5A2F10F0341 -:106570000C2939D2DFE801F006080D1215181C3875 -:106580002436382792B32FE0072A30D0082A2ED09D -:106590002AE00C2A2BD00B2A29D025E00D2A26D060 -:1065A00022E00C2B23D91FE0103A0B2A1FD91BE045 -:1065B000032B1CD990F83600B0B11B2A17D913E071 -:1065C000062A14D010E01C2A11D01D2A0FD01E2A32 -:1065D0000DD01F2A0BD0202A09D0212A07D0232A28 -:1065E00005D001E00E2A02D0002010BDFFE70120F7 -:1065F000FBE72DE9F0410C46054640F2337786680B -:1066000006E000BFF8F7C8FD3946F8F7CEFAA860F3 -:106610002846F8F78EFF0028F4D094B13046A968D8 -:10662000F9F7C8FA00280CDD2044401EB0FBF4F74F -:1066300007FB04F13046F8F7B8FAA8603846BDE821 -:10664000F0810020FBE770B5044690420AD2101B8F -:10665000642800D2642025188D4204D8F9F7DDFAA9 -:1066600008B1284670BD204670BD4FF4A470704735 -:106670004FF4A47070470844184498300AB10421BC -:1066800000E00021084470472DE9F0410E461B2729 -:10669000384691F8341000F06DF84FF4A474A0421D -:1066A00000D920460546384696F8351000F062F8C5 -:1066B000A04200D9204601462846BDE8F04100220C -:1066C0001346D8E7C10701D001207047810701D5E3 -:1066D00002207047400701D508207047002070470E -:1066E0002DE9F0410546164688460124084600F08B -:1066F00044FA0746404600F042FA0346FFF7E2FF3D -:1067000002463846FFF7DEFF52EA000100D10024BE -:10671000990700D10022B90700D1002095F8341064 -:10672000914200D10022327095F83510814200D19B -:10673000002070706AB960B9404600F022FA298FD3 -:10674000401A00B247F6FE71884201DC002800DCE6 -:106750000024204673E710B540F6C41254100129F6 -:1067600003D0022902D0FFDF02E008B110463CE767 -:1067700020463AE711F00C0F04D04FF4747101EB8E -:10678000801006E0022902D0C000703001E08000D5 -:106790003C3080B27047F0B50C7C8B7BCD7B5C408D -:1067A0004B7C02886B4044EA0323067E5A40002457 -:1067B000D5B2120A95FAA5F592FAA2F22D0E120E92 -:1067C00045EA022202EB0212641C1A44E4B292B2BD -:1067D000032CEDD35A402523B2FBF3F403FB14231F -:1067E00001EBD30543762F7A03F00704012505FA60 -:1067F00004F4274204D083761DE00000FFDB05008F -:106800005643320C521CD2B20023C418E47C94428A -:1068100013D30024CE18367A05FA04F73E4201D08D -:10682000521ED2B222B1641CE4B2082CF4D306E0AA -:1068300004EBC30181760020F0BD121BD2B25B1CB9 -:10684000DBB2052BE1D31F20F0BDF0B5437E0C7EFB -:10685000012504FB02322523B2FBF3F403FB1422CF -:1068600001EBD204427602F00703247A05FA03F31F -:106870001C4201D082761EE0037EB2FBF3F403FBE0 -:106880001422521CD2B20023C418E47C944214D3C4 -:106890000024CE1896F8086005FA04F73E4201D0AD -:1068A000521ED2B222B1641CE4B2082CF4D306E02A -:1068B00004EBC30181760020F0BD121BD2B25B1C39 -:1068C000DBB2052BE0D31F20F0BD0000282101F032 -:1068D00055BB30B50546007801F00F0220F00F00DF -:1068E00010432870092910D2DFE801F005070507D9 -:1068F0000509050B0D00062409E00C2407E02224FD -:1069000005E0012403E00E2401E00024FFDF6C70A9 -:1069100030BD007800F00F0070470A6840F8032F80 -:106920008988818070470A6840F8092F89888180AA -:1069300070470278402322F0400203EA81110A43A3 -:1069400002707047027822F0800242EAC11202709F -:10695000704770B514460E4605461F2A00D9FFDF62 -:106960002246314605F1090001F089FAA41D6C7038 -:1069700070BD70B514460E4605461F2A00D9FFDFCC -:106980002246314605F1090001F079FAA41D6C7028 -:1069900070BD30B5017801F00F01032920D0052921 -:1069A00021D14578B0F81910B0F81B40B0F8173075 -:1069B000827D222D17D1062915D34FF44865A942AF -:1069C00011D8B4F5FA7F0ED26AB1082A0BD88A42E0 -:1069D00009D28B4207D8B0F81D00A84205D902E0C1 -:1069E00040780C2801D0002030BD012030BD407817 -:1069F000704700B5027801F0030322F003021A4346 -:106A00000270012905D0022903D0032903D0FFDF3A -:106A100000BD002100E00121417000BD00B50278F9 -:106A200001F0030322F003021A430270012905D08A -:106A3000022903D0032903D0FFDF00BD002100E0BD -:106A40000121417000BD007800F0030070474178DB -:106A500089B1C0780E2805D00F2803D0102801D0A6 -:106A6000192802D31B2904D905E05B4A105C88422F -:106A700001D1012070470020704730B50124054640 -:106A8000C170192902D25448445C02E0FF2900D0A9 -:106A9000FFDF6C7030BD70B514460E4605461B2AEC -:106AA00000D9FFDF6C7022463146E81CBDE870401B -:106AB00001F0E5B9B0F807007047B0F80900704779 -:106AC000B0F80B00704770B5B0F80720B0F8094077 -:106AD000B0F805300179951F40F67A46B54210D8D6 -:106AE000B4F5FA7F0DD261B108290AD8914208D2D3 -:106AF000934206D8B0F80B00B0F5486F01D80120DA -:106B000070BD002070BD42680A60007A087170474D -:106B1000B0F8090070470079704742680A608068E1 -:106B20004860704780890880704750F80E2F0A60CF -:106B3000406848607047D0F81600086070470A68DF -:106B400042604968816070470968C1607047007998 -:106B5000704742680A608068486070470A6842600F -:106B60004968816070470179490704D0407940073E -:106B700001D00120704700207047007970474079AC -:106B80007047C08870470CB514A2D2E90012CDE955 -:106B900000120179407901F0070269461DF80220D0 -:106BA000012A04D800F00700085C012801D9002060 -:106BB0000CBD01200CBD0171704700797047417117 -:106BC00070474079704730B50C4605461B2900D9FF -:106BD000FFDF6C7030BD000008850100000101027C -:106BE0000102020370B50C46A0F12001312901D346 -:106BF00001200CE041280CD020CC094E94E80E0076 -:106C000006EB8000241F50F8806C2846B0472060B7 -:106C100070BD2046EAF7C8FAF9E706207047000081 -:106C20002485010010B5524800F01CFA00B1FFDFC6 -:106C30004F48401C00F016FA002800D0FFDF10BDBE -:106C40002DE9F14F4B4ED6F800B00127484800F02F -:106C500011FADFF81C8128B95FF0000708F1010084 -:106C600000F01EFA444C00254FF00309012060603B -:106C7000C4F80051C4F80451009931602060DFF875 -:106C8000FCA018E0DAF80000C00614D50E2000F0D1 -:106C900064F8EFF3108010F0010072B600D001200C -:106CA000C4F80493D4F8001119B9D4F8041101B947 -:106CB00020BF00B962B6D4F8000118B9D4F80401B5 -:106CC0000028DFD0D4F804010028CFD137B1C6F8AE -:106CD00000B008F1010000F0CDF911E008F1010069 -:106CE00000F0C8F90028B9D1C4F80893C4F80451D9 -:106CF000C4F800510E2000F030F81D4800F0D0F923 -:106D00000020BDE8F88F2DE9F0438DB00D46064612 -:106D100000240DF110090DF1200817E004EB4407E1 -:106D2000102255F82710684601F0A9F805EB8707EF -:106D300010224846796801F0A2F86846FFF780FF04 -:106D400010224146B86801F09AF8641CB442E5DBB1 -:106D50000DB00020BDE8F08372E700F01F020121B2 -:106D600091404009800000F1E020C0F88012704797 -:106D70005601002004E5004000E0004010ED00E076 -:106D8000AE4900200870704770B5AD4D01232B60EF -:106D9000AC4B1C68002CFCD0002407E00E68066099 -:106DA0001E68002EFCD0001D091D641C9442F5D302 -:106DB0000020286018680028FCD070BD70B59F4E78 -:106DC0000446A14D3078022800D0FFDFAC4200D34A -:106DD000FFDF71699D48012903D847F23052944280 -:106DE00001DD03224271491C7161291BC160974971 -:106DF0007078F8F719FC002800D1FFDF70BD70B57E -:106E00008E4C0D466178884200D0FFDF8E4E082DF3 -:106E10004BD2DFE805F04A041E2D4A4A4A38207852 -:106E2000022800D0FFDF03202070A078012801D0C5 -:106E300020B108E0A06800F07FFD04E004F1080044 -:106E400007C8FFF7A1FF05202070BDE87040F8F7E4 -:106E5000AFB8F8F7A1F901466068F8F7ABFEB042A9 -:106E600002D2616902290BD30320F9F756F912E027 -:106E7000F8F792F901466068F8F79CFEB042F3D249 -:106E8000BDE870409AE7207802280AD0052806D08D -:106E9000FFDF04202070BDE8704000F0C5B802207C -:106EA00000E00320F9F739F9F3E7FFDF70BD70B5B3 -:106EB0000546F8F771F9614C60602078012800D030 -:106EC000FFDF6249012008700020087104208D60F6 -:106ED00048715D48C860022020706078F8F7A4FB14 -:106EE000002800D1FFDF70BD10B5544C207838B9B0 -:106EF0000220F9F728F918B90320F9F724F908B1A5 -:106F0000112010BD5248F8F7CEF86070202804D048 -:106F1000012020700020606110BD032010BD2DE90C -:106F2000F041144600EB84070E4605463F1F00F073 -:106F300016FD4FF080521169484306EB8401091F8A -:106F4000B14201D2012100E000211CB11269B4EB71 -:106F5000920F02D90920BDE8F0813E4A95420ED336 -:106F6000AF420CD3854205D2874203D245EA0600E0 -:106F7000800701D01020EEE7964200D309B10F2020 -:106F8000E9E7354835490068884205D02246314650 -:106F90002846FFF7F9FE10E0FFF7A6FF0028DAD138 -:106FA000264800218560C0E9036481704FF4A9710F -:106FB00004FB01F01830FFF77AFF0020CBE770B533 -:106FC0004FF08055044628692249B1FBF0F0844215 -:106FD00001D20F2070BD00F0C2FCA04201D81020E9 -:106FE00070BD1D481D490068884204D0286960436F -:106FF00000F0A2FC0CE0FFF777FF0028F0D1296930 -:107000000E4861438160012181701548FFF74FFFF1 -:10701000002070BD30B452EA030402D030BC062018 -:10702000704730BC00F0E4BE10B5044C6078F8F74F -:1070300094F800B9FFDF0020207010BD5801002037 -:1070400004E5014000E40140105C0C006C0D0020E0 -:10705000FF6D010000900100A4000020BEBAFECA2E -:107060007C5E010000210170084670470146002047 -:1070700008707047EFF3108101F0010172B60278D9 -:10708000012A01D0012200E000220123037001B98E -:1070900062B60AB1002070474FF400507047E9E72C -:1070A000EFF3108111F0010F72B64FF00002027081 -:1070B00000D162B600207047F2E700004C49096831 -:1070C0000160002070474A49086000207047012194 -:1070D0008A0720B1012804D042F20400704791676A -:1070E00000E0D1670020704742490120086042F269 -:1070F0000600704708B504233E4A1907103230B124 -:10710000C1F80433106840F0010010600BE0106813 -:1071100020F001001060C1F808330020C1F8080118 -:10712000354800680090002008BD011F0B2909D8D0 -:10713000304910310A6822F01E0242EA400008601D -:107140000020704742F205007047000100F18040C6 -:10715000C0F8041900207047000100F18040C0F819 -:10716000081900207047000100F18040D0F80009A4 -:10717000086000207047012801D9072070471F4A86 -:1071800052F8200002680A4302600020704701287C -:1071900001D907207047194A52F8200002688A4333 -:1071A000026000207047012801D907207047134A68 -:1071B00052F8200000680860002070470200104963 -:1071C0004FF0000003D0012A01D0072070470A6069 -:1071D00070474FF080410020C1F808014FF0E020D7 -:1071E000802180F800140121C0F8001170470000D0 -:1071F000000400400005004008010040E88501004F -:10720000780500406249634B0A6863499A420968FD -:1072100001D1C1F310010160002070475C495D4B52 -:107220000A685D49091D9A4201D1C0F31000086047 -:10723000002070475649574B0A68574908319A420F -:1072400001D1C0F3100008600020704730B5504BEA -:10725000504D1C6842F20803AC4202D0142802D2FE -:1072600003E0112801D3184630BDC3004B48184431 -:10727000C0F81015C0F81425002030BD4449454B16 -:107280000A6842F209019A4202D0062802D203E0BB -:10729000042801D308467047404A012142F83010C3 -:1072A000002070473A493B4B0A6842F209019A4272 -:1072B00002D0062802D203E0042801D30846704712 -:1072C000364A012102EBC00041600020704770B5D2 -:1072D0002F4A304E314C156842F2090304EB80020C -:1072E000B54204D0062804D2C2F8001807E00428EA -:1072F00001D3184670BDC1F31000C2F80008002089 -:1073000070BD70B5224A234E244C156842F2090321 -:1073100004EB8002B54204D0062804D2D2F800085B -:1073200007E0042801D3184670BDD2F80008C0F366 -:1073300010000860002070BD174910B508311848CA -:1073400008601120154A002102EBC003C3F8101594 -:10735000C3F81415401C1428F6D3002006E00428B6 -:1073600004D302EB8003C3F8001807E002EB8003AC -:10737000D3F80048C4F31004C3F80048401C0628A2 -:10738000EDD310BD0449064808310860704700007D -:10739000A4000020BEBAFECA00F5014000F0014082 -:1073A0000000FEFF784B1B6803B19847BFF34F8F77 -:1073B00076480168764A01F4E06111430160BFF349 -:1073C0004F8FFEE710B5EFF3108010F0010F72B68B -:1073D00001D0012400E0002400F0CDF850B1E9F71D -:1073E0007FFFF7F7A6FCF8F73BFEEBF7DCFC6949FB -:1073F0000020086004B962B6002010BD70B50C46CC -:107400000546EFF3108010F0010F72B601D001268F -:1074100000E0002600F0AFF818B106B962B6082007 -:1074200070BDE9F7D7FEE9F75FFF02460020430988 -:107430009B0003F1E02300F01F01D3F80031CB40A3 -:10744000D9071BD0202803D222FA00F1C90722D184 -:1074500041B2002906DA01F00F0101F1E02191F8B3 -:10746000141D03E001F1E02191F8001449090829F5 -:1074700011D281B101290ED004290CD0401C6428FE -:10748000D5D3EBF78FFC4349434808602046F9F712 -:1074900001FA60B904E006B962B641F2010070BDBC -:1074A000394804602DB12846F9F741FA18B1102483 -:1074B0002CE03A4D19E02878022802D94FF4805484 -:1074C00024E007240028687801D0F8B908E0E8B182 -:1074D00020281BD8A878212818D8012816D001E028 -:1074E000A87898B9E8780B2810D82D49802081F821 -:1074F000140DE9F7F9FE2946F8F798FDF7F7D8FBE0 -:1075000000F060FA2846E9F7BDFE044606B962B607 -:107510001CB1FFF757FF204670BD002070BD10B5AD -:10752000044600F028F800B101202070002010BDB2 -:107530001C4908600020704710B50C46102808D080 -:1075400011280BD012280CD013280ED0012008606F -:1075500010BDD4E90001FFF751FF0AE0FFF732FF49 -:1075600007E02068FFF7DBFF03E00E4920680860B2 -:107570000020206010BD074807490068884201D1FB -:107580000120704700207047700100200CED00E0E2 -:107590000400FA05A4000020BEBAFECAF08501006E -:1075A0000BE000E00400002000B5C04910F1080F16 -:1075B00019D00CDC10F1280F1DD010F1140F18D0C9 -:1075C00010F1100F13D010F10C0F08D10DE010F1D5 -:1075D000040F06D080B103280ED004280CD0FFDFA2 -:1075E00000BDFC2008E0F82006E0F42004E0F020D4 -:1075F00002E0EC2000E0D820086000BDAB4900B5F7 -:10760000091D012803D0022803D0FFDF00BD03209D -:1076100000E00420086000BDA54930B1012803D175 -:10762000086840F0010008607047086820F0010019 -:10763000F9E72DE9F0411E4604464FF4C86040F6D4 -:10764000980340F6E4474FF47A75012917D0022ACF -:1076500024D0012A25D0042A25D0964938460F186F -:107660003046F9F7CEFF07443046F9F7E4FF3844D7 -:1076700000F27120B0FBF5F0201ABDE8F081022A7B -:1076800008D0012A02D0042A06D0384649F608510B -:107690004718E5E72846F9E71846F7E786492846F8 -:1076A000DDE78649DBE786491846D8E770B514461A -:1076B000064601291CD0022B1DD0012B1ED0042B05 -:1076C0001ED0804DFA351046F9F7A8FF4FF47A71B5 -:1076D000012C17D0022C17D0042C18D0CA00AA1ADB -:1076E000104400F28920B0FBF1F0301A801E70BD0A -:1076F00049F6CA65E7E7704D643DE3E76F4DE1E7A2 -:107700006F4DDFE70A46EAE74FF4FA72E7E74FF416 -:10771000FA62E4E72DE9F041144605464FF4C860EB -:1077200040F6980240F6E4474FF47A7601291BD0E0 -:10773000022B28D0012B29D0042B29D05D493846B3 -:107740000F182046F9F76AFF0146012C23D0022CBE -:1077500023D0042C24D04FF4FA50381A084464384B -:10776000B0FBF6F0281A88E7022B08D0012B02D0D4 -:10777000042B06D0384649F608514718E1E7304651 -:10778000F9E71046F7E74C493046D9E74B49D7E7C8 -:107790004B491046D4E73046DFE74FF4FA70DCE798 -:1077A0004FF4FA60D9E770B516460546012918D09E -:1077B000022B19D0012B1AD0042B1AD0414CFA34C9 -:1077C0001046F9F71EFF04443046F9F734FF204411 -:1077D0004FF47A7100F2E140B0FBF1F0281A801EFC -:1077E00070BD49F6CA64EBE7334C643CE7E7334CC1 -:1077F000E5E7334CE3E72DE9F04106461D460C462C -:107800009046104600F048F806EB4601C1EBC61161 -:1078100000EBC1004FF47A76012C14D0022C14D066 -:10782000042C15D0F10047182046F9F7F7FE381A56 -:1078300000F60F60B0FBF6F44046F9F7D8FE20449E -:107840002844401D19E73146EDE74FF4FA71EAE7A5 -:107850004FF4FA61E7E770B5044615460E46084650 -:10786000F9F7CFFE04EB4401C1EBC411C0EBC10436 -:107870003046F9F7E0FE241A284600F00DF82044BF -:107880004FF47A7100F6B730B0FBF1F42846F9F7FF -:10789000AEFE2044401D70BD082803D0042801D04E -:1078A000F9F7AFBE4DF68830704700000C15004068 -:1078B0005016004030D3010068360200A2240200B6 -:1078C000D0FB0100C0D401002DE9FE430C468046E8 -:1078D000FFF7B9F8074698F80160204601A96A4603 -:1078E000F5F705F905000DD0012F02D00320BDE802 -:1078F000FE83204602AA0199F5F71BF80298B0F81A -:1079000003000AE0022F14D1042E12D3B8F80300AA -:10791000BDF80020011D914204D8001D80B2A919B4 -:10792000814202D14FF00000E1E702D24FF00100A6 -:10793000DDE74FF00200DAE70B4A022111600B4944 -:107940000B68002BFCD0084B1B1D18600868002832 -:10795000FCD00020106008680028FCD070474FF071 -:10796000805040697047000004E5014000E4014098 -:1079700002000B464FF00000014620D0012A04D03F -:10798000022A04D0032A0DD103E0012002E00220E4 -:1079900015E00320072B05D2DFE803F00406080AF0 -:1079A0000C0E100007207047012108E0022106E0BC -:1079B000032104E0042102E0052100E00621F7F79D -:1079C0008EBB0000F94805218170002101704170D3 -:1079D0007047F7490A78012A05D0CA681044C86080 -:1079E0004038F8F7B4B88A6810448860F8E700288F -:1079F00019D00378EF49F04A13B1012B0ED011E0F2 -:107A00000379012B00D06BB943790BB1012B09D15C -:107A10008368643B8B4205D2C0680EE00379012B7A -:107A200002D00BB10020704743790BB1012BF9D183 -:107A3000C368643B8B42F5D280689042F2D8012043 -:107A40007047DB4910B501220A700279A2B1002209 -:107A50000A71427992B104224A718268D34C52323F -:107A60008A60C0681434C8606060F7F795FBCF493E -:107A700020600220887010BD0322E9E70322EBE7B3 -:107A800070B5044609B1012000E00320C84D002173 -:107A90002970217901B100202871607968B1042032 -:107AA000C24E6871A168F068F7F77FF8A860E068D7 -:107AB0005230E8600320B07070BD0320F0E72DE97C -:107AC000F04105460226F7F76EFF006800B1FFDFC0 -:107AD000B64C01273DB12878B0B1012805D0022865 -:107AE00010D0032813D027710CE06868C82807D38A -:107AF000F8F793F820B16868FFF76BFF012603E001 -:107B0000002601E000F05CF93046BDE8F081207805 -:107B10000028F7D16868FFF76AFF0028E3D068689B -:107B2000017879B1A078042800D0FFDF01216868CE -:107B3000FFF7A6FF9E49E078F7F776FD0028E1D130 -:107B4000FFDFDFE7FFF77DFF6770DBE72DE9F04739 -:107B5000964C8846E178884200D0FFDFDFF84C92EF -:107B600000250127924E09F11409B8F1080F75D2CA -:107B7000DFE808F0040C28527A808D95A07803285D -:107B800002D0022800D0FFDFBDE8F087A0780328EC -:107B900002D0022800D0FFDF0420A07025712078D9 -:107BA000002878D1FFF715FF3078012806D0B0689B -:107BB000E06000F024F92061002060E0E078F7F751 -:107BC00030FCF5E7A078032802D0022800D0FFDFC0 -:107BD000207800286DD1A078032816D0F7F7DCFABA -:107BE00001464F46D9F80000F7F7E4FF00280EDB06 -:107BF000796881420BDB081AF0606D49E078F7F78D -:107C000013FD0028C0D1FFDFBEE7042028E00420D8 -:107C1000F8F783FAA570B7E7A078032802D0022806 -:107C200000D0FFDF207888BBA078032817D0F7F7B3 -:107C3000B3FA01464F46D9F80000F7F7BBFF00281A -:107C4000E5DB79688142E2DB081AF0605849E078A8 -:107C5000F7F7EAFC002897D1FFDF95E740E0052021 -:107C6000F8F75BFAA7708FE7A078042800D0FFDF51 -:107C7000022004E0A078042800D0FFDF0120A168E2 -:107C80008847FFF71CFF054630E004E011E0A078CC -:107C9000042800D0FFDFBDE8F04700F091B8A078DD -:107CA000042804D0617809B1022800D0FFDF2078D1 -:107CB00018B1BDE8F04700F08CB8207920B106205B -:107CC000F8F72BFA2571CDE7607838B13849E078BC -:107CD000F7F7AAFC00B9FFDF657055E70720BFE79B -:107CE000FFDF51E73DB1012D03D0FFDF022DF9D1B8 -:107CF0004AE70420C3E70320C1E770B5050004D0BC -:107D00002A4CA078052806D101E0102070BD08207B -:107D1000F8F719FA08B1112070BD2848F7F7C3F930 -:107D2000E070202803D00020A560A07070BD032063 -:107D300070BD1E4810B5017809B1112010BD8178C1 -:107D4000052906D0012906D029B1012101700020A2 -:107D500010BD0F2010BD00F03CF8F8E770B5134CD3 -:107D60000546A07808B1012809D155B12846FFF78A -:107D70003EFE40B1287840B1A078012809D00F20FC -:107D800070BD102070BD072070BD2846FFF759FE5A -:107D900003E000212846FFF773FE0549E078F7F776 -:107DA00043FC00B9FFDF002070BD0000740100201B -:107DB0007C0D00203D860100FF1FA1074D7B0100C7 -:107DC0000A4810B5006900F019F8BDE81040F7F74F -:107DD000EFB8064810B5C078F7F7BFF900B9FFDF74 -:107DE0000820F8F79AF9BDE81040EBE5740100208F -:107DF000094A1060101D0160002070477047002084 -:107E00007047054B02465B4210201344FC2B01D8FF -:107E10001160002070470000000600407047704766 -:107E200070477047704740EA010310B59B070FD1B8 -:107E3000042A0DD310C808C9121F9C42F8D020BADA -:107E400019BA884201D9012010BD4FF0FF3010BD92 -:107E50001AB1D30703D0521C07E0002010BD10F860 -:107E6000013B11F8014B1B1B07D110F8013B11F826 -:107E7000014B1B1B01D1921EF1D1184610BD032AE4 -:107E800040F2308010F0030C00F0158011F8013B37 -:107E9000BCF1020F624498BF11F801CB00F8013B1E -:107EA00038BF11F8013BA2F1040298BF00F801CBE2 -:107EB00038BF00F8013B11F0030300F02580083AB9 -:107EC000C0F0088051F8043B083A51F804CBA0E810 -:107ED0000810F5E7121D5CBF51F8043B40F8043B65 -:107EE000AFF30080D20724BF11F8013B11F801CB9A -:107EF00048BF11F8012B24BF00F8013B00F801CB6B -:107F000048BF00F8012B704710B5203AC0F00B8035 -:107F1000B1E81850203AA0E81850B1E81850A0E88D -:107F20001850BFF4F5AF5FEA027C24BFB1E81850E7 -:107F3000A0E8185044BF18C918C0BDE810405FEA57 -:107F4000827C24BF51F8043B40F8043B08BF7047D3 -:107F5000D20728BF31F8023B48BF11F8012B28BFD8 -:107F600020F8023B48BF00F8012B704702F0FF03E6 -:107F700043EA032242EA024200F002B84FF0000254 -:107F80000429C0F0128010F0030C00F01B80CCF12B -:107F9000040CBCF1020F18BF00F8012BA8BF20F899 -:107FA000022BA1EB0C0100F00DB85FEAC17C24BFED -:107FB00000F8012B00F8012B48BF00F8012B704797 -:107FC0004FF0000200B5134694469646203922BF72 -:107FD000A0E80C50A0E80C50B1F12001BFF4F7AFBD -:107FE000090728BFA0E80C5048BF0CC05DF804EB9F -:107FF000890028BF40F8042B08BF704748BF20F80D -:10800000022B11F0804F18BF00F8012B704770470A -:108010007047704770470000FEDF04207146084239 -:1080200019D10699124A914215DC0699023948780D -:10803000DF2810D10878FE2807D0FF280BD14FF099 -:1080400001004FF000020B4B184741F2010000996C -:10805000019A084B1847084B002B02D01B68DB68BD -:1080600018474FF0FF3071464FF00002014B1847A0 -:1080700000900100A5730100040000201848194970 -:108080007047FFF7FBFFE9F789F800BD4FF4805018 -:1080900015490968884203D1144A13605B68184780 -:1080A00000BD000020BFFDE74FF480500E49096875 -:1080B000884210D10E4B18684FF0FF318842F1D042 -:1080C00080F308884FF02021884204DD09480268C7 -:1080D00003210A4302600848804708488047FFDFC1 -:1080E000900D0020900D00200000002004000020D2 -:1080F00000900100140900406D0901008D8001000D -:1081000004207146084202D0EFF3098101E0EFF349 -:108110000881886902380078102813DB20280FDBDB -:108120002C280BDB0A4A12680A4B9A4203D16028BA -:1081300004DB094A1047022008607047074A1047CD -:10814000074A1047074A12682C321268104700008D -:10815000A4000020BEBAFECAED120000E56B0100CB -:1081600039750100040000200D4B0E4908470E4BE5 -:108170000C4908470D4B0B4908470D4B0949084767 -:108180000C4B084908470C4B064908470B4B05495F -:1081900008470B4B034908470A4B024908470000B0 -:1081A000D98C0000A12E00008D2C00009B890000BE -:1081B0002F890000132D0000F3120000752C000021 -:1081C000452E0000A9110000717F00005F810000B2 -:1081D000BF820000E38200001D8300005183000085 -:1081E0008D830000BD8300002B8400007B80000095 -:1081F0006F1200006F1200000920000053200000E1 -:1082000075200000FD20000019220000DB22000084 -:108210000D230000F9230000D92400002B250000C5 -:10822000AD250000CD2500000B2A00002F2A0000FC -:108230005F290000B3290000612A0000F52A000030 -:10824000333D00000D3E0000494100004742000060 -:10825000BD420000274300008B4300007312000062 -:108260007F440000EB440000EF250000F5250000EE -:1082700073120000731200007312000073120000EA -:10828000FF25000037260000731200007312000063 -:10829000731200006F1200006F1200006F120000D6 -:1082A0006F1200006F1200006F1200006F120000CA -:1082B0006F120000F75200007D5300009953000038 -:1082C000B553000043550000DF530000E9530000A0 -:1082D0002B5400004D540000295500006B55000040 -:1082E0006F1200006F120000DB6D0000FB6D0000DC -:1082F000FD6D0000416E00006F6E00005D6F0000BC -:10830000EB6F0000FF6F00004D7000003D7100003A -:10831000E37200000D740000EF5D000025740000A2 -:108320006F1200006F120000731200007312000041 -:10833000731200007312000073120000100110018C -:108340003A0200001A02000405060000B37A000099 -:10835000A17A0000FFFFFFFF0000FFFF37B300001E -:108360009D1B00009D4E0000395E000073780000E8 -:1083700000000000876B0000676B0000D56B0000F9 -:10838000795200003B5200005B520000EFB1000048 -:108390007DB2000041370000F56B000000000000D6 -:1083A000256C0000C7520000000000000000000023 -:1083B0000000000000000000C1370000513500003F -:1083C00051350000E51F00009DB20000BB600000B9 -:1083D000AF4D00000F4801007F3500007F350000E1 -:1083E00007200000C9B200003F610000214E0000DC -:1083F0002348010070017001400034005C0024003B -:10840000C00100000300656C746200000000000001 -:1084100000000000000000000000870000000000D5 -:1084200000000000000000000000BE83605ADB0B6B -:10843000376038A5F5AA9183886C00000100000020 -:1084400001D70000C9E50000000000010206030496 -:10845000050000000700000000000000060000000A -:108460000A0000003200000073000000B4000000A9 -:10847000113501000000000015240100E356010041 -:108480000000000000000000292701007F5B0100C0 -:10849000000000000000000075230100275B0100C0 -:1084A000000000000000000013240100F556010048 -:1084B0000000000000000000E3270100C15C010093 -:1084C0000000000000000000555555D6BE898E0002 -:1084D0000000C706C70CC71200006B030F06B308E5 -:1084E0000000B704A708970CF401FA009600640096 -:1084F0004B0032001E0014000A00050002000100BB -:1085000000410000000000000C0802170D010102EC -:1085100009090101060209181803010109090303E9 -:1085200005000000057201001D7201003572010096 -:108530004D7201007D720100A5720100CF72010031 -:1085400003730100BF6F01001F6F01001570010070 -:10855000037E01006570010075700100A1700100CB -:10856000730201007B0201008D020100CF70010047 -:10857000E9700100BD700100C7700100F5700100D5 -:108580002B7101001B6C01004B710100597101003E -:1085900067710100777101008F710100A7710100FF -:1085A000BD7101001B6C010000000000078B000082 -:1085B0005D8B0000738B000071790100416C01003C -:1085C000076D0100FB7C0100337D01005D7D010032 -:1085D000BD000100410401001B6C01001B6C010087 -:1085E0001B6C01001B6C01001C05004020050040B5 -:1085F000001002001486010008000020880100001D -:10860000441100004886010090010020000C000089 -:108610008011000001190545100E002036010001EF -:1086200000703720FB349B5F80041B8000100D21FD -:10863000F7070020B40700203A0800200581100940 -:088640000020024C10000000B4 -:00000001FF From 3879b7ca315ba9f705681858a9b1c1cfa1da6410 Mon Sep 17 00:00:00 2001 From: Harrison Mutai Date: Tue, 15 Dec 2020 11:46:16 +0000 Subject: [PATCH 2/4] Remove unsupported S132 SoftDevice build support (MBR,OTA,FULL) --- .../CMakeLists.txt | 9 - .../s132_nrf52_6.0.0_licence-agreement.txt | 35 - .../s132_nrf52_6.0.0_migration-document.pdf | Bin 133032 -> 0 bytes .../doc/s132_nrf52_6.0.0_release-notes.pdf | Bin 50680 -> 0 bytes .../headers/ble_err.h | 93 - .../headers/ble_gap.h | 2653 ----- .../headers/ble_gatt.h | 228 - .../headers/ble_gattc.h | 715 -- .../headers/ble_gatts.h | 845 -- .../headers/ble_hci.h | 135 - .../headers/ble_l2cap.h | 506 - .../headers/ble_ranges.h | 156 - .../headers/ble_types.h | 215 - .../headers/nrf52/nrf_mbr.h | 241 - .../headers/nrf_ble.h | 622 -- .../headers/nrf_error.h | 90 - .../headers/nrf_error_sdm.h | 70 - .../headers/nrf_error_soc.h | 85 - .../headers/nrf_nvic.h | 487 - .../headers/nrf_sd_def.h | 59 - .../headers/nrf_sdm.h | 358 - .../headers/nrf_soc.h | 964 -- .../headers/nrf_svc.h | 90 - .../s132_nrf52_6.0.0_licence-agreement.txt | 35 - .../hex/s132_nrf52_6.0.0_softdevice.hex | 9278 ----------------- .../TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json | 43 - .../TARGET_SOFTDEVICE_S132_MBR/CMakeLists.txt | 18 - .../headers/nrf_mbr.h | 241 - .../headers/nrf_svc.h | 90 - .../hex/mbr_nrf52_2.2.2_licence-agreement.txt | 35 - .../hex/mbr_nrf52_2.2.2_mbr.hex | 154 - .../libraries/fstorage/nrf_fstorage_nvmc.c | 217 - .../libraries/fstorage/nrf_fstorage_nvmc.h | 75 - .../TARGET_SOFTDEVICE_S132_MBR/mbed_lib.json | 8 - .../nrf_soc_nosd/nrf_error.h | 95 - .../nrf_soc_nosd/nrf_nvic.c | 123 - .../nrf_soc_nosd/nrf_nvic.h | 166 - .../nrf_soc_nosd/nrf_sdm.h | 56 - .../nrf_soc_nosd/nrf_soc.c | 48 - .../nrf_soc_nosd/nrf_soc.h | 80 - .../TARGET_SOFTDEVICE_S132_OTA/CMakeLists.txt | 18 - .../s132_nrf52_6.0.0_licence-agreement.txt | 35 - .../s132_nrf52_6.0.0_migration-document.pdf | Bin 133032 -> 0 bytes .../doc/s132_nrf52_6.0.0_release-notes.pdf | Bin 50680 -> 0 bytes .../headers/ble_err.h | 93 - .../headers/ble_gap.h | 2653 ----- .../headers/ble_gatt.h | 228 - .../headers/ble_gattc.h | 715 -- .../headers/ble_gatts.h | 845 -- .../headers/ble_hci.h | 135 - .../headers/ble_l2cap.h | 506 - .../headers/ble_ranges.h | 156 - .../headers/ble_types.h | 215 - .../headers/nrf52/nrf_mbr.h | 241 - .../headers/nrf_ble.h | 622 -- .../headers/nrf_error.h | 90 - .../headers/nrf_error_sdm.h | 70 - .../headers/nrf_error_soc.h | 85 - .../headers/nrf_nvic.h | 486 - .../headers/nrf_sd_def.h | 59 - .../headers/nrf_sdm.h | 358 - .../headers/nrf_soc.h | 964 -- .../headers/nrf_svc.h | 90 - .../s132_nrf52_6.0.0_licence-agreement.txt | 35 - .../hex/s132_nrf52_6.0.0_softdevice.hex | 9127 ---------------- .../TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json | 40 - 66 files changed, 37284 deletions(-) delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_migration-document.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_release-notes.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_err.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatt.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gattc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatts.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_hci.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_l2cap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_ranges.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_types.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf52/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_ble.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sd_def.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_softdevice.hex delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_mbr.hex delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/mbed_lib.json delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_migration-document.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_release-notes.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_err.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatt.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gattc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatts.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_hci.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_l2cap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_ranges.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_types.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf52/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_ble.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sd_def.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_softdevice.hex delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/CMakeLists.txt deleted file mode 100644 index 9125e60859..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./headers/nrf52 -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_migration-document.pdf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/doc/s132_nrf52_6.0.0_migration-document.pdf deleted file mode 100644 index e88cd69f04013d7025d510d0cc9133c58c9d965b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133032 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 JNhwQX|3Ak065{{> diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_err.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_err.h deleted file mode 100644 index 1b4820dc3d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_err.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ -#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ -#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_.h or ble_error_.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif - - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gap.h deleted file mode 100644 index 8b13816106..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gap.h +++ /dev/null @@ -1,2653 +0,0 @@ -/* - * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ - SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ - SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ - SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ - SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ - SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ - SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ - SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ - SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ - SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ - SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ - SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ - SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ - SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ - SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ - SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ - SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ - SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ - SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ -}; - -/**@brief GAP Event IDs. - * IDs that uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, - BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ - BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ - BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ - BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ - BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ - BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ - BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ - BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ - BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ - BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ - BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ - BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ - BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ - BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ - BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ - BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ - BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ -}; - -/**@brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ - BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ - BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ - BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ - BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ -}; - -/**@brief GAP Configuration IDs. - * - * IDs that uniquely identify a GAP configuration. - */ -enum BLE_GAP_CFGS -{ - BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ - BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ -}; - -/**@brief GAP TX Power roles. - */ -enum BLE_GAP_TX_POWER_ROLES -{ - BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ - BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ - BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ -}; - -/** @} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ -#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ -#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. - This type of advertising is called anonymous. */ -/**@} */ - - -/**@brief The default interval in seconds at which a private address is refreshed. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ - - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN (6) - -/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes - * @{ */ -#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, - and will not accept a peer using identity address as sender address when - the peer IRK is exchanged, non-zero and added to the identity list. */ -/**@} */ - -/** @brief Invalid power level. */ -#define BLE_GAP_POWER_LEVEL_INVALID 127 - -/** @brief Advertising set handle not set. */ -#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) - -/** @brief The default number of advertising sets. */ -#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) - -/** @brief The maximum number of advertising sets supported by this SoftDevice. */ -#define BLE_GAP_ADV_SET_COUNT_MAX (1) - -/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. - * @{ */ -#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. */ -/**@}. */ - -/** @brief Set ID not available in advertising report. */ -#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF - -/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons - * @{ */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ -/**@} */ - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ -#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ -#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. - @note Support for values above @ref BLE_GAP_ADV_INTERVAL_MAX - is experimental. Values above 0xFFFFFF, i.e 10,485.759375 s - are not supported. */ - /**@} */ - - -/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min - * @{ */ -#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min - * @{ */ -#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min - * @{ */ -#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ -#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ - /** @} */ - -/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size - * - * Scan buffers are used for storing advertising data received from an advertiser. - * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. - * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. - * @{ */ -#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an - extended advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an - extended advertising set. - @note Extended scanning is only - supported as an experimental - feature in this SoftDevice. - The scanner will only receive - advertising data up to 31 bytes. */ -/** @} */ - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * - * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. - * - * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. - * Note that some of the advertising types do not support advertising data. Non-scannable types do not support - * scan response data. - * - * @{ */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising - events. Advertising interval is less that 3.75 ms. - Use this type for fast reconnections. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising - events. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status - * @{ */ -#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. */ -/**@} */ - -/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies - * @{ */ -#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets - not addressed to this device. */ -#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed - packets not addressed to this device. */ -#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. - For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - - -/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types - * @{ */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@defgroup BLE_GAP_DEVNAME GAP device name defines. - * @{ */ -#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -/**@} */ - - -/**@brief Disable RSSI events for connections */ -#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF - -/**@defgroup BLE_GAP_PHYS GAP PHYs - * @{ */ -#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ -#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ -#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ -#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ -#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ - -/**@brief Supported PHYs in connections, for scanning, and for advertising. */ -#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS) /**< All PHYs except @ref BLE_GAP_PHY_CODED are supported. */ - -/**@} */ - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Random Number Length. */ -#define BLE_GAP_SEC_RAND_LEN 8 - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -#define BLE_GAP_LESC_P256_PK_LEN 64 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -#define BLE_GAP_LESC_DHKEY_LEN 32 - - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - - -/**@brief Maximum amount of addresses in the whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - - -/**@brief Maximum amount of identities in the device identities list. */ -#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) - - -/**@brief Default connection count for a configuration. */ -#define BLE_GAP_CONN_COUNT_DEFAULT (1) - - -/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. - * @{ */ -#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ -#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. - * @{ */ -#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ - -/**@} */ - -/**@brief Automatic data length parameter. */ -#define BLE_GAP_DATA_LENGTH_AUTO 0 - -/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. - * @{ */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ -/**@} */ - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@brief The total number of channels in Bluetooth Low Energy. */ -#define BLE_GAP_CHANNEL_COUNT (40) - -/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines - * @{ */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ - /**@} */ - -/** @} */ - - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Advertising event properties. */ -typedef struct -{ - uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ - uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. - @note Anonymous advertising is only available for - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ - uint8_t include_tx_power : 1; /**< Include TxPower set by @ref sd_ble_gap_tx_power_set in the extended header - of the advertising PDU. - @note TxPower can only be added to the extended header when @ref type is an extended advertising type. */ -} ble_gap_adv_properties_t; - - -/**@brief Advertising report type. */ -typedef struct -{ - uint16_t connectable : 1; /**< Connectable advertising event type. */ - uint16_t scannable : 1; /**< Scannable advertising event type. */ - uint16_t directed : 1; /**< Directed advertising event type. */ - uint16_t scan_response : 1; /**< Received a scan response. */ - uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ - uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ - uint16_t reserved : 9; /**< Reserved for future use. */ -} ble_gap_adv_report_type_t; - -/**@brief Advertising Auxiliary Pointer. */ -typedef struct -{ - uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ - uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ -} ble_gap_aux_pointer_t; - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. - Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ - uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. - addr is not used if addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - * - * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: - * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval - * that corresponds to the following Bluetooth Spec requirement: - * The Supervision_Timeout in milliseconds shall be larger than - * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP connection security modes. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Channel mask (40 bits). - * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, - * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents - * channel index 39. If a bit is set to 1, the channel is not used. - */ -typedef uint8_t ble_gap_ch_mask_t[5]; - - -/**@brief GAP advertising parameters. */ -typedef struct -{ - ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ - ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. - @note ble_gap_addr_t::addr_type cannot be - @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. - - When privacy is enabled and the local device uses - @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, - the device identity list is searched for a matching entry. If - the local IRK for that device identity is set, the local IRK - for that device will be used to generate the advertiser address - field in the advertising packet. - - If @ref ble_gap_adv_properties_t::type is directed, this must be - set to the targeted scanner or initiator. If the peer address is - in the device identity list, the peer IRK for that device will be - used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE - target addresses used in the advertising event PDUs. */ - uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE - advertising, this parameter is ignored. */ - uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, - an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - @sa BLE_GAP_ADV_TIMEOUT_VALUES. */ - uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling - advertising. Setting the value to 0 disables the limitation. When - the count of advertising events specified by this parameter - (if not 0) is reached, advertising will be automatically stopped - and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, - this parameter is ignored. - @note Setting max_adv_evts to a values not equal to 0 is only supported - as an experimental feature in this SoftDevice. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be used. - Masking away secondary advertising channels is not supported. */ - uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets - are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS - will be used. - The only supported value by this SoftDevice is @ref BLE_GAP_PHY_1MBPS. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets - are transmitted. - If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. - Valid values are - @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_2MBPS. @ref BLE_GAP_PHY_CODED - is not supported by this SoftDevice. - If @ref ble_gap_adv_properties_t::type is an extended advertising type - and connectable, this is the PHY that will be used to establish a - connection and send AUX_ADV_IND packets on. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other - advertising sets transmitted by this and other devices. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a - scan request is received and the scanner address is allowed - by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is a non-scannable - advertising type. */ -} ble_gap_adv_params_t; - - -/**@brief GAP advertising data buffers. - * - * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and - * shall never be modified while advertising. The data shall be kept alive until either: - * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding - * advertising handle. - * - Advertising is stopped. - * - Advertising data is changed. - * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ -typedef struct -{ - ble_data_t adv_data; /**< Advertising data. - @note - Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type - that is allowed to contain advertising data. */ - ble_data_t scan_rsp_data; /**< Scan response data. - @note - Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type - that is scannable. */ -} ble_gap_adv_data_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. - If set to 0, the scanner will not receive advertising packets - on secondary advertising channels, and will not be able - to receive long advertising PDUs. - @note Extended scanning is only supported as an experimental feature in this - SoftDevice. */ - uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have - @ref ble_gap_adv_report_type_t::status set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. - This parameter is ignored when used with @ref sd_ble_gap_connect - @note This may be used to abort receiving more packets from an extended - advertising event, and is only available for extended - scanning, see @ref sd_ble_gap_scan_start. - @note This feature is not supported by this SoftDevice. */ - uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. - This parameter is ignored when used with @ref sd_ble_gap_connect. */ - uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. - @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and - @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with - @ref sd_ble_gap_connect */ - uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, - scan_phys will default to @ref BLE_GAP_PHY_1MBPS. - - If @ref ble_gap_scan_params_t::extended is set to 0, the only - supported PHY is @ref BLE_GAP_PHY_1MBPS. - - When used with @ref sd_ble_gap_scan_start, - the bitfield indicates the PHYs the scanner will use for scanning - on primary advertising channels. The scanner will accept - @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. - - When used with @ref sd_ble_gap_connect, the - bitfield indicates the PHYs on where a connection may be initiated. - If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, - the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. */ - uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ - uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. */ - uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be - set to 0. - Masking away secondary channels is not supported. */ -} ble_gap_scan_params_t; - - -/**@brief Privacy. - * - * The privacy feature provides a way for the device to avoid being tracked over a period of time. - * The privacy feature, when enabled, hides the local device identity and replaces it with a private address - * that is automatically refreshed at a specified interval. - * - * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). - * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, - * and devices can establish connections without revealing their real identities. - * - * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) - * are supported. - * - * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all - * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. - * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. - */ -typedef struct -{ - uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ - uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ - uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ - ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. - When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. - By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -} ble_gap_privacy_params_t; - - -/**@brief PHY preferences for TX and RX - * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. - * @code - * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * @endcode - * - */ -typedef struct -{ - uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ -} ble_gap_phys_t; - -/** @brief Keys that can be exchanged during a bonding procedure. */ -typedef struct -{ - uint8_t enc : 1; /**< Long Term Key and Master Identification. */ - uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ - uint8_t sign : 1; /**< Connection Signature Resolving Key. */ - uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -} ble_gap_sec_kdist_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ - uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ - uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< The OOB data flag. - - In LE legacy pairing, this flag is set if a device has out of band authentication data. - The OOB method is used if both of the devices have out of band authentication data. - - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. - The OOB method is used if at least one device has the peer device's OOB data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ - ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ - ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 6; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP LE Secure Connections P-256 Public Key. */ -typedef struct -{ - uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -} ble_gap_lesc_p256_pk_t; - - -/**@brief GAP LE Secure Connections DHKey. */ -typedef struct -{ - uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -} ble_gap_lesc_dhkey_t; - - -/**@brief GAP LE Secure Connections OOB data. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address of the device. */ - uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ - uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -} ble_gap_lesc_oob_data_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ - uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ -} ble_gap_evt_connected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -typedef struct -{ - uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ -} ble_gap_evt_phy_update_request_t; - -/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ -typedef struct -{ - uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ - uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ -} ble_gap_evt_phy_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ - uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply - with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or - @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -} ble_gap_evt_passkey_display_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -typedef struct -{ - uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -} ble_gap_evt_key_pressed_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -typedef struct -{ - ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory - inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ - uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -} ble_gap_evt_lesc_dhkey_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ - uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Encryption Key. */ -typedef struct -{ - ble_gap_enc_info_t enc_info; /**< Encryption Information. */ - ble_gap_master_id_t master_id; /**< Master Identification. */ -} ble_gap_enc_key_t; - - -/**@brief Identity Key. */ -typedef struct -{ - ble_gap_irk_t id_info; /**< Identity Resolving Key. */ - ble_gap_addr_t id_addr_info; /**< Identity Address. */ -} ble_gap_id_key_t; - - -/**@brief Security Keys. */ -typedef struct -{ - ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ - ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ - ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ - ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined - in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -} ble_gap_sec_keys_t; - - -/**@brief Security key set for both local and peer keys. */ -typedef struct -{ - ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ - ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -} ble_gap_sec_keyset_t; - - -/**@brief Data Length Update Procedure parameters. */ -typedef struct -{ - uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ - uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ -} ble_gap_data_length_params_t; - - -/**@brief Data Length Update Procedure local limitation. */ -typedef struct -{ - uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ - uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ - uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ -} ble_gap_data_length_limitation_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - uint8_t bonded : 1; /**< Procedure resulted in a bond. */ - uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ - ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ - union - { - ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released - scan buffer is contained in this field. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ -} ble_gap_evt_rssi_changed_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ -typedef struct -{ - uint8_t reason; /**< Reason for why the advertising set terminated. See - @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ - uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, - this field indicates the number of completed advertising events. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. */ -} ble_gap_evt_adv_set_terminated_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. - * - * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * not all fields in the advertising report may be available. - * - * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. - */ -typedef struct -{ - ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the - peer's identity address. */ - ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if - @ref ble_gap_adv_report_type_t::directed is set to 1. If the - SoftDevice was able to resolve the address, - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr - contains the local identity address. If the target address of the - advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, - and the SoftDevice was unable to resolve it, the application may try - to resolve this address to find out if the advertising event was - directed to us. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received on. - See @ref BLE_GAP_PHYS. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received on. - See @ref BLE_GAP_PHYS. This field is to 0 if no packets where received on - a secondary advertising channel. */ - int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. - This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the - last received packet did not contain the Tx Power field. - @note TX Power is only included in extended advertising packets. */ - int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. */ - uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ - uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present - if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID - is not present if @ref ble_gap_evt_adv_report_t::set_id is set to - @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - ble_data_t data; /**< Received advertising or scan response data. If - @ref ble_gap_adv_report_type_t::status is not set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided - in @ref sd_ble_gap_scan_start is now released. */ - ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising - event. @note This field is only set if @ref ble_gap_adv_report_type_t::status - is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ -} ble_gap_evt_adv_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection requested. */ - uint8_t lesc : 1; /**< LE Secure Connections requested. */ - uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -} ble_gap_evt_sec_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -typedef struct -{ - uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ -} ble_gap_evt_scan_req_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ -} ble_gap_evt_data_length_update_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ -typedef struct -{ - ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ -} ble_gap_evt_data_length_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ -typedef struct -{ - int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy - channels, in dBm, indexed by Channel Index. - If no measurement is available for the given channel, channel_energy is set to - @ref BLE_GAP_POWER_LEVEL_INVALID. */ -} ble_gap_evt_qos_channel_survey_report_t; - -/**@brief GAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ - ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ - ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ - ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ - ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ - ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ - ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ - ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ - ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ - ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_t; - - -/** - * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. - * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. - */ -typedef struct -{ - uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. - The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ - uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. - The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. - The event length and the connection interval are the primary parameters - for setting the throughput of a connection. - See the SoftDevice Specification for details on throughput. */ -} ble_gap_conn_cfg_t; - - -/** - * @brief Configuration of maximum concurrent connections in the different connected roles, set with - * @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too - * large. The maximum supported sum of concurrent connections is - * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. - * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. - * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum - * supported advertising handles is - * @ref BLE_GAP_ADV_SET_COUNT_MAX. - */ -typedef struct -{ - uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ - uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ - uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ - uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ - uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the - application using @ref sd_ble_gap_qos_channel_survey_start. */ -} ble_gap_cfg_role_count_t; - - -/** - * @brief Device name and its properties, set with @ref sd_ble_cfg_set. - * - * @note If the device name is not configured, the default device name will be - * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be - * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name - * will have no write access. - * - * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, - * the attribute table size must be increased to have room for the longer device name (see - * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). - * - * @note If vloc is @ref BLE_GATTS_VLOC_STACK : - * - p_value must point to non-volatile memory (flash) or be NULL. - * - If p_value is NULL, the device name will initially be empty. - * - * @note If vloc is @ref BLE_GATTS_VLOC_USER : - * - p_value cannot be NULL. - * - If the device name is writable, p_value must point to volatile memory (RAM). - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Invalid device name location (vloc). - * - Invalid device name security mode. - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). - * - The device name length is too long for the given Attribute Table. - * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. - */ -typedef struct -{ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ - uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ - uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -} ble_gap_cfg_device_name_t; - - -/**@brief Configuration structure for GAP configurations. */ -typedef union -{ - ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ - ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ -} ble_gap_cfg_t; - - -/**@brief Channel Map option. - * - * @details Used with @ref sd_ble_opt_get to get the current channel map - * or @ref sd_ble_opt_set to set a new channel map. When setting the - * channel map, it applies to all current and future connections. When getting the - * current channel map, it applies to a single connection and the connection handle - * must be supplied. - * - * @note Setting the channel map may take some time, depending on connection parameters. - * The time taken may be different for each connection and the get operation will - * return the previous channel map until the new one has taken effect. - * - * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. - * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. - * - * @retval ::NRF_SUCCESS Get or set successful. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Less then two bits in @ref ch_map are set. - * - Bits for primary advertising channels (37-39) are set. - * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. - * - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ - uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -} ble_gap_opt_ch_map_t; - - -/**@brief Local connection latency option. - * - * @details Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * @details Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is disabled by default, and needs to be enabled for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - -/**@brief Disable slave latency - * - * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection - * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the - * peripheral will ignore the slave_latency set by the central. - * - * @note Shall only be called on peripheral links. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ -} ble_gap_opt_slave_latency_disable_t; - -/**@brief Passkey Option. - * - * @details Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication - * instead of generating a random one. - * - * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Compatibility mode 1 option. - * - * @details This can be used with @ref sd_ble_opt_set to enable and disable - * compatibility mode 1. Compatibility mode 1 is disabled by default. - * - * @note Compatibility mode 1 enables interoperability with devices that do not support a value of - * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a - * limited set of legacy peripheral devices from another vendor. Enabling this compatibility - * mode will only have an effect if the local device will act as a central device and - * initiate a connection to a peripheral device. In that case it may lead to the connection - * creation taking up to one connection interval longer to complete for all connections. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable compatibility mode 1.*/ -} ble_gap_opt_compat_mode_1_t; - - -/**@brief Authenticated payload timeout option. - * - * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other - * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. - * - * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated - * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted - * link. - * - * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance - * to reset the timer. In addition the stack will try to prioritize running of LE ping over other - * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects - * on other activities, it is recommended to use high timeout values. - * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ -} ble_gap_opt_auth_payload_timeout_t; - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ - ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ - ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ - ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ - ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set the local Bluetooth identity address. - * - * The local Bluetooth identity address is the address that identifies this device to other peers. - * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @note The identity address cannot be changed while advertising, scanning or creating a connection. - * - * @note This address will be distributed to the peer during bonding. - * If the address changes, the address stored in the peer device will not be valid and the ability to - * reconnect using the old address will be lost. - * - * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being - * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged - * for the lifetime of each IC. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in] p_addr Pointer to address structure. - * - * @retval ::NRF_SUCCESS Address successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, - * scanning or creating a connection. - */ -SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); - - -/**@brief Get local Bluetooth identity address. - * - * @note This will always return the identity address irrespective of the privacy settings, - * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @param[out] p_addr Pointer to address structure to be filled in. - * - * @retval ::NRF_SUCCESS Address successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); - - -/**@brief Set the active whitelist in the SoftDevice. - * - * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. - * The whitelist cannot be set if a BLE role is using the whitelist. - * - * @note If an address is resolved using the information in the device identity list, then the whitelist - * filter policy applies to the peer identity address and not the resolvable address sent on air. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @endmscs - * - * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. - * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. - * - * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. - * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when - * pp_wl_addrs is not NULL. - */ -SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); - - -/**@brief Set device identity list. - * - * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. - * The device identity list cannot be set if a BLE role is using the list. - * - * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. - * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. - * To fill in the list with the currently set device IRK for all peers, set to NULL. - * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. - * This code may be returned if the local IRK list also has an invalid entry. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can - * only return when pp_id_keys is not NULL. - */ -SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); - - -/**@brief Set privacy settings. - * - * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. - * - * @param[in] p_privacy_params Privacy settings. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. - * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning - * or creating a connection. - */ -SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); - - -/**@brief Get privacy settings. - * - * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. - * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. - * - * @param[in,out] p_privacy_params Privacy settings. - * - * @retval ::NRF_SUCCESS Privacy settings read. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - */ -SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); - - -/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. - * - * @note The format of the advertising data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertising data and scan response data. - * - * @note In order to update advertising data while advertising, new advertising buffers must be provided. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure - * a new advertising set. On success, a new handle is then returned through the pointer. - * Provide a pointer to an existing advertising handle to configure an existing advertising set. - * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. - * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, - * this parameter must be NULL. See @ref ble_gap_adv_params_t. - * - * @retval ::NRF_SUCCESS Advertising set successfully configured. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, - * see @ref sd_ble_gap_whitelist_set. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * - It is invalid to provide non-NULL advertising set parameters while advertising. - * - It is invalid to provide the same data buffers while advertising. To update - * advertising data, provide new advertising buffers. - * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to - * configure a new advertising handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification - * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an - * existing advertising handle instead. - * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - */ -SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @note Only one advertiser may be active at any time. - * - * @events - * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} - * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} - * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable - * advertising, this is ignored. - * - * @retval ::NRF_SUCCESS The BLE stack has started advertising. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. adv_handle is not configured or already advertising. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * @retval ::NRF_ERROR_RESOURCES Either: - * - adv_handle is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * - Not enough BLE role slots available. - Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. - * - p_adv_params is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle The advertising handle that should stop advertising. - * - * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. - * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); - - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CPU_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected - * - * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a @ref BLE_GAP_EVT_DISCONNECTED event. - * - * @events - * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CONN_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). - * - * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for - * possible roles. - * @param[in] handle The handle parameter is interpreted depending on role: - * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. - * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, - * will use the specified transmit power, and include it in the advertising packet headers if - * @ref ble_gap_adv_properties_t::include_tx_power set. - * - For all other roles handle is ignored. - * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). - * - * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +3dBm and +4dBm. - * @note The initiator will have the same transmit power as the scanner. - * @note When a connection is created it will inherit the transmit power from the initiator or - * advertiser leading to the connection. - * - * @retval ::NRF_SUCCESS Successfully changed the transmit power. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); - - -/**@brief Set GAP device name. - * - * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), - * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. - * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @retval ::NRF_SUCCESS GAP device name retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); - - -/**@brief Initiate the GAP Authentication procedure. - * - * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), - * otherwise in the peripheral role, an SMP Security Request will be sent. - * - * @events - * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} - * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} - * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} - * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} - * @event{@ref BLE_GAP_EVT_KEY_PRESSED} - * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} - * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} - * @event{@ref BLE_GAP_EVT_AUTH_STATUS} - * @event{@ref BLE_GAP_EVT_TIMEOUT} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. - * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. - * In the central role, this pointer may be NULL to reject a Security Request. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have - * already been provided during a previous call to @ref sd_ble_gap_authenticate. - * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure - * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application - * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. - * Note that the SoftDevice expects the application to provide memory for storing the - * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key - * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the - * @ref BLE_GAP_EVT_AUTH_STATUS event. - * - * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); - - -/**@brief Reply with an authentication key. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) - * or NULL when confirming LE Secure Connections Numeric Comparison. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. - * - * @retval ::NRF_SUCCESS Authentication key successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); - - -/**@brief Reply with an LE Secure connections DHKey. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dhkey LE Secure Connections DHKey. - * - * @retval ::NRF_SUCCESS DHKey successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); - - -/**@brief Notify the peer of a local keypress. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. - * - * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. - */ -SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); - - -/**@brief Generate a set of OOB data to send to a peer out of band. - * - * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, - * the one used during connection setup). The application may manually overwrite it with an updated value. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. - * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. - * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. - * - * @retval ::NRF_SUCCESS OOB data successfully generated. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); - -/**@brief Provide the OOB data sent/received out of band. - * - * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. - * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. - * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref sd_ble_gap_authenticate in the central role - * or @ref sd_ble_gap_sec_params_reply in the peripheral role. - * - * @retval ::NRF_SUCCESS OOB data accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); - - -/**@brief Initiate GAP Encryption procedure. - * - * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. - * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. - */ -SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); - - -/**@brief Reply with GAP security information. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @retval ::NRF_SUCCESS Successfully accepted security information. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Current connection security successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @events - * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is - * dependent on the settings of the threshold_dbm - * and skip_count input parameters.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. - * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. - * - * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); - - -/**@brief Stop reporting the received signal strength. - * - * @note An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * - * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); - - -/**@brief Get the received signal strength for the last connection event. - * - * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND - * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. - * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. - * - * @retval ::NRF_SUCCESS Successfully read the RSSI. - * @retval ::NRF_ERROR_NOT_FOUND No sample is available. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - */ -SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); - - -/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). - * - * @note A call to this function will require the application to keep the memory pointed by - * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped - * or when this function is called with another buffer. - * - * @note The scanner will automatically stop in the following cases: - * - @ref sd_ble_gap_scan_stop is called. - * - @ref sd_ble_gap_connect is called. - * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. - * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application - * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop - * to stop scanning. - * - * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will - * receive more reports from this advertising event. The following reports will include the old and new received data. - * The application can stop the scanner from receiving more packets from this advertising event by calling this function. - * This might be useful when receiving data from extended advertising events where @ref ble_gap_evt_adv_report_t::aux_pointer - * is large. - * - * @events - * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} - * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue - * scanning, this parameter must be NULL. - * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. - * The memory pointed to should be kept alive until the scanning is stopped. - * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. - * If the scanner receives advertising data larger than can be stored in the buffer, - * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status - * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. - * - * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: - * - Scanning is already ongoing and p_scan_params was not NULL - * - Scanning is not running and p_scan_params was NULL. - * - The scanner has timed out when this function is called to continue scanning. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. - * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); - - -/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). - * - * @note The buffer provided in @ref sd_ble_gap_scan_start is released. - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Not in the scanning state. - */ -SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); - - -/**@brief Create a connection (GAP Link Establishment). - * - * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. - * The scanning procedure will be stopped even if the function returns an error. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use - * whitelist, then p_peer_addr is ignored. - * @param[in] p_scan_params Pointer to scan parameters structure. - * @param[in] p_conn_params Pointer to desired connection parameters. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. - * - * @retval ::NRF_SUCCESS Successfully initiated connection procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * - Invalid parameter(s) in p_scan_params or p_conn_params. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an - * existing locally initiated connect procedure, which must complete before initiating again. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. - * @retval ::NRF_ERROR_RESOURCES Either: - * - Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. - * - The event_length parameter associated with conn_cfg_tag is too small to be able to - * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. - * Use @ref sd_ble_cfg_set to increase the event length. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); - - -/**@brief Cancel a connection establishment. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - */ -SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); - - -/**@brief Initiate or respond to a PHY Update Procedure - * - * @details This function is used to initiate or respond to a PHY Update Procedure. It will always - * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. - * If this function is used to initiate a PHY Update procedure and the only option - * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the - * currently active PHYs in the respective directions, the SoftDevice will generate a - * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the - * procedure in the Link Layer. - * - * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, - * then the stack will select PHYs based on the peer's PHY preferences and the local link - * configuration. The PHY Update procedure will for this case result in a PHY combination - * that respects the time constraints configured with @ref sd_ble_cfg_set and the current - * link layer data length. - * - * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. - * - * If the peer does not support the PHY Update Procedure, then the resulting - * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to - * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. - * - * If the PHY procedure was rejected by the peer due to a procedure collision, the status - * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or - * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. - * If the peer responds to the PHY Update procedure with invalid parameters, the status - * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. - * If the PHY procedure was rejected by the peer for a different reason, the status will - * contain the reason as specified by the peer. - * - * @events - * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} - * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} - * @endmscs - * - * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. - * @param[in] p_gap_phys Pointer to PHY structure. - * - * @retval ::NRF_SUCCESS Successfully requested a PHY Update. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. - * - */ -SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); - - -/**@brief Initiate or respond to a Data Length Update Procedure. - * - * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of - * p_dl_params, the SoftDevice will choose the highest value supported in current - * configuration and connection parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update - * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let - * the SoftDevice automatically decide the value for that member. - * Set to NULL to use automatic values for all members. - * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not - * have enough resources or does not support the requested Data Length - * Update parameters. Ignored if NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect - * p_dl_limitation to see which parameter is not supported. - * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. - * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. - * Inspect p_dl_limitation to see where the limitation is. - * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the - * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. - */ -SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); - -/**@brief Start the Quality of Service (QoS) channel survey module. - * - * @details The channel survey module provides measurements of the energy levels on - * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT - * events will periodically report the measured energy levels for each channel. - * - * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, - * Radio Timeslot API events and Flash API events. - * - * @note The channel survey module will attempt to do measurements so that the average interval - * between measurements will be interval_us. However due to the channel survey module - * having the lowest priority of all roles and modules, this may not be possible. In that - * case fewer than expected channel survey reports may be given. - * - * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available - * must be set. This is done using @ref sd_ble_cfg_set. - * - * @param[in] interval_us Requested average interval for the measurements and reports. See - * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set - * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel - * survey role will be scheduled at every available opportunity. - * - * @retval ::NRF_SUCCESS The module is successfully started. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the - * allowed range. - * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. - * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. - * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using - * @ref sd_ble_cfg_set. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(uint32_t interval_us)); - -/**@brief Stop the Quality of Service (QoS) channel survey module. - * - * @retval ::NRF_SUCCESS The module is successfully stopped. - * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(void)); - - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatt.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatt.h deleted file mode 100644 index 98a7a150bf..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatt.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default ATT MTU, in bytes. */ -#define BLE_GATT_ATT_MTU_DEFAULT 23 - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/**@brief First Attribute Handle. */ -#define BLE_GATT_HANDLE_START 0x0001 - -/**@brief Last Attribute Handle. */ -#define BLE_GATT_HANDLE_END 0xFFFF - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. - */ -typedef struct -{ - uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. - The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - @mscs - @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - @endmscs - */ -} ble_gatt_conn_cfg_t; - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ - uint8_t read :1; /**< Reading the value permitted. */ - uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ - uint8_t write :1; /**< Writing the value with Write Request permitted. */ - uint8_t notify :1; /**< Notification of the value permitted. */ - uint8_t indicate :1; /**< Indications of the value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -} ble_gatt_char_ext_props_t; - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATT_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gattc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gattc.h deleted file mode 100644 index 7fb3920244..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gattc.h +++ /dev/null @@ -1,715 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ - SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -}; - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ - BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ - BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ - BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ - BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -/** @} */ - -/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats - * @{ */ -#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -/** @} */ - -/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults - * @{ */ -#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. - The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ -} ble_gattc_conn_cfg_t; - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t const *p_value; /**< Pointer to the value data. */ -} ble_gattc_write_params_t; - -/**@brief Attribute Information for 16-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -} ble_gattc_attr_info16_t; - -/**@brief Attribute Information for 128-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -} ble_gattc_attr_info128_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Attribute count. */ - uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ - union { - ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - } info; /**< Attribute information union. */ -} ble_gattc_evt_attr_info_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -typedef struct -{ - uint16_t server_rx_mtu; /**< Server RX MTU size. */ -} ble_gattc_evt_exchange_mtu_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of write without response transmissions completed. */ -} ble_gattc_evt_write_cmd_tx_complete_t; - -/**@brief GATTC event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ - ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. - * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @events - * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @events - * @event{@ref BLE_GATTC_EVT_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note Only one write with response procedure can be ongoing per connection at a time. - * If the application tries to write with response while another write with response procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. - * - * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. - * - * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} - * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @retval ::NRF_SUCCESS Successfully started the Write procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. - * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. - * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @mscs - * @mmsc{@ref BLE_GATTC_HVI_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/**@brief Discovers information about a range of attributes on a GATT server. - * - * @events - * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} - * @endevents - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range The range of handles to request information about. - * - * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); - -/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value, and - * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @events - * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] client_rx_mtu Client RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - used for this connection. - * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent request to the server. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); - -/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * - * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * @note If the buffer contains different event, behavior is undefined. - * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with - * the next Handle-Value pair in each iteration. If the function returns other than - * @ref NRF_SUCCESS, it will not be changed. - * - To start iteration, initialize the structure to zero. - * - To continue, pass the value from previous iteration. - * - * \code - * ble_gattc_handle_value_t iter; - * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); - * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) - * { - * app_handle = iter.handle; - * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); - * } - * \endcode - * - * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. - * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. - */ -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); - -/** @} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -{ - uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; - uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; - uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; - - if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) - { - p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; - p_iter->p_value = p_next + sizeof(uint16_t); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_NOT_FOUND; - } -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif -#endif /* BLE_GATTC_H__ */ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatts.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatts.h deleted file mode 100644 index e437b6e076..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_gatts.h +++ /dev/null @@ -1,845 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" -#include "ble_gap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ - SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ - SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ - SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -}; - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ - BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ - BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ - BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ -}; - -/**@brief GATTS Configuration IDs. - * - * IDs that uniquely identify a GATTS configuration. - */ -enum BLE_GATTS_CFGS -{ - BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ - BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - -/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags - * @{ */ -#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -/** @} */ - -/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values - * @{ - */ -#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size - * @{ - */ -#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ -#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ -/** @} */ - -/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults - * @{ - */ -#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. - The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ -} ble_gatts_conn_cfg_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -} ble_gatts_attr_t; - -/**@brief GATT Attribute Value. */ -typedef struct -{ - uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ - uint16_t offset; /**< Attribute value offset. */ - uint8_t *p_value; /**< Pointer to where value is stored or will be stored. - If value is stored in user memory, only the attribute length is updated when p_value == NULL. - Set to NULL when reading to obtain the complete length of the attribute value */ -} ble_gatts_value_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ - ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ - uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. - Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, - as the data to be written needs to be stored and later provided by the application. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ - } params; /**< Reply Parameters. */ -} ble_gatts_rw_authorize_reply_params_t; - -/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ -typedef struct -{ - uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ -} ble_gatts_cfg_service_changed_t; - -/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The specified Attribute Table size is too small. - * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. - * - The specified Attribute Table size is not a multiple of 4. - */ -typedef struct -{ - uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ -} ble_gatts_cfg_attr_tab_size_t; - -/**@brief Config structure for GATTS configurations. */ -typedef union -{ - ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ - ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ -} ble_gatts_cfg_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the received data. */ - uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gatts_evt_write_t; - -/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; /**< Request Parameters. */ -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; /**< Hint (currently unused). */ -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -typedef struct -{ - uint16_t client_rx_mtu; /**< Client RX MTU size. */ -} ble_gatts_evt_exchange_mtu_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of notification transmissions completed. */ -} ble_gatts_evt_hvn_tx_complete_t; - -/**@brief GATTS event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the Attribute Table. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the Attribute Table. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a service declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); - - -/**@brief Add an include declaration to the Attribute Table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). - * - * @note The included service must already be present in the Attribute Table prior to this call. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added an include declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, - * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a characteristic. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); - - -/**@brief Add a descriptor to the Attribute Table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a descriptor. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); - -/**@brief Set the value of a given attribute. - * - * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully set the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Get the value of a given attribute. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. - * The application may use this information to allocate a suitable buffer size. - * - * @note When retrieving system attribute values with this function, the connection handle - * may refer to an already disconnected connection. Refer to the documentation of - * @ref sd_ble_gatts_sys_attr_get for further information. - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, - * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. - * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). - * - * @note Only one indication procedure can be ongoing per connection at a time. - * If the application tries to indicate an attribute value while another indication procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. - * - * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. - * - * @note The application can keep track of the available queue element count for notifications by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} - * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_HVN_MSC} - * @mmsc{@ref BLE_GATTS_HVI_MSC} - * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data - * contains a non-NULL pointer the attribute value will be updated with the contents - * pointed by it before sending the notification or indication. If the attribute value - * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to - * contain the number of actual bytes written, else it will be set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. - * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute - * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @events - * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_SC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref - * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @retval ::NRF_ERROR_BUSY Procedure already in progress. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond - * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update - * is set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, - * handle supplied does not match requested handle, - * or invalid data to be written provided by the application. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply information about persistent system attributes to the stack, - * previously obtained using @ref sd_ble_gatts_sys_attr_get. - * This call is only allowed for active connections, and is usually - * made immediately after a connection is established with an known bonded device, - * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the system attributes - * obtained using @ref sd_ble_gatts_sys_attr_get. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved system attribute data for this device. - * - * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully set the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored persistently by the application - * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, - * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. - * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for - * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. - * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes - * may be written to at any time by the peer during a connection's lifetime. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. - * - * @mscs - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described - * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); - - -/**@brief Retrieve the first valid user attribute handle. - * - * @param[out] p_handle Pointer to an integer where the handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully retrieved the handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); - -/**@brief Retrieve the attribute UUID and/or metadata. - * - * @param[in] handle Attribute handle - * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. - * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. - * - * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. - * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. - */ -SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); - -/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. - * - * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and - * - The Server RX MTU value. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @mscs - * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] server_rx_mtu Server RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - * used for this connection. - * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent response to the client. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATTS_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_hci.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_hci.h deleted file mode 100644 index f0dde9a03a..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_hci.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -*/ -#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ -/* -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ - -/** @} */ - - -#ifdef __cplusplus -} -#endif -#endif // BLE_HCI_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_l2cap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_l2cap.h deleted file mode 100644 index eaeb4b7d28..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_l2cap.h +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology - * @{ - * @details - * - * L2CAP SDU - * - A data unit that the application can send/receive to/from a peer. - * - * L2CAP PDU - * - A data unit that is exchanged between local and remote L2CAP entities. - * It consists of L2CAP protocol control information and payload fields. - * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. - * - * L2CAP MTU - * - The maximum length of an L2CAP SDU. - * - * L2CAP MPS - * - The maximum length of an L2CAP PDU payload field. - * - * Credits - * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. - * @} */ - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ - SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ - SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ -}; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. - \n See @ref ble_l2cap_evt_ch_setup_request_t. */ - BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. - \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ - BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. - \n See @ref ble_l2cap_evt_ch_setup_t. */ - BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. - \n No additional event structure applies. */ - BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. - \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ - BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. - \n See @ref ble_l2cap_evt_ch_credit_t. */ - BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. - \n See @ref ble_l2cap_evt_ch_rx_t. */ - BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. - \n See @ref ble_l2cap_evt_ch_tx_t. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@brief Maximum number of L2CAP channels per connection. */ -#define BLE_L2CAP_CH_COUNT_MAX (64) - -/**@brief Minimum L2CAP MTU, in bytes. */ -#define BLE_L2CAP_MTU_MIN (23) - -/**@brief Minimum L2CAP MPS, in bytes. */ -#define BLE_L2CAP_MPS_MIN (23) - -/**@brief Invalid CID. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ -#define BLE_L2CAP_CREDITS_DEFAULT (1) - -/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources - * @{ */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ - /** @} */ - - /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes - * @{ */ -#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ -#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ -#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ -#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ -#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ -#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ -#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ -#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ -/** @} */ - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @note These parameters are set per connection, so all L2CAP channels created on this connection - * will have the same parameters. - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. - * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. - */ -typedef struct -{ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to receive on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to transmit on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per - L2CAP channel. The minimum value is one. */ - uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission - per L2CAP channel. The minimum value is one. */ - uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection - with this configuration. The default value is zero, the maximum - value is @ref BLE_L2CAP_CH_COUNT_MAX. - @note if this parameter is set to zero, all other parameters in - @ref ble_l2cap_conn_cfg_t are ignored. */ -} ble_l2cap_conn_cfg_t; - -/**@brief L2CAP channel RX parameters. */ -typedef struct -{ - uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to - receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be - able to receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. - - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ - ble_data_t sdu_buf; /**< SDU data buffer for reception. - - If @ref ble_data_t::p_data is non-NULL, initial credits are - issued to the peer. - - If @ref ble_data_t::p_data is NULL, no initial credits are - issued to the peer. */ -} ble_l2cap_ch_rx_params_t; - -/**@brief L2CAP channel setup parameters. */ -typedef struct -{ - ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting - setup of an L2CAP channel, ignored otherwise. */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. - Used when replying to a setup request of an L2CAP - channel, ignored otherwise. */ -} ble_l2cap_ch_setup_params_t; - -/**@brief L2CAP channel TX parameters. */ -typedef struct -{ - uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to - transmit on this L2CAP channel. */ - uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is - able to receive on this L2CAP channel. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able - to transmit on this L2CAP channel. This is effective tx_mps, - selected by the SoftDevice as - MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ - uint16_t credits; /**< Initial credits given by the peer. */ -} ble_l2cap_ch_tx_params_t; - -/**@brief L2CAP Channel Setup Request event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ -} ble_l2cap_evt_ch_setup_request_t; - -/**@brief L2CAP Channel Setup Refused event. */ -typedef struct -{ - uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ -} ble_l2cap_evt_ch_setup_refused_t; - -/**@brief L2CAP Channel Setup Completed event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ -} ble_l2cap_evt_ch_setup_t; - -/**@brief L2CAP Channel SDU Data Duffer Released event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice - returns SDU data buffers supplied by the application, which have - not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or - @ref BLE_L2CAP_EVT_CH_TX event. */ -} ble_l2cap_evt_ch_sdu_buf_released_t; - -/**@brief L2CAP Channel Credit received event. */ -typedef struct -{ - uint16_t credits; /**< Additional credits given by the peer. */ -} ble_l2cap_evt_ch_credit_t; - -/**@brief L2CAP Channel received SDU event. */ -typedef struct -{ - uint16_t sdu_len; /**< Total SDU length, in bytes. */ - ble_data_t sdu_buf; /**< SDU data buffer. - @note If there is not enough space in the buffer - (sdu_buf.len < sdu_len) then the rest of the SDU will be - silently discarded by the SoftDevice. */ -} ble_l2cap_evt_ch_rx_t; - -/**@brief L2CAP Channel transmitted SDU event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< SDU data buffer. */ -} ble_l2cap_evt_ch_tx_t; - -/**@brief L2CAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occured. */ - uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or - @ref BLE_L2CAP_CID_INVALID if not present. */ - union - { - ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ - ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ - ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ - ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ - ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ - ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ - ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_l2cap_evt_t; - -/** @} */ - -/**@addtogroup BLE_L2CAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set up an L2CAP channel. - * - * @details This function is used to: - * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. - * - Reply to a setup request of an L2CAP channel (if called in response to a - * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection - * Response packet to a peer. - * - * @note A call to this function will require the application to keep the SDU data buffer alive - * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or - * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} - * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: - * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP - * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST - * event when replying to a setup request of an L2CAP channel. - * - As output: local_cid for this channel. - * @param[in] p_params L2CAP channel parameters. - * - * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, - * see @ref ble_l2cap_conn_cfg_t::ch_count. - */ -SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); - -/**@brief Release an L2CAP channel. - * - * @details This sends a Disconnection Request packet to a peer. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * - * @retval ::NRF_SUCCESS Successfully queued request for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); - -/**@brief Receive an SDU on an L2CAP channel. - * - * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers - * for reception per L2CAP channel. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Buffer accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a - * @ref BLE_L2CAP_EVT_CH_RX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Transmit an SDU on an L2CAP channel. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for - * transmission per L2CAP channel. - * - * @note The application can keep track of the available credits for transmission by following - * the procedure below: - * - Store initial credits given by the peer in a variable. - * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Decrement the variable, which stores the currently available credits, by - * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns - * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Increment the variable, which stores the currently available credits, by additional - * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than - * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in - * @ref BLE_L2CAP_EVT_CH_SETUP event. - * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a - * @ref BLE_L2CAP_EVT_CH_TX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Advanced SDU reception flow control. - * - * @details Adjust the way the SoftDevice issues credits to the peer. - * This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set - * the value that will be used for newly created channels. - * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every - * time it starts using a new reception buffer. - * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will - * use if this function is not called. - * - If set to zero, the SoftDevice will stop issuing credits for new reception - * buffers the application provides or has provided. SDU reception that is - * currently ongoing will be allowed to complete. - * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be - * written by the SoftDevice with the number of credits that is or will be - * available to the peer. If the value written by the SoftDevice is 0 when - * credits parameter was set to 0, the peer will not be able to send more - * data until more credits are provided by calling this function again with - * credits > 0. This parameter is ignored when local_cid is set to - * @ref BLE_L2CAP_CID_INVALID. - * - * @note Application should take care when setting number of credits higher than default value. In - * this case the application must make sure that the SoftDevice always has reception buffers - * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have - * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic - * on the connection handle may be stalled until the SoftDevice again has an available - * reception buffer. This applies even if the application has used this call to set the - * credits back to default, or zero. - * - * @retval ::NRF_SUCCESS Flow control parameters accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_L2CAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_ranges.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_ranges.h deleted file mode 100644 index 0935bca071..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_ranges.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC, event and option number subranges - @{ - - @brief Definition of SVC, event and option number subranges for each API module. - - @note - SVCs, event and option numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC, event and option values are defined in each module's ble_.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ - -#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ - -#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ -#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ - -#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ -#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ - -#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ -#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ - - -#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ - -#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ - -#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ - -#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ - -#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ - -#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ -#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ - - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ - -#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ -#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ - -#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ - -#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ - -#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ - - -#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ - -#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ -#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ - -#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ -#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ - -#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ -#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ - -#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ -#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ - -#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ -#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ - -#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ -#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ - -#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ -#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ - - - - - -#ifdef __cplusplus -} -#endif -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_types.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_types.h deleted file mode 100644 index 88c93180c8..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/ble_types.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the BLE SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_TYPES_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/**@brief Data structure. */ -typedef struct -{ - uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ - uint16_t len; /**< Length of the data buffer, in bytes. */ -} ble_data_t; - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf52/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf52/nrf_mbr.h deleted file mode 100644 index cc5971c7a3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf52/nrf_mbr.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_ble.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_ble.h deleted file mode 100644 index 9ebb41f538..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_ble.h +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the BLE SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_err.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ - SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ -}; - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ - BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -}; - -/**@brief BLE Connection Configuration IDs. - * - * IDs that uniquely identify a connection configuration. - */ -enum BLE_CONN_CFGS -{ - BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ - BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ - BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ - BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ - BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ -}; - -/**@brief BLE Common Configuration IDs. - * - * IDs that uniquely identify a common configuration. - */ -enum BLE_COMMON_CFGS -{ - BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ -}; - -/**@brief Common Option IDs. - * IDs that uniquely identify a common option. - */ -enum BLE_COMMON_OPTS -{ - BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ - BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVT_PTR_ALIGNMENT 4 - -/** @brief Leaves the maximum of the two arguments. -*/ -#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) - -/** @brief Maximum possible length for BLE Events. - * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. - * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. -*/ -#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ - offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -) - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts - * @{ - */ -#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ -#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ -/** @} */ - -/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. - * @{ - */ -#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ - -/** @} */ - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union - { - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; /**< Event parameter union. */ -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE__EVT series. */ - uint16_t evt_len; /**< Length in octets including this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - } evt; /**< Event union. */ -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/** - * @brief Configuration parameters for the PA and LNA. - */ -typedef struct -{ - uint8_t enable :1; /**< Enable toggling for this amplifier */ - uint8_t active_high :1; /**< Set the pin to be active high */ - uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -} ble_pa_lna_cfg_t; - -/** - * @brief PA & LNA GPIO toggle configuration - * - * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or - * a low noise amplifier. - * - * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided - * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences - * and must be avoided by the application. - */ -typedef struct -{ - ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ - ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ - - uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ - uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ - uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -} ble_common_opt_pa_lna_t; - -/** - * @brief Configuration of extended BLE connection events. - * - * When enabled the SoftDevice will dynamically extend the connection event when possible. - * - * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. - * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, - * and if there are no conflicts with other BLE roles requesting radio time. - * - * @note @ref sd_ble_opt_get is not supported for this option. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -} ble_common_opt_conn_evt_ext_t; - -/**@brief Option structure for common options. */ -typedef union -{ - ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ - ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -} ble_common_opt_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ - ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -} ble_opt_t; - -/**@brief BLE connection configuration type, wrapping the module specific configurations, set with - * @ref sd_ble_cfg_set. - * - * @note Connection configurations don't have to be set. - * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, - * the default connection configuration will be automatically added for the remaining connections. - * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in - * place of @ref ble_conn_cfg_t::conn_cfg_tag. - * - * @sa sd_ble_gap_adv_start() - * @sa sd_ble_gap_connect() - * - * @mscs - * @mmsc{@ref BLE_CONN_CFG} - * @endmscs - - */ -typedef struct -{ - uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the - @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls - to select this configuration when creating a connection. - Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ - union { - ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ - ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ - ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ - ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ - ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ - } params; /**< Connection configuration union. */ -} ble_conn_cfg_t; - -/** - * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. - */ -typedef struct -{ - uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. - Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is - @ref BLE_UUID_VS_COUNT_MAX. */ -} ble_common_cfg_vs_uuid_t; - -/**@brief Common BLE Configuration type, wrapping the common configurations. */ -typedef union -{ - ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ -} ble_common_cfg_t; - -/**@brief BLE Configuration type, wrapping the module specific configurations. */ -typedef union -{ - ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ - ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ - ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ - ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ -} ble_cfg_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the BLE stack - * - * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the - * application RAM region (APP_RAM_BASE). On return, this will - * contain the minimum start address of the application RAM region - * required by the SoftDevice for this configuration. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note The value of *p_app_ram_base when the app has done no custom configuration of the - * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can - * be found in the release notes. - * - * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located - * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between - * APP_RAM_BASE and the start of the call stack. - * - * @details This call initializes the BLE stack, no BLE related function other than @ref - * sd_ble_cfg_set can be called before this one. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not - * large enough to fit this configuration's memory requirement. Check *p_app_ram_base - * and set the start address of the application RAM region accordingly. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); - -/**@brief Add configurations for the BLE stack - * - * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref - * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. - * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. - * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). - * See @ref sd_ble_enable for details about APP_RAM_BASE. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note If a configuration is set more than once, the last one set is the one that takes effect on - * @ref sd_ble_enable. - * - * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default - * configuration. - * - * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref - * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref - * sd_ble_enable). - * - * @note Error codes for the configurations are described in the configuration structs. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The configuration has been added successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not - * large enough to fit this configuration's memory requirement. - */ -SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); - -/**@brief Get an event from the pending events queue. - * - * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. - * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. - * The buffer should be interpreted as a @ref ble_evt_t struct. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that - * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. - * The application is free to choose whether to call this function from thread mode (main context) or directly from the - * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher - * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) - * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so - * could potentially leave events in the internal queue without the application being aware of this fact. - * - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to - * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, - * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. - * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length - * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: - * - * \code - * uint16_t len; - * errcode = sd_ble_evt_get(NULL, &len); - * \endcode - * - * @mscs - * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} - * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); - - -/**@brief Add a Vendor Specific base UUID. - * - * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later - * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t - * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code - * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses - * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to - * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field - * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to - * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in - * p_uuid_type along with an @ref NRF_SUCCESS error code. - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @retval ::NRF_SUCCESS Successfully encoded into the buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[out] p_version Pointer to a ble_version_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Version information stored successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @endmscs - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ -#ifdef __cplusplus -} -#endif -#endif /* BLE_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error.h deleted file mode 100644 index 6badee98e5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_sdm.h deleted file mode 100644 index 530959b9d6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_sdm.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_soc.h deleted file mode 100644 index 1e784b8db3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_error_soc.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_nvic.h deleted file mode 100644 index c71a633c6b..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_nvic.h +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_nvic_api SoftDevice NVIC API - * @{ - * - * @note In order to use this module, the following code has to be added to a .c file: - * \code - * nrf_nvic_state_t nrf_nvic_state = {0}; - * \endcode - * - * @note Definitions and declarations starting with __ (double underscore) in this header file are - * not intended for direct use by the application. - * - * @brief APIs for the accessing NVIC when using a SoftDevice. - * - */ - -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_NVIC_DEFINES Defines - * @{ */ - -/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions - * @{ */ - -#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ - -#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ -#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ - (1U << POWER_CLOCK_IRQn) \ - | (1U << RADIO_IRQn) \ - | (1U << RTC0_IRQn) \ - | (1U << TIMER0_IRQn) \ - | (1U << RNG_IRQn) \ - | (1U << ECB_IRQn) \ - | (1U << CCM_AAR_IRQn) \ - | (1U << TEMP_IRQn) \ - | (1U << __NRF_NVIC_NVMC_IRQn) \ - | (1U << (uint32_t)SWI5_IRQn) \ - )) - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ -#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) - -/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ -#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) - -/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ -#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) - -/**@} */ - -/**@} */ - -/**@addtogroup NRF_NVIC_VARIABLES Variables - * @{ */ - -/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -typedef struct -{ - uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ - uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -} nrf_nvic_state_t; - -/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an - * application source file. */ -extern nrf_nvic_state_t nrf_nvic_state; - -/**@} */ - -/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions - * @{ */ - -/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. - * - * @retval The value of PRIMASK prior to disabling the interrupts. - */ -__STATIC_INLINE int __sd_nvic_irq_disable(void); - -/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. - */ -__STATIC_INLINE void __sd_nvic_irq_enable(void); - -/**@brief Checks if IRQn is available to application - * @param[in] IRQn IRQ to check - * - * @retval 1 (true) if the IRQ to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); - -/**@brief Checks if priority is available to application - * @param[in] priority priority to check - * - * @retval 1 (true) if the priority to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); - -/**@} */ - -/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions - * @{ */ - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * @pre Priority is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); - -/**@brief Enter critical region. - * - * @post Application interrupts will be disabled. - * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each - * execution context - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - -/**@} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE int __sd_nvic_irq_disable(void) -{ - int pm = __get_PRIMASK(); - __disable_irq(); - return pm; -} - -__STATIC_INLINE void __sd_nvic_irq_enable(void) -{ - __enable_irq(); -} - -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -{ - if (IRQn < 32) - { - return ((1UL<= (1 << __NVIC_PRIO_BITS)) - { - return 0; - } - if( priority == 0 - || priority == 1 - || priority == 4 - || priority == 5 - ) - { - return 0; - } - return 1; -} - - -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); - } - else - { - NVIC_EnableIRQ(IRQn); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); - } - else - { - NVIC_DisableIRQ(IRQn); - } - - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (!__sd_nvic_is_app_accessible_priority(priority)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - NVIC_SetPriority(IRQn, (uint32_t)priority); - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - int was_masked = __sd_nvic_irq_disable(); - if (!nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__cr_flag = 1; - nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); - NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; - nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); - NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; - *p_is_nested_critical_region = 0; - } - else - { - *p_is_nested_critical_region = 1; - } - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) - { - int was_masked = __sd_nvic_irq_disable(); - NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; - NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; - nrf_nvic_state.__cr_flag = 0; - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - } - - return NRF_SUCCESS; -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif - -#endif // NRF_NVIC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sd_def.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sd_def.h deleted file mode 100644 index c9ab241872..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sd_def.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SD_DEF_H__ -#define NRF_SD_DEF_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SD_DEF_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sdm.h deleted file mode 100644 index 8c48d93678..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_sdm.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_sdm.h" -#include "nrf_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ -#ifdef NRFSOC_DOXYGEN -/// Declared in nrf_mbr.h -#define MBR_SIZE 0 -#warning test -#endif - -/** @brief The major version for the SoftDevice binary distributed with this header file. */ -#define SD_MAJOR_VERSION (6) - -/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -#define SD_MINOR_VERSION (0) - -/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -#define SD_BUGFIX_VERSION (0) - -/** @brief The full version number for the SoftDevice binary this header file was distributed - * with, as a decimal number in the form Mmmmbbb, where: - * - M is major version (one or more digits) - * - mmm is minor version (three digits) - * - bbb is bugfix version (three digits). */ -#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) - -/** @brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE 0x10 - -/** @brief SoftDevice unique string size in bytes. */ -#define SD_UNIQUE_STR_SIZE 20 - -/** @brief Invalid info field. Returned when an info field does not exist. */ -#define SDM_INFO_FIELD_INVALID (0) - -/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -the start of the SoftDevice (without MBR)*/ -#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) - -/** @brief Defines the absolute SoftDevice Information Structure location (address) when the - * SoftDevice is installed just above the MBR (the usual case). */ -#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) - -/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the - * SoftDevice base address. The size value is of type uint8_t. */ -#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) - -/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. - * The size value is of type uint32_t. */ -#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) - -/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value - * is of type uint16_t. */ -#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) - -/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID - * is of type uint32_t. */ -#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) - -/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in - * the same format as @ref SD_VERSION, stored as an uint32_t. */ -#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) - -/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. - * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. - */ -#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) - -/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value - * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is - * installed just above the MBR (the usual case). */ -#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base - * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above - * the MBR (the usual case). */ -#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual - * case). */ -#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the - * usual case). */ -#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges - * @{ */ -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -/**@} */ - -/**@defgroup NRF_FAULT_IDS Fault ID types - * @{ */ -#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ -#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, - in case of SoftDevice RAM access violation. In case of SoftDevice peripheral - register violation the info parameter will contain the sub-region number of - PREGION[0], on whose address range the disallowed write access caused the - memory access fault. */ -/**@} */ - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy - * @{ */ - -#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ -#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ -#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ -#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ -#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ -#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ -#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ -#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ -#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ -#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ -#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ - -/** @} */ - -/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources - * @{ */ - -#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ - -/** @} */ - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing LFCLK oscillator source. */ -typedef struct -{ - uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ - uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second - units (nRF52: 1-32). - @note To avoid excessive clock drift, 0.5 degrees Celsius is the - maximum temperature change allowed in one calibration timer - interval. The interval should be selected to ensure this. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ - uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration - intervals) the RC oscillator shall be calibrated if the temperature - hasn't changed. - 0: Always calibrate even if the temperature hasn't changed. - 1: Only calibrate if the temperature has changed (legacy - nRF51 only). - 2-33: Check the temperature and only calibrate if it has changed, - however calibration will take place every rc_temp_ctiv - intervals in any case. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. - - @note For nRF52, the application must ensure calibration at least once - every 8 seconds to ensure +/-500 ppm clock stability. The - recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is - rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at - least once every 8 seconds and for temperature changes of 0.5 - degrees Celsius every 4 seconds. See the Product Specification - for the nRF52 device being used for more information.*/ - uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing - windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ -} nrf_clock_lf_cfg_t; - -/**@brief Fault Handler type. - * - * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. - * - * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. - * @param[in] pc The program counter of the instruction that triggered the fault. - * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. - * - * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when - * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. - */ -typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available. - * - A portion of RAM will be unavailable (see relevant SDS documentation). - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). - * - Interrupts will not arrive from protected peripherals or interrupts. - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). - * - Chosen low frequency clock source will be running. - * - * @param p_clock_lf_cfg Low frequency clock source and accuracy. - If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 - In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. - * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); - - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_soc.h deleted file mode 100644 index 2c4d958750..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_soc.h +++ /dev/null @@ -1,964 +0,0 @@ -/* - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * - */ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ - -/**@brief Guaranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -/**@brief The maximum processing time to handle a timeslot extension. */ -#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) - -/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ -#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. - The default interrupt priority for this handler is set to 4 */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. - The default interrupt priority for this handler is set to 4 */ -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/**@} */ - -/**@addtogroup NRF_SOC_ENUMS Enumerations - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, - SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, - SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, - SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, - SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, - SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, - SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, - SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, - SD_FLASH_WRITE = SOC_SVC_BASE + 9, - SD_FLASH_PROTECT = SOC_SVC_BASE + 10, - SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, - SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, - SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, - SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, - SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, - SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, - SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, - SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, - SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, - SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, - SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, - SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, - SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, - SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, - SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, - SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, - SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, - SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, - SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, - SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, - SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, - SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, - SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, - SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, - SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, - SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, - SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, - SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, - SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, - SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, - SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Power modes. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Power failure thresholds */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ -}; - - - -/**@brief DC/DC converter modes. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ - NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -}; - -/**@brief Radio notification distances. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Radio notification types. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/**@brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current - timeslot. Maximum execution time for this action: - @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. - This action must be started at least - @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before - the end of the timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the - external crystal for the whole duration of the timeslot. This should be the - preferred option for events that use the radio or require high timing accuracy. - @note The SoftDevice will automatically turn on and off the external crystal, - at the beginning and end of the timeslot, respectively. The crystal may also - intentionally be left running after the timeslot, in cases where it is needed - by the SoftDevice shortly after the end of the timeslot. */ - NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. - The RC oscillator may be the clock source in part or for the whole duration of the timeslot. - The RC oscillator's accuracy must therefore be taken into consideration. - @note If the application will use the radio peripheral in timeslots with this configuration, - it must make sure that the crystal is running and stable before starting the radio. */ -}; - -/**@brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ -}; - -/**@brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/**@} */ - - -/**@addtogroup NRF_SOC_STRUCTURES Structures - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/**@brief Parameters for a normal radio timeslot request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/**@brief Radio timeslot request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ - } params; /**< Parameter union. */ -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; /**< Parameter union. */ -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio timeslot signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB parameter typedefs */ -typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ - -/**@brief AES ECB data structure */ -typedef struct -{ - soc_ecb_key_t key; /**< Encryption key. */ - soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ - soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -} nrf_ecb_hal_data_t; - -/**@brief AES ECB block. Used to provide multiple blocks in a single call - to @ref sd_ecb_blocks_encrypt.*/ -typedef struct -{ - soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ - soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ - soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ -} nrf_ecb_hal_data_block_t; - -/**@} */ - -/**@addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - - -/**@brief Sets the power failure comparator threshold value. - * - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); - - -/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. - * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. - * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); - -/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. - * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); - -/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); - -/**@brief Enable or disable the DC/DC regulator. - * - * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); - - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the interrupt - * is disabled. - * - * When the application waits for an application event by calling this function, an interrupt that - * is enabled will be taken immediately on pending since this function will wait in thread mode, - * then the execution will return in the application's main thread. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M - * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets - * pended, this function will return to the application's main thread. - * - * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ - * in order to sleep using this function. This is only necessary for disabled interrupts, as - * the interrupt handler will clear the pending flag automatically for enabled interrupts. - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - To ensure that the radio notification signal behaves in a consistent way, the radio - * notifications must be configured when there is no protocol stack or other SoftDevice - * activity in progress. It is recommended that the radio notification signal is - * configured directly after the SoftDevice has been enabled. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all - * running activities and retry. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Encrypts multiple data blocks provided as an array of data block structures. - * - * @details: Performs 128-bit AES encryption on multiple data blocks - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in] block_count Count of blocks in the p_data_blocks array. - * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of - * @ref nrf_ecb_hal_data_block_t structures. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50 us from call to return. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write -* -* Commands to write a buffer to flash -* -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the - * write has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is -* protected. -* -* -* @param[in] p_dst Pointer to start of flash location to be written. -* @param[in] p_src Pointer to buffer with data to be written. -* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one -* flash page. See the device's Product Specification for details. -* -* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); - - -/**@brief Flash Erase page -* -* Commands to erase a flash page -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -* erase has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is -* protected. -* -* -* @param[in] page_number Page number of the page to erase -* -* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection configuration registers. - This sets the CONFIGx registers of the BPROT peripheral. - * - * @note Not all parameters are valid for all products. Some bits in each parameter may not be - * valid for your product. Please refer your Product Specification for more details. - * - * @note To read the values read them directly. They are only write-protected. - * - * @note It is possible to use @ref sd_protected_register_write instead of this function. - * - * @param[in] block_cfg0 Value to be written to the configuration register. - * @param[in] block_cfg1 Value to be written to the configuration register. - * @param[in] block_cfg2 Value to be written to the configuration register. - * @param[in] block_cfg3 Value to be written to the configuration register. - * - * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. - * @retval ::NRF_SUCCESS Values successfully written to configuration registers. - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); - -/**@brief Opens a session for radio timeslot requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio timeslot requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - -/**@brief Requests a radio timeslot. - * - * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST - * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. - * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by - * p_request->distance_us and is given relative to the start of the previous timeslot. - * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this - * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); - -/**@brief Write register protected by the SoftDevice - * - * This function writes to a register that is write-protected by the SoftDevice. Please refer to your - * SoftDevice Specification for more details about which registers that are protected by SoftDevice. - * This function can write to the following protected peripheral: - * - BPROT - * - * @note Protected registers may be read directly. - * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in - * the register has not changed. See the Product Specification for more details about register - * properties. - * - * @param[in] p_register Pointer to register to be written. - * @param[in] value Value to be written to the register. - * - * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. - * @retval ::NRF_SUCCESS Value successfully written to register. - * - */ -SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); - -/**@} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SOC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_softdevice.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_softdevice.hex deleted file mode 100644 index f30de08500..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/hex/s132_nrf52_6.0.0_softdevice.hex +++ /dev/null @@ -1,9278 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:10100000E0120020D1430200192F000043430200E8 -:10101000192F0000192F0000192F000000000000F8 -:101020000000000000000000000000002944020051 -:10103000192F000000000000192F0000192F0000D8 -:101040009144020097440200192F0000192F00005C -:10105000192F0000192F0000192F0000192F000070 -:101060009D440200192F0000192F0000A344020024 -:10107000192F0000A9440200AF440200B544020049 -:10108000192F0000192F0000192F0000192F000040 -:10109000192F0000192F0000192F0000192F000030 -:1010A000192F0000BB440200192F0000192F000067 -:1010B000192F0000192F0000192F0000192F000010 -:1010C000C1440200192F0000192F0000192F000041 -:1010D000192F0000192F0000192F0000192F0000F0 -:1010E000192F0000192F0000192F0000192F0000E0 -:1010F000192F0000192F0000192F0000192F0000D0 -:10110000192F0000192F000000F002F823F04DF90C -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D123F042F9AFF2090EBAE80F0013F033 -:10113000010F18BFFB1A43F0010318479038020053 -:10114000B03802000A444FF0000C10F8013B13F0D5 -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A10470000752E0000D7 -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F00FFE01B4E9 -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000023F0B2B8D3 -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704008F05CB8BF -:1012600008F065B870B50C461149097829B1A0F1AC -:1012700060015E2908D3012013E0602804D06928AA -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C0000202845020010B504460021012032 -:1012C00000F03DF800210B2000F039F8042119202E -:1012D00000F035F804210D2000F031F804210E2033 -:1012E00000F02DF804210F2000F029F80421C84354 -:1012F00000F025F80621162000F021F8062115201F -:1013000000F01DF82046FFF79BFF002010BDA8212C -:1013100001807047FFF7A4BF11487047104870471D -:10132000104A10B514680F4B0F4A08331A60FFF7C4 -:1013300099FF0C48001D046010BD704770474907B5 -:10134000090E002806DA00F00F0000F1E02080F816 -:10135000141D704700F1E02080F800147047000071 -:1013600003F900421005024001000001FE4800217F -:1013700001604160018170472DE9F743044692B056 -:101380009146406813F00EF840B1606813F013F80E -:1013900020B9607800F00300022801D0012000E0AD -:1013A0000020F14E3072484612F0B8FF18B11020FC -:1013B00015B0BDE8F0834946012001F018FF002870 -:1013C000F6D101258DF842504FF4C050ADF84000E1 -:1013D000002210A9284606F047FC0028E8D18DF825 -:1013E00042504FF428504FF00008ADF840004746F7 -:1013F0001C216846CDF81C8022F07BFF9DF81C0064 -:1014000008AA20F00F00401C20F0F00010308DF8EA -:101410001C0020788DF81D0061789DF81E0061F396 -:10142000420040F001008DF81E009DF800000AA95E -:1014300040F002008DF800002089ADF83000ADF8D2 -:101440003270608907AFADF834000B97606810AC5C -:101450000E900A94684606F0FCF90028A8D1BDF861 -:10146000200030808DF8425042F60120ADF8400057 -:101470009DF81E0008AA20F00600801C20F0010044 -:101480008DF81E000220ADF83000ADF8340013A82E -:101490000E900AA9684606F0DCF9002888D1BDF84C -:1014A00020007080311D484600F033F9002887D1B4 -:1014B0008DF8425042F6A620ADF840001C21684647 -:1014C000CDF81C8022F015FF9DF81C00ADF83450BB -:1014D00020F00F00401C20F0F00010308DF81C00B0 -:1014E0009DF81D0008AA20F0FF008DF81D009DF852 -:1014F0001E000AA920F0060040F00100801C8DF8B3 -:101500001E009DF800008DF8445040F002008DF858 -:101510000000CDE90A4711A80E90ADF8305068469A -:1015200006F097F9002899D1BDF82000F08000203E -:101530003EE73EB504460820ADF80000204612F014 -:10154000EDFE08B110203EBD2146012001F04FFE06 -:101550000028F8D12088ADF804006088ADF80600B6 -:10156000A088ADF80800E088ADF80A007E4801AB1D -:101570006A468088002106F071FDBDF80010082938 -:10158000E1D003203EBD1FB5044600200290082094 -:10159000ADF80800CDF80CD0204612F0BFFE10B117 -:1015A000102004B010BD704802AA81884FF6FF7069 -:1015B00006F096FF0028F4D1BDF80810082901D0E4 -:1015C0000320EEE7BDF800102180BDF80210618015 -:1015D000BDF80410A180BDF80610E180E1E701B577 -:1015E00082B00220ADF800005F4802AB6A46408836 -:1015F000002106F033FDBDF80010022900D00320C1 -:101600000EBD1CB5002100910221ADF80010019023 -:1016100012F0AAFE08B110201CBD53486A4641884A -:101620004FF6FF7006F05CFFBDF800100229F3D002 -:1016300003201CBDFEB54C4C06461546207A0F46CD -:10164000C00705D0084612F069FE18B11020FEBD93 -:101650000F20FEBDF82D01D90C20FEBD304612F042 -:101660005DFE18BB208801A905F03CFE0028F4D1DE -:1016700030788DF80500208801A906F0CEFC0028FE -:10168000EBD100909DF800009DF8051040F002009D -:101690008DF80000090703D040F008008DF8000025 -:1016A0002088694606F056FC0028D6D1ADF80850CF -:1016B00020883B4602AA002106F0D0FCBDF80810A5 -:1016C000A942CAD00320FEBD7CB50546002000908B -:1016D00001900888ADF800000C462846019512F0EC -:1016E00061FE18B9204612F03FFE08B110207CBD03 -:1016F00015B1BDF8000050B11B486A4601884FF68D -:10170000FF7006F0EDFEBDF8001021807CBD0C20BE -:101710007CBD30B593B0044600200D4600901421E6 -:1017200001A822F0E6FD1C2108A822F0E2FD9DF8A8 -:101730000000CDF808D020F00F00401C20F0F00091 -:1017400010308DF800009DF8010020F0FF008DF8AA -:1017500001009DF8200040F002008DF820000120DB -:101760008DF8460002E000000C02002042F6042042 -:10177000ADF8440011A801902088ADF83C006088C5 -:10178000ADF83E00A088ADF84000E088ADF842001A -:101790009DF8020006AA20F00600801C20F001003F -:1017A0008DF802000820ADF80C00ADF810000FA86D -:1017B000059001A908A806F04CF8002803D1BDF84F -:1017C00018002880002013B030BD0000F0B5007B69 -:1017D000059F1E4614460D46012800D0FFDF0C2051 -:1017E00030803A203880002C08D0287A032806D090 -:1017F000287B012800D0FFDF17206081F0BDA88979 -:10180000FBE72DE9F04786B0144691F80C900E9A4C -:101810000D46B9F1010F0BD01021007B2E8A8846AE -:10182000052807D0062833D0FFDF06B0BDE8F087D3 -:101830000221F2E7E8890C2100EB400001EB4000B7 -:10184000188033201080002CEFD0E88960810027B9 -:101850001AE00096688808F1020301AA696900F09D -:1018600084FF06EB0800801C07EB470186B204EBFF -:101870004102BDF8040090810DF1060140460E3290 -:1018800010F018FE7F1CBFB26089B842E1D8CCE7E7 -:1018900034201080E889B9F1010F11D0122148439A -:1018A0000E301880002CC0D0E88960814846B9F11C -:1018B000010F00D00220207300270DF1040A1FE061 -:1018C0000621ECE70096688808F1020301AA69691D -:1018D00000F04BFF06EB0800801C86B2B9F1010F47 -:1018E00012D007EBC70004EB4000BDF80410C18123 -:1018F00010220AF10201103022F05AFC7F1CBFB204 -:101900006089B842DED890E707EB470104EB41025B -:10191000BDF80400D0810AF102014046103210F0F7 -:10192000C9FDEBE72DE9F0470E4688B090F80CC0F2 -:1019300096F80C80378AF5890C20109902F10C0476 -:101940004FF0000ABCF1030F08D0BCF1040F3ED0E9 -:10195000BCF1070F7DD0FFDF08B067E705EB850C12 -:1019600000EB4C00188031200880002AF4D0A8F148 -:10197000060000F0FF09558125E0182101A822F09A -:10198000B8FC00977088434601AA716900F0EDFE2B -:10199000BDF804002080BDF80600E080BDF8080016 -:1019A0002081A21C0DF10A01484610F083FDB9F117 -:1019B000000F00D018B184F804A0A4F802A007EB2F -:1019C000080087B20A346D1EADB2D6D2C4E705EB6B -:1019D000850C00EB4C00188032200880002ABBD018 -:1019E000A8F1050000F0FF09558137E000977088E5 -:1019F000434601AA716900F0B8FE9DF80600BDF8E3 -:101A00000410E1802179420860F3000162F3410192 -:101A1000820862F38201C20862F3C301020962F321 -:101A20000411420962F34511820962F386112171A2 -:101A3000C0096071BDF80700208122460DF109013F -:101A4000484610F037FD18B184F802A0A4F800A0B1 -:101A500000E007E007EB080087B20A346D1EADB264 -:101A6000C4D279E7A8F1020084B205FB08F000F1C6 -:101A70000E0CA3F800C035230B80002AA6D0558198 -:101A80009481009783B270880E32716900F06DFE08 -:101A900062E72DE9F84F1E460A9D0C4681462AB1A1 -:101AA000607A00F58070D080E089108199F80C0090 -:101AB0000C274FF000084FF00E0A0D2873D2DFE814 -:101AC00000F09E070E1C28303846556A7373730069 -:101AD000214648460095FFF779FEBDE8F88F207B48 -:101AE0009146082802D0032800D0FFDF378030203D -:101AF0000AE000BFA9F80A80EFE7207B914604289E -:101B000000D0FFDF378031202880B9F1000FF1D1FC -:101B1000E3E7207B9146042800D0FFDF37803220A6 -:101B2000F2E7207B9146022800D0FFDF3780332088 -:101B3000EAE7207B1746022800D0FFDF3420A6F812 -:101B400000A02880002FC8D0A7F80A80C5E7207B16 -:101B50001746042800D0FFDF3520A6F800A0288013 -:101B6000002FBAD04046A7F80A8012E0207B174623 -:101B7000052802D0062800D0FFDF10203080362054 -:101B80002880002FA9D0E0897881A7F80E80B9F8C5 -:101B90000E00B881A1E7207B9146072800D0FFDF27 -:101BA00037803720B0E72AE04FF0120018804FF05E -:101BB00038001700288090D0E0897881A7F80E803F -:101BC000A7F8108099F80C000A2805D00B2809D036 -:101BD0000C280DD0FFDF80E7207B0A2800D0FFDF34 -:101BE00001200AE0207B0B2800D0FFDF042004E066 -:101BF000207B0C2800D0FFDF052038736DE7FFDF66 -:101C00006BE770B50C46054601F025FC20B1007865 -:101C1000222804D2082070BD43F2020070BD0521C5 -:101C200028460EF0C5FE206008B1002070BD0320DC -:101C300070BD30B44880087820F00F00C01C20F040 -:101C4000F000903001F8080B1DCA81E81D0030BC7F -:101C500007F0E3BB2DE9FF4784B0002782460297D7 -:101C600007989046894612300AF014F9401D20F07A -:101C70000306079828B907A95046FFF7C2FF0028B6 -:101C800054D1B9F1000F05D00798017B19BB052588 -:101C900004681BE098F80000092803D00D2812D032 -:101CA000FFDF46E0079903254868B0B3497B4288C7 -:101CB0007143914239D98AB2B3B2011D0EF0EBFCE7 -:101CC0000446078002E0079C042508340CB12088F4 -:101CD00010B1032D29D02CE00798012112300AF011 -:101CE0000BF9ADF80C00024602AB2946504608F04D -:101CF000F0F9070001D1A01C029007983A46123073 -:101D0000C8F80400A8F802A003A94046029B0AF004 -:101D100000F9D8B10A2817D200E006E0DFE800F0A9 -:101D200007091414100B0D141412132014E60020CC -:101D300012E6112010E608200EE643F203000BE63F -:101D4000072009E60D2007E6032005E6BDF80C0094 -:101D50002346CDE900702A465046079900F015FD4C -:101D600057B9032D08D10798B3B2417B406871433E -:101D70008AB2011D0EF0A3FCB9F1000FD7D007996C -:101D800081F80C90D3E72DE9FE4F91461A881C4646 -:101D90008A468046FAB102AB494608F09AF9050036 -:101DA00019D04046A61C27880EF046FF324607266B -:101DB00029463B4600960EF054FB20882346CDE989 -:101DC00000504A465146404600F0DFFC002020808B -:101DD0000120BDE8FE8F0020FBE710B586B01C4651 -:101DE000AAB104238DF800301388ADF8083052886A -:101DF000ADF80A208A788DF80E200988ADF80C100D -:101E000000236A462146FFF725FF06B010BD1020CB -:101E1000FBE770B50D4605210EF0CAFD040000D1A8 -:101E2000FFDF294604F11200BDE870400AF04DB80A -:101E30002DE9F8430D468046002607F0EBFA0446EC -:101E40002878102878D2DFE800F0773B345331311E -:101E5000123131310831313131312879001FC0B2AE -:101E6000022801D0102810D114BBFFDF35E004B9DF -:101E7000FFDF052140460EF09BFD007B032806D0C6 -:101E800004280BD0072828D0FFDF072655E0287943 -:101E9000801FC0B2022820D050B1F6E72879401F39 -:101EA000C0B2022819D0102817D0EEE704B9FFDF1E -:101EB00013E004B9FFDF287901280ED1172137E09C -:101EC000052140460EF074FD070000D1FFDF07F149 -:101ED0001201404609F0D6FF2CB12A462146404661 -:101EE000FFF7A7FE29E01321404602F0A7FD24E0FA -:101EF00004B9FFDF052140460EF05AFD060000D16F -:101F0000FFDF694606F1120009F0C6FF060000D0A7 -:101F1000FFDFA988172901D2172200E00A46BDF881 -:101F20000000824202D9014602E005E01729C5D32C -:101F3000404600F03AFCD0E7FFDF3046BDE8F883CA -:101F4000401D20F0030219B102FB01F0001D00E06A -:101F500000201044704713B5009848B1002468462B -:101F60000EF043FB002C02D1F74A009911601CBD12 -:101F700001240020F4E72DE9F0470C461546242102 -:101F8000204622F0B6F905B9FFDFA87860732888EB -:101F9000DFF8B4A3401D20F00301AF788946DAF8DA -:101FA00000000EF040FB060000D1FFDF4FF00008FC -:101FB0002660A6F8008077B109FB07F1091D0AD059 -:101FC000DAF800000EF02FFB060000D1FFDF66609C -:101FD000C6F8008001E0C4F80480298804F11200EA -:101FE000BDE8F04709F040BF2DE9F047804601F118 -:101FF00012000D46814609F04DFF401DD24F20F0E2 -:1020000003026E7B1446296838680EF037FB3EB138 -:1020100004FB06F2121D03D0696838680EF02EFB2F -:1020200005200EF06DFC044605200EF071FC201A10 -:10203000012802D138680EF0EBFA49464046BDE867 -:10204000F04709F026BF70B5054605210EF0B0FC3B -:10205000040000D1FFDF04F112012846BDE8704002 -:1020600009F010BF2DE9F04F91B04FF0000BADF823 -:1020700034B0ADF804B047880C46054692460521B9 -:1020800038460EF095FC060000D1FFDF24B1A78092 -:10209000A4F806B0A4F808B0297809220B20B2EB06 -:1020A000111F7DD12A7A04F1100138274FF00C0856 -:1020B0004FF001090391102A73D2DFE802F072F2A7 -:1020C000F1F07F08D2888D9F3DDBF3EEB6B6307B12 -:1020D000022800D0FFDFA88908EBC001ADF804108A -:1020E0003021ADF83410002C25D06081B5F80E9069 -:1020F00000271DE004EBC708317C88F80E10F18939 -:10210000A8F80C10CDF800906888042304AA296967 -:1021100000F02BFBBDF81010A8F8101009F1040016 -:10212000BDF812107F1C1FFA80F9A8F81210BFB278 -:102130006089B842DED80DE1307B022800D0FFDF95 -:10214000E98908EBC100ADF804003020ADF8340097 -:10215000287B0A90001FC0B20F90002CEBD0618149 -:10216000B5F81090002725E0CDF8009068886969DF -:1021700003AA0A9B00F0F9FA0A9804EBC70848443E -:102180001FFA80F908F10C0204A90F9810F092F9D7 -:1021900018B188F80EB0A8F80CB0BDF80C1001E02A -:1021A000D4E0CFE0A8F81010BDF80E107F1CA8F8FE -:1021B0001210BFB26089B842D6D8CBE00DA800900B -:1021C00001AB224629463046FFF71BFBC2E0307BBD -:1021D000082805D0FFDF03E0307B082800D0FFDFB0 -:1021E000E8891030ADF804003620ADF83400002C3A -:1021F0003FD0A9896181F189A18127E0307B09283D -:1022000000D0FFDFA88900F10C01ADF804103721E0 -:10221000ADF83410002C2CD06081E8890090AB8997 -:10222000688804F10C02296956E0E88939211030E8 -:1022300080B2ADF80400ADF83410002C74D0A98938 -:102240006181287A0E280AD002212173E989E1816F -:10225000288A0090EB8968886969039A3CE001212B -:10226000F3E70DA8009001AB224629463046FFF760 -:1022700059FB6FE0307B0A2800D0FFDF1220ADF859 -:102280000400ADF834704CB3A9896181A4F810B092 -:10229000A4F80EB084F80C905CE020E002E031E09D -:1022A00039E042E0307B0B2800D0FFDF288AADF810 -:1022B00034701230ADF8040084B104212173A9896F -:1022C0006181E989E181298A2182688A00902B8ACB -:1022D000688804F11202696900F047FA3AE0307B3D -:1022E0000C2800D0FFDF1220ADF80400ADF83470E8 -:1022F0003CB305212173A4F80AB0A4F80EB0A4F8E9 -:1023000010B027E00DA8009001AB224629463046C8 -:10231000FFF75CFA1EE00DA8009001AB22462946AB -:102320003046FFF7B6FB15E034E03B21ADF8040082 -:10233000ADF8341074B3A4F80690A4F808B084F88B -:102340000AB007E0FFDF05E010000020297A01292C -:1023500017D0FFDFBDF80400AAF800006CB1BDF88B -:1023600034002080BDF804006080BDF834003928B6 -:1023700003D03C2801D086F80CB011B00020BDE895 -:10238000F08F3C21ADF80400ADF8341014B1697A37 -:10239000A172DFE7AAF80000EFE72DE9F8435688BD -:1023A0000F4680461546052130460EF001FB04001D -:1023B00000D1FFDF123400943B46414630466A6844 -:1023C00009F0DBFEBAE570B50D4605210EF0F0FA16 -:1023D000040000D1FFDF294604F11200BDE870407F -:1023E00009F065BD70B50D4605210EF0E1FA040057 -:1023F00000D1FFDF294604F11200BDE8704009F06A -:1024000083BD70B5054605210EF0D2FA040000D157 -:10241000FFDF04F1080321462846BDE8704004228E -:10242000B1E470B5054605210EF0C2FA040000D1F2 -:10243000FFDF214628462368BDE870400522A2E45C -:1024400070B5064605210EF0B3FA040000D1FFDF97 -:1024500004F1120009F01EFD401D20F0030511E0FB -:10246000011D00880322431821463046FFF78BFCEC -:1024700000280BD0607BABB2684382B26068011D5C -:102480000EF053F9606841880029E9D170BD70B53C -:102490000E46054606F0BEFF040000D1FFDF012016 -:1024A000207266726580207820F00F00C01C20F03A -:1024B000F00030302070BDE8704006F0AEBF2DE96E -:1024C000F0438BB00D461446814606A9FFF799FBF1 -:1024D000002814D14FF6FF7601274FF420588CB115 -:1024E00003208DF800001020ADF8100007A805901B -:1024F00007AA204604A90FF0FCFF78B107200BB013 -:10250000BDE8F0830820ADF808508DF80E708DF806 -:102510000000ADF80A60ADF80C800CE00698A178D8 -:1025200001742188C1818DF80E70ADF80850ADF8A6 -:102530000C80ADF80A606A4602214846069BFFF708 -:1025400089FBDCE708B501228DF8022042F6020281 -:10255000ADF800200A4603236946FFF73EFC08BD9C -:1025600008B501228DF8022042F60302ADF80020E2 -:102570000A4604236946FFF730FC08BD00B587B062 -:1025800079B102228DF800200A88ADF80820498828 -:10259000ADF80A1000236A460521FFF75BFB07B080 -:1025A00000BD1020FBE709B1072316E407207047A0 -:1025B00070B588B00D461446064606A9FFF721FB04 -:1025C00000280ED17CB10620ADF808508DF800002F -:1025D000ADF80A40069B6A460821DC813046FFF7C9 -:1025E00039FB08B070BD05208DF80000ADF808502B -:1025F000F0E700B587B059B107238DF80030ADF88A -:102600000820039100236A460921FFF723FBC6E750 -:102610001020C4E770B588B00C460646002506A910 -:10262000FFF7EFFA0028DCD106980121123009F0FB -:1026300063FC9CB12178062921D2DFE801F0200556 -:1026400005160318801E80B2C01EE28880B20AB14F -:10265000A3681BB1824203D90C20C2E71020C0E757 -:10266000042904D0A08850B901E00620B9E7012967 -:1026700013D0022905D004291CD005292AD007200F -:10268000AFE709208DF800006088ADF80800E08809 -:10269000ADF80A00A068039023E00A208DF800003E -:1026A0006088ADF80800E088ADF80A00A0680A2547 -:1026B000039016E00B208DF800006088ADF808004C -:1026C000A088ADF80A00E088ADF80C00A0680B25E2 -:1026D000049006E00C208DF8000060788DF808006A -:1026E0000C256A4629463046069BFFF7B3FA78E781 -:1026F00000B587B00D228DF80020ADF8081000233A -:102700006A461946FFF7A6FA49E700B587B071B1E6 -:1027100002228DF800200A88ADF808204988ADF81B -:102720000A1000236A460621FFF794FA37E71020C3 -:1027300035E770B586B0064601200D46ADF80810A5 -:102740008DF80000014600236A463046FFF782FA02 -:10275000040008D12946304605F09AFC0021304695 -:1027600005F0B4FC204606B070BDF8B51C46154611 -:102770000E46069F0EF04EFA2346FF1DBCB23146B0 -:102780002A4600940DF039FEF8BD30B41146DDE95B -:1027900002423CB1032903D0002330BC08F022BB25 -:1027A0000123FAE71A8030BC704770B50C46054625 -:1027B000FFF72FFB2146284605F079FC2846BDE8A7 -:1027C0007040012105F082BC4FF0E0224FF400413F -:1027D0000020C2F88011204908702049900208604A -:1027E000704730B51C4D04462878A04218BF002C15 -:1027F00002D0002818BFFFDF2878A04208BF30BDF4 -:102800002C701749154A0020ECB1164DDFF858C05E -:10281000131F012C0DD0022C1CBFFFDF30BD086040 -:1028200003200860CCF800504FF4000010601860DE -:1028300030BD086002200860CCF800504FF04070B6 -:102840001060186030BD086008604FF06070106064 -:1028500030BD00B5FFDF00BD1800002008F50140C5 -:1028600000F500408C02002014F5004070B50B20EC -:1028700000F0B5F9082000F0B2F900210B2000F0BB -:10288000C4F90021082000F0C0F9EC4C0125656076 -:10289000A5600020C4F84001C4F84401C4F8480110 -:1028A0000B2000F0A7F9082000F0A4F90B2000F09D -:1028B0008BF9256070BD10B50B2000F090F9082051 -:1028C00000F08DF9DD48012141608160DC490A6832 -:1028D000002AFCD10021C0F84011C0F84411C0F812 -:1028E00048110B2000F086F9BDE81040082000F0E8 -:1028F00081B910B50B2000F07DF9BDE8104008202B -:1029000000F078B900B530B1012806D0022806D011 -:10291000FFDF002000BDCB4800BDCB4800BDCA484A -:10292000001D00BD70B5C9494FF000400860C84D9A -:10293000C00BC5F80803C74800240460C5F840412F -:102940000820C43500F04BF9C5F83C41C24804707A -:1029500070BD08B5B94A002128B1012811D002285C -:102960001CD0FFDF08BD4FF48030C2F80803C2F866 -:102970004803B3483C300160C2F84011BDE808404C -:10298000D0E74FF40030C2F80803C2F84803AC485F -:1029900040300160C2F84411AB480CE04FF4802095 -:1029A000C2F80803C2F84803A54844300160C2F8E1 -:1029B0004811A548001D0068009008BD70B5164676 -:1029C0000D460446022800D9FFDF00229B48012360 -:1029D00004F110018B4000EB8401C1F8405526B191 -:1029E000C1F84021C0F8043303E0C0F80833C1F84F -:1029F0004021C0F8443370BD2DE9F0411C46154616 -:102A000030B1012834D0022839D0FFDFBDE8F08191 -:102A1000891E002221F07F411046FFF7CFFF012CD5 -:102A200024D000208C4E8A4F012470703C6189496B -:102A300000203C3908600220091D086085490420F7 -:102A40003039086083483D350560C7F800420820EA -:102A500000F0D0F82004C7F80403082000F0B4F810 -:102A60007A49E007091F08603470CFE70120D9E7F1 -:102A7000012B02D00022012005E00122FBE7012BFF -:102A800004D000220220BDE8F04197E70122F9E7D7 -:102A90006B480068704770B500F0C7F8674C054692 -:102AA000D4F840010026012809D1D4F80803C00356 -:102AB00005D54FF48030C4F80803C4F84061D4F859 -:102AC000440101280CD1D4F80803800308D54FF441 -:102AD0000030C4F80803C4F84461012010F0CDFCB4 -:102AE000D4F8480101280CD1D4F80803400308D5D4 -:102AF0004FF48020C4F80803C4F84861022010F0A5 -:102B0000BCFC5648056070BD70B500F08EF8524DA3 -:102B10000446287858B1FFF705FF687820B10020F7 -:102B200085F8010010F0A9FC4C48046070BD03203A -:102B3000F8E74FF0E0214FF40010C1F800027047B1 -:102B4000152000F057B8424901200861082000F024 -:102B500051B83F494FF47C10C1F8080300200246E9 -:102B600001EB8003C3F84025C3F84021401CC0B2EC -:102B70000628F5D37047410A43F609525143C0F382 -:102B8000080010FB02F000F5807001EB5020704748 -:102B900010B5430B48F2376463431B0C5C020C60B6 -:102BA0002F4C03FB04002F4B4CF2F72443435B0DE7 -:102BB00013FB04F404EB402000F580704012107009 -:102BC00008681844086010BD00F01F020121914000 -:102BD0004009800000F1E020C0F80011704700F0CB -:102BE0001F02012191404009800000F1E020C0F85F -:102BF0008011704700F01F020121914040098000C0 -:102C000000F1E020C0F8801270474907090E002843 -:102C100006DA00F00F0000F1E02080F8141D704784 -:102C200000F1E02080F8001470470C48001F006895 -:102C30000A4A0D49121D11607047000000B00040A3 -:102C400004B500404081004044B1004008F5014017 -:102C500000800040408500403800002014050240FC -:102C6000F7C2FFFF6F0C0100010000010A4810B518 -:102C70000468094909480831086010F092FC0648C8 -:102C8000001D046010BD0649002008604FF0E021DF -:102C90000220C1F8800270471005024001000001C7 -:102CA000FC1F004010B50D2000F06FF8C4B26FF0AB -:102CB000040000F06AF8C0B2844200D0FFDF3A4955 -:102CC0000120086010BD70B50D2000F048F8374CA9 -:102CD0000020C4F800010125C4F804530D2000F0C1 -:102CE00049F825604FF0E0216014C1F8000170BD83 -:102CF00010B50D2000F033F82C480121416000216F -:102D0000C0F80011BDE810400D2000F033B828488D -:102D100010B5046826492748083108602349D1F8CE -:102D20000001012804D0FFDF2148001D046010BD10 -:102D30001D48001D00680022C0B2C1F8002110F03B -:102D4000E7FFF1E710B51948D0F800110029FBD0D2 -:102D5000FFF7DDFFBDE810400D2000F00BB800F0DC -:102D60001F02012191404009800000F1E020C0F8DD -:102D70008011704700F01F0201219140400980003E -:102D800000F1E020C0F880127047002806DA00F059 -:102D90000F0000F1E02090F8140D03E000F1E020B6 -:102DA00090F800044009704704D5004000D000406E -:102DB000100502400100000110B5202000F082F84B -:102DC000202000F08AF84A49202081F8000449496F -:102DD00000060860091D48480860FEF79DFA45494D -:102DE000C83108604548D0F8041341F00101C0F82B -:102DF0000413D0F8041341F08071C0F804133C4967 -:102E000001201C39C1F8000110BD10B5202000F0D0 -:102E100059F8384800210160001D0160354A481EFC -:102E2000E83A1060354AC2F80803324BC8331960DB -:102E3000C2F80001C2F8600131490860BDE81040E5 -:102E4000202000F04AB82B492E48EC390860704722 -:102E500028492C48E8390860704726480160001D61 -:102E6000521E0260704723490120E8390860BFF311 -:102E70004F8F704770B51F4A8069E83A2149116049 -:102E80001E49D1F8006100231F4D1D4A5C1E1EB172 -:102E9000A84206D300210FE0D1F8606186B1A842B4 -:102EA00009D2C1F80031C1F860311460BDE870404A -:102EB000202000F012B81168BDE8704021F040BA3F -:102EC000FFDF70BD00F01F0201219140400980002A -:102ED00000F1E020C0F88011704700F01F020121CE -:102EE00091404009800000F1E020C0F88012704756 -:102EF00020E000E000060240C41400200000024070 -:102F00000004024001000001006002000F4A126844 -:102F10000D498A420CD118470C4A12680A4B9A4252 -:102F200006D101B510F06EFFFFF78DFFBDE801403F -:102F3000074909680958084706480749054A064BE2 -:102F40007047000000000000BEBAFECAB0000020BA -:102F500004000020E0120020E012002070B50C46B2 -:102F6000054609F0A7FA21462846BDE870400AF058 -:102F70008CBB10B511F0B0FBFFF726FC11F04CFA3A -:102F8000BDE8104011F0FEBA0120810708607047CB -:102F9000012081074860704712480068C00700D0D0 -:102FA000012070470F48001F0068C00700D00120B3 -:102FB00070470C4808300068C00700D001207047F7 -:102FC000084810300068704706490C310A68D2037F -:102FD00006D5096801F00301814201D10120704743 -:102FE000002070470C0400407047704770477047DE -:102FF000704770477047704770470004050600002F -:103000002CFFFFFFDBE5B15100600200A800FFFFCD -:1030100084000000808D5B0016425791AD5F58BC64 -:103020008E702F5A0FAA100DBCD52BFD30B5FC4D5C -:103030000446062CA9780ED2DFE804F0030E0E0E2B -:103040000509FFDF08E0022906D0FFDF04E00329BD -:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA -:103060001038EF4D07280CD2DFE800F0040C060CF6 -:103070000C0C0C00FFDF05E0287E112802D0FFDFDA -:1030800000E0FFDF2C7630BD2DE9F0410FF09CFB16 -:10309000044610F038FD201AC5B206200DF030FCB1 -:1030A000044606200DF034FC211ADD4C207E122847 -:1030B00018D000200F1807200DF022FC064607202C -:1030C0000DF026FC301A3918207E13280CD0002071 -:1030D0000144A078042809D000200844281AC0B26E -:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 -:1030F000CB4810B590F825004108C94800F12600DA -:1031000005D00BF0B6FABDE8104005F0AFBF0BF0EC -:1031100089FAF8E730B50446A1F120000D460A28E7 -:103120004AD2DFE800F005070C1C2328353A3F445B -:10313000FFDF42E0207820283FD1FFDF3DE0B848A4 -:103140008178052939D0007E122836D020782428AD -:1031500033D0252831D023282FD0FFDF2DE0207851 -:1031600022282AD0232828D8FFDF26E0207822280A -:1031700023D0FFDF21E0207822281ED024281CD075 -:1031800026281AD0272818D0292816D0FFDF14E0C7 -:103190002078252811D0FFDF0FE0207825280CD0DB -:1031A000FFDF0AE02078252807D0FFDF05E0207840 -:1031B000282802D0FFDF00E0FFDF257030BD10B50A -:1031C000012803D0022805D0FFDF10BDBDE8104064 -:1031D00003202BE79248007E122800D0FFDF002159 -:1031E000052011F04FF8BDE81040112036E71FB55B -:1031F00004466A46002001F01FFEB4B1BDF802206B -:103200004FF6FF700621824201D1ADF80210BDF8E1 -:103210000420824201D1ADF80410BDF808108142AB -:1032200003D14FF44860ADF8080068460BF089FF01 -:1032300005F01CFF04B010BD70B514460D460646DF -:1032400011F06CF858B90DB1A54201D90C2070BD30 -:10325000002408E056F8240011F060F808B11020AE -:1032600070BD641CE4B2AC42F4D3002070BD2DE903 -:10327000F04105461F4690460E460024006811F0B6 -:103280009AF808B110202BE728680028A88802D0F7 -:10329000B84202D84FE00028F5D0092020E728687E -:1032A000025DB2B1611C475C152F2DD03BDC3AD2D8 -:1032B000DFE807F03912222228282A2A3131393949 -:1032C00039393939393939392200025D32BB641C48 -:1032D000A4B2A142F9D833E0022ADED1A21C805C5C -:1032E00088F80000072801D2400701D40A20F7E639 -:1032F000307840F0010015E0D043C00707E0012A14 -:1033000007D010E00620EBE61007A0F1805000285F -:10331000F5D01846E4E63078820701D50B20DFE6C9 -:1033200040F0020030702868005D084484B2A8882C -:10333000A04202D2B1E74FF4485381B2A142AED8C5 -:103340000020CDE610B5027843F202235408012292 -:10335000022C12D003DC3CB1012C16D106E0032C68 -:1033600010D07F2C11D112E0002011E080790324CD -:10337000B4EB901F09D10A700BE08079B2EB901F7B -:1033800003D1F8E780798009F5D0184610BDFF20F9 -:103390000870002010BD224991F82E2042B191F80A -:1033A0002F10022909D0032909D043F202207047C7 -:1033B00001461B48253001F092BD032100E00121A8 -:1033C00001700020704738B50C460546694601F08B -:1033D00086FD00280DD19DF80010207861F347008C -:1033E000207055F8010FC4F80100A888A4F8050062 -:1033F000002038BD38B51378B0B1022814D0FF28AA -:103400001BD008A46D46246800944C7905EB9414F5 -:10341000247864F34703137003280AD010E00000F7 -:10342000D80100200302FF0123F0FE0313700228DD -:10343000F2D1D8B240F0010005E043F0FE00107078 -:10344000107820F0010010700868C2F80100888828 -:10345000A2F8050038BD02210DF0AABA38B50C4615 -:103460000978222901D2082038BDADF800008DF876 -:10347000022068460BF044F905F0F8FD050003D181 -:1034800021212046FFF746FE284638BD1CB5002006 -:103490008DF80000CDF80100ADF80500FE4890F869 -:1034A0002E00022801D0012000E000208DF8070046 -:1034B00068460BF056FB002800D0FFDF1CBD002241 -:1034C0000A80437892B263F345120A8043785B081E -:1034D00063F386120A8000780C282BD2DFE800F014 -:1034E0002A06090E1116191C1F220C2742F0110082 -:1034F00009E042F01D0008800020704742F01100F2 -:1035000012E042F0100040F00200F4E742F0100038 -:10351000F1E742F00100EEE742F0010004E042F082 -:103520000200E8E742F0020040F00400E3E742F066 -:103530000400E0E7072070472DE9FF478AB0002527 -:10354000BDF82C6082461C4690468DF81C507007D2 -:1035500003D5606810F0E2FE68B9CF4F4FF0010963 -:1035600097F82E0058B197F82F00022807D160680D -:1035700010F021FF18B110200EB0BDE8F087300721 -:1035800002D5A089802816D8700705D4B8F1000F9D -:1035900002D097F8240070B1E07DC0F300108DF8E0 -:1035A0001B00617D072041B1012906D00229E3D02B -:1035B0000429E1D12CE00720DEE749468DF8179079 -:1035C000F00609D4A27D072032B1012A04D0022AD4 -:1035D00005D0042AD0D11BE08DF8191002E002209A -:1035E0008DF819008DF815806068B0B107A9FFF754 -:1035F000A9FE0028C0D19DF81C00FF280AD06068F1 -:1036000050F8011FCDF80F108088ADF8130008E0C6 -:103610000620B1E743F20220AEE7CDF80F50ADF837 -:103620001350E07B0028F3D1207C0028F0D1607C8F -:103630000028EDD1A07C0028EAD1E07CC006E7D1CB -:103640008DF800A0BDF82C00ADF80200A068019034 -:10365000A068029004F10F0001F035FC8DF80C0019 -:103660000DF10D00FFF797FE00B1FFDF9DF81C0084 -:103670008DF80E008DF816508DF81850E07D08A9D1 -:1036800000F00F008DF81A0068460BF036FF05F0C9 -:10369000EDFC71E7F0B59DB000228DF868208DF843 -:1036A00058208DF8602005468DF86C2012921392F8 -:1036B0001492159219B10FC912AC84E80F00764C20 -:1036C000A078052801D004280CD11298616888429E -:1036D00000D120B91498E168884203D110B10820C4 -:1036E0001DB0F0BD1F26334618AA1AA912A8FFF76D -:1036F000BEFD0028F4D133461BAA16A914A8FFF773 -:10370000B6FD0028ECD19DF85800C00701D00A2072 -:10371000E6E7A08A410708D4A17D31B19DF8601089 -:10372000890702D043F20120DAE79DF86010C9074B -:1037300009D0400707D4208818B144F2506188426C -:1037400001D90720CCE78DF8005003268DF80160E1 -:1037500001278DF80270BDF84C208DF8032001A8D8 -:10376000129920F025FD68460BF028FF05F07EFC3D -:103770000028B5D18DF824508DF825608DF826707D -:10378000BDF854208DF827200AA8149920F010FDC8 -:1037900009A80BF060FF05F069FC0028A0D112AD6C -:1037A000241D95E80F0084E80F00002098E770B50D -:1037B00086B00D46040005D010F0FDFD20B11020AC -:1037C00006B070BD0820FBE72078C107A98802D0A9 -:1037D000FF2902D303E01F2901D20920F0E7800767 -:1037E00061D4FFF751FC38B12078C0F3C101012941 -:1037F00004D0032902D005E01320E1E7264991F81F -:10380000241041B1C0074FF000054FF0010604D06D -:103810008DF80F6003E00720D2E78DF80F5068465F -:10382000FFF7B9FD00B1FFDF2078C0F3C1008DF8CC -:1038300001008DF80250607808B98DF80260607858 -:10384000C00705D09DF8020040F001008DF802008D -:103850006078800705D59DF8020040F002008DF8E1 -:1038600002006078400705D59DF8020040F0040092 -:103870008DF802002078C0F380008DF80300608886 -:10388000ADF80600A088ADF80A00207A58B9607A31 -:1038900048B9A07A38B901E0D8010020E07A10B91F -:1038A000207BC00601D006208AE704F1080001F061 -:1038B0000AFB8DF80E0068460BF087F905F0D6FB81 -:1038C00000288BD18DF810608DF81150ADF8125092 -:1038D000ADF8145004A80BF0FDF905F0C7FB002863 -:1038E0008BD1E08864280AD248B1012001F001FBA5 -:1038F000002891D12078C00705D0152004E064216C -:10390000B0FBF1F0F2E71320FFF7A8FB002057E728 -:103910002DE9FF470220FF4E8DF804000027708E2E -:10392000ADF80600B84643F202094CE001A80CF0DD -:10393000A6FF050006D0708EA8B3A6F83280ADF8B9 -:1039400006803EE0039CA07F01072DD504F12400F2 -:103950000090A28EBDF80800214604F1360301F064 -:1039600054FC050005D04D452AD0112D3CD0FFDF79 -:103970003AE0A07F20F00801E07F420862F3C7111F -:10398000A177810861F30000E07794F8210000F04E -:103990001F0084F820002078282826D129212046DD -:1039A000FFF7B8FB21E014E040070AD5BDF8080096 -:1039B00004F10E0101F0ABFA05000DD04D4510D118 -:1039C00000257F1CFFB202200CF09AFF401CB84279 -:1039D000ACD8052D11D008E0A07F20F00400A0771E -:1039E00003E0112D00D0FFDF0025BDF80600708632 -:1039F000052D04D0284604B0BFE5A6F8328000208B -:103A0000F9E770B50646FFF726FD054605F002FD0D -:103A1000040000D1FFDF6680207820F00F00801CBA -:103A200020F0F000203020700620207295F83E0033 -:103A30006072BDE8704005F0F0BC2DE9F04786B03B -:103A4000040000D1FFDF2078B24D20F00F00801C71 -:103A500020F0F0007030207060680178491F1B2949 -:103A600033D2DFE801F0FE32323255FD320EFDFD79 -:103A700042FC32323278FCFCFB323232FCFCFAF986 -:103A8000FC00C6883046FFF7E6FC0546304607F0E6 -:103A9000A7F8E0B16068007A85F83E002121284649 -:103AA000FFF738FB3046FEF7CEFA304603F016FE3D -:103AB0003146012010F0E6FBA87F20F01000A87727 -:103AC000FFF726FF002800D0FFDF06B055E520787D -:103AD00020F0F000203020700620207266806068A0 -:103AE000007A607205F099FCD8E7C5882846FFF790 -:103AF000B2FC00B9FFDF60680079012800D0FFDF69 -:103B00006068017A06B02846BDE8F04707F044BC7B -:103B1000C6883046FFF79FFC050000D1FFDF05F0A7 -:103B20007CFC606831460089288160684089688132 -:103B300060688089A881012010F0A4FB0020A8758E -:103B4000A87F00F003000228BFD1FFF7E1FE0028A4 -:103B5000BBD0FFDFB9E70079022811D000B1FFDF49 -:103B600005F05BFC6668B6F806A0307A361D0128C1 -:103B70000CD0687E814605F0E5F9070009D107E021 -:103B800006B00220BDE8F047FFF719BBE878F1E77F -:103B9000FFDF0022022150460CF001FF040000D19B -:103BA000FFDF22212046FFF7B5FA3079012800D047 -:103BB0000220A17F804668F30101A177308B20812C -:103BC000708B6081B08BA08184F822908DF8088082 -:103BD000B8680090F86801906A46032150460CF0DE -:103BE000DEFE00B9FFDFB888ADF81000B8788DF8B8 -:103BF000120004AA052150460CF0D1FE00B9FFDFE7 -:103C0000B888ADF80C00F8788DF80E0003AA0421EE -:103C100050460CF0C4FE00B9FFDF062106F1120089 -:103C200001F093F938B37079800700D5FFDF71791F -:103C3000E07D61F34700E075D6F80600A061708969 -:103C4000A083062106F10C0001F07FF9E8B195F898 -:103C500025004108607805E032E02AE047E03FE0D7 -:103C600021E035E061F347006070D5F82600C4F824 -:103C70000200688D12E0E07D20F0FE00801CE075FF -:103C8000D6F81200A061F08ADAE7607820F0FE0032 -:103C9000801C6070F068C4F80200308AE080404602 -:103CA000FFF78DFA11E706B02046BDE8F04701F0B6 -:103CB00035BD05F0B2FB15F8300F40F0020005E00D -:103CC00005F0ABFB15F8300F40F004002870FCE65F -:103CD000287E132809D01528E4D11620FFF7BEF955 -:103CE00006B0BDE8F04705F098BB1420F6E7A978C8 -:103CF000052909D00429D5D105F08FFB022006B093 -:103D0000BDE8F047FFF792B900790028CAD0E878FB -:103D100002E00000D801002001F0BCF805F07DFBB6 -:103D20000320ECE72DE9F05F054600784FF000082E -:103D30000009DFF820A891460C46464601287AD0B3 -:103D400001274FF0020C4FF6FF73022874D00728AA -:103D50000BD00A2871D0FFDFA9F8006014B1A4F8D5 -:103D6000008066800020BDE8F09F696804F10800CB -:103D70000A78172A70D010DC4FF0000B142A31D0CB -:103D800006DC052A6DD0092A0FD0102A7ED11FE04B -:103D9000152A7CD0162AF9D1F0E01B3A052A75D2F3 -:103DA000DFE802F009C5FDDAFC00C8884FF0120810 -:103DB0001026214675E14FF01C080A26D4B38888E6 -:103DC000A0806868807920726868C0796072C3E7F3 -:103DD0004FF01B0814266CB303202072686880889B -:103DE000A080B9E70A793C2AB6D00D1D4FF0100823 -:103DF0002C26FCB16988A180298B6182298B2182C4 -:103E0000698BA182A98BE1826B790246A91D1846B4 -:103E1000FFF7F0FA2879012810D084F80FC0FF20AE -:103E20002076C4F81CB0C4F820B0C4F824B0C4F89C -:103E300028B091E712E013E13BE135E1E7730AF1C5 -:103E4000040084F818B090E80E00DAF81000C4E915 -:103E50000930C4E907127FE7A8E002E0A9F8006092 -:103E600080E72C264FF01D08002CF7D00546A380D4 -:103E7000887B2A880F1D60F300022A80887B400817 -:103E800060F341022A80887B800801E0E6E0ADE033 -:103E900060F382022A80887BB91CC00860F3C302E9 -:103EA0002A80B87A0011401C60F3041202F07F00EF -:103EB00028807878AA1CFFF79DFA387D05F1090261 -:103EC00007F11501FFF796FA387B01F04DF82874D9 -:103ED000787B01F049F86874F87EA874787AE87401 -:103EE00097F83B002875B87B6875A5F816B0DAF826 -:103EF0001C00A861397ABAF82000884201D2014634 -:103F000010E0B87AC0F3411002280BD0012809D084 -:103F1000288820F060002880A1840A4607F11C014F -:103F2000A86998E0288820F060004030F3E7112667 -:103F30004FF02008002C91D0A380686804F10A0299 -:103F4000007920726868007B607269688B1D48790F -:103F50001946FFF74FFAFFE60A264FF02108002C1A -:103F6000E9D08888A0806868807920726868C07904 -:103F700060729AF8301021F004018BE00B264FF0AC -:103F80002208002CD7D0C888A080686800792072E9 -:103F90006868007A00F0E8FF607201E052E039E002 -:103FA0006868407A00F0E0FFA072D5E61C264FF06A -:103FB0002608002CBFD0A3806868407960726868CA -:103FC000007AA0720AF1040090E80E00DAF81000FE -:103FD000C4E90530C4E90312686800793C2803D0BD -:103FE00043287DD0FFDFB7E62772B5E610264FF0F5 -:103FF0002408002C9FD08888A08068688079208160 -:104000006868807A608168680089A08168688089B2 -:10401000E081A1E610264FF02308002C8BD0888881 -:10402000A0806868C08820816868008960816868AD -:104030004089A08168688089E0819AF8301021F079 -:10404000020127E030264FF02508002C88D0A380FD -:1040500069682822496820F0ABF87DE64A4677E097 -:10406000287A012803D0022817D0FFDF74E6102633 -:104070004FF01F08002C85D06888A080A889208177 -:10408000E8896081288AA081688AE0819AF83010E6 -:1040900021F001018AF830105EE64FF01208102678 -:1040A000688800F03FFF57E62846BDE8F05F01F062 -:1040B000BFBC287A07284DD2DFE800F04C38384AD8 -:1040C0004A4A040009264FF01108002C92D06F884C -:1040D0003846FFF7C0F990F822A0A780687A00E080 -:1040E0002DE02072042138460CF074FC052138467E -:1040F0000CF070FC002138460CF06CFC01213846B5 -:104100000CF068FC032138460CF064FC02213846B0 -:104110000CF060FC062138460CF05CFC07213846A8 -:104120000CF058FC504600F0B5FE15E614264FF092 -:104130001B08002C8AD0A380287A012802D084F89A -:1041400008C009E62772DAE90710C4E9031003E69C -:104150002146A9E7FFDFFFE570B5FE4D287E122856 -:1041600001D0082070BD0AF0C3FF04F07FFF0400F7 -:1041700002D1687E00F08EFE0021052010F082F84A -:10418000204670BD1CB5F348007E132801D20820DC -:104190001CBD00208DF8000068460AF09BFD04F06D -:1041A00065FF0028F4D10021052010F06BF81120E4 -:1041B000FEF754FF00201CBD70B5012805D005286E -:1041C00025D0062800D0FFDF70BD8DB22846FFF74E -:1041D00042F9040000D1FFDF20782128F4D005F057 -:1041E00019F968B1017821F00F01891C21F0F00163 -:1041F000103101700221017245800020A07528E075 -:1042000021462846BDE870401322FFF727B9D14860 -:10421000047EA4F1120005281FD2DFE800F0060397 -:1042200003030300FFF7AEFF01E0FFF795FF00284F -:10423000CAD105F0EFF80028C6D0017821F00F01AF -:10424000891C21F0F00120310170132C07D00221CC -:104250000172BDE8704005F0E0B8FFDF70BD0121DC -:10426000F6E72DE9F04116460C00804600D1FFDF4D -:10427000307820F00F00801C20F0F00010303070FB -:104280002078012804D0022818D0FFDFBDE8F08193 -:104290004046FFF7E0F8050000D1FFDF0320A875D6 -:1042A00005F0BBF894E80F00083686E80F00A9482F -:1042B00010F8301F41F001010170E7E74046FFF7B9 -:1042C000CAF8050000D1FFDFA1884FF6FF70002774 -:1042D000814202D1E288824203D0814201D1E0884A -:1042E00040B105F09AF894E80F00083686E80F0010 -:1042F000AF75CBE7A87D0128C8D1782300224146BD -:104300000FF016FF0220A875C0E738B505460C4629 -:10431000084610F003F818BB203D062D4AD2DFE80E -:1043200005F0031B373C4230002106200FF080FFD0 -:1043300008B1112038BDA01C0AF0AFFF04F096FEB2 -:10434000050038D100220823114606200FF0F0FEA8 -:10435000062830D0FFDF2EE0606810F023F808B1A7 -:10436000102038BD618820886A460BF05FFB04F09E -:104370007DFE05001FD16068E8B1BDF80010018026 -:1043800019E0A07800F0010120880BF085FB0EE019 -:10439000206801F0FBFD05460DE0207800F00100EB -:1043A0000AF033F903E0618820880BF0C4FA04F0C6 -:1043B0005DFEF0E70725284638BD70B505460C467A -:1043C00008460FF0D1FF08B1102070BD202D07D096 -:1043D000212D0DD0222D0BD0252D09D0072070BD09 -:1043E0002088A11C0AF006FABDE8704004F03EBE29 -:1043F000062070BD57482530704708B53421554810 -:104400001FF077FF0120FEF711FE1120FEF726FEB8 -:1044100050496846263104F093FF4E489DF800202D -:1044200010F8251F62F3470121F0010101700021FE -:1044300041724FF46171A0F8071002218172FEF7FA -:1044400057FE00B1FFDFFCF791FF01F032F908BD24 -:1044500010B50C46402120461FF029FFA07F20F018 -:104460000300A077202020700020A07584F823008E -:1044700010BD70472DE9FC4107460FF04FFF10B10A -:104480001020BDE8FC81334E06F12501D6F8250049 -:104490000090B6F82950ADF8045096F82B408DF8EE -:1044A00006403846FEF78FFF0028EAD1FEF720FECF -:1044B0000028E6D0009946F8251FB580B471E0E7E2 -:1044C00010B504460FF050FF08B1102010BD214870 -:1044D0002049224690F8250026314008FEF78AFF41 -:1044E000002010BDFEB50D4604004FF0000712D0AD -:1044F0000822FEF7A1FE002812D1002609E000BF25 -:1045000054F826006946FEF71DFF002808D1761CE6 -:10451000F6B2AE42F4D309F07CFF10B143F20320AF -:10452000FEBD0C4E86F8247024B300271EE000BFA9 -:1045300054F8270002A9FEF705FF00B1FFDF9DF840 -:1045400008008DF8000054F8270050F8011FCDF83E -:10455000011001E0D80100208088ADF80500684610 -:1045600009F0A1FF00B1FFDF7F1CFFB2AF42DFD334 -:1045700086F824500020FEBD2DE9F0478AB015468C -:10458000894604001ED00F4608222946FEF754FE35 -:10459000002810D1002613E054F826006946103098 -:1045A00000F09DFC002806D147B157F826000FF017 -:1045B000B5FE18B110200AB0BDE8F087761CF6B23F -:1045C000AE42E9D30026A5F101081BE006F1010A7D -:1045D0000AF0FF0712E000BF54F82600017C4A08E9 -:1045E00054F827100B7CB2EB530F05D10622113083 -:1045F00011311FF0B1FD58B17F1CFFB2AF42EBD3B8 -:104600000AF0FF064645E1DB4E4624B1012003E0F7 -:1046100043F20520CFE7002009F076FF10B909F03A -:1046200087FF10B143F20420C5E75CB300270DF10A -:10463000170825E054F827006946103000F04FFCB9 -:1046400000B1FFDF54F82700102250F8111FCDF8F9 -:1046500001108088ADF8050054F827100DF107000F -:104660001FF0A6FD96B156F82710102240461FF005 -:104670009FFD684609F0F0FE00B1FFDF7F1CFFB22E -:10468000AF42D7D3FEF702FF002094E7404601F087 -:1046900071FCEEE730B585B004460FF03FFE18B967 -:1046A00060680FF088FE10B1102005B030BD608842 -:1046B0004AF2B811884206D82078FB4D28B101286B -:1046C00006D0022804D00720EFE7FEF711FD18E01E -:1046D0006078022804D0032802D043F20220E4E7E5 -:1046E00085F82F00C1B200200090ADF80400022927 -:1046F0002CD0032927D0FFDF684609F0BAFF04F069 -:10470000B5FC0028D1D1606801F027FC207858B1B1 -:1047100001208DF800000DF1010001F02BFC68462E -:104720000BF018FA00B1FFDF207885F82E00FEF7B5 -:10473000ADFE608860B1A88580B209F0DDFE00B1F1 -:10474000FFDF0020B1E78DF80500D5E74020FAE74C -:104750004FF46170EFE710B504460FF005FE20B985 -:10476000606838B10FF01EFE08B1102010BD6068FF -:1047700001F000FCCC4830F82C1F6180C1786170DA -:1047800080782070002010BD2DE9F843144689463A -:1047900006460FF0E9FDA0B948460FF00CFE80B9BF -:1047A00020460FF008FE60B9BF4DA878012800D15F -:1047B0003CB13178FF2906D049B143F20400BDE88D -:1047C000F8831020FBE7012801D00420F7E74FF021 -:1047D0000008A4B3052811D004280FD0694620464C -:1047E000FEF76DFE0028EAD1207D48B1012809D0EE -:1047F000022809D0032809D00720E0E70820DEE7D7 -:10480000424604E0012202E0022200E003222346A5 -:10481000174600200099FEF78FFE0028CFD1A0890F -:104820002880A07BE875BDF80000A882AF75BDF8B0 -:104830000000000701D5A08988B1A08928804946D9 -:104840000020FEF727FF0028B9D1A87805280BD053 -:10485000042809D0287DC00703D0032002E080206F -:10486000ECE70220FEF7E2FB86F800800020A6E7D6 -:104870007CB58D4C05460E46A078022803D003284F -:1048800001D008207CBD15B143F204007CBD072097 -:104890000CF03EF810B9A078032806D0FEF7F4FB20 -:1048A00028B1A078032804D009E012207CBD132091 -:1048B0007CBD304600F0CDFA0028F9D1E670012029 -:1048C0008DF800008DF801008DF802502088ADF8B9 -:1048D0000400E07D8DF8060068460AF0EAFF04F067 -:1048E000C5FB0028E4D1A078032805D05FF00400C0 -:1048F000FEF79CFB00207CBDE07800F0BAFA0520B2 -:10490000F6E71CB510B143F204001CBD664CA0785C -:10491000042803D0052801D008201CBD00208DF8F4 -:10492000000001218DF801108DF8020068460AF0A0 -:10493000C0FF04F09BFB0028EFD1A078052805D02C -:104940005FF00200FEF772FB00201CBDE07800F073 -:10495000A1FA0320F6E72DE9FC4180460E46032527 -:1049600008460FF028FD002866D14046FEF773FD8B -:10497000040004D02078222804D2082081E543F2E4 -:1049800002007EE5A07F00F003073EB1012F0CD0AE -:1049900000203146FEF72BFC0500EFD1012F06D099 -:1049A000022F1AD0FFDF28466BE50120F1E7A07D3A -:1049B0003146022801D011B107E0112061E56846B7 -:1049C000FCF7E1FD0028D9D16946404606F0A7FC76 -:1049D0000500E8D10120A075E5E7A07D032804D1FA -:1049E000314890F83000C00701D02EB30EE026B158 -:1049F000A07F40071ED4002100E00121404606F0C0 -:104A0000AEFC0500CFD1A075002ECCD0314640467B -:104A100000F07DFA05461128C5D1A07F4107C2D418 -:104A2000316844F80E1F7168616040F00400207422 -:104A30000025B8E71125B6E7102022E570B50C4631 -:104A40000546FEF708FD010005D022462846BDE8D0 -:104A50007040FEF703BD43F2020070BD10B501289F -:104A600007D1114B9B78012B00D011B143F2040008 -:104A700010BD09F084FDBDE8104004F0F7BA012331 -:104A800000F012BA00231A46194600F00DBA70B5AC -:104A900006460C4608460FF041FC18B920680FF096 -:104AA00063FC18B1102070BDD8010020F74D2A7E9C -:104AB000112A04D0132A00D33EB10820F3E721467F -:104AC0003046FEF774FE60B1EDE70920132A0DD0E1 -:104AD000142A0BD0A188FF29E5D31520FEF7BEFAD2 -:104AE0000020D4E90012C5E90712DCE7A1881F29DC -:104AF000D9D31320F2E72DE9F047DFF8908307467A -:104B000090B098F818009A4615460C46132803D31F -:104B1000FFF738FB002822D120460FF0FFFBA0BB97 -:104B200028460FF0FBFB80BB20784FF00101C00747 -:104B30004FF0000602D08DF83A1001E08DF83A608F -:104B40002078C0F3C1008DF800006278072042B1E0 -:104B5000012A06D0022A02D0042A00D1062010B071 -:104B60002AE58DF809106088ADF80A00A088ADF834 -:104B7000100020788946C0F3C10001281FD0032807 -:104B80001DD038460FF0CAFB08B11020E7E738788F -:104B9000400808D0012809D0022807D0032805D0F2 -:104BA00043F20220DBE78DF8026001E08DF802900D -:104BB00057F8010FCDF80300B888ADF807000DF1E4 -:104BC0000100FEF7E8FB08B10320C8E72888ADF82C -:104BD00016006888ADF81C00A888ADF82200E888A7 -:104BE000ADF82800ADF82E60ADF8346068460AF0E4 -:104BF000BDF8E8B998F818004546112801D00820FA -:104C0000ADE706200BF084FE38B12078C0F3C10078 -:104C1000012804D0032802D004E012209FE795F871 -:104C2000240028B1FEF730FA022803D2132096E7B9 -:104C3000072094E7504600F00CF900288FD185F842 -:104C400019A068460AF051FA04F010FA002886D13B -:104C5000687E00F00EF9E08864280AD248B101208D -:104C600000F047F9040091D11220FEF7F7F9204631 -:104C700075E76421B0FBF1F0F2E770B50646154622 -:104C80000C4608460FF070FB18B928460FF06CFB75 -:104C900008B1102007E72A46214630460AF0A9FE4F -:104CA00004F0E4F90028F5D121787F29F2D105201C -:104CB000F9E67CB505460C4608460FF02FFB08B117 -:104CC00010207CBD2846FEF7C6FB20B100782228C4 -:104CD00004D208207CBD43F202007CBD6B4890F8F2 -:104CE0003000400701D511207CBD2178C80802D1D1 -:104CF0006078C20801D007207CBD890801D18008F6 -:104D000001D006207CBDADF8005020788DF802005F -:104D100060788DF803000220ADF80400684609F0C1 -:104D200042FF04F0A3F97CBD70B586B014460D4671 -:104D30000646FEF790FB28B10078222805D208200D -:104D400006B0B0E643F20200FAE728460FF033FB64 -:104D500020B944B120460FF025FB08B11020EFE741 -:104D600000202060A080494890F83000800701D5DD -:104D70001120E5E703A9304609F0BDFD18B100BFD9 -:104D800004F074F9DCE7ADF80060BDF81400ADF88C -:104D90000200BDF81600ADF80400BDF81000BDF823 -:104DA0001210ADF80600ADF808107DB1298809B1E0 -:104DB000ADF80610698809B1ADF80210A98809B1EB -:104DC000ADF80810E98809B1ADF80410DCB1BDF800 -:104DD0000610814201D9081A2080BDF80210BDF8E2 -:104DE0001400814201D9081A6080BDF80800BDF89E -:104DF0000410BDF816200144BDF812001044814291 -:104E000001D9081AA080684609F0AAFEB8E71CB5C7 -:104E10001F490968CDE90010684609F0AAFF04F0AF -:104E200025F91CBD1CB5002000900190684609F0D2 -:104E3000A0FF04F01BF91CBD108008885080488832 -:104E40009080C88810818888D0800020508190810F -:104E5000704710B5044604F075F830B1407830B1B1 -:104E6000204604F07EFB002010BD052010BD12205E -:104E700010BD10B504F066F8040000D1FFDF6078C3 -:104E800000B9FFDF6078401E607010BDD8010020BF -:104E90009C46020010B504F055F8040000D1FFDF75 -:104EA0006078401C6070F0E71CB5ADF800008DF82C -:104EB00002308DF803108DF8042068460AF05EFD7C -:104EC00004F0D4F81CBD0CB52DA2D2E90012CDE936 -:104ED00000120079694601EB501000780CBD027891 -:104EE000520804D0012A02D043F202207047FEF794 -:104EF00029BA10B548B183000022114605200FF0F1 -:104F000017F9052801D00320BFE70020BDE71FB532 -:104F10006A46FFF791FF68460AF04CF904F0A6F8DC -:104F200004B0B2E770B50C0006460DD0FEF793FA58 -:104F3000050000D1FFDFA6802889208128896081B3 -:104F40006889A081A889E081ADE510B500231A46E3 -:104F500003E0845C2343521CD2B28A42F9D30BB1E2 -:104F6000002092E7012090E700B530B1012803D07E -:104F7000022801D0FFDF002000BDFF2000BD00009F -:104F8000070605040302010010B504460FF0C6F938 -:104F900008B1102010BD2078C0F30210042807D8F3 -:104FA0006078072804D3A178102901D8814201D262 -:104FB000072010BDE078410706D421794A0703D4C1 -:104FC000000701D4080701D5062010BD002010BD40 -:104FD00010B513785C08837F64F3C7138377137865 -:104FE0009C08C37F64F30003C3771078C309487833 -:104FF00063F34100487013781C090B7864F347137E -:105000000B701378DB0863F3000048705078487128 -:1050100010BD10B5C4780B7864F300030B70C4782E -:10502000640864F341030B70C478A40864F382033A -:105030000B70C478E40864F3C3030B700379117830 -:1050400063F30001117003795B0863F34101117090 -:1050500003799B0863F3820111700079C00860F343 -:10506000C301117010BD70B514460D46064604F01C -:10507000D1F980B10178182221F00F01891C21F0AB -:10508000F001A03100F8081B21461FF0D6F8BDE85A -:10509000704004F0C2B929463046BDE87040132282 -:1050A000FEF7DCB92DE9F047064608A8894690E8E6 -:1050B00030041F469046142128461FF01AF900219B -:1050C000CAF80010B8F1000F03D0B9F1000F03D1F6 -:1050D00014E03878C00711D020680FF045F9C0BB44 -:1050E000B8F1000F07D12068123028602068143012 -:1050F00068602068A8602168CAF8001038788007C6 -:1051000024D560680FF04EF918BBB9F1000F21D01B -:10511000FFF770F90168C6F868118188A6F86C116C -:10512000807986F86E0101F002FDF94FEF60626848 -:1051300062B196F8680106F2691140081032FEF774 -:1051400059F91022394660681FF032F80020BDE896 -:10515000F08706E0606820B1E8606068C6F8640126 -:10516000F4E71020F3E730B5054608780C4620F048 -:105170000F00401C20F0F001103121700020607001 -:1051800095F8230030B104280FD0052811D0062847 -:1051900014D0FFDF20780121B1EB101F04D295F865 -:1051A000200000F01F00607030BD21F0F0002030C2 -:1051B00002E021F0F00030302070EBE721F0F00049 -:1051C0004030F9E7F0B591B0022715460C46064687 -:1051D0003A46ADF80870092103AB04F07AFF049059 -:1051E000002810D004208DF804008DF80170E03400 -:1051F000099605948DF818500AA968460DF0CAF86A -:1052000000B1FFDF012011B0F0BD10B588B00C4631 -:105210000A99ADF80000C3B11868CDF802005868CB -:10522000CDF80600ADF80A20102203A81EF0C0FF3A -:1052300068460AF062F803F019FF002803D1A17F45 -:1052400041F01001A17708B010BD0020CDF8020098 -:10525000E6E72DE9F84F0646808A0D4680B2824681 -:10526000FEF7F9F804463078DFF8A48200274FF003 -:105270000509A8F120080F2870D2DFE800F06FF2CE -:105280003708387D8CC8F1F0EFF35FF3F300A07FAF -:1052900000F00300022809D05FF0000080F0010157 -:1052A00050460BF085FB050003D101E00120F5E736 -:1052B000FFDF98F85C10C90702D0D8F860000BE057 -:1052C000032105F11D000EF004FDD5F81D009149E4 -:1052D000B0FBF1F201FB1200C5F81D0070686867B1 -:1052E000B068A8672078252800D0FFDFCAE0A07F3B -:1052F00000F00300022809D05FF0000080F00101F7 -:1053000050460BF055FB060003D101E00120F5E704 -:10531000FFDF3078810702D52178252904D040F0BD -:1053200001003070BDE8F88F02202870307F2871AE -:1053300006F11D002D36C5E90206F3E7A07F00F057 -:105340000300022808D0002080F0010150460BF035 -:105350002FFB040004D102E00120F5E7A7E1FFDF05 -:105360002078C10604D5072028703D346C60D9E749 -:1053700040F008002070D5E7E07F000700D5FFDF90 -:10538000307CB28800F0010301B05046BDE8F04F18 -:10539000092105F027BD04B9FFDF716821B1102292 -:1053A00004F124001EF004FF28212046FDF7B2FE80 -:1053B000A07F00F0030002280ED104F12400002396 -:1053C00000901A4621465046FFF71FFF112807D0CC -:1053D00029212046FDF79EFE307A84F82000A1E7BF -:1053E000A07F000700D5FFDF14F81E0F40F0080073 -:1053F0002070E782A761E761C109607861F341002D -:10540000014660F382016170307AE0708AE7A07F24 -:1054100000F00300022809D05FF0000080F00101D5 -:1054200050460BF0C5FA040003D101E00120F5E776 -:10543000FFDF022104F185000EF04BFC04202870F0 -:1054400004F5B4706860B4F88500288230481038DC -:105450007C346C61C5E9028064E703E024E15BE031 -:105460002DE015E0A07F00F00300022807D0002007 -:1054700080F0010150460BF09BFA18B901E00120C1 -:10548000F6E7FFDF324621465046BDE8F84FEAE531 -:1054900004B9FFDF20782128A1D93079012803D170 -:1054A000E07F40F00800E077324621465046FFF7A3 -:1054B000DAFD2046BDE8F84F2321FDF72BBE3279F7 -:1054C000AA8005F108030921504604F002FEE860B5 -:1054D00010B185F8009025E7A07F00F003000228B6 -:1054E00008D0002080F0010150460BF061FA040062 -:1054F00003D101E00120F5E7FFDF04F1620102239F -:105500001022081F0BF0DBF807703179417009E7B2 -:105510003802002040420F00A07F00F00300022864 -:1055200008D0002080F0010150460BF041FA050040 -:1055300003D101E00120F5E7FFDF95F8840000F0DA -:10554000030001287AD1A07F00F00307E07F10F06C -:10555000010602D0022F04D133E095F8A000C00765 -:105560002BD0D5F8601121B395F88320087C62F325 -:1055700087000874A17FCA09D5F8601162F3410061 -:105580000874D5F8601166F300000874AEB1D5F860 -:105590006001102204F1240188351EF009FE287EE6 -:1055A00040F001002876287820F0010005F88809ED -:1055B00000E016B1022F04D02DE095F88800C00756 -:1055C00027D0D5F85C1121B395F88320087C62F3CD -:1055D00087000874A17FCA09D5F85C1162F3410005 -:1055E0000874D5F85C1166F3000008748EB1D5F824 -:1055F0005C01102204F1240188351EF0D9FD2878C1 -:1056000040F0010005F8180B287820F0010005F89B -:10561000A009022F44D0002000EB400005EBC000A1 -:1056200090F88800800709D595F87C00D5F86421AA -:10563000400805F17D011032FDF7DCFE8DF8009089 -:1056400095F884006A4600F003008DF8010095F893 -:1056500088108DF8021095F8A0008DF803002146FF -:10566000504601F04DFA2078252805D0212807D092 -:10567000FFDF2078222803D922212046FDF74AFDAA -:10568000A07F00F0030002280CD0002080F0010170 -:1056900050460BF09FF900283FF44FAEFFDF41E684 -:1056A0000120B9E70120F1E7706847703AE6FFDFB3 -:1056B00038E670B5FE4C002584F85C5025660CF089 -:1056C00036FE04F11001204603F060FE84F83050ED -:1056D00070BD70B50D46FDF7BEFE040000D1FFDFC2 -:1056E0004FF4B87128461EF004FE04F1240028612E -:1056F000A07F00F00300022808D0012105F1E0009E -:105700000CF016FE002800D0FFDF70BD0221F5E787 -:105710000A46014602F1E0000CF02ABE70B50546CB -:10572000406886B001780A2906D00D2933D00E29A9 -:105730002FD0FFDF06B070BD86883046FDF78BFEA8 -:10574000040000D1FFDF20782128F3D028281BD1C6 -:10575000686802210E3001F0C8F9A8B16868082114 -:10576000801D01F0C2F978B104F1240130460AF03D -:10577000A2F803F07BFC00B1FFDF06B02046BDE8D5 -:1057800070402921FDF7C6BC06B0BDE8704003F0AB -:1057900044BE012101726868C6883046FDF75BFE91 -:1057A000040000D1FFDFA07F00F00301022902D135 -:1057B00020F01000A077207821280AD06868017AAC -:1057C00009B1007980B1A07F00F00300022862D007 -:1057D000FFDFA07F00F003000228ABD1FEF798F8AE -:1057E0000028A7D0FFDFA5E703F017FEA17F08067A -:1057F0002BD5E07FC00705D094F8200000F01F00F3 -:10580000102820D05FF0050084F823002078292894 -:105810001DD02428DDD1314604200EF033FD222195 -:105820002046FDF777FCA07F00F00300022830D06F -:105830005FF0000080F0010130460BF0CBF800284B -:10584000C7D0FFDFC5E70620DEE70420DCE701F074 -:105850000300022808D0002080F0010130460BF040 -:10586000A7F8050003D101E00120F5E7FFDF2521BE -:105870002046FDF74FFC03208DF80000694605F136 -:10588000E0000CF06CFD0228A3D00028A1D0FFDFBF -:105890009FE70120CEE703F0C0FD9AE72DE9F04332 -:1058A00087B09946164688460746FDF7D4FD0400A2 -:1058B0004BD02078222848D3232846D0E07F000709 -:1058C00043D4A07F00F00300022809D05FF000005D -:1058D00080F0010138460BF06BF8050002D00CE0B7 -:1058E0000120F5E7A07F00F00300022805D0012188 -:1058F000002238460BF053F805466946284601F069 -:1059000026F9009800B9FFDF45B10098E035056140 -:105910002078222806D0242804D007E0009900200F -:10592000086103E025212046FDF7F4FB00980121E2 -:1059300041704762868001A9C0E902890CF02AFD06 -:10594000022802D0002800D0FFDF07B0BDE8F083B6 -:1059500070B586B00546FDF77EFD017822291ED977 -:10596000807F00F00300022808D0002080F00101B1 -:1059700028460BF01DF804002FD101E00120F5E7C7 -:10598000FFDF2AE0B4F85E0004F1620630440178DB -:10599000427829B121462846FFF714FCB0B9C9E680 -:1059A000ADF804200921284602AB04F092FB0390D5 -:1059B0000028F4D005208DF80000694604F1E000CD -:1059C0000CF0CDFC022801D000B1FFDF0223102231 -:1059D000314604F15E000AF0A8FEB4F86000002829 -:1059E000D0D1A7E610B586B00446FDF734FD0178A6 -:1059F00022291BD9807F00F00300022808D0002054 -:105A000080F0010120460AF0D3FF040003D101E039 -:105A10000120F5E7FFDF06208DF80000694604F15C -:105A2000E0000CF09CFC002800D0FFDF06B010BDA9 -:105A30002DE9F05F05460C460027007890460109E5 -:105A40003E4604F1080BBA4602297DD0072902D050 -:105A50000A2909D146E0686801780A2905D00D298C -:105A600030D00E292ED0FFDFBCE114271C26002CDD -:105A70006BD08088A080FDF7EEFC5FEA000900D1C2 -:105A8000FFDF99F817005A46400809F11801FDF7A1 -:105A9000B1FC6868C0892082696851F8060FC4F8B3 -:105AA00012004868C4F81600A07E20F0060001E04D -:105AB0001802002040F00100A07699F81E0040F086 -:105AC00020014DE01A270A26002CD1D0C088A080E2 -:105AD000FDF7C1FC050000D1FFDF59462846FFF75E -:105AE00042FB7FE10CB1A88BA080287A0B287DD0E7 -:105AF00006DC01287BD0022808D0032804D135E039 -:105B00000D2875D00E2874D0FFDF6BE11E27092603 -:105B1000002CADD0A088FDF79EFC5FEA000900D103 -:105B2000FFDF287B00F003000128207A1BD020F043 -:105B300001002072297B890861F341002072297BD2 -:105B4000C90861F3820001E041E1F2E02072297BA3 -:105B5000090961F3C300207299F81E0040F040016A -:105B600089F81E103EE140F00100E2E713270D2600 -:105B7000002CAAD0A088FDF76EFC8146807F00F043 -:105B80000300022808D0002080F00101A0880AF05C -:105B90000FFF050003D101E00120F5E7FFDF99F8D1 -:105BA0001E0000F00302022A50D0686F817801F0D5 -:105BB00003010129217A4BD021F001012172837860 -:105BC0009B0863F3410121728378DB0863F3820150 -:105BD000217283781B0963F3C3012172037863F395 -:105BE00006112172437863F3C71103E061E0A9E075 -:105BF00090E0A1E0217284F809A0C178A172022A84 -:105C000029D00279E17A62F30001E1720279520847 -:105C100062F34101E1720279920862F38201E1725A -:105C20000279D20862F3C301E1724279217B62F307 -:105C3000000121734279520862F3410121734279D4 -:105C4000920862F382012173407928E0A86FADE7E2 -:105C500041F00101B2E74279E17A62F30001E172B9 -:105C60004279520862F34101E1724279920862F38B -:105C70008201E1724279D20862F3C301E1720279D2 -:105C8000217B62F3000121730279520862F3410122 -:105C900021730279920862F3820121730079C008AE -:105CA00060F3C301217399F80000232831D926211C -:105CB00040E018271026E4B3A088FDF7CCFB83460C -:105CC000807F00F00300022809D0002080F001014D -:105CD000A0880AF06DFE5FEA000903D101E001200F -:105CE000F4E7FFDFE868A06099F8000040F00401E5 -:105CF00089F8001099F80100800708D50120207369 -:105D00009BF8000023286DD92721584651E084F8DC -:105D10000CA067E015270F265CB1A088FDF79BFB60 -:105D2000814606225946E86808F059F90120A07317 -:105D3000A2E041E048463CE016270926E4B3287B70 -:105D400020724FE0287B19270E26ACB3C4F808A0B8 -:105D5000A4F80CA0012807D0022805D0032805D0FC -:105D6000042803D0FFDF0DE0207207E0697B0428E0 -:105D700001F00F0141F0800121721ED0607A20F005 -:105D800003006072A088FDF766FB054600782128B5 -:105D900028D0232800D0FFDFA87F00F003000228CE -:105DA00013D0002080F00101A0880AF013FE222108 -:105DB0002846FDF7AFF915E004E0607A20F0030013 -:105DC000401CDEE7A8F8006011E00120EAE70CB112 -:105DD0006888A080287A03282ED004280AD00528B5 -:105DE00050D0FFDFA8F800600CB12780668000204B -:105DF000BDE8F09F15270F26002CE3D0A088FDF703 -:105E00002AFB807F00F00300022809D05FF0000029 -:105E100080F00101A0880AF0CBFD050003D101E06C -:105E20000120F5E7FFDFD5F81D000622594608F0EE -:105E3000D6F884F80EA0D5E717270926002CC1D084 -:105E4000A088FDF708FB8146807F00F00300022850 -:105E500008D0002080F00101A0880AF0A9FD05000B -:105E600003D101E00120F5E7FFDF6878800701D565 -:105E7000022000E00120207299F800002328B1D907 -:105E8000272157E719270E26002C9BD0A088FDF765 -:105E9000E2FA5FEA000900D1FFDFC4F808A0A4F825 -:105EA0000CA084F808A0A07A40F00300A07299F832 -:105EB0001E10C90961F38200A07299F81F2099F899 -:105EC0001E1012EAD11F05D099F8201001F01F0111 -:105ED00010292BD020F00800A07299F81F10607ACA -:105EE00061F3C3006072697A01F003010129A2D154 -:105EF00040F00400607299F81E0000F003000228D0 -:105F0000E87A16D0217B60F300012173AA7A607BC6 -:105F100062F300006073EA7A520862F34101217370 -:105F2000A97A490861F3410060735BE740F008001B -:105F3000D2E7617B60F300016173AA7A207B62F390 -:105F400000002073EA7A520862F341016173A97A72 -:105F5000490861F34100207344E710B5FE4C30B1AD -:105F60000146102204F120001EF022F9012084F8DD -:105F7000300010BD10B5044600F0D9FDF6492046AA -:105F80001022BDE8104020311EF012B970B5F24D5C -:105F900006004FF0000413D00EF0C0F908B1102431 -:105FA0000CE00621304608F001F8411C05D02866B7 -:105FB0005FF0010085F85C0000E00724204670BD1A -:105FC0000020F7E7007810F00F0204D0012A05D076 -:105FD000022A0CD110E0000909D10AE000090128C9 -:105FE00007D0022805D0032803D0042801D00720B9 -:105FF00070470870002070470620704705282AD295 -:10600000DFE800F003070F171F00087820F0FF00FB -:106010001EE0087820F00F00401C20F0F000103047 -:1060200016E0087820F00F00401C20F0F00020302F -:106030000EE0087820F00F00401C20F0F000303017 -:1060400006E0087820F00F00401C20F0F0004030FF -:10605000087000207047072070472DE9F041804606 -:1060600088B00D46002708460EF0A5F9A8B94046AD -:10607000FDF7F1F9040003D02078222815D104E0BF -:1060800043F2020008B0BDE8F08145B9A07F4106A7 -:1060900003D500F00300022801D01020F2E7A07F12 -:1060A000C10601D4010702D50DB10820EAE7E17F5E -:1060B000090701D50D20E5E700F00300022805D10E -:1060C00025B12846FEF760FF0700DBD1A07F00F076 -:1060D0000300022808D0002080F0010140460AF0A9 -:1060E00067FC060002D00FE00120F5E7A07F00F07A -:1060F000030002280ED0002080F00101002240465B -:106100000AF04DFC060007D0A07F00F00300022833 -:1061100004D009E00120EFE70420B3E725B12A46C7 -:1061200031462046FEF754FF6946304600F00FFD29 -:10613000009800B9FFDF0099022006F1E0024870E4 -:10614000C1F824804A6100220A81A27F02F0030282 -:10615000022A1CD001200871287800F00102087E74 -:1061600062F3010008762A78520862F3820008760A -:106170002A78920862F3C30008762A78D20862F37C -:106180000410087624212046FCF7C4FF33E035B321 -:106190000871301D88613078400908777078C0F345 -:1061A00040004877287800F00102887F62F3010000 -:1061B0008877A27FD20962F382008877E27F62F358 -:1061C000C3008877727862F304108877A878C8775C -:1061D00001F1210228462031FEF71BFF03E00320D6 -:1061E00008710520087625212046FCF793FFA07F43 -:1061F00020F04000A07701A900980CF0CBF802280D -:1062000001D000B1FFDF38463CE72DE9FF4F534A8C -:106210000D4699B09A4607CA0BAB002783E80700E2 -:106220001998FDF718F9060006D03078262806D010 -:1062300008201DB0BDE8F08F43F20200F9E7B07FFF -:1062400000F00309B9F1020F03D00020284302D067 -:1062500006E00120FAE71B98FEF796FE0028E8D139 -:10626000B07F00F00300022801D11B9979BB0228FE -:1062700008D0002080F0010119980AF099FB040071 -:1062800003D101E00120F5E7FFDF852D28D007DCF1 -:10629000F5B1812D1ED0822D1ED0832D08D11DE099 -:1062A000862D1FD0882D1FD0892D1FD08A2D1FD05D -:1062B0000F2020710F281DD003F0ACF8E0B10120B1 -:1062C0008DF84000201D11902079B8B167E111E0F0 -:1062D0000020EEE70120ECE70220EAE70320E8E7F0 -:1062E0000520E6E70620E4E70820E2E70920E0E7EA -:1062F0000A20DEE707209CE711209AE7B9F1020F98 -:1063000003D0A56F03D1A06F02E0656FFAE7606F5D -:10631000804632D04FF0010000904FF00200019013 -:10632000214630461B9AFEF753FE1B98007800F07A -:106330000101A87861F30100A870B17FC90961F378 -:106340008200A870F17F61F3C300A870617861F3E7 -:106350000410A870207803E018020020A446020070 -:10636000400928706078C0F3400068701B988078FE -:10637000E87000206871287103E00220009001207D -:106380000190A87898F80210C0F3C000C1F3C001D2 -:1063900008405FEA000B2CD050460DF0BFFF90BBC9 -:1063A000DAF80C000DF0BAFF68BBDAF81C000DF04B -:1063B000B5FF40BBDAF80C00A060DAF81C00E06022 -:1063C00098F80100617800F0010041EA4000607037 -:1063D00098F80210C0B2C1F30011891E0840607025 -:1063E00000202077019906F1170002290CD0012125 -:1063F0000BE098F80110607801F00101FD2242EAFB -:1064000041010840E3E732E0002104EB81014861EB -:106410000099701C022901D0012100E0002104EB49 -:1064200081014861A87800F00300012858D198F84C -:10643000020000F00300012852D1B9F1020F04D08C -:106440002A1D691D1B98FEF7E4FD297998F80400C0 -:1064500001408DF83810687998F8052010408DF8C3 -:106460003C0001433CD050460DF058FF08B11020CD -:10647000DFE60AF110010491B9F1020F18D00846C5 -:106480005FF0000104F18C03CDE9000304F5AE7266 -:1064900002920EAB5A462046FEF704FE0028E7D1D2 -:1064A000B9F1020F08D0504608D14FF0010107E0C2 -:1064B00050464FF00101E5E70498F5E74FF0000181 -:1064C00004F1A403CDE9000304F5B072029281F057 -:1064D00001010FAB5A462046FEF7E4FD0028C7D164 -:1064E0006078800734D4A87898F80210C0F3800050 -:1064F000C1F3800108432BD0297898F800000BAA3B -:10650000B9F1020F06D032F811204300DA4002F050 -:1065100003070AE032F810204B00DA4012F00307BC -:1065200005D0012F0BD0022F0BD0032F07D0BBF1CA -:10653000000F0DD0012906D0042904D008E002275D -:10654000F5E70127F3E7012801D0042800D104274B -:10655000B07F40F08000B077F17F6BF30001F177FE -:10656000607881074FF003000CD5A071BBF1000FDC -:1065700015D100BF8DF85C0017AA3146199800F0BC -:10658000BFFA0CE00221022F18D0012F18D0042FDF -:1065900022D00020A071B07F20F08000B0772521AC -:1065A0003046FCF7B7FD10A904F1E0000BF0D7FE70 -:1065B00010B1022800D0FFDF00203AE6A171D9E730 -:1065C000A1710D2104F120001DF093FE207840F010 -:1065D000020020700420CDE70120A071DFE72DE943 -:1065E000F04387B09046894604460025FCF733FF08 -:1065F000060006D03078272806D0082007B0BDE86E -:10660000F08343F20200F9E7B07F00F003000228B4 -:1066100008D0002080F0010120460AF0C9F90400EA -:1066200003D101E00120F5E7FFDFA7795FEA090068 -:1066300005D0012821D0B9F1020F26D110E0B8F120 -:10664000000F22D1012F05D0022F05D0032F05D036 -:10665000FFDF2DE00C252BE0012529E0022527E0B6 -:1066600040460DF05BFEB0B9032F0ED1102241461B -:1066700004F11D001DF09CFD1AE0012F02D0022F35 -:1066800003D104E0B8F1000F12D00720B6E740466E -:106690000DF044FE08B11020B0E7102104F11D00F8 -:1066A0001DF005FE0621404607F080FCC4F81D00E1 -:1066B0002078252140F0020020703046FCF72AFDAA -:1066C0002078C10713D020F00100207002208DF83F -:1066D000000004F11D0002908DF804506946C3309B -:1066E0000BF03DFE022803D010B1FFDF00E025775C -:1066F000002083E730B587B00D460446FCF7ABFEBB -:10670000A0B1807F00F00300022812D05FF00000EB -:1067100080F0010120460AF04BF904000ED0284613 -:106720000DF0FCFD38B1102007B030BD43F202007F -:10673000FAE70120ECE72078400701D40820F3E7CE -:10674000294604F13D00202205461DF031FD207848 -:1067500040F01000207001070FD520F008002070D5 -:1067600007208DF80000694604F1E00001950BF068 -:10677000F6FD022801D000B1FFDF0020D4E770B59C -:106780000D460646FCF767FE18B10178272921D18E -:1067900002E043F2020070BD807F00F00300022897 -:1067A00008D0002080F0010130460AF001F9040011 -:1067B00003D101E00120F5E7FFDFA079022809D12C -:1067C0006078C00706D02A4621463046FEF7FAFC1C -:1067D00010B10FE0082070BDB4F860000E280BD295 -:1067E00004F1620102231022081F09F068FF012151 -:1067F00001704570002070BD112070BD70B5064657 -:1068000014460D4608460DF089FD18B920460DF0D6 -:10681000ABFD08B1102070BDA6F57F40FF380ED04B -:106820003046FCF718FE38B1417822464B08811CEF -:106830001846FCF7DFFD07E043F2020070BD20467A -:10684000FDF73EFE0028F9D11021E01D0DF041FAC0 -:10685000E21D294604F1170000F089F9002070BDFF -:106860002DE9F04104468AB01546884600270846BF -:106870000DF0A1FD18B928460DF09DFD18B11020AE -:106880000AB0BDE8F0812046FCF7E5FD060003D024 -:10689000307827281BD102E043F20200F0E7B07FF6 -:1068A00000F00300022809D05FF0000080F0010131 -:1068B00020460AF07DF8040003D101E00120F5E74D -:1068C000FFDF2078400702D56078800701D40820D8 -:1068D000D6E7B07F00F00300022803D0A06F03D1F9 -:1068E000A16F02E0606FFAE7616F407800B19DB17F -:1068F000487810B1B8F1000F0ED0ADB1EA1D06A86E -:10690000E16800F034F9102206A905F117001DF026 -:1069100023FC18B1042707E00720B1E71022E91D86 -:1069200004F12D001DF044FCB8F1000F06D0102238 -:1069300008F1070104F11D001DF03AFC2078252123 -:1069400040F0020020703046FCF7E4FB2078C107DD -:1069500015D020F00100207002208DF8000004F115 -:106960001D000290103003908DF804706946B3301A -:106970000BF0F5FC022803D010B1FFDF00E0277711 -:1069800000207DE7F8B515460E460746FCF763FD87 -:10699000040004D02078222804D00820F8BD43F257 -:1069A0000200F8BDA07F00F00300022802D043F2ED -:1069B0000500F8BD30460DF0B1FC18B928460DF0C1 -:1069C000ADFC08B11020F8BD00953288B31C2146FB -:1069D0003846FEF71AFC112815D00028F3D1297C7F -:1069E0004A08A17F62F3C711A177297CE27F61F396 -:1069F0000002E277297C890884F82010A17F21F029 -:106A00004001A177F8BDA17F0907FBD4D6F80200A9 -:106A1000C4F83600D6F80600C4F83A003088A086DC -:106A20001022294604F124001DF0C2FB287C4108F5 -:106A3000E07F61F34100E077297C61F38200E07739 -:106A4000287C800884F82100A07F40F00800A0770F -:106A50000020D3E770B50D4606460BB1072070BD88 -:106A6000FCF7F9FC040007D02078222802D3A07F8D -:106A7000800604D4082070BD43F2020070BDADB1A1 -:106A80002946304608F017FF02F0F0FA297C4A0840 -:106A9000A17F62F3C711A177297CE27F61F3000235 -:106AA000E277297C890884F8201004E0304608F059 -:106AB0002AFF02F0DBFAA17F21F02001A17770BD4F -:106AC00070B50D46FCF7C7FC040005D028460DF054 -:106AD0004BFC20B1102070BD43F2020070BD29466E -:106AE0002046FEF740FB002070BD04E010F8012BAB -:106AF0000AB100207047491E89B2F7D201207047C1 -:106B000070B51546064602F085FC040000D1FFDF93 -:106B1000207820F00F00801C20F0F0002030207042 -:106B200066802868A060BDE8704002F076BC10B5B1 -:106B3000134C94F83000002808D104F12001A1F191 -:106B400010000BF04EFC012084F8300010BD10B195 -:106B500090F8B9202AB10A4890F8350018B1002001 -:106B600003E0B83001E0064834300860704708B5EB -:106B70000023009313460A460AF015F908BD0000E9 -:106B80001802002018B18178012938D101E01020C5 -:106B90007047018842F60112881A914231D018DC00 -:106BA00042F60102A1EB020091422AD00CDC41B373 -:106BB000B1F5C05F25D06FF4C050081821D0A0F502 -:106BC0007060FF381BD11CE001281AD002280AD1BE -:106BD00017E0B0F5807F14D008DC012811D002281E -:106BE0000FD003280DD0FF2809D10AE0B0F5817F2E -:106BF00007D0A0F58070033803D0012801D0002011 -:106C000070470F2070470A281ED007DC18D2DFE833 -:106C100000F0191B1F1F171F231D1F21102815D03F -:106C200008DC0B2812D00C2810D00D2816D00F2805 -:106C300006D10DE011280BD084280BD087280FD067 -:106C400003207047002070470520704707207047D9 -:106C50000F20704704207047062070470C207047B3 -:106C600043F20200704738B50C46050041D0694632 -:106C7000FFF7A8F9002819D19DF80010607861F39A -:106C8000020060706946681CFFF79CF900280DD16E -:106C90009DF80010607861F3C5006070A978C1F3B9 -:106CA0004101012903D0022905D0072038BD2178F0 -:106CB00021F0200102E0217841F0200121704107FC -:106CC00004D0A978C90861F386106070607810F06C -:106CD000380F07D0A978090961F3C710607010F068 -:106CE000380F02D16078400603D5207840F040008C -:106CF0002070002038BD70B504460020088015467D -:106D00006068FFF7B0FF002816D12089A18988426A -:106D100011D860688078C0070AD0B1F5007F0AD822 -:106D200040F20120B1FBF0F200FB1210288007E0D6 -:106D3000B1F5FF7F01D90C2070BD01F2012129803E -:106D4000002070BD10B50478137864F3000313704D -:106D50000478640864F3410313700478A40864F3AE -:106D6000820313700478E40864F3C3031370047897 -:106D7000240964F3041313700478640964F345135D -:106D800013700078800960F38613137031B10878AE -:106D9000C10701D1800701D5012000E0002060F388 -:106DA000C713137010BD4278530702D002F00703D7 -:106DB00006E012F0380F02D0C2F3C20300E0012354 -:106DC0004A7863F302024A70407810F0380F02D01C -:106DD000C0F3C20005E0430702D000F0070000E066 -:106DE000012060F3C5024A7070472DE9F04F95B05D -:106DF0000D00824612D0122128461DF058FA4FF697 -:106E0000FF7B05AA0121584606F01BFF00242646F9 -:106E100037464FF420586FF4205972E0102015B017 -:106E2000BDE8F08F9DF81E0001280AD1BDF81C10A6 -:106E300041450BD011EB09000AD001280CD00228E3 -:106E40000CD0042C0ED0052C0FD10DE0012400E055 -:106E50000224BDF81A6008E0032406E00424BDF80B -:106E60001A7002E0052400E00624BDF81A1051450E -:106E700047D12C74BEB34FF0000810AA4FF0070A98 -:106E8000CDE90282CDE900A80DF13C091023CDF82F -:106E9000109042463146584606F086FF08BBBDF8C2 -:106EA0003C002A46C0B210A90BF004FBC8B9AE8161 -:106EB000CFB1CDE900A80DF1080C0AAE40468CE830 -:106EC0004102132300223946584606F06DFF40B9AF -:106ED000BDF83C00F11CC01EC0B22A1D0BF0EAFA3E -:106EE00010B103209BE70AE0BDF82900E881062CD9 -:106EF00005D19DF81E00A872BDF81C002881002055 -:106F00008DE705A806F0A9FE00288BD0FFF77BFED1 -:106F100085E72DE9F0471C46DDE90978DDF820908A -:106F200015460E00824600D1FFDF0CB1208818B153 -:106F3000D5B11120BDE8F087022D01D0012100E07C -:106F4000002106F1140005F06BFDA8F800000246D0 -:106F50003B462946504603F0BCF8C9F8000008B982 -:106F6000A41C3C600020E5E71320E3E7F0B41446DE -:106F7000DDE904528DB1002314B1022C09D101E0E6 -:106F8000012306E00D7CEE0703D025F00105012367 -:106F90000D742146F0BC03F025BF1A80F0BC704789 -:106FA0002DE9FE4F91461A881C468A468046FAB162 -:106FB00002AB494603F08DF8050019D04046A61CE7 -:106FC000278809F039FE3246072629463B460096B7 -:106FD00009F047FA20882346CDE900504A46514639 -:106FE0004046FFF7C3FF002020800120BDE8FE8F50 -:106FF0000020FBE72DE9F04786B09146DDE90E461B -:107000000F46824603AA05A904A8109D8DE8070033 -:107010009846324621465046FFF77BFF049909B156 -:10702000012200E000222A70002818D1F94A03AB9F -:107030001060059A009104F11400CDE901204A4640 -:107040003946504606F0A3F8A8B1092811D2DFE866 -:1070500000F005080510100A0C0C0E00002006B008 -:1070600068E71120FBE70720F9E70820F7E70D2084 -:10707000F5E70320F3E7BDF80C100498CDE9000113 -:107080004346324621465046FFF770FFE6E72DE9BA -:10709000F04389B00D46DDE9108781461C4616464F -:1070A000142103A81DF025F9012002218DF81010EC -:1070B0008DF80C008DF81170ADF8146064B1A278F1 -:1070C000D20709D08DF81600E088ADF81A00A08824 -:1070D000ADF81800A068079008A80095CDE9011048 -:1070E000424603A948466B68FFF784FF09B0BDE834 -:1070F000F083F0B58BB0002406460694079407276A -:10710000089405A80994019400970294CDE90340DE -:107110000D4610232246304606F046FE78B90AA8EE -:1071200006A9019400970294CDE90310BDF814302C -:1071300000222946304606F00DFC002801D0FFF75A -:1071400062FD0BB0F0BD06F0ADBA2DE9FC410C4676 -:107150008046002602F05EF9054620780D287DD293 -:10716000DFE800F0BC0713B325BD49496383AF9541 -:107170009B00A848006820B1417841F0100141709F -:10718000ADE0404602F076F9A9E00421404609F05E -:107190000FFC070000D1FFDF07F11401404605F0A6 -:1071A000D3FBA5BB13214046FDF748FC97E0042123 -:1071B000404609F0FDFB070000D1FFDFE088ADF895 -:1071C00000000020B8819DF80000010704D5C0062A -:1071D00002D5A088B88105E09DF8010040067ED563 -:1071E000A088F88105B9FFDF22462946404601F014 -:1071F00063FC022673E0E188ADF800109DF80110F1 -:1072000009060FD5072803D006280AD00AE024E093 -:107210000421404609F0CCFB060000D1FFDFA08826 -:10722000F0810226CDB9FFDF17E00421404609F0C6 -:10723000BFFB070000D1FFDF07F1140006F069FA79 -:1072400090F0010F02D1E079000648D5387C022683 -:1072500040F00200387405B9FFDF00E03EE022464E -:107260002946404601F028FC39E00421404609F057 -:107270009FFB017C002D01F00206C1F3400161710A -:10728000017C21F002010174E7D1FFDFE5E702266E -:107290000121404602F020F921E00421404609F096 -:1072A00087FB0546606800902089ADF80400012244 -:1072B0006946404602F031F9287C20F0020028742B -:1072C0000DE0002DC9D1FFDFC7E7022600214046AF -:1072D000FBF788F8002DC0D1FFDFBEE7FFDF3046A7 -:1072E000BDE8FC813EB50C0009D001466B4601AA01 -:1072F000002006F0DBFD20B1FFF785FC3EBD10202D -:107300003EBD00202080A0709DF8050002A900F07D -:107310000700FEF773FE50B99DF8080020709DF835 -:10732000050002A9C0F3C200FEF768FE08B1032001 -:107330003EBD9DF8080060709DF80500C109A07869 -:1073400061F30410A0709DF80510890961F3C30072 -:10735000A0709DF80410890601D5022100E00121EA -:1073600061F342009DF8001061F30000A07000205E -:107370003EBD70B5144606460D4651EA040005D0E0 -:1073800075B108460DF00EF878B901E0072070BD20 -:107390002946304606F0EBFD10B1BDE8704032E4FE -:1073A00054B120460CF0FEFF08B1102070BD2146FC -:1073B0003046BDE8704095E7002070BD2DE9FC5FC8 -:1073C0000C4690460546002701780822007A3E4682 -:1073D000B2EB111F7ED104F10A0100910A31821E25 -:1073E0004FF0020A04F1080B0191092A73D2DFE879 -:1073F00002F0ECDF05F427277AA9CD006888042184 -:1074000009F0D6FA060000D1FFDFB08920B152277B -:107410000726C2E07C02002051271026002C7DD0D8 -:107420006888A0800120A071A88900220099FFF738 -:10743000A0FF002873D1A8892081288AE081D1E0AB -:10744000B5F81290072824D1E87B000621D55127F2 -:1074500009F1140086B2002CE1D0A889002200991D -:10746000FFF787FF00285AD16888A08084F806A01B -:10747000A88920810120A073288A2082A4F8129074 -:10748000A88A009068884B46A969019A01F0F1FA30 -:10749000A8E0502709F1120086B2002C3ED0A8893E -:1074A00000225946FFF765FF002838D16888A08080 -:1074B000A889E080287A072813D002202073288A20 -:1074C000E081E87BC0096073A4F81090A88A00905E -:1074D000688801E083E080E04B4604F11202A9696C -:1074E000D4E70120EAE7B5F81290512709F114001A -:1074F00086B2002C66D06888042109F059FA8346C8 -:107500006888A080A88900220099FFF732FF002830 -:107510006ED184F806A0A889208101E052E067E0DE -:107520000420A073288A2082A4F81290A88A0090D0 -:1075300068884B46A969019A01F09BFAA989ABF8C2 -:107540000E104FE06888FBF786FF07466888042125 -:1075500009F02EFA064607B9FFDF06B9FFDF687BA0 -:10756000C00702D05127142601E0502712264CB341 -:107570006888A080502F06D084F806A0287B594642 -:1075800001F087FA2EE0287BA11DF9E7FE49A889C2 -:107590004989814205D1542706269CB16888A0807C -:1075A00020E053270BE06888A080A889E08019E0DC -:1075B0006888042109F0FCF900B9FFDF5527082687 -:1075C000002CF0D1A8F8006011E056270726002C07 -:1075D000F8D06888A080002013E0FFDF02E00128D7 -:1075E00008D0FFDFA8F800600CB12780668000207B -:1075F000BDE8FC9F57270726002CE3D06888A080B1 -:10760000687AA071EEE7401D20F0030009B1414304 -:10761000091D01EB4000704713B5DB4A00201071D3 -:10762000009848B10024684608F0DFFF002C02D122 -:10763000D64A009911601CBD01240020F4E770B502 -:107640000D46064686B014465C2128461CF051FEC5 -:1076500004B9FFDFA0786874A2782188284601F079 -:1076600042FA0020A881E881228805F11401304601 -:1076700005F04FF96A460121304606F0E2FA19E0BA -:107680009DF80300000715D5BDF806103046FFF73A -:1076900030FD9DF80300BDF8061040F010008DF895 -:1076A0000300BDF80300ADF81400FF233046059A2F -:1076B00006F028FC684606F0D0FA0028E0D006B0B4 -:1076C00070BD10B50C4601F1140005F059F90146E2 -:1076D000627C2046BDE8104001F03ABA70B505461C -:1076E000042109F065F9040000D1FFDF04F1140161 -:1076F0000C46284605F028F921462846BDE870408A -:1077000005F029B970B58AB00C460646FBF7A3FE12 -:10771000050014D02878222827D30CB1A08890B176 -:1077200001208DF80C0003208DF8100000208DF84A -:10773000110054B1A088ADF81800206807E043F2AA -:1077400002000AB070BD0920FBE7ADF818000590F3 -:107750000421304609F02CF9040000D1FFDF04F1C8 -:10776000140005F024F9000701D40820E9E701F02E -:1077700051FE60B108A802210094CDE9011095F8EE -:10778000232003A930466368FFF734FCD9E71120B2 -:10779000D7E72DE9F04FB2F802A0834689B015462D -:1077A00089465046FBF757FE07460421504609F02C -:1077B000FFF80026044605964FF002080696ADF83D -:1077C0001C6007B9FFDF04B9FFDF4146504603F0F4 -:1077D00070FE50B907AA06A905A88DE80700424621 -:1077E000214650466368FFF794FB674807AB066085 -:1077F000DDE9051204F11400CDF80090CDE9032075 -:10780000CDE9013197F82320594650466B6805F0C1 -:1078100017F906000AD0022E04D0032E14D0042E2D -:1078200000D0FFDF09B03046BDE8F08FBDF81C0086 -:107830000028F7D00599CDE9001042462146504670 -:107840006368FFF793FBEDE7687840F00800687025 -:10785000E8E72DE9F04F9BB004464FF000084A4896 -:10786000ADF85480ADF83080ADF85080A0F80880B5 -:10787000ADF81480ADF81880ADF82080ADF81C800C -:10788000007916460D464746012808D0022806D042 -:10789000032804D0042802D008201BB0C4E72046E7 -:1078A0000CF03CFDD0BB28460CF038FDB0BB606846 -:1078B0000CF081FD90BB606848B1608921898842E5 -:1078C00002D8B1F5007F01D90C20E6E780460BAA6B -:1078D00006A92846FFF70FFA0028DED168688078ED -:1078E000C0F34100022808D19DF8190010F0380FAC -:1078F00003D028690CF056FD80B905A92069FFF76F -:10790000B2F90028C9D1206950B1607880079DF88C -:10791000150000F0380002D5D0B301E011E0B8BB8B -:107920009DF8140080060ED59DF8150010F0380F54 -:1079300003D060680CF036FD18B960680CF03BFDB0 -:1079400008B11020A9E707A96069FFF78CF90028A2 -:10795000A3D1606940B19DF81D0000F00701012925 -:107960003FD110F0380F3CD008A9A069FFF77BF990 -:10797000002892D19DF81C00800632D49DF820008A -:1079800080062ED4A06904E07C02002014000020B0 -:1079900027E040B19DF8210000F00701012920D126 -:1079A00010F0380F1DD0E06818B10078C8B11C285D -:1079B00017D20EAA611C2046FFF7C4F90120B94670 -:1079C00060F30F27BA4607468DF84E0042F60300D3 -:1079D000ADF84C000DF13B0217A928680AF089FDAB -:1079E00008B1072059E79DF85C0016A9CDF8009072 -:1079F000C01CCDE9019100F0FF0B00230BF2012226 -:107A0000514613A806F060F8F0BBBDF85800099085 -:107A1000FE482A8929690092CDE901106B89BDF8D9 -:107A20002C202868069906F04FF801007ED12078B6 -:107A30004FF0020AC10601D480062BD5ADF80C9098 -:107A4000606950B907A906A8FFF7ADF99DF81D00B8 -:107A500020F00700401C8DF81D009DF81C008DF8DB -:107A60004E7040F0C8008DF81C0042F60210ADF8D0 -:107A70004C000CA903AACDF800A0CDE901210023F8 -:107A800040F2032213A800E01EE0079906F01CF85C -:107A900001004BD1DD484D4608385B460089ADF802 -:107AA00039000EA8CDE90290CDF80490CDF81090E1 -:107AB0004FF007090022CDF80090BDF858104FF69E -:107AC000FF7005F047FF10B1FFF79DF8E5E69DF860 -:107AD0003800000625D52946012060F30F218DF8D6 -:107AE0004E704FF42450ADF84C00ADF81050627851 -:107AF0009DF81000002362F300008DF810006278FA -:107B0000CDF800A0520862F341008DF8100004AADD -:107B1000CDE9012540F2032213A805F0D5FF0100AD -:107B200004D1606888B32069A8B900E086E005A99F -:107B300006A8FFF738F96078800706D49DF815008D -:107B400020F038008DF8150005E09DF8140040F095 -:107B500040008DF814008DF84E7042F60110ADF81B -:107B60004C00208940F20121B0FBF1F201FB12022E -:107B7000606814ABCDF80080CDE90103002313A8A1 -:107B8000059905F0A1FF010058D12078C00729D040 -:107B9000ADF80C50A06950B908A906A8FFF703F981 -:107BA0009DF8210020F00700401C8DF821009DF871 -:107BB00020008DF84E7040F040008DF8200042F615 -:107BC0000310ADF84C0015A903AACDF800A0CDE92B -:107BD0000121002340F2032213A8089905F074FF45 -:107BE00001002BD1E06868B32946012060F30F2122 -:107BF0008DF84E7042F60410ADF84C00E06800239A -:107C000002788DF8602040788DF86100E06818AA4D -:107C10004088ADF86200E06800798DF86400E068A3 -:107C2000C088ADF86500CDF80090CDE901254FF48E -:107C3000027213A805F048FF010003D0099800F074 -:107C4000B3FF2AE6714803210838017156B1008953 -:107C50003080BDF850007080BDF83000B080BDF8B5 -:107C60005400F080002018E670B501258AB0164651 -:107C70000B46012802D0022816D104E08DF80E50E0 -:107C80004FF4205003E08DF80E5042F60100ADF89D -:107C90000C005BB10024601C60F30F2404AA08A947 -:107CA00018460AF026FC18B107204AE5102048E5DE -:107CB00004A99DF820205548CDE90021801E02909E -:107CC0000023214603A802F2012205F0FDFE10B1B7 -:107CD000FEF799FF35E54D4808380EB1C18831806F -:107CE000057100202DE5F0B593B0074601268DF80B -:107CF0003E6041F60100ADF83C0012AA0FA93046E3 -:107D0000FFF7B2FF002848D1404C0025083CE7B3FC -:107D10001C2102A81CF0EDFA9DF808008DF83E60C9 -:107D200040F020008DF8080042F60520ADF83C0038 -:107D30000E959DF83A00119520F00600801C8DF8F4 -:107D40003A009DF838006A4620F0FF008DF83800B0 -:107D50009DF8390009A920F0FF008DF839000420B2 -:107D6000ADF82C00ADF830000EA80A9011A80D90C7 -:107D70000FA80990ADF82E5002A8FFF76AFD002861 -:107D80000BD1BDF80000608100E008E0BDF8040000 -:107D9000A081401CE0812571002013B0F0BD6581F9 -:107DA000A581BDF84800F4E72DE9F74F1749A0B0C9 -:107DB0000024083917940A79A146012A04D0022A1E -:107DC00002D0082023B02FE5CA88824201D00620C5 -:107DD000F8E721988A46824201D10720F2E7012084 -:107DE0002146ADF848004FF6FF7860F30F21ADF85B -:107DF0004A808DF86E0042F6020B06918DF87240B3 -:107E0000ADF86CB0ADF870401CA901E08402002010 -:107E10001391ADF8508012A805F043FF00252E46BF -:107E20002F460DAB072212A9404605F03DFF78B161 -:107E30000A285DD195B38EB3ADF86450ADF8666095 -:107E40009DF85E008DF8144019AC012864D06BE0F9 -:107E50009DF83A001FB3012859D1BDF83810594593 -:107E60001FD118A809A901940294CDE90310072095 -:107E70000090BDF8361010230022404605F094FF14 -:107E8000B0BBBDF86000042801D006284AD1BDF877 -:107E90002410219881423AD10F2093E73AE001283B -:107EA00035D1BDF83800B0F5205F03D042F60101AE -:107EB00088422CD1BAF80600BDF83610884201D1AC -:107EC000012700E0002705B19EB1219881421ED113 -:107ED00018A809AA01940294CDE903200720009074 -:107EE0000D4610230022404605F05EFF00B902E077 -:107EF0002DE04E460BE0BDF86000022801D01028AE -:107F000010D1C0B217AA09A90AF0D4FA50B9BDF825 -:107F1000369086E7052055E705A917A8221D0AF027 -:107F2000E8FA08B103204DE79DF814000023001D76 -:107F3000C2B28DF8142022980092CDE901401BA80E -:107F4000069905F0C1FD10B902228AF80420FEF757 -:107F50005AFE37E710B50B46401E88B084B205AA1A -:107F600000211846FEF7EEFE00200DF1080C06AACF -:107F700005A901908CE8070007200090012300224A -:107F800021464FF6FF7005F0E5FC0446BDF81800E9 -:107F9000012800D0FFDF2046FEF735FE08B010BDF7 -:107FA000F0B5FF4F044687B038790E46032804D059 -:107FB000042802D0082007B0F0BD04AA03A9204677 -:107FC000FEF799FE0500F6D160688078C0F34100A5 -:107FD00002280AD19DF80D0010F0380F05D0206955 -:107FE0000CF0E0F908B11020E5E7208905AA216925 -:107FF0008DE807006389BDF810202068039905F01B -:1080000063FD10B1FEF7FFFDD5E716B1BDF8140012 -:108010003080042038712846CDE7F8B50C000646BC -:108020000BD001464FF6FF7500236A46284605F03F -:108030003DFF20B1FEF7E7FDF8BD1020F8BD694611 -:108040002046FEF710FE0028F8D1A078314600F057 -:1080500001032846009A05F055FFEBE730B587B0DD -:10806000144600220DF1080C05AD01928CE82C009D -:10807000072200920A46014623884FF6FF7005F05A -:1080800069FCBDF814102180FEF7BDFD07B030BDBE -:1080900070B50D46042108F08BFC040000D1FFDF11 -:1080A000294604F11400BDE8704004F079BC70B5B5 -:1080B0000D46042108F07CFC040000D1FFDF2946B6 -:1080C00004F11400BDE8704004F08DBC70B50D469D -:1080D000042108F06DFC040000D1FFDF294604F103 -:1080E0001400BDE8704004F0A5BC70B5054604213D -:1080F00008F05EFC040000D1FFDF2146284623681B -:10810000BDE870400122FEF74BBF70B50646042162 -:1081100008F04EFC040000D1FFDF04F1140004F06D -:108120002FFC401D20F0030511E0011D00880022F6 -:10813000431821463046FEF733FF00280BD0607C01 -:10814000ABB2684382B2A068011D08F0EEFAA068E5 -:1081500041880029E9D170BD70B50546042108F0B9 -:1081600027FC040000D1FFDF214628466368BDE8F4 -:1081700070400222FEF714BF70B50E46054601F0AE -:1081800049F9040000D1FFDF01202072667265808A -:10819000207820F00F00001D20F0F000403020700B -:1081A000BDE8704001F039B910B50446012900D08E -:1081B000FFDF2046BDE810400121FAF713B92DE991 -:1081C000F04F97B04FF0000A0C008346ADF814A0B2 -:1081D000D04619D0E06830B1A068A8B10188ADF8E8 -:1081E0001410A0F800A05846FBF735F9070043F239 -:1081F000020961D0387822285CD30421584608F05F -:10820000D7FB050005D103E0102017B0BDE8F08FC3 -:10821000FFDF05F1140004F0B3FB401D20F003065E -:10822000A078012803D0022801D00720EDE721889B -:1082300007AA584605F005FD30BB07A805F00DFD5F -:1082400010BB07A805F009FD48B99DF826000128D4 -:1082500005D1BDF82400A0F52451023902D04FF415 -:108260005050D2E7E068B0B1CDE902A007200090FD -:1082700005AACDF804A00492A2882188BDF8143084 -:10828000584605F067FB10B1FEF7BDFCBDE7A168DD -:10829000BDF8140008809DF81F00C00602D543F207 -:1082A0000140B2E70B9838B1A1780078012905D0D8 -:1082B00080071AD40820A8E74846A6E7C007F9D0E7 -:1082C00002208DF83C00A8684FF00009A0B1697C3D -:1082D0004288714391420FD98AB2B3B2011D08F0AE -:1082E000DAF98046A0F800A006E003208DF83C00F3 -:1082F000D5F800804FF001099DF8200010F0380FEC -:1083000000D1FFDF9DF820002649C0F3C2000844D9 -:1083100097F8231010F8010C884201D90F2074E758 -:108320002088ADF8400014A90095CDE9019143469D -:1083300007220FA95846FEF75DFE002891D19DF84F -:10834000500050B9A078012807D1687CB3B27043BF -:1083500082B2A868011D08F0B2F9002055E770B597 -:10836000064615460C460846FEF70CFC002805D1CB -:108370002A4621463046BDE8704075E470BD13E5DD -:1083800070B51E4614460D000ED06CB1616859B12F -:1083900060B10349C988814208D0072070BD000040 -:1083A0007C020020FA2F00001020F7E72068FEF77B -:1083B000E9FB0028F2D1324621462846BDE870404C -:1083C000FFF747BA70B515460C0006D038B1FE4924 -:1083D0000989814203D00720E0E71020DEE720680A -:1083E000FEF7D0FB0028D9D129462046BDE87040D1 -:1083F000D6E570B5064686B00D46144610460BF01D -:10840000B3FFD0BB60680BF0D6FFB0BBA6F57F40D2 -:10841000FF3803D03046FBF71EF880B12846694686 -:10842000FEF7E3FC00280CD19DF810100F2008295E -:108430003CD2DFE801F008060606060A0A0843F205 -:10844000020006B0AAE70320FBE79DF8021001290D -:1084500008D1BDF80010B1F5C05FF2D06FF4C05282 -:10846000D142EED09DF8061001290DD1BDF80410BF -:10847000A1F52851062907D200E028E0DFE801F045 -:10848000030304030303DCE79DF80A1001290ED15E -:10849000BDF80810B1F5245FD3D0A1F524510239FD -:1084A000CFD00129CDD0022901D1CAE7FFDF606812 -:1084B00078B9002305AA2946304605F0F7FC10B12B -:1084C000FEF7A1FBBDE79DF81400800601D4102043 -:1084D000B7E76188224628466368FFF7BFFDB0E72B -:1084E0002DE9F043814687B08846144610460BF0CC -:1084F0003BFF18B1102007B0BDE8F083002306AAA7 -:108500004146484605F0D2FC18B100BFFEF77BFBA0 -:10851000F1E79DF81800C00602D543F20140EAE7F2 -:108520000025072705A8019500970295CDE903507E -:1085300062884FF6FF734146484605F035FC060059 -:1085400013D160680BF010FF60B960680195CDE948 -:10855000025000970495238862884146484605F0FA -:1085600023FC0646BDF8140020803046CEE739B122 -:10857000954B0A889B899A4202D843F203007047C0 -:108580001DE610B586B0904C0423ADF81430638915 -:1085900043B1A4898C4201D2914205D943F2030030 -:1085A00006B010BD0620FBE7ADF8101000210091C9 -:1085B0000191ADF8003002218DF8021005A9029159 -:1085C00004A90391ADF812206946FFF7F8FDE7E72B -:1085D0002DE9FC4781460E4608460BF09FFE88BBFE -:1085E0004846FAF738FF5FEA00080AD098F800001A -:1085F000222829D30421484608F0DAF9070005D1DA -:1086000003E043F20200BDE8FC87FFDF07F114003E -:1086100004F0CDF905463078012803D0022804D0B3 -:108620000720F0E7A8070FD502E015F01C0F0BD0CC -:10863000B079341DC00709D0E08838B1A0680BF0CC -:108640006DFE18B11020DEE70820DCE732782088C4 -:10865000002628B3A0F201130721112B18D20CD247 -:10866000DFE803F00B090D0B1D0B121D100B0B1D8A -:108670001D1D1D0B1D00022A11D10846C3E7012A4A -:10868000FBD00CE02A0700E0EA06002AF5DA06E053 -:10869000A0F5C0721F2A02D97D3A022AEDD8C6B2CF -:1086A00000F0B8FE50B198F82300CDE90006FA8931 -:1086B000234639464846FEF7EAFCA4E71120A2E724 -:1086C0002DE9F04F8BB01F4615460C468346002619 -:1086D000FAF7C1FE28B10078222805D208200BB095 -:1086E00094E543F20200FAE7B80801D00720F6E764 -:1086F000032F00D100274FF6FF79CCB1022D73D3A1 -:1087000020460BF058FE30B904EB0508A8F1010033 -:108710000BF051FE08B11020E1E7AD1EAAB22146D0 -:10872000484605F06DFC38F8021C88425CD1ADB2B9 -:108730002549B80702D58889401C00E001201FFAAE -:1087400080F8F80701D08F8900E04F4605AA41461E -:10875000584605F076FA4FF0070A4FF00009ACB31F -:10876000204608E0408810283ED8361D304486B2A6 -:10877000AE4239D2A01902884245F3D354E000BF7B -:108780009DF8170002074FD584B304EB0608361D89 -:10879000B8F80230B6B2102B26D89A19AA4223D8BC -:1087A000B8F8002091421FD1C00620D5CDE900A91C -:1087B0000DF1080C0AAAA11948468CE80700B8F880 -:1087C00000100022584603E07C0200202CE00BE061 -:1087D00005F0C0F810B1FEF716FA80E7B8F802000D -:1087E000BDF82810884202D00B2078E704E0B8F8E2 -:1087F0000200304486B206E0C00604D55846FEF7B3 -:1088000078FC002888D19DF81700BDF81A1020F0D8 -:1088100010008DF81700BDF81700ADF80000FF2319 -:108820005846009A05F06EFB05A805F016FA18B92F -:10883000BDF81A10B942A3D90421584608F0B8F877 -:10884000040000D1FFDFA2895AB1CDE900A94D464D -:10885000002321465846FEF71AFC0028BDD1A58109 -:108860003DE700203BE72DE9FF4F8BB01E46170088 -:108870000D464FF0000412D0B00802D007200FB010 -:10888000C4E4032E00D100265DB108460BF08AFD3A -:1088900028B93888691E08440BF084FD08B11020FF -:1088A000EDE7C74AB00701D5D18900E00121F00703 -:1088B0004FF6FF7802D0D089401E00E0404686B2D5 -:1088C00006AA0B9805F0BDF94FF000094FF0070B11 -:1088D0000DF1140A39E000BF9DF81B00000734D5E4 -:1088E000CDF80490CDF800B0CDF80890CDE9039A0A -:1088F000434600220B9805F057FA60BB05B3BDF85C -:1089000014103A8821442819091D8A4230D3BDF831 -:108910001E2020F8022BBDF8142020F8022BCDE9F0 -:1089200000B9CDE90290CDF810A0BDF81E10BDF839 -:10893000143000220B9805F037FA08B103209EE7A7 -:10894000BDF814002044001D84B206A805F085F986 -:1089500020B10A2806D0FEF756F990E7BDF81E10A0 -:10896000B142B9D934B17DB13888A11C884203D253 -:108970000C2084E7052082E722462946404605F080 -:108980003FFB014628190180A41C3C80002076E7AB -:1089900010B504460BF0E8FC08B1102010BD884863 -:1089A000C0892080002010BDF0B58BB00D46064672 -:1089B000142103A81BF09DFC01208DF80C008DF8FC -:1089C000100000208DF81100ADF814503046FAF771 -:1089D00042FD48B10078222812D30421304607F026 -:1089E000E7FF040005D103E043F202000BB0F0BD45 -:1089F000FFDF04F11400074603F0D9FF800601D41D -:108A00000820F3E7207C022140F00100207409A82F -:108A10000094CDE90110072203A930466368FEF7F0 -:108A2000E9FA20B1217C21F001012174DEE7294619 -:108A30003046F9F7C8FC08A9384603F0A7FF00B193 -:108A4000FFDFBDF82040172C01D2172000E02046A0 -:108A5000A84201D92C4602E0172C00D21724214647 -:108A60003046FFF724FB21463046F9F7D2F90020C3 -:108A7000BCE7F8B51C4615460E46069F08F0CAF836 -:108A80002346FF1DBCB231462A46009407F0B5FCD0 -:108A9000F8BD70B50C4605460E2120461BF007FCBC -:108AA000002020802DB1012D01D0FFDF76E40620CB -:108AB00000E00520A07171E410B5488008781346E5 -:108AC00020F00F00001D20F0F00080300C460870F0 -:108AD0001422194604F108001BF0AFFB00F09DFCC6 -:108AE0003748046010BD2DE9F047DFF8D890491DE4 -:108AF000064621F0030117460C46D9F8000007F09E -:108B000092FD050000D1FFDF4FF000083560A5F8A9 -:108B100000802146D9F8000007F085FD050000D14E -:108B2000FFDF7560A5F800807FB104FB07F1091D28 -:108B30000BD0D9F8000007F076FD040000D1FFDF6C -:108B4000B460C4F80080BDE8F087C6F80880FAE792 -:108B50002DE9F0411746491D21F00302194D064643 -:108B600001681446286807F089FD22467168286864 -:108B700007F084FD3FB104FB07F2121D03D0B1687A -:108B8000286807F07BFD042007F0BAFE04460420A5 -:108B900007F0BEFE201A012804D12868BDE8F04184 -:108BA00007F036BDBDE8F08110B50C4605F015F8AC -:108BB00000B1FFDF2046BDE81040FEF724B80000FA -:108BC0007C0200201400002038B50C468288817B8E -:108BD00019B14189914200D90A462280C188121DEB -:108BE00090B26A4606F092FFBDF80000032800D359 -:108BF0000320C1B2208800F0A3FF38BD38B50C4671 -:108C00008288817B19B10189914200D90A4622806C -:108C1000C188121D90B26A4606F078FFBDF80000C8 -:108C2000022800D30220C1B2208800F089FF401C36 -:108C3000C0B238BD2DE9FE4F0C46FD4981464022A9 -:108C4000D1E90201CDE9010109F1030020F003019E -:108C5000C91C21F0030100916846114607F0C5FCCC -:108C6000F44E002C02D1F44A00999160009901441D -:108C70000091357F05F1010504D1E8B209F0C0FB90 -:108C800000B1FFDF009800EB0510C01C20F00301CD -:108C900000915CB9707AB27A1044C2B200200870B8 -:108CA000308C80B204F021FE00B1FFDF0098316A01 -:108CB000084400902146684600F00DFF0098C01C53 -:108CC00020F003000090B37AF27A717A04B10020A8 -:108CD00007F081FD0099084400902146684600F0A5 -:108CE0003AFF00273D46B24696F801800CE0284640 -:108CF00000F0D4FE064681788088F9F721F9717872 -:108D00006D1C00FB0177EDB24545F0D10098C01C09 -:108D100020F00300009004B100203946F9F71BF958 -:108D200000990027084400903D469AF801800CE025 -:108D3000284600F0B3FE0646C1788088FEF763FC43 -:108D400071786D1C00FB0177EDB24545F0D10098BC -:108D5000C01C20F00300009004B100203946FEF74B -:108D60005BFC00994FF000080844009045469AF8D3 -:108D700001700EE0284600F091FE0646807B30B17F -:108D800006F1080001F0DDFE727800FB02886D1C20 -:108D9000EDB2BD42EED10098C01C20F0030000905F -:108DA00004B10020414601F0D0FE00990844009033 -:108DB0002146684600F049FE0098C01D20F00702D9 -:108DC00000922CBB9D490020FAF747F8FBF715FBF2 -:108DD000984801AA00211030F8F7CEFA00B1FFDF61 -:108DE0009AF81D00FEF77FFF00B1FFDF91484FF4B6 -:108DF000F67144301BF07DFA8E480421443080F82F -:108E0000E91180F8EA11062180F8EB1103210171C4 -:108E10000099A1EB0900BDE8FE8F70B5854C0646B0 -:108E20004434207804EB4015E078083590B9A01957 -:108E300090F8E80100280ED0A0780F2800D3FFDFBB -:108E4000202128461BF055FA687866F30200687006 -:108E50000120E070284670BD2DE9F04105460C4622 -:108E600000270078052190463E46B1EB101F00D048 -:108E7000FFDF287A50B101280ED0FFDFA8F800608C -:108E80000CB1278066800020BDE8F081012709260B -:108E900074B16888A08008E00227142644B168886D -:108EA000A0802869E060A88A2082287B2072E5E7FC -:108EB000A8F80060E7E710B55F4C6068C11D21F0BD -:108EC0000701814200D0FFDF5A48012100220170D2 -:108ED00042700172417203238372C1720273027481 -:108EE000052202831F224283417455A242610A2255 -:108EF000027741774FF4B06101626168416010BD53 -:108F000030B54D4C1568636810339D4202D2042081 -:108F1000136030BD474B5D785A6802EB0512107044 -:108F200051700320D080172090800120D070907065 -:108F3000002090735878401C587060681030606052 -:108F4000002030BD70B506463A480024457807E059 -:108F5000204600F0A3FD0178B14204D0641CE4B2C5 -:108F6000AC42F5D1002070BDF7B5074608780C4635 -:108F700010B3FFF7E7FF0546A7F12006202F06D024 -:108F8000052E19D2DFE806F00F2B2B151A0000F082 -:108F900090FD0DB1697800E00021401AA17880B2FF -:108FA0000844FF2808D8A07830B1A088022824D22D -:108FB00002E06088172820D20720FEBD207AE0B1A9 -:108FC00061881729F8D3A1881729F5D3A179002939 -:108FD000F2D0E1790029EFD0402804D9ECE7242F22 -:108FE0000BD1207A48B161884FF6FB70814202D8DC -:108FF000A188814201D90420FEBD65B9207802AA6A -:109000000121FFF77DFF0028F6D12078FFF79AFFB6 -:10901000050000D1FFDF052E25D2DFE806F003189A -:109020001B151E00A0786870A088E8801CE0000076 -:10903000B0460200980300201C0000200000002021 -:109040006E524635780000006088A8800CE0A07859 -:10905000A87009E0A078E87006E054F8020FA86054 -:109060006068E86000E0FFDF0020FEBD1A2835D010 -:109070000DDC132832D2DFE800F01B31203131271C -:109080002723252D313129313131312F0F0030285F -:1090900002D003DC1E2821D1072070473A38092866 -:1090A0001CD2DFE800F0151B0F1B1B1B1B1B07004E -:1090B0000020704743F20400704743F202007047FB -:1090C000042070470D2070470F207047082070471C -:1090D0001120704713207047062070470320704707 -:1090E00010B5007800F0010006F001FDBDE8104069 -:1090F000BCE70EB5017801F001018DF80010417850 -:1091000001F001018DF801100178C1F340018DF8E3 -:1091100002104178C1F340018DF8031001788908ED -:109120008DF80410417889088DF8051081788DF844 -:109130000610C1788DF8071000798DF80800684690 -:1091400005F0ACFAFFF792FF0EBD2DE9F84FDFF8FE -:10915000F883FE4C00261FE0012000F03FFD0120B7 -:10916000FFF75BFE054640214746D8F8080007F0A8 -:109170005AFA686000B9FFDF686805F03EF8A8B1E8 -:109180002846FAF75AFC284600F02EFD20B9402266 -:109190006968B86807F072FA94F9E9010428DBDA23 -:1091A000022007F0ADFB07460025A6E040226968D3 -:1091B000D8F8080007F062FAF2E7B8F80210404663 -:1091C000491C89B2A8F80210B94201D3002141809C -:1091D0000221B8F8020007F0EBFB002865D0B8F8D0 -:1091E0000200694606F0F1FBFFF740FF00B1FFDF28 -:1091F0009DF8000078B1B8F8020007F01DFD5FEAA5 -:10920000000900D1FFDF484606F08BFF18B1B8F81F -:10921000020002F03DF9B8F8020007F0FBFC5FEA3B -:10922000000900D1FFDF484606F073FFE8BB0321C9 -:10923000B8F8020007F0BCFB5FEA000B48D1FFDF83 -:1092400046E000BFDBF8100010B10078FF2849D0DD -:10925000022000F0C3FC0220FFF7DFFD82464846F3 -:1092600007F063F8CAF8040000B9FFDFDAF8040079 -:1092700007F02BF9002100900170B8F80210504659 -:10928000AAF8021001F00AFE484607F020F900B9DA -:10929000FFDF504600F0A8FC18B99AF8010000075B -:1092A00004D50099CBF8101012E024E0DBF8100090 -:1092B00038B10178491C11F0FF01017008D1FFDFBE -:1092C00006E000221146484600F0BDFB00B9FFDF72 -:1092D00094F9EA01022805DBB8F8020001F0A3FDC9 -:1092E0000028AFD194F9E901042804DB484607F0CF -:1092F00052F900B101266D1CEDB2BD4204D294F9C1 -:10930000EA010228BFF659AF002E7FF423AFBDE873 -:10931000F84F032000F062BC10B58B4CE060086889 -:109320002061AFF2D91002F012FD607010BD8748C5 -:1093300000214438017084480170854941607047BC -:1093400070B505464FF080500C46D0F8A410491C6B -:1093500005D1D0F8A810C9430904090C0BD050F866 -:10936000A01F01F001012970416821608068A08080 -:10937000287830B970BD062120460AF0AAFC0120E9 -:109380002870607940F0C000607170BD70B54FF01A -:1093900080540D46D4F88010491C0BD1D4F88410A9 -:1093A000491C07D1D4F88810491C03D1D4F88C107B -:1093B000491C0CD0D4F880100160D4F884104160AE -:1093C000D4F888108160D4F88C10C16002E01021BC -:1093D0000AF07FFCD4F89000401C0BD1D4F8940024 -:1093E000401C07D1D4F89800401C03D1D4F89C004D -:1093F000401C09D054F8900F286060686860A0682D -:10940000A860E068E86070BD2846BDE870401021A3 -:109410000AF05FBC4D480079FFE470B54B4CE07832 -:1094200030B3207804EB4010407A00F0070020446D -:1094300090F9E801002800DCFFDF2078002504EB2C -:109440004010407A00F00700011991F8E801401E31 -:1094500081F8E8012078401CC0B220700F2800D1AC -:109460002570A078401CA0700AF096FBE57070BDD6 -:10947000FFDF70BD3EB50546032107F099FA0446AB -:10948000284607F0C7FB054604B9FFDF206918B17D -:109490000078FF2800D1FFDF01AA6946284600F0C6 -:1094A000D2FA60B9FFDF0AE0002202A9284600F0E4 -:1094B000CAFA00B9FFDF9DF8080000B1FFDF9DF890 -:1094C0000000411E8DF80010EED2206901998842FB -:1094D00001D1002020613EBD70B50546A0F57F405A -:1094E0000C46FF3800D1FFDF012C01D0FFDF70BD3B -:1094F000FFF790FF040000D1FFDF207820F00F007D -:10950000401D20F0F0005030207065800020207257 -:1095100001202073BDE870407FE72DE9F041164639 -:109520000D460746FFF776FF040000D1FFDF2078E5 -:1095300020F00F00401D20F0F000503020706780B8 -:1095400001202072286805E01C000020DC030020B8 -:10955000C81400202061A888A0822673BDE8F041CD -:109560005BE77FB5FFF7EEFC040000D1FFDF02A947 -:109570002046FFF729FB054603A92046FFF73EFBDF -:109580008DF800508DF80100BDF80800001DADF801 -:109590000200BDF80C00001DADF80400E088ADF835 -:1095A0000600684606F08CFA002800D0FFDF7FBD79 -:1095B0002DE9F047DFF8FC930546002799F80000F5 -:1095C00010B10820BDE8F08728460AF0CDFE08B1AA -:1095D0001020F7E7F84C207808B9FFF76CFCA07A68 -:1095E000617A0844C6B200F064FAB04207D2301A79 -:1095F000C1B22A460020FFF783FC0700E2D1D9F868 -:1096000004004E46C01C20F00300C9F8040000F01E -:1096100040FB716800EB010801214046FFF70AFB9F -:10962000064629684044884202D8B6F5803F15D3E3 -:1096300028600020FFF786FC05000DD005F113001F -:10964000D9F8041020F003004E46884200D0FFDF16 -:109650006078401E607075600420B3E700214046CA -:10966000FFF7E8FA0446A64200D0FFDF04EB08014A -:10967000C9F8041029604FF6FF71A9F80210012102 -:1096800089F8001038469DE72DE9F0410446C948A5 -:1096900017460E46007810B10820BDE8F081084654 -:1096A0000AF03CFE08B11020F7E7C34D287808B94E -:1096B000FFF701FC601E1E2807D8012C22D130784C -:1096C000FE281FD828770020E7E7A4F120001F28F4 -:1096D00005D8E0B23A463146BDE8F04144E4A4F191 -:1096E00040001F2805D831462046BDE8F04100F073 -:1096F000A3BAA4F1A0001F2804D80020A02C03D0F6 -:10970000A12C06D00720C8E7317801F00101697764 -:10971000C3E731680922F82901D38B0701D010462D -:10972000BBE76B7C03F00303012B04D16B8BD733B6 -:109730009CB28C42F3D82962AFE72DE9F04781460D -:109740000E4608460AF010FE48B948460AF02AFEBE -:1097500028B909F1030020F00301494501D0102088 -:1097600030E795484FF0000A4430817869B141787C -:10977000804600EB411408343788324600212046E9 -:1097800000F040FA050004D027E0A6F800A005206C -:1097900018E7B9F1000F24D03088B84201D90C2560 -:1097A0001FE0607800F00705284600F017FA08EB84 -:1097B0000507324697F8E8014946401C87F8E8015A -:1097C000204607F5F47700F01DFA05463878401E6C -:1097D0003870032000F002FA2DB10C2D01D0A6F84C -:1097E00000A02846EEE66078724E00F007010129DD -:1097F00023D002290CD0032933D0FFDF98F80110C1 -:109800004046491CC9B288F801100F2934D035E010 -:10981000616821B1000702D46088FFF72BFE98F839 -:10982000EA014746012802D1707802F0AFFA97F9B1 -:10983000EA010428E2DBFFDFE0E7616819B14022BA -:10984000B06806F01BFF98F8E9014746032802D1EB -:10985000707802F09BFA97F9E9010428CEDBFFDF6C -:10986000CCE7C00602D56088FFF704FE98F9EB014B -:109870000628C3DBFFDFC1E780F801A08178491E1D -:109880008170617801F0070101EB080090F8E811A0 -:10989000491C80F8E811A4E770B50D4604460AF0AB -:1098A0003DFD18B928460AF05FFD08B1102070BDD3 -:1098B00029462046BDE8704008F0D9BD70B5044681 -:1098C00015460E4608460AF029FD18B928460AF042 -:1098D0004BFD08B1102070BD022C03D0102C01D01C -:1098E000092070BD2A463146204608F0E3FD0028D5 -:1098F000F7D0052070BD70B514460D4606460AF037 -:109900000DFD38B928460AF02FFD18B920460AF097 -:1099100049FD08B1102070BD22462946304608F0A6 -:10992000E8FD0028F7D0072070BD3EB504460AF0D8 -:109930001BFD08B110203EBD684604F00FFEFFF786 -:1099400095FB0028F7D19DF806002070BDF80800AF -:109950006080BDF80A00A08000203EBD70B50546BD -:109960000C4608460AF01EFD20B93CB120680AF0FA -:10997000FBFC08B1102070BDA08828B12146284604 -:10998000BDE87040FDF7BEBE092070BD70B504464D -:109990000D4608460AF0C2FC30B9601E1E2818D8D1 -:1099A00028460AF0BBFC08B1102070BD022C05D976 -:1099B000072070BD1C0000209803002004B9FFDFC1 -:1099C000F94800EB840050F8041C2846BDE87040BC -:1099D0000847A4F120001F2805D829462046BDE8E5 -:1099E0007040FAF792BCF02CE2D1A8680AF096FC1D -:1099F0000028D9D1284606F0CBF8BDE87040FFF723 -:109A000035BB70B504460D4608460AF0ADFC30B9CA -:109A1000601E1E280DD828460AF080FC08B11020D0 -:109A2000C7E7012C01D0022C01D10620C1E7072095 -:109A3000BFE7A4F120001F28F9D829462046BDE839 -:109A40007040FAF7BABC06F033BB38B50446D748C5 -:109A5000007B00F00105D9B9F9F78BFA0DB1226846 -:109A600000E00022D2484178C06804F06EFBD04884 -:109A70001030C0788DF8000010B1012802D004E049 -:109A8000012000E000208DF80000684604F0DFFDB2 -:109A9000002D02D020682830206038BD30B5C34D7D -:109AA00004466878A04200D8FFDF686800EB041025 -:109AB00030BD70B5BD4800252C46467807E02046ED -:109AC000FFF7ECFF4078641C2844C5B2E4B2B4420E -:109AD000F5D128466DE72DE9F0410C46064600F029 -:109AE00006F907463068C01C20F00302326014BB40 -:109AF000AE483B46082124300AF0EAFA002409E087 -:109B0000082C10D2DFE804F0060408080A04040652 -:109B1000A84804E0A84802E0A84800E0A8480AF0E5 -:109B2000F7FA054600E0FFDFA54200D0FFDF641C26 -:109B3000E4B2082CE4D3306800EB07103060ACE5E9 -:109B4000021D5143452900D245210844C01CB0FBE9 -:109B5000F2F0C0B270472DE9FC5F064693484FF023 -:109B600000088B464746444690F8019022E0204684 -:109B7000FFF794FF050000D1FFDF6878694638449D -:109B8000C7B22846FFF720F8824601A92846FFF70A -:109B900035F80346BDF804005246001D81B2BDF8F9 -:109BA0000000001D80B206F081FF6A78641C00FB93 -:109BB0000288E4B24C45DAD13068C01C20F00300C2 -:109BC0003060BBF1000F00D000204246394606F05D -:109BD0007BFF316808443060BDE8FC9F7349443125 -:109BE00008710020C870704770494431CA782AB1A2 -:109BF0000A7801EB42110831814201D001207047FF -:109C0000002070472DE9F04106460078154600F027 -:109C10000F0400201080601E0F46052800D3FFDFD0 -:109C200061482A46103000EB8400394650F8043C65 -:109C30003046BDE8F041184770B50C46402802D0C8 -:109C4000412806D120E0A07861780D18E1788142A2 -:109C500001D90720ADE62078012801D91320A8E614 -:109C6000FF2D08D808F0B0FD064609F04CFF301A69 -:109C7000801EA84201DA12209BE64C4821688160D0 -:109C800021790173002094E6BDE87040084600F099 -:109C90005EB82DE9F0470027DFF810A13E463D46AB -:109CA000B9463C469AF801800AE02046FFF7F6FEE6 -:109CB0004178807B0E4410FB0155641CE4B27F1C8C -:109CC0004445F2D109EB8700C6EBC60100EB8100E9 -:109CD0009AF8092000EB850101EBC2019AF80A20ED -:109CE0009AF80B0001EBC20101EB80006AE42DE958 -:109CF000F047DFF8B8900026344699F8090099F843 -:109D00000A2099F801700244D5B299F80B2010444A -:109D100000F0FF0808E02046FFF7C0FE817B407896 -:109D200011FB0066641CE4B2BC42F4D199F809004E -:109D300099F80A10284428444044401C01B10121EC -:109D400008448419FF2C00D9FFDFE0B23AE438B5AB -:109D50000446407800F00300012803D002280BD00D -:109D6000072038BD606858B10AF025FBD0B960689B -:109D70000AF018FB20B915E060680AF0CFFA88B93C -:109D800069462046FCF71EF90028EAD1607800F009 -:109D90000300022816D19DF8000098B160680AF00F -:109DA00001FB78B1102038BDB046020098030020B6 -:109DB0001C000020B941000017AC00005D2F00001E -:109DC000F32101006189F8290DD8208988420AD839 -:109DD000607800F003020A48012A06D1D731026AEE -:109DE00089B28A4201D20920DDE794E80E0000F131 -:109DF000100585E80E000AB9002101830020D2E792 -:109E0000980300202DE9F04107461446884608468D -:109E100001F01CFD064608EB88001C22796802EB65 -:109E2000C0000D18688C58B14146384601F016FD47 -:109E3000014678680078C200082305F120000CE094 -:109E4000E88CA8B14146384601F00FFD014678681C -:109E500008234078C20005F1240006F066FC38B102 -:109E6000062121726681D0E90010C4E9031009E0DF -:109E7000287809280BD00520207266816868E06088 -:109E8000002028702046BDE8F04101F0D5BC072035 -:109E900020726681F4E72DE9F04116460D4607462B -:109EA000406801EB85011C2202EBC10144182046E9 -:109EB00001F0FDFC40B10021708865F30F2160F3D3 -:109EC0001F4107200AF0DEF909202070324629469A -:109ED0003846BDE8F04195E72DE9F0410E460746CA -:109EE00000241C21F07816E004EB8403726801EB77 -:109EF000C303D25C6AB1FFF78DFA050000D1FFDF22 -:109F00006F802A4621463046FFF7C5FF0120BDE895 -:109F1000F081641CE4B2A042E6D80020F7E770B5F7 -:109F2000064600241C21C0780AE000BF04EB84032D -:109F3000726801EBC303D5182A782AB1641CE4B215 -:109F4000A042F3D8402070BD282128461AF0AFF96E -:109F5000706880892881204670BD70B50346002056 -:109F60001C25DC780DE000BF00EB80065A6805EB8D -:109F7000C6063244167816B1128A8A4204D0401CB2 -:109F8000C0B28442F0D8402070BDF0B50446002035 -:109F90001C26E5780EE000BF00EB8007636806EB47 -:109FA000C7073B441F788F4202D15B78934204D0AD -:109FB000401CC0B28542EFD84020F0BD0078032895 -:109FC00001D000207047012070470078022801D09E -:109FD00000207047012070470078072801D000203A -:109FE0007047012070472DE9F041064688461078F9 -:109FF000F1781546884200D3FFDF2C781C27641CBB -:10A00000F078E4B2A04201D8201AC4B204EB840173 -:10A01000706807EBC1010844017821B141468847C7 -:10A0200008B12C7073E72878A042E8D1402028704E -:10A030006DE770B514460B880122A240134207D188 -:10A0400013430B8001230A22011D06F038FB047024 -:10A0500070BD2DE9FF4F81B00878DDE90E7B9A468F -:10A0600091460E4640072CD4019806F0E5FD040009 -:10A0700000D1FFDF07F1040820461FFA88F105F040 -:10A0800024FF050000D1FFDF204629466A4606F07E -:10A090006EF90098A0F80370A0F805A0284606F015 -:10A0A00014FA017869F306016BF3C71101702046B9 -:10A0B0001FFA88F105F04CFF00B9FFDF019803F0AB -:10A0C000B9FF06EB0900017F491C017705B0BDE827 -:10A0D000F08F2DE9F84F0E469A4691460746032128 -:10A0E00006F066FC0446008DDFF8B485002518B143 -:10A0F00098F80000B0421ED1384606F09DFD0700DA -:10A1000000D1FFDF09F10401384689B205F0DDFE18 -:10A11000050010D0384629466A4606F028F900980E -:10A1200000210A460180817004F054F80098C01D97 -:10A13000CAF8000021E098F80000B04216D104F1FE -:10A14000260734F8341F012000FA06F911EA090F36 -:10A1500000D0FFDF2088012340EA090020800A2286 -:10A16000391D384606F0C6FA067006E0324604F19C -:10A17000340104F12600FFF75CFF0A2188F8001083 -:10A180002846BDE8F88FFEB514460D46064602ABDC -:10A190000C220621FFF79DFF002826D0029968783F -:10A1A00012220A70801C487008224A80A8702088F9 -:10A1B00088806088C880A0880881E0884881002461 -:10A1C0000C20CDE900040523062229463046FFF77E -:10A1D00040FF2146002266F31F41F023104609F09C -:10A1E000A7FF6878801C68700120FEBDFEB514468C -:10A1F0000D460622064602AB1146FFF76AFF00280D -:10A2000012D0029B132000211870A87858700220E9 -:10A2100058809C800620CDE900010246052329468E -:10A220003046FFF716FF0120FEBD2DE9FE430C4628 -:10A23000804644E002AB0E2207214046FFF749FF6B -:10A24000002841D060681C2267788678BF1C06EB26 -:10A25000860102EBC1014518029814210170477074 -:10A260000A214180698A0181E98A4181A988818026 -:10A27000A9898181304601F0E9FA02990523072274 -:10A28000C8806F700420287000250E20CDE90005DD -:10A2900021464046FFF7DDFE294666F30F2168F3AD -:10A2A0001F41F0230022072009F042FF6078FD499A -:10A2B000801C607062682046921CFFF794FE606804 -:10A2C00080784028B6D10120BDE8FE83FEB50D465A -:10A2D000064638E002AB0E2207213046FFF7F9FEB2 -:10A2E000002835D068681C23C17801EB810203EB9C -:10A2F000C2028418029815220270627842700A2203 -:10A300004280A2894281A2888281084601F09EFA99 -:10A31000014602988180618AC180E18A0181A0881A -:10A32000B8B10020207000210E20CDE900010523E6 -:10A33000072229463046FFF78CFE6A68DA4928462C -:10A34000D21CFFF750FE6868C0784028C2D10120B7 -:10A35000FEBD0620E6E72DE9FE430C46814644E0BB -:10A36000204601F08EFAD0B302AB082207214846FE -:10A37000FFF7AFFE0028A7D060681C226578067939 -:10A38000AD1C06EB860102EBC10147180298B7F835 -:10A39000108006210170457004214180304601F093 -:10A3A00055FA0146029805230722C180A0F80480CF -:10A3B0007D70082038700025CDE90005214648460B -:10A3C000FFF747FE294666F30F2169F31F41F0238B -:10A3D0000022072009F0ACFE6078801C6070626883 -:10A3E000B2492046121DFFF7FEFD60680179402941 -:10A3F000B6D1012068E72DE9F34F83B00E4680E027 -:10A40000304601F03EFA002875D071681C2091F8A2 -:10A41000068008EB880200EBC2000C18414630466B -:10A4200001F023FA0146A078C30070684078C200AA -:10A4300004F1240006F095F907468088E18B401A64 -:10A4400080B2002581B3AA46218B814200D80846FC -:10A450008146024602AB07210398FFF73AFE01004E -:10A4600028D0BAF1000F03D0029AB88802251080D4 -:10A470008B46E28B3968A9EB05001FFA80FA0A4483 -:10A480000398009206F0D8FBED1D009A59465346FA -:10A49000009505F0E6FFE08B504480B2E083B98878 -:10A4A000884209D1012508E0FFE7801C4FF0010A2E -:10A4B00080B2C9E7002009E60025CDE90095238A8E -:10A4C000072231460398FFF7C4FDE089401EE08172 -:10A4D0008DB1A078401CA0707068F178427811FBB3 -:10A4E00002F1CAB2816901230E3006F0E8F880F863 -:10A4F00000800020E08372686D493046921DFFF7AE -:10A5000072FD7068817940297FF47AAF0120DDE522 -:10A5100070B5064648680D4614468179402910D129 -:10A5200004EB84011C2202EBC101084401F0E0F9B4 -:10A53000002806D06868294684713046BDE870401E -:10A5400059E770BDFEB50C460746002645E020469B -:10A5500001F097F9D8B360681C22417901EB8101C1 -:10A5600002EBC1014518688900B9FFDF02AB082280 -:10A5700007213846FFF7ADFD002833D002996078F7 -:10A5800016220A70801C4870042048806068407958 -:10A5900001F05CF901460298052307228180698950 -:10A5A000C1800820CDE9000621463846FFF751FD5D -:10A5B0006078801C6070A88969890844B0F5803F84 -:10A5C00000D3FFDFA88969890844A8816E81626889 -:10A5D00038492046521DFFF706FD60684179402941 -:10A5E000B5D10120FEBD30B5438C458BC3F3C70404 -:10A5F000002345B1838B641EED1AC38A6D1E1D4472 -:10A6000095FBF3F3E4B22CB1008918B1A04200D855 -:10A61000204603444FF6FF70834200D30346138065 -:10A620000C7030BD2DE9FC41074616460D464868C2 -:10A6300002EB86011C2202EBC10144186A4601A903 -:10A640002046FFF7D0FFA089618901448AB2BDF896 -:10A650000010914212D0081A00D50020608168686D -:10A66000407940280AD1204601F038F9002805D069 -:10A670006868294646713846FFF764FFBDE8FC81EB -:10A680002DE9FE4F8946804615465088032106F085 -:10A690008FF98346B8F8020040280DD240200CE024 -:10A6A00030000020BD9F0000CB9F0000D99F00001C -:10A6B000F1B80000DDB80000403880B282460146A3 -:10A6C000584601F0DEF800287ED00AEB8A001C22F2 -:10A6D000DBF8041002EBC0000C18204601F0E7F88C -:10A6E000002877D1B8F80000E18A88423CD8A189D7 -:10A6F000D1B348456ED100265146584601F0AEF818 -:10A70000218C0F18608B48B9B9F1020F62D3B8F8E9 -:10A7100004006083618A884226D80226A9EB0600DD -:10A720001FFA80F9B888A28B801A002814DD4946E8 -:10A73000814500DA084683B2688869680291396801 -:10A740000A44CDE9003206F065FADDE90121F61D83 -:10A75000009B009605F051FEA18B01EB090080B231 -:10A76000A083618B884207D9688803B05246594656 -:10A77000BDE8F04F01F0D9B81FD14FF009002872A1 -:10A78000B8F802006881D7E90001C5E90401608BCF -:10A79000A881284601F050F85146584601F05EF86D -:10A7A0000146DBF8040008230078C20004F1200011 -:10A7B00005F0BBFF0020A0836083A0890AF0FF02A0 -:10A7C000401EA081688800E004E003B05946BDE85F -:10A7D000F04F27E7BDE8FE8F2DE9F041064615460C -:10A7E0000F461C46184609F099FD18B9206809F073 -:10A7F000BBFD08B1102015E47168688C0978B0EBD6 -:10A80000C10F01D313200DE43946304601F026F87C -:10A810000146706808230078C20005F1200005F0A9 -:10A820004EFFD4E90012C0E900120020E3E710B5A2 -:10A830000446032106F0BCF80146007800F003004E -:10A84000022805D02046BDE8104001F114029AE428 -:10A850008A8A2046BDE81040C8E470B5044603214A -:10A8600006F0A6F8054601462046FFF774FD0028CD -:10A8700016D029462046FFF765FE002810D029464D -:10A880002046FFF723FD00280AD029462046FFF77F -:10A89000CCFC002804D029462046BDE87040AAE53B -:10A8A00070BD2DE9F0410C4680461EE0E17842780B -:10A8B00011FB02F1CAB2816901230E3005F035FFA8 -:10A8C000077860681C22C179491EC17107EB8701B6 -:10A8D000606802EBC10146183946204600F0D1FFFE -:10A8E00018B1304600F0DCFF20B16068C179002962 -:10A8F000DCD180E7FEF78EFD050000D1FFDF0A20E6 -:10A900002872384600F0A2FF68813946204600F0E0 -:10A91000ACFF0146606808234078C20006F12400BD -:10A9200005F003FFD0E90010C5E90310A5F8028087 -:10A93000284600F081FFB07800B9FFDFB078401EF4 -:10A94000B07058E770B50C460546032106F030F8A4 -:10A9500001464068C2792244C2712846BDE8704071 -:10A960009FE72DE9FE4F8246507814460F464FF080 -:10A97000000800284FD0012807D0022822D0FFDF8E -:10A980002068B8606068F86024E702AB0E220821F6 -:10A990005046FFF79EFB0028F2D0029815210523B0 -:10A9A0000170217841700A214180C0F80480C0F80C -:10A9B0000880A0F80C80628882810E20CDE9000812 -:10A9C000082221E0A678304600F040FF054606EB5D -:10A9D00086012C22786802EBC1010822465A02AB9C -:10A9E00011465046FFF775FB0028C9D00298072191 -:10A9F0000170217841700421418008218580C68042 -:10AA0000CDE9001805230A4639465046FFF721FBD9 -:10AA100087F80880DEE6A678022516B1022E13D04C -:10AA2000FFDF2A1D914602AB08215046FFF751FB7C -:10AA30000028A5D002980121022E017021784170D2 -:10AA40004580868002D005E00625EAE7A188C1801E -:10AA5000E1880181CDE90098052308223946504656 -:10AA6000D4E710B50446032105F0A2FF014600F12A -:10AA700008022046BDE8104073E72DE9F05F0C4660 -:10AA800001281DD0957992F80480567905EB85014F -:10AA90001F2202EBC10121F0030B08EB060111FBA1 -:10AAA00005F14FF6FF7202EAC10909F1030115FB36 -:10AAB0000611F94F21F0031A40B101283DD124E0DD -:10AAC0006168E57891F800804E78DFE7594678684C -:10AAD00005F0A9FD606000B9FFDF5946606819F014 -:10AAE00008FCE5705146786805F09DFD6168486195 -:10AAF00000B9FFDF6068426902EB090181616068AB -:10AB000080F800806068467017E0606852464169CE -:10AB1000786805F0B3FD5A466168786805F0AEFDC7 -:10AB2000032005F0EDFE0446032005F0F1FE201A97 -:10AB3000012802D1786805F06BFD0BEB0A00BDE837 -:10AB4000F09F02460021022097E773B5D24D0A20FC -:10AB50002870009848B100244FEA0D0005F045FD2B -:10AB6000002C01D1009969607CBD01240020F5E72B -:10AB700070B50C4615463821204619F0BAFB01265F -:10AB800066700A2104F11C0019F0B3FB05B9FFDF60 -:10AB9000297A207861F301002070A879002817D065 -:10ABA0002A4621460020FFF768FF61684020887030 -:10ABB0006168C8706168087161684871616888710E -:10ABC0006168288808816168688848816068868132 -:10ABD00070BDC878002802D0002201204DE77047E0 -:10ABE00070B50546002165F31F41002009F04AFBBE -:10ABF0000321284605F0DCFE040000D1FFDF2146DA -:10AC00002846FFF769F9002804D0207840F01000AA -:10AC10002070012070BD2DE9FF4180460E460F0CCB -:10AC2000FEF7F8FB050007D06F800321384605F0DA -:10AC3000BFFE040008D106E004B03846BDE8F0418C -:10AC40001321F9F7FBBEFFDF5FEA080005D0B8F17A -:10AC5000070F18D0FFDFBDE8FF8120782A4620F0DB -:10AC6000080020700020ADF8020002208DF80000DE -:10AC70004FF6FF70ADF80400ADF80600694638469F -:10AC8000F9F7EFFAE7E7C6F3072101EB81021C238E -:10AC9000606803EBC202805C042803D008280AD055 -:10ACA000FFDFD8E7012000904FF440432A462046BA -:10ACB00000F004FECFE704B02A462046BDE8F0418C -:10ACC000FFF7E9B82DE9F05F0027B0F80A90904649 -:10ACD0000C4605463E46B9F1400F01D2402001E046 -:10ACE000A9F140001FFA80FA287AC01E08286BD20A -:10ACF000DFE800F00D04192058363C477227102673 -:10AD0000002C6CD0D5E90301C4E902015CE0702796 -:10AD10001226002C63D00A2205F10C0104F1080070 -:10AD200019F08BFA50E071270C26002C57D0E868F8 -:10AD3000A06049E0742710269CB3D5E90301C4E95B -:10AD400002016888032105F033FE8346FEF762FBAB -:10AD500002466888508051465846FFF753F833E062 -:10AD600075270A26ECB1A88920812DE076271426C4 -:10AD7000BCB105F10C0004F1080307C883E8070023 -:10AD800022E07727102664B1D5E90301C4E9020166 -:10AD90006888032105F00CFE01466888FFF781FDF5 -:10ADA00012E01CE073270826CCB16888032105F067 -:10ADB000FFFD01460078C00606D56888FFF78CF8CD -:10ADC00010B96888F8F71DFEA8F800602CB127803C -:10ADD000A4F8069066806888A0800020AFE6A8F8F6 -:10ADE0000060FAE72DE9FC410C461E4617468046F6 -:10ADF000032105F0DDFD05460A2C0AD2DFE804F048 -:10AE000005050505050509090907042303E00623CF -:10AE100001E0FFDF0023CDE90076224629464046C7 -:10AE2000FFF717F92AE438B50546A0F57F40FF384B -:10AE300030D0284605F0EEFE040000D1FFDF2046AA -:10AE400005F073FA002815D001466A46204605F041 -:10AE50008EFA00980321B0F80540284605F0A8FDB9 -:10AE60000546052C03D0402C05D2402404E0007A8E -:10AE700080B1002038BD403CA4B2214600F001FD65 -:10AE800040B1686804EB84013E2202EBC101405AE4 -:10AE90000028EFD0012038BD300000202DE9F04F10 -:10AEA000044689B0408805F0B5FE050000D1FFDFFB -:10AEB00006AA2846616800F0BDFC069D001F81B20D -:10AEC00035F8032F6B888A4205D1042B0AD0052B55 -:10AED0001DD0062B15D022462846FFF7D1FB09B01E -:10AEE000BDE8F08F16462D1D224629463046F7F75D -:10AEF00054FA0828F3D1224629463046FCF749FC8B -:10AF0000EDE76088291D6368FAF7C8FCE7E7174694 -:10AF10006088032105F04CFD4FF000088DF8048097 -:10AF20000646ADF80680042FD9D36A79002AD6D018 -:10AF300028794FF6FF794FF01C0A13282CD008DC33 -:10AF4000012878D0062847D0072875D0122874D158 -:10AF500006E0142872D0152871D016286DD1ACE106 -:10AF60000C2F6AD1307800F00301022965D140F03E -:10AF7000080030706879B07001208DF804002889CD -:10AF8000ADF808006889ADF80A00A889ADF80C0092 -:10AF9000E889ADF80E0019E0B07890429FD1307882 -:10AFA00001079CD5062F9AD120F0080030706088E8 -:10AFB000414660F31F41002009F064F902208DF83A -:10AFC0000400ADF808902889ADF80A006088224690 -:10AFD00001A9F9F746F982E7082F80D12F89B5F842 -:10AFE0000A90402F01D2402001E0A7F1400080B23A -:10AFF00080460146304600F044FC08B3716808EB17 -:10B0000088002C2202EBC000095A4945E3D1FE48D2 -:10B0100007AAD0E90210CDE9071068798DF81C0065 -:10B0200008F0FF058DF81E5060883146FFF799FC47 -:10B030002246294639E0B6E014E03CE039E0E6E09B -:10B04000F148D0E90010CDE907106879ADF820701B -:10B050008DF81C00ADF82290608807AA3146FFF7F2 -:10B0600080FC3CE7082FB6D16889B5F808804028F5 -:10B0700001D2402000E0403887B23946304600F027 -:10B0800000FC0028A7D007EB870271680AEBC2001A -:10B090000844028A42459ED1017808299BD1407814 -:10B0A0006979884297D1F9B222463046FEF7F3FE1D -:10B0B00015E70E2F07D0CDF81C80CDF820806879D9 -:10B0C0008DF81C00C8E76989EF898B46B5F80C90AC -:10B0D0003046FEF742FFABF14001402901D3092081 -:10B0E0004AE0B9F1170F01D3172F01D20B2043E02B -:10B0F00040280ED000EB800271680AEBC2000844C1 -:10B100000178012903D1407869798842A9D00A20C1 -:10B1100032E03046FEF703FF014640282BD001EB1A -:10B12000810372680AEBC30002EB0008012288F871 -:10B1300000206A7988F8012070682A894089B8421D -:10B1400000D938462D8A03232372A282E781208208 -:10B15000A4F80C906582084600F078FB6081A8F89E -:10B160001490A8F81870A8F80E50A8F810B020464F -:10B1700000F062FBB3E6042005212172A4F80A80E6 -:10B18000E08101212173A049D1E90421CDE9072102 -:10B1900069798DF81C10ADF81E00608807AA314649 -:10B1A000FFF7DFFBE3E7062FE4D3B078904215D139 -:10B1B0003078010712D520F00800307060884146D1 -:10B1C00060F31F41002009F05DF802208DF80400B3 -:10B1D0002889ADF80800ADF80A90F7E6042130465A -:10B1E000FEF7D3FE05464028C4D00220830300901A -:10B1F00022462946304600F061FB4146608865F3EF -:10B200000F2160F31F41072009F03CF867E60E2F7D -:10B21000B0D104213046FEF7B8FE81464028A9D0BF -:10B220004146608869F30F2160F31F41072009F050 -:10B2300029F8288A0790E88900907068AF894089CA -:10B24000B84200D938468346B5F80A802889059067 -:10B25000484600F0FBFA6081079840B10220079B46 -:10B26000009022464946304600F028FB37E6B8F108 -:10B27000170F1ED3172F1CD3042020720098608252 -:10B28000E781A4F810B0A4F80C8009EB890271687A -:10B290000AEBC2000D1800990598A5F81480A5F8CE -:10B2A00018B0E9812882204600F0C6FA06202870EE -:10B2B00015E601200B230090D3E7082FA6D129899A -:10B2C0003046FEF74AFE074640289FD007EB87022C -:10B2D00071680AEBC2000844804600F0E8FA0028D2 -:10B2E00094D16D89B8F80E002844B0F5803F05D39D -:10B2F00060883A46314600F018FBF0E5002D85D015 -:10B30000A8F80E0060883A463146FFF701F9082098 -:10B310002072384600F09AFA6081A58127E770B55F -:10B320000D460646032105F043FB040004D02078B7 -:10B33000000704D5112070BD43F2020070BD2A46FB -:10B3400021463046FEF71FFF18B92868606168681B -:10B35000A061207840F008002070002070BD70B51A -:10B360000D460646032105F023FB040004D0207897 -:10B37000000704D4082070BD43F2020070BD2A46C5 -:10B3800021463046FEF732FF00B9A582207820F032 -:10B3900008002070002070BD2DE9F04F0E4691B0DE -:10B3A0008046032105F004FB0446404605F044FCBA -:10B3B00007460020079008900990ADF830000A90E9 -:10B3C00002900390049004B9FFDF0DF1080917BB48 -:10B3D000FFDF20E038460BA9002204F069FE9DF84B -:10B3E0002C0000F07F050A2D00D3FFDF6019017FDC -:10B3F000491E01779DF82C0000060CD52A460CA9A1 -:10B4000007A8FEF716FE01E0D846020019F805105D -:10B41000491C09F80510761EF6B2DBD204F134009F -:10B42000FA4D04F1260BDFF8E8A304F12A07069091 -:10B4300010E05846069900F06AFA064628700A2875 -:10B4400000D3FFDF5AF8261040468847E08CC05DE5 -:10B45000B04202D0208D0028EBD10A202870EC4D9C -:10B460004E4628350EE00CA907A800F050FA044615 -:10B47000375D55F8240000B9FFDF55F82420394620 -:10B4800040469047BDF81E000028ECD111B027E5DA -:10B4900010B5032105F08CFA040000D1FFDF0A216A -:10B4A00004F11C0018F025FF207840F00400207003 -:10B4B00010BD10B50C46032105F07AFA2044007F38 -:10B4C000002800D0012010BD2DE9F84F894615460F -:10B4D0008246032105F06CFA070004D0284608F0E4 -:10B4E0001DFF40B903E043F20200BDE8F88F484673 -:10B4F00008F03AFF08B11020F7E7786828B16988AA -:10B500000089814201D90920EFE7B9F800001C2425 -:10B5100018B1402809D2402008E03846FEF7FFFC69 -:10B520008046402819D11320DFE7403880B280469A -:10B530000146384600F0A5F948B108EB8800796863 -:10B5400004EBC000085C012803D00820CDE70520EB -:10B55000CBE7FDF75FFF06000BD008EB88007968AA -:10B5600004EBC0000C18B9F8000020B1E88910B154 -:10B5700013E01120B9E72888172802D36888172814 -:10B5800001D20720B1E7686838B12B1D2246414639 -:10B590003846FFF721F90028A7D104F10C026946CB -:10B5A0002046FFF720F8288860826888E082B9F892 -:10B5B000000030B102202070E889A080E889A0B1A5 -:10B5C0002BE003202070A889A0807868817840292A -:10B5D00005D180F8028039465046FEF726FE4046E7 -:10B5E00000F034F9A9F8000021E07868218B408947 -:10B5F000884200D908462083A6F802A004203072B1 -:10B60000B9F800007081E0897082F181208B30826E -:10B61000A08AB081304600F00FF97868C1784029DF -:10B6200005D180F8038039465046FEF74FFE0020D2 -:10B630005BE770B50D460646032105F0B9F9040035 -:10B6400003D0402D04D2402503E043F2020070BD38 -:10B65000403DADB2294600F014F958B105EB850123 -:10B660001C22606802EBC101084400F020F918B107 -:10B67000082070BD052070BD2A462146304600F0E6 -:10B6800054F9002070BD2DE9F0410D461646804664 -:10B69000032105F08DF90446402D01D2402500E03C -:10B6A000403DADB28CB1294600F0EBF880B105EB1E -:10B6B00085011C22606802EBC1014718384600F082 -:10B6C000F6F838B10820BDE8F08143F20200FAE74D -:10B6D0000520F8E733463A4629462046FFF77CF82E -:10B6E0000028F0D1EAB221464046FEF79BFF002039 -:10B6F000E9E72DE9F0410D4616468046032105F0A5 -:10B7000057F90446402D01D2402500E0403DAFB23C -:10B7100024B1304608F002FE38B902E043F20200DC -:10B72000D1E7306808F0FAFD08B11020CBE73946C0 -:10B73000204600F0A6F860B107EB87011C22606884 -:10B7400002EBC1014518284600F0B1F818B10820F5 -:10B75000B9E70520B7E7B088A98A884201D90C204B -:10B76000B1E76168E88C4978B0EBC10F01D31320D1 -:10B77000A9E73946204600F078F8014660680823BA -:10B780004078C20005F1240004F099FFD6E90012C8 -:10B79000C0E90012FAB221464046FEF7B9FE002089 -:10B7A00091E72DE9F0470D461F469046814603215B -:10B7B00005F0FEF80446402D01D2402001E0A5F13D -:10B7C000400086B23CB14DB1384608F0EBFD50B1B7 -:10B7D0001020BDE8F08743F20200FAE76068C8B1C4 -:10B7E000A0F80C8024E03146204600F04AF888B1E9 -:10B7F00006EB86011C22606802EBC1014518284651 -:10B8000000F055F840B10820E3E7000030000020C8 -:10B81000F04602000520DCE7A5F80880F2B22146D8 -:10B820004846FEF7FFFE1FB1A889698908443880A1 -:10B830000020CEE704F09BBD017821F00F01491CE8 -:10B8400021F0F00110310170FDF7E7BD10B504469D -:10B85000402800D9FFDF4034A0B210BD40684269E3 -:10B860000078484302EBC0007047C2784068037814 -:10B8700012FB03F24378406901FB032100EBC10096 -:10B880007047C2788A4209D9406801EB81011C22C5 -:10B8900002EBC101405C08B10120704700207047F5 -:10B8A0000078062801D901207047002070470078F1 -:10B8B000062801D00120704700207047F0B401EB4A -:10B8C00081061C27446807EBC6063444049D052600 -:10B8D0002670E3802571F0BCFEF794BA10B541895B -:10B8E00011B1FFF7DDFF08B1002010BD012010BD30 -:10B8F00010B5C18C8278B1EBC20F04D9C18911B1E6 -:10B90000FFF7CEFF08B1002010BD012010BD10B51B -:10B910000C4601230A22011D04F007FF007821884C -:10B92000012282409143218010BDF0B402EB8205D8 -:10B930001C264C6806EBC505072363554B681C792C -:10B94000402C03D11A71F0BCFEF705BDF0BC704766 -:10B9500010B5EFF3108000F0010472B6EE484178A4 -:10B96000491C41704078012801D1F7F70DFB002CEC -:10B9700000D162B610BD70B5E74CE07848B901253A -:10B98000E570FFF7E5FFF7F707FB20B1002008F0AF -:10B990000AF9002070BD4FF080406571C0F8045373 -:10B9A000F7E770B5EFF3108000F0010572B6DA4CDE -:10B9B000607800B9FFDF6078401E6070607808B979 -:10B9C000F7F7E6FA002D00D162B670BDD24810B587 -:10B9D000C17821B100214171C170FFF7E2FF002061 -:10B9E00010BD10B50446F7F7D7FACB49C97808401F -:10B9F00000D001202060002010BD2DE9F05FDFF8AD -:10BA000018934278817889F80620002589F8071074 -:10BA1000064689F8085000782F4620B101280FD03B -:10BA200002280FD0FFDFF7F7C4FA98B1F7F7C8FA8A -:10BA3000A8420FD12846F7F7C7FA0028FAD047E006 -:10BA40000125F0E7FFF784FFF7F7A6FA0028FBD0FF -:10BA50000225E8E701208407E060C4F80471AF49DB -:10BA60000D600107D1F84412AC4AC1F342312432CF -:10BA70001160AA49343108604FF0020BC4F804B3D6 -:10BA8000A060DFF89CA2DAF80010C94341F300116E -:10BA900001F10108DAF8001041F01001CAF80010B5 -:10BAA00000E020BFD4F804010028FAD02846F7F7B8 -:10BAB0008BFA0028FAD0B8F1000F05D1DAF800109F -:10BAC00021F01001CAF80010C4F808B3C4F80471DA -:10BAD00099F807004C4670B1307860B9F7F75CFA16 -:10BAE000064608F0BDF96FF0004116B1C4E9031035 -:10BAF00001E0C4E9030115B12771BDE8F09F012001 -:10BB00002071BDE8F05F00F0ABB870B5050000D162 -:10BB1000FFDF4FF080424FF0FF30C2F808030021F2 -:10BB2000C2F80011C2F80411C2F80C11C2F81011C9 -:10BB3000794C6170F7F736FA10B10120E07060704F -:10BB40002846BDE8704058E72DE9F05F7548D0F809 -:10BB500000B0744A7449083211608406D4F80801B0 -:10BB600008B1012600E00026D4F8000110B14FF022 -:10BB7000010801E04FF00008D4F8040108B10127E2 -:10BB800000E00027D4F80C0100B101208246D4F86F -:10BB9000100108B1012100E00021894646EA0801B0 -:10BBA00027EA010020EA0A0030EA090000D0FFDF9E -:10BBB000002526B1C4F80851012007F0F4FF564EC5 -:10BBC000B8F1000F10D0C4F80051707918B1757138 -:10BBD000002007F0E8FF307830B10120534935707C -:10BBE000B07002220A6020610FB1C4F80451BAF1AA -:10BBF000000F0BD0C4F80C51B07800B9FFDF4B48F0 -:10BC00000560B57001206061FFF7CBFEB9F1000F50 -:10BC100005D0C4F81051307908B100F045F8414919 -:10BC2000091DC1F800B068E770B53B4DE87808B968 -:10BC3000F7F7AEF901208407A061A87858B100BFDA -:10BC4000D4F80C0120B90020F7F7BEF90028F7D18D -:10BC50000020C4F80C014FF0FF30C4F8080370BD99 -:10BC60002DE9F0411926B407C4F808630125A56140 -:10BC70000020C4F80001C4F80C01C4F81001F7F763 -:10BC80008BF9254F28B12949BD7002200860256134 -:10BC900000E03D70FFF75CFE2049B8792031086074 -:10BCA000C4F80463BDE8F0812DE9F0411A4C4FF06F -:10BCB00080470125E079F0B1012803D0217A401EA8 -:10BCC000814218DAF7F768F9064608F0C9F8E17911 -:10BCD000012902D9217A491C21720EB1216900E0A3 -:10BCE000E168411A022902DA11F1020F0EDC0EB1ED -:10BCF000206100E0E060FFF72BFEF7F74DF938B167 -:10BD00000A49022008603D61A57002E07D61C9E733 -:10BD1000257000202072C5E73C0000201805004077 -:10BD200010ED00E01005024001000001340C00405D -:10BD30004FF0E0214FF00070C1F88001C1F880029F -:10BD4000384B802283F80024C1F80001704700B509 -:10BD500002460420344903E001EBC0031B792BB1F8 -:10BD6000401EC0B2F8D2FFDFFF2000BD41F83020F6 -:10BD700001EBC00100224A718A7101220A7100BDE3 -:10BD8000294A002102EBC0000171704710B504463A -:10BD9000042800D3FFDF244800EBC40420790128E5 -:10BDA00000D0FFDF6079A179401CC0B2814200D091 -:10BDB00060714FF0E0214FF00070C1F8000210BD3B -:10BDC0002DE9F041194805681849194808310860FB -:10BDD0001448042690F80004134F4009154C042819 -:10BDE00018D0FFDF16E0217807EBC1000279012AA5 -:10BDF00008D1427983799A4204D04279827157F806 -:10BE0000310080472078401CC0B22070042801D344 -:10BE100000202070761EF6B2E5D20448001D0560B1 -:10BE2000BDE8F08119E000E0C805002010050240DF -:10BE30000100000150000020F8B51D46DDE906476D -:10BE40000E000AD004F0F8FE2346FF1DBCB23146B6 -:10BE50002A46009404F005FBF8BDD0192246194685 -:10BE600018F0A6F92046F8BD70B50D46044610211D -:10BE700018F01DFA258117206081A07B40F00A0090 -:10BE8000A07370BD4FF6FF720A800146022008F0D1 -:10BE9000F9B9704700897047827BD30701D19207B7 -:10BEA00003D4808908800020704705207047827B7A -:10BEB000920700D58181704701460020098841F62C -:10BEC000FE52114200D00120704700B50346807B2E -:10BED000C00701D0052000BD59811846FFF7ECFFCF -:10BEE000C00703D0987B40F004009873987B40F023 -:10BEF00001009873002000BD827B520700D509B174 -:10BF00004089704717207047827B61F3C3028273B8 -:10BF100070472DE9FC5F0E460446017896460120E5 -:10BF200000FA01F14DF6FF5201EA020962684FF68C -:10BF3000FF7B1188594502D10920BDE8FC9FB9F16A -:10BF4000000F05D041F6FE55294201D00120F4E74B -:10BF500041EA090111801D0014D04FF0000C85F852 -:10BF600000C023780521032267464FF0020A0E2BFA -:10BF700074D2DFE803F0F809252F4762697447900F -:10BF800092B3D0D70420D8E7616820898B7B9B07C8 -:10BF90007DD5172848D30B89834245D38989172932 -:10BFA00001D3814240D185F800A0A5F8010032807C -:10BFB000616888816068817B21F002018173C5E03E -:10BFC000042028702089A5F801006089A5F80300E5 -:10BFD0003180BBE0208A3188C01D1FFA80F84145BE -:10BFE00022D3062028702089A5F801006089A5F8D1 -:10BFF0000300A089A5F805000721208ACDE90001EA -:10C0000063693EE0082B10D0082028702089A5F82D -:10C0100001006089A5F8030031806A1D694604F1BA -:10C020000C0006F066FA10B15FE01020EDE73088F2 -:10C030009DF800100844308088E00A20287020898C -:10C04000A5F80100328045E00C2028702089A5F871 -:10C0500001006089A5F8030031803BE083E021897D -:10C06000338800EB41021FFA82F843453DD3B8F113 -:10C07000050F3AD30E222A700BEA4101CDE90010D8 -:10C08000E36860882A467146FFF7D6FE00E04DE07F -:10C09000A6F800805AE04020287060893188C01CD2 -:10C0A0001FFA80F8414520D32878714620F03F00E0 -:10C0B000123028702089A5F801006089CDE90002BE -:10C0C00060882A46E368FFF7B7FEA6F80080287864 -:10C0D00040063BD461682089888037E0A089328897 -:10C0E000401D1FFA80F8424501D204273EE0162089 -:10C0F00028702089A5F801006089A5F80300A089AF -:10C10000CDE9000160882A4671462369FFF794FE55 -:10C11000A6F80080DEE718202870207A6870A6F85C -:10C1200000A013E061680A88920401D405271DE08D -:10C13000C9882289914201D0062717E01E21297063 -:10C1400030806068018821F400510180B9F1000F4E -:10C150000CD0618878230022022007F0E9FF616893 -:10C160002078887007E0A6F800C00327606801887F -:10C1700021EA090101803846DFE62DE9FF4F85B04D -:10C180001746129C0D001E461CD03078C10703D004 -:10C1900000F03F00192801D9012100E000212046CC -:10C1A000FFF7AAFEA8420DD32088A0F57F41FF39F2 -:10C1B00008D03078410601D4000605D5082009B022 -:10C1C000BDE8F08F0720FAE700208DF800008DF819 -:10C1D000010030786B1E00F03F0C0121A81E4FF0CB -:10C1E000050A4FF002094FF0030B9AB2BCF1200F81 -:10C1F00075D2DFE80CF08B10745E7468748C749CDC -:10C2000074B674BB74C974D574E2747474F274F047 -:10C2100074EF74EE748B052D78D18DF80090A078B2 -:10C220008DF804007088ADF8060030798DF80100B3 -:10C23000707800F03F000C2829D00ADCA0F1020041 -:10C24000092863D2DFE800F0126215621A621D62EB -:10C250002000122824D004DC0E281BD01028DBD1AB -:10C260001BE016281FD01828D6D11FE020788007A1 -:10C2700001E020784007002848DAEFE02078000746 -:10C28000F9E72078C006F6E720788006F3E7207803 -:10C290004006F0E720780006EDE72088C005EAE7D1 -:10C2A00020884005E7E720880005E4E72088C004EF -:10C2B000E1E72078800729D5032D27D18DF800B03C -:10C2C000B6F8010082E0217849071FD5062D1DD35D -:10C2D00081B27078012803D0022817D102E0CAE0A9 -:10C2E000022000E0102004228DF8002072788DF8E2 -:10C2F0000420801CB1FBF0F2ADF8062092B242435C -:10C300008A4203D10397ADF80890A7E07AE020783D -:10C31000000777D598B282088DF800A0ADF8042008 -:10C32000B0EB820F6ED10297ADF8061096E021783F -:10C33000C90667D5022D65D381B206208DF80000AD -:10C34000707802285ED300BFB1FBF0F28DF80400D4 -:10C35000ADF8062092B242438A4253D1ADF808901C -:10C360007BE0207880064DD5072003E0207840064A -:10C370007FD508208DF80000A088ADF80400ADF846 -:10C380000620ADF8081068E02078000671D5092075 -:10C39000ADF804208DF80000ADF8061002975DE0BE -:10C3A0002188C90565D5022D63D381B20A208DF895 -:10C3B0000000707804285CD3C6E72088400558D573 -:10C3C000012D56D10B208DF80000A088ADF8040097 -:10C3D00044E021E026E016E0FFE72088000548D58C -:10C3E000052D46D30C208DF80000A088ADF8040080 -:10C3F000B6F803006D1FADF80850ADF80600ADF8B3 -:10C400000AA02AE035E02088C00432D5012D30D1C1 -:10C410000D208DF8000021E02088800429D4B6F892 -:10C420000100E080A07B000723D5032D21D33078C5 -:10C4300000F03F001B2818D00F208DF80000208846 -:10C4400040F40050A4F80000B6F80100ADF8040074 -:10C45000ED1EADF80650ADF808B003976946059893 -:10C46000F5F7E6FC050008D016E00E208DF8000078 -:10C47000EAE7072510E008250EE0307800F03F00DD -:10C480001B2809D01D2807D00220059907F0FAFEC5 -:10C49000208800F400502080A07B400708D520466B -:10C4A000FFF70AFDC00703D1A07B20F00400A073B2 -:10C4B000284684E61FB5022806D101208DF8000029 -:10C4C00088B26946F5F7B4FC1FBD0000F8B51D46FB -:10C4D000DDE906470E000AD004F0AEFB2346FF1D3F -:10C4E000BCB231462A46009403F0BBFFF8BDD01918 -:10C4F0002246194617F05CFE2046F8BD2DE9FF4F95 -:10C500008DB09B46DDE91B57DDF87CA00C46082B5F -:10C5100005D0E06901F002F950B11020D2E028887E -:10C52000092140F0100028808AF80010022617E048 -:10C53000E16901208871E2694FF420519180E1693D -:10C540008872E06942F601010181E069002181738E -:10C550002888112140F0200028808AF80010042645 -:10C5600038780A900A2038704FF0020904F1180058 -:10C570004D460C9001F095FBB04681E0BBF1100FE9 -:10C580000ED1022D0CD0A9EB0800801C80B2022134 -:10C59000CDE9001005AB52461E990D98FFF796FFA6 -:10C5A000BDF816101A98814203D9F74800790F9008 -:10C5B00004E003D10A9808B138702FE04FF002016F -:10C5C000CDE900190DF1160352461E990D98FFF79B -:10C5D0007DFF1D980088401B801B83B2C6F1FF00C1 -:10C5E000984200D203461E990BA8D9B15FF0000211 -:10C5F000DDF878C0CDE9032009EB060189B2CDE969 -:10C6000001C10F980090BDF8161000220D9801F09E -:10C61000CBFB387070B1C0B2832807D0BDF81600CC -:10C6200020833AE00AEB09018A19E1E7022011B000 -:10C63000BDE8F08FBDF82C00811901F0FF08022D34 -:10C640000DD09AF80120424506D1BDF82010814254 -:10C6500007D0B8F1FF0F04D09AF801801FE08AF8E4 -:10C660000180C94800680178052902D1BDF816107B -:10C67000818009EB08001FFA80F905EB080085B2FC -:10C68000DDE90C1005AB0F9A01F00EFB28B91D98DF -:10C690000088411B4145BFF671AF022D13D0BBF19D -:10C6A000100F0CD1A9EB0800801C81B20220CDE94B -:10C6B000000105AB52461E990D98FFF707FF1D9824 -:10C6C0000580002038700020B1E72DE9F8439C4632 -:10C6D000089E13460027B26B9AB3491F8CB2F18FA4 -:10C6E000A1F57F45FF3D05D05518AD882944891D2A -:10C6F0008DB200E000252919B6F83C80083141458B -:10C7000020D82A44BCF8011022F8021BBCF8031000 -:10C7100022F8021B984622F8024B914604F07AFA5E -:10C720004FF00C0C41464A462346CDF800C003F0BA -:10C7300064FEF587B16B00202944A41D21440880C4 -:10C7400003E001E0092700E083273846BDE8F883CD -:10C7500010B50B88848F9C420CD9846BE018048838 -:10C7600044B1848824F40044A41D23440B80106049 -:10C77000002010BD0A2010BD2DE9F0478AB0002529 -:10C78000904689468246ADF8185007274BE0059839 -:10C7900006888088000446D4A8F8006007A80195A0 -:10C7A00000970295CDE903504FF400730022314603 -:10C7B000504601F0F9FA04003CD1BDF81800ADF87C -:10C7C0002000059804888188B44216D10A0414D444 -:10C7D00001950295039521F400410097049541F4D9 -:10C7E000804342882146504601F0B4F804000BD142 -:10C7F0000598818841F40041818005AA08A948462E -:10C80000FFF7A6FF0400DCD000970598029501957C -:10C81000039504950188BDF81C300022504601F0B4 -:10C8200099F80A2C06D105AA06A94846FFF790FFF9 -:10C830000400ACD0ADF8185004E00598818821F4CC -:10C840000041818005AA06A94846FFF781FF00281C -:10C85000F3D00A2C03D020460AB0BDE8F0870020B0 -:10C86000FAE710B50C46896B86B051B10C218DF8F2 -:10C870000010A18FADF80810A16B01916946FAF77D -:10C8800064FC00204FF6FF71A063E187A08706B02B -:10C8900010BD2DE9F0410D460746896B0020069E2C -:10C8A0001446002911D0012B0FD1324629463846B3 -:10C8B000FFF762FF002808D1002C06D03246294637 -:10C8C0003846BDE8F04100F038BFBDE8F0812DE901 -:10C8D000FC411446DDE9087C0E46DDE90A15521DCF -:10C8E000BCF800E092B2964502D20720BDE8FC8178 -:10C8F000ACF8002017222A70A5F80160A5F80330D3 -:10C900000522CDE900423B462A46FFF7DFFD002025 -:10C91000ECE770B50C4615464821204617F0E9FCB7 -:10C9200004F1080044F81C0F00204FF6FF71E0618D -:10C9300061842084A5841720E08494F82A0040F0C4 -:10C940000A0084F82A0070BD4FF6FF720A80014683 -:10C95000032007F097BC30B585B00C460546FFF7BD -:10C9600080FFA18E284629B101218DF8001069466B -:10C97000FAF7EBFB0020E0622063606305B030BD96 -:10C98000B0F84000704700005400002090F84620A6 -:10C99000920703D4408808800020F3E70620F1E7DF -:10C9A00090F846209207EDD5A0F84410EAE701463A -:10C9B000002009880A0700D5012011F0F00F01D0EE -:10C9C00040F00200CA0501D540F004008A0501D5F7 -:10C9D00040F008004A0501D540F010000905D1D506 -:10C9E00040F02000CEE700B5034690F84600C007AF -:10C9F00001D0062000BDA3F842101846FFF7D7FF6C -:10CA000010F03E0F05D093F8460040F0040083F884 -:10CA1000460013F8460F40F001001870002000BDDA -:10CA200090F84620520700D511B1B0F84200A9E7AE -:10CA30001720A7E710F8462F61F3C3020270A1E7A1 -:10CA40002DE9FF4F9BB00E00DDE92B34DDE929789D -:10CA5000289D24D02878C10703D000F03F00192872 -:10CA600001D9012100E000212046FFF7D9FFB042A3 -:10CA700015D32878410600F03F010CD41E290CD0B4 -:10CA8000218811F47F6F0AD13A8842B1A1F57F4223 -:10CA9000FF3A04D001E0122901D1000602D504209A -:10CAA0001FB0C5E5F9491D984FF0000A08718DF8CF -:10CAB00018A08DF83CA00FAA0A60ADF81CA0ADF834 -:10CAC00050A02978994601F03F02701F5B1C04F1C9 -:10CAD000180C4FF0060E4FF0040BCDF858C01F2A6B -:10CAE0007ED2DFE802F07D7D107D267DAC7DF47D79 -:10CAF000F37DF27DF17DF47DF07D7D7DEF7DEE7D3A -:10CB00007D7D7D7DED0094F84610B5F80100890724 -:10CB100001D5032E02D08DF818B022E34FF4006146 -:10CB2000ADF85010608003218DF83C10ADF8400046 -:10CB3000D8E2052EEFD1B5F801002083ADF81C0036 -:10CB4000B5F80310618308B1884201D901207FE163 -:10CB50000020A07220814FF6FF702084169801F00B -:10CB6000A0F8052089F800000220029083460AAB55 -:10CB70001D9A16991B9801F097F890BB9DF82E000E -:10CB8000012804D0022089F80100102003E00120D0 -:10CB900089F8010002200590002203A90BA805F0E6 -:10CBA000A8FCE8BB9DF80C00059981423DD13A886C -:10CBB000801CA2EB0B01814237DB02990220CDE9F8 -:10CBC00000010DF12A034A4641461B98FFF77EFCFF -:10CBD00002980BF1020B801C80B217AA03A901E096 -:10CBE000A0E228E002900BA805F083FC02999DF8D2 -:10CBF0000C00CDE9000117AB4A4641461B98FFF7F0 -:10CC000065FC9DF80C100AAB0BEB01001FFA80FBD2 -:10CC100002981D9A084480B2029016991B9800E071 -:10CC200003E001F041F80028B6D0BBF1020F02D0BA -:10CC3000A7F800B053E20A208DF818004FE2002157 -:10CC40000391072EFFF467AFB5F801002083ADF81C -:10CC50001C00B5F80320628300283FF477AF9042B0 -:10CC60003FF674AF0120A072B5F8050020810020C6 -:10CC7000A073E06900F052FD78B9E1690120887184 -:10CC8000E2694FF420519180E1698872E06942F6CF -:10CC900001010181E06900218173F01F20841E9849 -:10CCA000606207206084169800F0FBFF072089F877 -:10CCB00000000120049002900020ADF82A0028E036 -:10CCC0001DE2A3E13AE1EAE016E2AEE086E049E0E7 -:10CCD0000298012814D0E0698079012803D1BDF8B9 -:10CCE0002800ADF80E00049803ABCDE900B04A4629 -:10CCF00041461B98FFF7EAFB0498001D80B20490A0 -:10CD0000BDF82A00ADF80C00ADF80E00059880B211 -:10CD100002900AAB1D9A16991B9800F0C5FF28B91E -:10CD200002983988001D05908142D1D202980128CD -:10CD300081D0E0698079012805D0BDF82810A1F5DF -:10CD40007F40FF3803D1BDF82800ADF80E000498ED -:10CD500003ABCDE900B04A4641461B98FFF7B6FB4E -:10CD60000298BBE1072E02D0152E7FF4D4AEB5F8A1 -:10CD700001102183ADF81C10B5F80320628300294F -:10CD80003FF4E4AE91423FF6E1AE0121A1724FF0D3 -:10CD9000000BA4F808B084F80EB0052E07D0C0B27E -:10CDA000691DE26905F086FB00287FF444AF4FF669 -:10CDB000FF70208401A906AA14A8CDF800B081E86C -:10CDC00085032878214600F03F031D9A1B98FFF742 -:10CDD00095FB8246208BADF81C0080E10120032EDC -:10CDE000C3D14021ADF85010B5F801102183ADF842 -:10CDF0001C100AAAB8F1000F00D00023CDE90203ED -:10CE000004921D98CDF80480009038880022401EBE -:10CE100083B21B9800F0C8FF8DF8180090BB0B2060 -:10CE200089F80000BDF8280037E04FF0010C052E0E -:10CE30009BD18020ADF85000B5F801102183B5F8E2 -:10CE400003002084ADF81C10B0F5007F03D9072043 -:10CE50008DF8180085E140F47C4222840CA8B8F1DA -:10CE6000000F00D00023CDE90330CDE9018C1D98DF -:10CE700000903888401E83B21B9800F095FF8DF813 -:10CE8000180028B18328A8D10220BDE0540000205A -:10CE90000D2189F80010BDF83000401C1EE1032E62 -:10CEA00004D248067FF537AE002017E1B5F801102F -:10CEB000ADF81C102878400602D58DF83CE002E061 -:10CEC00007208DF83C004FF000080320CDE9020850 -:10CED0001E9BCDF810801D980193A6F1030B0090C6 -:10CEE0001FFA8BF342461B9800F034FD8DF81800B2 -:10CEF0008DF83C80297849060DD52088C00506D5D7 -:10CF0000208BBDF81C10884201D1C4F82480404613 -:10CF10008DF81880E2E0832801D14FF0020A4FF427 -:10CF20008070ADF85000BDF81C002083A4F820B03C -:10CF30001E986062032060841321CCE0052EFFF46C -:10CF4000EAADB5F80110ADF81C10A28F62B3A2F5DE -:10CF50007F43FE3B28D008228DF83C204FF0000B89 -:10CF60000523CDE9023BDDF878C0CDF810B01D9A5D -:10CF700080B2CDF804C040F400430092B5F803201D -:10CF80001B9800F0E7FC8DF83CB04FF400718DF871 -:10CF90001800ADF85010832810D0F8B1A18FA1F57A -:10CFA0007F40FE3807D0DCE00B228DF83C204FF6A6 -:10CFB000FE72A287D2E7A4F83CB0D2E000942B46E0 -:10CFC00031461E9A1B98FFF780FB8DF8180008B1B8 -:10CFD00083284BD1BDF81C00208355E700942B46D5 -:10CFE00031461E9A1B98FFF770FB8DF81800E8BBBE -:10CFF000E18FA06B0844811D8DE8820343888288FD -:10D0000001881B98FFF763FC824668E095F8018071 -:10D01000022E70D15FEA080002D0B8F1010F6AD188 -:10D0200009208DF83C0007A800908DF84080434609 -:10D03000002221461B98FFF72CFC8DF842004FF090 -:10D04000000B8DF843B050B9B8F1010F12D0B8F110 -:10D05000000F04D1A18FA1F57F40FF380AD0A08F27 -:10D0600040B18DF83CB04FF4806000E037E0ADF89F -:10D0700050000DE00FA91B98FAF767F882468DF86B -:10D080003CB04FF48060ADF85000BAF1020F06D00A -:10D09000FC480068C07928B18DF8180027E0A4F892 -:10D0A000188044E0BAF1000F03D081208DF81800F9 -:10D0B0003DE007A800904346012221461B98FFF758 -:10D0C000E8FB8DF8180021461B98FFF7CAFB9DF876 -:10D0D000180020B9192189F80010012038809DF826 -:10D0E0003C0020B10FA91B98FAF72FF88246BAF13D -:10D0F000000F33D01BE018E08DF818E031E0207805 -:10D10000000712D5012E10D10A208DF83C00E088CE -:10D11000ADF8400003201B9907F0B4F80820ADF8E3 -:10D120005000C1E648067FF5F6AC4FF0040A2088AF -:10D13000BDF8501008432080BDF8500080050BD585 -:10D14000A18FA1F57F40FE3806D11E98E062289895 -:10D150002063A6864FF0030A5046A1E49DF818000C -:10D1600078B1012089F80000297889F80110BDF80C -:10D170001C10A9F802109DF8181089F80410052059 -:10D1800038802088BDF8501088432080E4E72DE9DE -:10D19000FF4F8846087895B0012181404FF2090081 -:10D1A000249C0140ADF820102088DDF88890A0F57F -:10D1B0007F424FF0000AFF3A06D039B1000705D58B -:10D1C000012019B0BDE8F08F0820FAE7239E4FF048 -:10D1D000000B0EA886F800B018995D460988ADF8D6 -:10D1E0003410A8498DF81CB0179A0A718DF838B020 -:10D1F000086098F8000001283BD0022809D00328D5 -:10D200006FD1307820F03F001D303070B8F8040046 -:10D21000E08098F800100320022904D1317821F031 -:10D220003F011B31317094F84610090759D505AB01 -:10D23000B9F1000F13D0002102AA82E80B000720E9 -:10D24000CDE90009BDF83400B8F80410C01E83B25F -:10D250000022159800F0A8FD0028D1D101E0F11CB2 -:10D26000EAE7B8F80400A6F80100BDF81400C01CF5 -:10D2700004E198F805108DF81C1098F804000128B6 -:10D2800006D04FF4007A02282CD00328B8D16CE1E4 -:10D290002188B8F8080011F40061ADF8201020D002 -:10D2A00017281CD3B4F84010814218D3B4F84410A6 -:10D2B000172901D3814212D1317821F03F01C91CD5 -:10D2C0003170A6F801000321ADF83410A4F8440031 -:10D2D00094F8460020F0020084F8460065E1052538 -:10D2E0007EE177E1208808F1080700F4FE60ADF8E0 -:10D2F000200010F0F00F1BD010F0C00F03D03888C2 -:10D30000228B9042EBD199B9B878C00710D0B96898 -:10D310000720CDE902B1CDF804B00090CDF810B0EF -:10D32000FB88BA883988159800F014FB0028D6D1FC -:10D330002398BDF82010401C80294ED006DC10290F -:10D340000DD020290BD0402987D124E0B1F5807F72 -:10D350006ED051457ED0B1F5806F97D1DEE0C80622 -:10D3600001D5082000E0102082460DA907AA05205B -:10D37000CDE902218DF83800ADF83CB0CDE9049636 -:10D3800008A93888CDE9000153460722214615989F -:10D39000FFF7B4F8A8E09DF81C2001214FF00A0A1D -:10D3A000002A9BD105ABB9F1000F00D00020CDE9D8 -:10D3B00002100720CDE90009BDF834000493401E97 -:10D3C00083B2218B0022159800F0EEFC8DF81C0032 -:10D3D0000B203070BDF8140020E09DF81C200121C6 -:10D3E0004FF00C0A002A22D113ABB9F1000F00D084 -:10D3F0000020CDE902100720CDE900090493BDF813 -:10D400003400228C401E83B2218B159800F0CCFC96 -:10D410008DF81C000D203070BDF84C00401CADF89C -:10D42000340005208DF83800208BADF83C00BCE0BE -:10D430003888218B88427FF452AF9DF81C004FF052 -:10D44000120A00281CD1606AA8B1B878C0073FF45E -:10D4500046AF00E018E0BA680720CDE902B2CDF887 -:10D4600004B00090CDF810B0FB88BA88159800F091 -:10D4700071FA8DF81C00132030700120ADF83400D3 -:10D4800093E00000540000203988208B8142D2D1E3 -:10D490009DF81C004FF0160A0028A06B08D0E0B3DE -:10D4A0004FF6FF7000215F46ADF808B0019027E00D -:10D4B00068B1B978C907BED1E18F0DAB0844821DB0 -:10D4C00003968DE80C0243888288018809E0B878C9 -:10D4D000C007BCD0BA680DAB03968DE80C02BB88C0 -:10D4E000FA881598FFF7F3F905005ED0072D72D082 -:10D4F00076E0019005AA02A92046FFF729F9014626 -:10D50000E28FBDF80800824201D00029F1D0E08FFF -:10D51000A16B084407800198E08746E09DF81C0055 -:10D520004FF0180A40B1208BC8B1388820832146BB -:10D530001598FFF796F938E004F118000090237E63 -:10D54000012221461598FFF7A4F98DF81C00002848 -:10D55000EDD1192030700120ADF83400E7E7052542 -:10D5600021461598FFF77DF93AE0208800F4007015 -:10D57000ADF8200050452DD1A08FA0F57F41FE3998 -:10D5800001D006252CE0D8F808004FF0160A48B163 -:10D59000A063B8F80C10A1874FF6FF71E187A0F8DF -:10D5A00000B002E04FF6FF70A087BDF8200030F415 -:10D5B0007F611AD0782300220320159906F0B8FD68 -:10D5C00098F8000020712088BDF8201008432080C2 -:10D5D0000EE000E007252088BDF820108843208059 -:10D5E000208810F47F6F1CD03AE02188814321808D -:10D5F0009DF8380020B10EA91598F9F7A6FD05464B -:10D600009DF81C000028EBD086F801A001203070A6 -:10D61000208B70809DF81C0030710520ADF834001F -:10D62000DEE7A18EE1B118980DAB0088ADF83400AB -:10D630002398CDE90304CDE90139206B0090E36A1A -:10D64000179A1598FFF7FCF9054601208DF8380068 -:10D650000EA91598F9F779FD00B10546A4F834B084 -:10D6600094F8460040070AD52046FFF7A0F910F0CD -:10D670003E0F04D114F8460F20F0040020701898D3 -:10D68000BDF83410018028469BE500B585B003281D -:10D6900006D102208DF8000088B26946F9F755FDE1 -:10D6A00005B000BD10B5384C0B782268012B02D0B4 -:10D6B000022B2AD111E013780BB1052B01D10423E1 -:10D6C000137023688A889A802268CB88D380226866 -:10D6D0000B891381498951810DE08B8893802268E1 -:10D6E000CB88D38022680B8913814B8953818B8926 -:10D6F0009381096911612168F9F727FD22680021EA -:10D700000228117003D0002800D0812010BD832092 -:10D7100010BD806B002800D001207047817801295E -:10D7200009D10088B0F5205F03D042F6010188429C -:10D7300001D10020704707207047F0B587B0002462 -:10D7400015460E460746ADF8144010E006980188CD -:10D750002980811DCDE902410721019404940091A3 -:10D76000838842880188384600F0F4F830B906AA68 -:10D7700005A93046FEF7ECFF0028E7D00A2800D1C3 -:10D78000002007B0F0BD00005400002010B58B78D9 -:10D7900083B102789A4205D10B885BB102E08B79A4 -:10D7A000091D4BB18B789A42F9D1B0F801300C8841 -:10D7B000A342F4D1002010BD812010BD072826D03F -:10D7C00012B1012A27D103E0497801F0070102E0F4 -:10D7D0004978C1F3C20105291DD2DFE801F0031821 -:10D7E000080C12000AB10320704702207047042879 -:10D7F0000DD250B10DE0052809D2801E022808D3B1 -:10D8000003E0062803D0032803D00520704700203A -:10D8100070470F20704781207047C0B282060BD43A -:10D82000000607D5FE48807A4143C01D01EBD000B9 -:10D8300080B27047084670470020704770B5138863 -:10D840000B800B781C0625D5F54CA47A844204D8AD -:10D8500043F010000870002070BD956800F00706C6 -:10D8600005EBD0052D78F54065F304130B701378A4 -:10D87000D17803F0030341EA032140F20123B1FB15 -:10D88000F3F503FB15119268E41D00FB012000EB8A -:10D89000D40070BD906870BD37B51446BDF8041053 -:10D8A00011809DF804100A061ED5C1F30013DC494F -:10D8B000A568897A814208D8FE2811D1C91DC908F6 -:10D8C0005A42284616F0EBFC0AE005EBD00100F0C6 -:10D8D0000702012508789540A84393401843087033 -:10D8E000207820F0100020703EBD2DE9F041074661 -:10D8F000C81C0E4620F00300B04202D08620BDE8CE -:10D90000F081C74D002034462E60AF802881AA7276 -:10D91000E8801AE0E988491CE980810614D4E1789E -:10D9200000F0030041EA002040F20121B0FBF1F2D7 -:10D9300001FB12012068FFF770FF2989084480B2BB -:10D940002881381A3044A0600C3420784107E1D493 -:10D950000020D4E72DE9FF4F89B01646DDE9168A8D -:10D960000F46994623F44045084600F00DFB04009D -:10D970000FD0099802F0E2FF0290207800060AD545 -:10D98000A748817A0298814205D887200DB0BDE86A -:10D99000F08F0120FAE7224601A90298FFF74EFF17 -:10D9A000834600208DF80C004046B8F1070F1AD0CE -:10D9B00001222146FFF702FF0028E7D12078400628 -:10D9C00011D502208DF80C00ADF81070BDF80400E0 -:10D9D000ADF81200ADF814601898ADF81650CDF8F7 -:10D9E0001CA0ADF818005FEA094004D500252E46BA -:10D9F000A84601270CE02178E07801F0030140EA15 -:10DA0000012040F20121B0FBF1F2804601FB1287B8 -:10DA10005FEA494009D5B84507D1A178207901F0DE -:10DA2000030140EA0120B04201D3BE4201D90720E0 -:10DA3000ACE7A8191FFA80F9B94501D90D20A5E76F -:10DA40009DF80C0028B103A90998F9F77CFB002880 -:10DA50009CD1B84507D1A0784FEA192161F30100A4 -:10DA6000A07084F804901A9800B10580199850EAC3 -:10DA70000A0027D0199830B10BEB06002A461999F5 -:10DA800016F096FB0EE00BEB06085746189E099819 -:10DA900003F0C0F82B46F61DB5B239464246009554 -:10DAA00002F0ABFC224601A90298FFF7C7FE9DF8E1 -:10DAB0000400224620F010008DF80400DDE901107A -:10DAC000FFF7EAFE002061E72DE9FF4FDFF85091F4 -:10DAD00082461746B9F80610D9F8000001EB41015B -:10DAE00000EB810440F20120B2FBF0F185B000FBB5 -:10DAF00011764D46DDF84C8031460698FFF78DFED5 -:10DB000029682A898B46611A0C3101441144AB887B -:10DB100089B28B4202D8842009B038E70699CDB289 -:10DB2000290603D5A90601D50620F5E7B9F806C0F0 -:10DB30000CF1010C1FFA8CFCA9F806C0149909B16C -:10DB4000A1F800C0A90602D5C4F8088007E0104477 -:10DB500080B2A9F80800191A01EB0B00A060224658 -:10DB6000FE200699FFF798FEE77026712078390AA3 -:10DB700061F30100320AA17840F0040062F3010170 -:10DB8000A17020709AF802006071BAF80000E0807D -:10DB900000262673280602D599F80A7000E00127AE -:10DBA000A80601D54FF000084D4600244FF00709A4 -:10DBB0000FE0CDE902680196CDF800900496E9885F -:10DBC0002046129B089AFFF7C5FE0028A4D1641CCA -:10DBD000E4B2BC42EDD300209EE72DE9F047804639 -:10DBE00000F0D2F9070005D0002644460C4D40F263 -:10DBF000012919E00120BDE8F087204600F0C4F9B2 -:10DC00000278C17802F0030241EA0222B2FBF9F382 -:10DC100009FB13210068FFF700FE304486B201E0E3 -:10DC2000E8050020641CA4B2E988601E8142E4DC9F -:10DC3000A8F10100E8802889801B28810020387025 -:10DC4000D9E710B5144631B1491E218002F076FEA5 -:10DC5000A070002010BD012010BD10B5D2490446AF -:10DC60000088CA88904201D30A2010BD096800EBE1 -:10DC7000400001EB80025079A072D0882081917819 -:10DC8000107901F0030140EA0120A081A078E11C95 -:10DC9000FFF7D4FD20612088401C2080E080002018 -:10DCA00010BD0121018270472DE9FF4F85B04FF66D -:10DCB000FF788246A3F8008048681F460D468078AA -:10DCC0008DF8060048680088ADF8040000208DF843 -:10DCD0000A00088A0C88A04200D304462C8241E046 -:10DCE000288A401C2882701D6968FFF74FFDB8BB69 -:10DCF0003988414501D1601E38806888A04236D3FA -:10DD0000B178307901F0030140EA012901A9701DC1 -:10DD1000FFF73CFD20BB298941452CD0002231462C -:10DD20000798FFF74BFDD8B92989494518D1E9680B -:10DD30000391B5F80AC0D6F808B05046CDF800C037 -:10DD400002F068FFDDF800C05A460CF1070C1FFA1C -:10DD50008CFC4B460399CDF800C002F018FB50B183 -:10DD6000641CA4B2204600F00FF90600B8D1641E6E -:10DD70002C820A20D0E67C807079B871F088B88057 -:10DD80003178F07801F0030140EA01207881A7F8AA -:10DD90000C90504602F0D2FD324607F10801FFF721 -:10DDA0004DFD38610020B7E62DE9FF4F87B0814671 -:10DDB0001C469246DDF860B0DDF85480089800F00B -:10DDC000E3F805000CD0484602F0B8FD29780906B2 -:10DDD00008D57549897A814204D887200BB0D6E5E9 -:10DDE0000120FBE7CAF309062A4601A9FFF726FD31 -:10DDF0000746149807281CD000222946FFF7DEFCAE -:10DE00000028EBD12878400613D501208DF80800B2 -:10DE10000898ADF80C00BDF80400ADF80E00ADF8A0 -:10DE20001060ADF8124002A94846F9F78CF90028B5 -:10DE3000D4D12978E87801F0030140EA0121AA78D9 -:10DE4000287902F0030240EA0220564507D0B1F5D6 -:10DE5000007F04D9611E814201DD0B20BEE78642AE -:10DE600001D90720BAE7801B85B2A54200D9254613 -:10DE7000BBF1000F01D0ABF80050179818B1B919D9 -:10DE80002A4616F095F9B8F1000F0DD03E444846E9 -:10DE90004446169F02F0D0FE2146FF1DBCB232461A -:10DEA0002B46009402F0DDFA002097E72DE9F041BF -:10DEB00007461D461646084600F066F804000BD0DB -:10DEC000384602F03BFD2178090607D53649897AA4 -:10DED000814203D8872012E5012010E52246314611 -:10DEE000FFF7ACFC65B12178E07801F0030140EA6E -:10DEF0000120B0F5007F01D8012000E0002028704B -:10DF00000020FCE42DE9F04107461D461646084670 -:10DF100000F03AF804000BD0384602F00FFD2178EB -:10DF2000090607D52049897A814203D88720E6E48B -:10DF30000120E4E422463146FFF7AEFCFF2D14D069 -:10DF40002178E07801F0030240EA022040F2012249 -:10DF5000B0FBF2F302FB130015B900F2012080B20E -:10DF6000E070000A60F3010121700020C7E410B5E1 -:10DF70000C4600F009F828B1C18821804079A070D2 -:10DF8000002010BD012010BD0749CA88824209D374 -:10DF900040B1096800EB40006FF00B0202EB80001B -:10DFA0000844704700207047E805002070B503461C -:10DFB000002002466FF02F050EE09C5CA4F13006B5 -:10DFC0000A2E02D34FF0FF3070BD00EB800005EB4E -:10DFD0004000521C2044D2B28A42EED370BD30B50C -:10DFE0000A240AE0B0FBF4F304FB13008D18303070 -:10DFF00005F8010C521E1846D2B2002AF2D130BDEB -:10E0000030B500234FF6FF7510E0040A44EA002003 -:10E0100084B2C85C6040C0F30314604005EA003479 -:10E020004440E0B25B1C84EA40109BB29342ECD3C4 -:10E0300030BD000010B582B0694601F0D1FD002866 -:10E0400018BFFFDF9DF80000002448B1019890F848 -:10E05000DD0028B1019880F8DD4001980AF0AFF9A1 -:10E06000F8488068A0F8D24002B010BD2DE9F04712 -:10E0700004460D46062002F043FC0646072002F047 -:10E080003FFC304400F0FF08002718EB050618BFDE -:10E090004FF000091DD02088401C80B22080B04283 -:10E0A00028BFA4F800902588454501D3B54209D37F -:10E0B0000621284602F07CFC20B90721284602F000 -:10E0C00077FC10B10020BDE8F087781CC7B2BE42D3 -:10E0D000E1D84FF6FF7020801220BDE8F08770B5C0 -:10E0E00082B007F073FB0DF0AFF9D74C4FF6FF7617 -:10E0F00000256683A683D5A12570D1E90001CDE96D -:10E10000000165706946A01C16F008FAA11C601C8D -:10E1100014F04CF825721B2060814FF4A471A1818A -:10E12000E08121820321A1740422E274A082E082B2 -:10E13000A4F13E00218305704680C6480570A4F115 -:10E1400010000570468002B070BDF8B5BD4D174691 -:10E150000E466860297007F0B3FA4FF6FF70ADF80D -:10E16000000000216846FFF781FFA0B90621BDF835 -:10E17000000002F02FFC04460721BDF8000002F069 -:10E1800029FC002C1CBF0028FFDF00216846FFF798 -:10E190006DFF0028EAD0FFF7A2FF287812F07CF884 -:10E1A0000FF0A0FC2978686813F013FF28780CF0B2 -:10E1B000ABFB30460AF00FF807F020FC29786868BE -:10E1C0000BF048FA3946287814F0ADFDBDE8F84068 -:10E1D0000DF03AB910B50124002A1CBF002010BD73 -:10E1E000002908BF022105D0012918BF002401D051 -:10E1F000204610BD0EF088FEFAE72DE9F04F8BB0F7 -:10E20000040008BFFFDF02218F4E06F11C00FFF75C -:10E210002DFF002818BFFFDFB6F81CA0062002F073 -:10E220006FFB0546072002F06BFB284400F0FF0857 -:10E2300008F1010000F0FF094FF0000BB78B4745D4 -:10E2400025D120460FF022F8002840F0CE8030780B -:10E25000002800F0CE8084F801B014202070C4F8AB -:10E2600004B0C4F808B0C4F80CB0C4F810B0C4F8D6 -:10E2700014B0C4F818B0C4F81CB00220C4F820B020 -:10E28000207186F800B00BB00120BDE8F08F4F453B -:10E2900020D1204607F04CFB00287DD007F02AFF54 -:10E2A000002859D02078172856D12079002853D03B -:10E2B000E088072102F07CFB050008BFFFDF28880B -:10E2C00007F017FAE088072102F084FB002818BF46 -:10E2D000FFDF8AE004A9384601F082FC00285BD108 -:10E2E0009DF8100048B107F07EFBB84254D021469B -:10E2F00038460BF0B8F880B377E00FF05AF8B84220 -:10E3000077D02146384613F085FD00286DD1059859 -:10E3100000F1580590F8D00018B9E87E08B1012046 -:10E3200000E00020079095F8370000281CBF95F802 -:10E33000380010F0020F1CD084F801B001202070CA -:10E3400084F804B0E78095F839002072688F608106 -:10E35000A88FA08185F837B047E0FFE7059800F166 -:10E36000580590F80C010028DBD1E87E0028D8D0B1 -:10E37000D5E7384602F060FC0290002808BFFFDFB6 -:10E38000029801F06FFE50B184F801B00F212170A6 -:10E39000E7802081012000E02BE0207125E0384655 -:10E3A00002F038FC0290002808BFFFDF079800B396 -:10E3B000029801F0AEFEE0B19DF8100038B9059862 -:10E3C000D0F8F8004188B94208BF80F800B038465C -:10E3D00007F08FF984F801B00C20207084F804B0A5 -:10E3E000E780287F207285F81BB00BB00120BDE8C4 -:10E3F000F08F022106F11C00FFF738FE18B9B08B30 -:10E4000050457FF41BAF0BB02046BDE8F04F14F031 -:10E41000D0BC10B512F08AFC042803D012F086FCA0 -:10E42000052802D10FF078FD28B90AF0A9F920B12A -:10E4300007F08AFC08B10C2010BD0DF051F8002047 -:10E4400010BD00005C00002032060020FFFFFFFF2F -:10E450001F0000006800002010B504460078002866 -:10E460001EBF0128122010BD12F060FC042806D047 -:10E4700012F05CFC052802D00AF082F928B10DF0F8 -:10E480007EF900281CBF0C2010BD2078002816BF84 -:10E4900002280020012004F11703E21D611CBDE8E1 -:10E4A00010400DF075B810B50446007800281EBF66 -:10E4B0000128122010BD12F039FC042803D012F0FC -:10E4C00035FC052802D10FF027FD28B90AF058F9CC -:10E4D00020B107F039FC08B10C2010BD20780028CD -:10E4E00016BF022800200120611C0CF0BFFF00288D -:10E4F00014BF0020072010BD10B50DF043F900280F -:10E5000014BF0020302010BD10B5044612F00EFCE0 -:10E51000042806D012F00AFC052802D00AF030F9CF -:10E5200008B10C2010BD20460DF026F9002010BDCA -:10E5300010B512F0FBFB042806D012F0F7FB0528FB -:10E5400002D00AF01DF928B10DF019F900281CBFFE -:10E550000C2010BD0DF075F8002010BDFF2181705A -:10E560004FF6FF718180FE4949680A7882718A8876 -:10E57000028149884181012141700020704710B516 -:10E58000002482B012F1080F16D00CDC12F1280F13 -:10E5900018BF12F1140F0FD012F1100F18BF12F1A3 -:10E5A0000C0F09D00EE012F1040F18BF002A03D09F -:10E5B000032A18BF042A05D1012807D0022809D050 -:10E5C00003280BD0122402B0204610BD104607F0DD -:10E5D0008CFDF8E710460FF03AFAF4E708461446C7 -:10E5E000694601F0FDFA002818BF0224EBD19DF81E -:10E5F0000000019880F857400024E4E710B5134666 -:10E6000001220DF0A6FF002010BD10B5044612F047 -:10E610008DFB052804BF0C2010BD204611F02AFEFA -:10E62000002010BD10B5044612F080FB042806D06F -:10E6300012F07CFB052802D00AF0A2F808B10C20E9 -:10E6400010BD2146002007F0C2F8002010BD10B513 -:10E65000044611F0B9FE50B10AF085F838B12078BF -:10E6600009F0DDFD20780FF090FC002010BD0C209B -:10E6700010BD10B5044612F059FB042806D012F064 -:10E6800055FB052802D00AF07BF808B10C2010BD1C -:10E690002146012007F09BF8002010BD38B5044644 -:10E6A0004FF6FF70ADF80000A079E179884213D0F1 -:10E6B00021791F299CBF61791F290DD8002211469D -:10E6C00014F030FF40B90022E079114614F02AFF1F -:10E6D00010B9207A072801D9122038BD0AF050F865 -:10E6E00060B912F023FB48B900216846FFF7BEFC71 -:10E6F00020B1204606F031F8002038BD0C2038BD8E -:10E7000070B504468078002582B01A2825D00EDC2A -:10E71000162844D2DFE800F04343434343214343F8 -:10E7200043434343434343434343432121212A2853 -:10E7300035D00BDCA0F11E000C2830D2DFE800F051 -:10E740002F2F2F2F2F2F2F2F2F2F2F0D3A38042819 -:10E7500025D2DFE800F0240224022088B0F5706F93 -:10E760001DD20126694601F03BFA00281EBF022097 -:10E7700002B070BD9DF80000002801980BBF00F1A9 -:10E78000F40100F5B87100F1F50300F271130246CF -:10E7900012D192F8D00092F8732052B903E002B07F -:10E7A0004FF0120070BD002818BF042801D008786F -:10E7B00068B102B00C2070BD92F80C0192F8732081 -:10E7C000002AF6D1002818BF0428F0D1F1E70E7016 -:10E7D000A07818709DF8000048B1019890F8DD000D -:10E7E00028B1019880F8DD50019809F0E8FD02B0E9 -:10E7F000002070BDF0B583B00C46694601F0F0F919 -:10E8000028B1204615F074FE03B00220F0BD019837 -:10E81000002700F1580500F1080600BF85F8407098 -:10E820003146204615F07AFE95F840000028F5D1D3 -:10E8300003B0F0BD2DE9F0410D4604460189808802 -:10E8400000230DF0BCFF696A814228BFBDE8F0815A -:10E85000401A401C4108A0884FF0000C401A80B2BA -:10E86000A08022896FF00E07511A8AB2228195F892 -:10E870005460618816F00C0F6FF00D0328D0B0F5CE -:10E88000747F38BF604606D35038C61700EB9660D9 -:10E8900003EBA01080B2814238BF0846608095F833 -:10E8A0005510E08811F00C0F1BD0B2F5747F09D31E -:10E8B000A2F15001CA1701EB926103EBA11100BF55 -:10E8C0001FFA81FC604528BF6046E080BDE8F0810A -:10E8D000022E1ABF03EBD00080B207EB9000DAD112 -:10E8E000D8E702291ABF03EBD2011FFA81FC07EB1C -:10E8F0009201E7D1E4E7F0B587B00C46054604A9DC -:10E9000001F06EF900281CBF07B0F0BD9DF81000A3 -:10E91000002814BF002201220599B1F84A30FB2BD0 -:10E9200028BFFB23B1F84CC0BCF1FB0F28BF4FF050 -:10E93000FB0C0C4FD7E90006BF68009001960297C8 -:10E94000ADF80230ADF806C06846FFF773FF65808A -:10E95000BDF80400E080BDF80800608104E000001C -:10E960005C00002040470200BDF80200A080BDF816 -:10E970000600208107B00020F0BD2DE9F04F89B0DE -:10E9800004460088694601F02BF95FEA00081CBFC5 -:10E9900009B0BDE8F08FB4F806C02289ACF11B01C4 -:10E9A0001220E12924BF09B0BDE8F08FB2F5A47FA1 -:10E9B0003CBF09B0BDE8F08F44F29025AA4284BF65 -:10E9C00009B0BDE8F08F00276388A188A3F11B067A -:10E9D000E12E24BF09B0BDE8F08FB1F5A47F2EBFB2 -:10E9E0008D4209B0BDE8F08F1120BCF1FB0F99BF3B -:10E9F00040F64806B24209B0BDE8F08FFB2B92BF4B -:10EA0000B14209B0BDE8F08F208806A901F0E8F80E -:10EA1000002818BFFFDF35D19DF8180000280CBF73 -:10EA2000012200220799B1F84A00FB2828BFFB20E9 -:10EA3000B1F84C30FB2B28BFFB23DFF858B7DBF8CD -:10EA400000C0DBF804A0DBF808B0CDF808C0CDF8B2 -:10EA50000CA0CDF810B0ADF80A00ADF80E3002A849 -:10EA6000FFF7E8FEBDF80C0060F31F45BDF810008D -:10EA700060F31F49BDF80A0060F30F05BDF80E00F2 -:10EA800060F30F0962881FFA89F1092091423CBFA7 -:10EA900009B0BDE8F08FA9B2E28891423CBF09B04D -:10EAA000BDE8F08F4FEA1941A288238901EB154197 -:10EAB0001A4491423CBF09B0BDE8F08F9DF80000B8 -:10EAC0004FF001090028019808D000F5CD7580F8B5 -:10EAD0009B91019890F8DE0148B307E000F582753C -:10EAE00080F80591019890F8280110B14FF03A088C -:10EAF00018E0E08868806088E8802089A880A08885 -:10EB00002881012228460199FFF794FEA888B04287 -:10EB100028BF40F64800A8802889B0421DD228812D -:10EB200085F800906F7009B04046BDE8F08FE0882E -:10EB300068806088E8802089A880A08828810022D9 -:10EB400028460199FFF776FEA888B04228BF40F614 -:10EB50004800A8802889B042E1D340F64800DEE7AB -:10EB60000BE710B5044612F0E1F8042806D012F0C5 -:10EB7000DDF8052802D009F003FE28B10CF0FFFDF6 -:10EB800000281CBF0C2010BD2078002816BF0228CA -:10EB900000200120E279611C0CF075FF002814BFF1 -:10EBA0000020022010BD817831F0070207BFC27833 -:10EBB00032F007031220704711F0040F0EBF12F05D -:10EBC000040F1120704701F023B810B504460178F6 -:10EBD000122084B0012918BF002904D002291EBFC9 -:10EBE000032904B010BD6178002918BF012904D0A1 -:10EBF00002291EBF032904B010BDE17B21B9A17811 -:10EC000001291CBF04B010BDA17831F005021CBF62 -:10EC100004B010BD11F0050F04BF04B010BD11F019 -:10EC2000040F1EBF112004B010BDE178E388628993 -:10EC300000291EBF012904B010BD042B2EBF042AD9 -:10EC400004B010BDA17B002904BF04B010BD07298A -:10EC500084BF04B010BD12F069F8042837D012F058 -:10EC600065F8052833D0A0788DF80800A0788DF8D5 -:10EC7000000060788DF8040020788DF80300A07BF8 -:10EC80008DF80500E07B002818BF01208DF80600F4 -:10EC9000A07810F0010F10D0E078012808BF022002 -:10ECA00003D000280CBF012000208DF80100E0886F -:10ECB000ADF80A006089ADF80C0002A811F091FBD4 -:10ECC000002804BF68460FF065F904B010BD04B019 -:10ECD0000C2010BD10B5044602781220012A0FD076 -:10ECE000002A18BF10BD012A26D012F01FF80528EF -:10ECF00004D011F0F6F9002808BF10BD0C2010BD9B -:10ED00006178002918BF012906D0022918BF10BD5B -:10ED1000A188002908BF10BD6388002B1CBFA188F3 -:10ED20000029E0D003EB83035B0001EB8101B3EB2F -:10ED3000012F28BF10BDD6E70FF01DF8002804BF33 -:10ED4000122010BD0FF02CF800200FF0D3F800288F -:10ED500018BF10BD60780FF0B1F8002818BF10BDC3 -:10ED6000A1886088BDE8104011F064BB002100F06C -:10ED7000B1BF017811F0010F02D0406813F0ECBF71 -:10ED800013F0B9BF2DE9F04F8FB00D460246AFF634 -:10ED90004411D1E90001CDE90B011146284600F0EC -:10EDA00099FF00281CBF0FB0BDE8F08F11F0BEFF27 -:10EDB00004280CD011F0BAFF052808D0F64F387897 -:10EDC00028B90EF0F6FAA0F57F41FF3903D00FB055 -:10EDD0000C20BDE8F08FF1480890F1480990F14807 -:10EDE0000A9008AA06210DA801F0B0FD040002BF98 -:10EDF00009200FB0BDE8F08F03210DF052F9B98A58 -:10EE0000A4F84A10FA8AA4F84C20F87C0090BB7C45 -:10EE1000208801F088FE002818BFFFDF208806F058 -:10EE200067FC268804F10E094FF0000B4FF00A0A28 -:10EE30000421484604F04DFF48460DF001FB062032 -:10EE400001F05EFD80461CE005A9062001F039FDB9 -:10EE500005A801F014FD5FEA000B10D1BDF8180001 -:10EE6000B04206D00798042249460E3015F074F9D6 -:10EE700070B105A801F003FD5FEA000BEED0A8F128 -:10EE80000108B8F1000F07DDBBF1000FDCD007E08F -:10EE900048460DF0DEFAF2E7BBF1000F08BFFFDFD6 -:10EEA000D9F800000CF07AFFBAF1010A01D000286D -:10EEB000BED0BDA004F1120600680190032101A894 -:10EEC00004F0DEFE002001A90A5C3254401CC0B2EE -:10EED0000328F9D3A88B6080688CA080288DE080FF -:10EEE000687A10F0010F18BF01217CD0388B0A46D8 -:10EEF00011F009FB0146A062204611F030FB4FF0F3 -:10EF0000000884F85E8084F85F80A878002816BF27 -:10EF10000228002001206076D5F80300C4F81A000A -:10EF2000B5F80700E0830BA904F1080015F0F6FA24 -:10EF30004FF0010984F80091B4F84C0004F5827692 -:10EF40004A46FB2828BFFB207989814238BF084602 -:10EF500094F855104FF4747A11F00C0F1CBF0AEBA3 -:10EF600080111FFA81FC72D0B989614538BF8C4687 -:10EF7000B4F84A10FB2928BFFB21FB898B4238BF1C -:10EF8000194694F854B01BF00C0F1CBF0AEB811308 -:10EF90009BB265D03F8A9F4238BF3B461B2918BFB2 -:10EFA000B3F5A47F65D0F080A6F808C07180B38067 -:10EFB00021463046FFF73EFCB08840F648018842C3 -:10EFC00028BF40F64800B0803089884228BF40F60C -:10EFD0004800308186F800908DF800800121684655 -:10EFE00004F04EFE00E02BE09DF8000000F0070169 -:10EFF000C0F3C1021144C0F3401008448DF8000072 -:10F00000401D207609283CBF08302076002120468C -:10F010000DF047F868780EF0B9FEA9782878EA1C58 -:10F020000EF087FE002808BF122650D00EF0B8FE62 -:10F03000A9782878EA1C0EF01BFF06001FD046E0D6 -:10F0400010F0020F14BF022100214FE7FFE7022951 -:10F0500007BF81003C31C10070311FFA81FC83E79A -:10F06000BBF1020F07BF8B003C33CB0070339BB268 -:10F0700090E71B2818BFBCF5A47F94D1ACE7012012 -:10F080000EF04CFE060022D1214603200EF028FF90 -:10F0900006001CD1687A8DF8000010F0010F05D031 -:10F0A0006889ADF80200288AADF80400684611F0BE -:10F0B00098F9064695F83A00002818BF01200EF08E -:10F0C00033FE26B9204611F026F9060009D0208823 -:10F0D00006F00FFB2088062101F07CFC002818BFF9 -:10F0E000FFDF30460FB0BDE8F08F0146002049E653 -:10F0F00038B5294C207870B911F018FE052805D0D4 -:10F100000EF057F9A0F57F41FF3904D0684611F0A1 -:10F11000CCF910B113E00C2038BD0098008806F03F -:10F12000E8FA00980621008801F054FC002818BF76 -:10F13000FFDF012020701D480078FCF727FE00202B -:10F1400038BD70B4B0F802C08188C3880289448990 -:10F150008089ACF1060640F67B45AE423CBF8E1F6F -:10F16000AE4214D28C4598BFB3F5FA7F3EBFA2F1F0 -:10F170000A0C0F4D15EB0C0509D25B1C5943B1EB82 -:10F18000820F04DA84429EBF002070BC704730209A -:10F1900070BC70474047020032060020F405002092 -:10F1A0006800002022060020112233005C000020AD -:10F1B00089F3FFFF2DE9F047B0F802C004468188CB -:10F1C000C388028947898689ACF1060940F67B48E5 -:10F1D00030200025C1453ABFA1F10609C145BDE86F -:10F1E000F0878C4598BFB3F5FA7F3DBFA2F10A0CBA -:10F1F000DFF8B48418EB0C08BDE8F0875B1C5943BA -:10F20000B1EB820FA8BFBDE8F087B74288BFBDE869 -:10F21000F0872088062101F0CBFB68B190F8D01070 -:10F2200090F8732042B9002918BF042904D0D0F8FF -:10F23000F8100A781AB106E00220BDE8F087D0F88D -:10F240004421127812B13A20BDE8F08705228A7174 -:10F25000D0F8F8100D81D0F8F820A1885181D0F8AD -:10F26000F820E1889181D0F8F8202189D181D0F867 -:10F27000F8100A894B899A429EBF8A79082A9A42D5 -:10F2800024BF1220BDE8F08722884A80D0F8F80019 -:10F29000022101700020BDE8F087F0B583B005467B -:10F2A0000DF0F2F8002802BF122003B0F0BD0026D6 -:10F2B000FE4F012429467C70B81C15F02FF97E7092 -:10F2C0006946062001F0FDFA002818BFFFDF6846F6 -:10F2D00001F0D5FA002808BFBDF804500AD1029801 -:10F2E00080F80041684601F0CAFA18B9BDF8040078 -:10F2F000A842F4D103B00020F0BD10B50446008848 -:10F30000062101F055FB68B190F8D01090F87320F9 -:10F3100042B9002918BF042904D0D0F8F8100A789F -:10F3200012B105E0022010BDD0F8442112780AB1D4 -:10F330003A2010BD90F8962012F0010F04BF0C2067 -:10F3400010BDD4F80220D4F806304A608B60D0F8A3 -:10F35000F81062898A81D0F8F810E268C1F80E20AE -:10F360002269C1F812206269C1F81620A269C1F8A9 -:10F370001A20D0F8F82003211170D0F8F800218865 -:10F380004180002010BDF8B515460E46044609F030 -:10F39000F7F900281CBF0C20F8BD20781223EF28B5 -:10F3A00073D86088ADF8000010F0100F4FF0000126 -:10F3B0000CD010F0010F00F002021BD0B2B110F01F -:10F3C000080F08BF10F0040F1ED01AE010F0080F4D -:10F3D0007ED110F0200F18BF10F0030F78D110F07D -:10F3E000010F18BF10F0020F72D10DE010F0040FE2 -:10F3F0000AD106E02AB110F0080F08BF10F0040F80 -:10F4000002D010F00F0F63D1608810F0080F09D1FF -:10F41000D4E901C2624528BFBCF1200F58D3B2F134 -:10F42000807F55D2227B002A52D0072A50D894F8E8 -:10F430000DC0BCF1000F18BFBCF1010F05D0BCF12D -:10F44000020F18BFBCF1030F42D110F0040F05D119 -:10F45000BCF1020F18BFBCF1030F07D1A27B002A39 -:10F4600018BF012A34D110F0040F08D1627D002AA0 -:10F4700018BF012A03D0022A18BF032A28D1E27D2F -:10F4800010F0100F02D0012A10D021E0012A18BF7D -:10F49000032A1DD110F0100F08D1627E012A1CBF73 -:10F4A000022A032A14D1A27E0F2A11D8E27E002A52 -:10F4B00018BF012A0CD1E27D1123032A08D010F0D5 -:10F4C000100F04BF627E032A02D010F0400F01D05B -:10F4D0001846F8BD3170A17555B9FF208DF80000B0 -:10F4E0006946002006F0EDFD6946002006F0D4FDD7 -:10F4F0002046BDE8F84006F004BD002243E72DE9B0 -:10F50000F0470446C0780F46122510B106F063FD9F -:10F5100050B1607804280AD094F8038094F80090E1 -:10F520006678B8F1FB0F12D92846BDE8F08709F0DC -:10F5300027F90028F8D006F0A6FD0028F4D106F03F -:10F540009AFA002804BFE0780028EDD1E4E71FB163 -:10F55000B8F11F0F23D9E7E706F08DFA28B1B8F10B -:10F560001F0F98BF032E07D0DEE7032E18BF042E0F -:10F5700002D0B8F1000FD7D009F002F9002818BF67 -:10F58000032E04D0042E1CBF0C20BDE8F087484693 -:10F5900006F069FA002804BF4220BDE8F087E07851 -:10F5A00061781F2898BF03291CBF1120BDE8F08790 -:10F5B000211D06F086FD0020BDE8F08700219EE7B2 -:10F5C0002DE9F0470446C0788846122710B106F0AE -:10F5D00098FD38B16578042D04D0E67894F8009051 -:10F5E000FB2E02D93846BDE8F087B8F1000F02D0F3 -:10F5F0001F2E21D9F6E706F03EFA20B11F2E98BF44 -:10F60000032D06D0EEE7032D18BF042D01D0002EE8 -:10F61000E8D009F0B5F8002818BF032D04D0042D58 -:10F620001CBF0C20BDE8F087484606F01CFA0028F5 -:10F6300004BF4220BDE8F087E07861781F2898BFBA -:10F6400003291CBF1120BDE8F087211D06F024FD11 -:10F650000020BDE8F0870021B2E72DE9F041044623 -:10F660004078422582B0012808D8A07806F0FBF93E -:10F6700020B120781225012804D0A0B102B028467C -:10F68000BDE8F08106F04BFD20B1A0880028F5D040 -:10F690008028F3D806F050FD90B160780028EDD0B6 -:10F6A0002078012810D003E089F3FFFF3206002004 -:10F6B00007F0EAFE044608F0DBFC002800F0EA80D0 -:10F6C00002B00C20BDE8F08106F046FB38B906F028 -:10F6D0001FFD002802BF122002B0BDE8F08109F032 -:10F6E0004FF80028ECD106F07EF9A0F57F41FF39F4 -:10F6F000E6D106F050FBA08842F2107100FB01F643 -:10F70000A079314606F078FC06F0F4FC18B300222C -:10F71000072101A801F01AF9040002BF092002B074 -:10F72000BDE8F081F6480321846020460CF072FBAE -:10F73000204607F0EBF8F34DA88AA4F84A00E88ABF -:10F74000A4F84C0006F097F968B1288B012108F065 -:10F7500013FEA0620FE03146002008F063FD002890 -:10F7600018BFFFDFA1E006F0E9FC2A8B0146104636 -:10F7700008F002FEA06201460022204607F087FE44 -:10F7800006F079F9002808BF06F0D8FCE87C009064 -:10F79000AB7CEA8AA98A208801F0C5F9002818BF45 -:10F7A000FFDF208805F0A4FF3146204608F03AFD2F -:10F7B000002818BFFFDF2146B4F84C00002204F5F2 -:10F7C000CD76FB2828BFFB206B89834238BF1846C3 -:10F7D00091F855304FF4747413F00C0F1CBF04EB08 -:10F7E00080131FFA83FC38D0AF89674528BF67466E -:10F7F000B1F84A30FB2B28BFFB23B5F80EC09C455F -:10F8000038BF634691F854C01CF00C0F1CBF04EBCA -:10F81000831C1FFA8CF829D02C8A444528BF444603 -:10F820001B2B18BFB4F5A47F2ED0F08037817380D6 -:10F83000B4803046FEF7FEFFB08840F648018842AB -:10F8400028BF40F64800B0803089884228BF40F683 -:10F85000480030810120307027E0022B07BF830071 -:10F860003C33C30070331FFA83FCBDE7BCF1020FC9 -:10F8700007BF4FEA830C0CF13C0C4FEAC30C0CF1B0 -:10F88000700C1FFA8CF8C7E71B2818BFB7F5A47FC8 -:10F89000CBD10AE04CB1208805F02BFF208807214E -:10F8A00001F098F8002818BFFFDF002002B0BDE883 -:10F8B000F0810021D1E610B50C46072101F078F85F -:10F8C000002804BF022010BD90F8731109B10C206C -:10F8D00010BD90F86510142912BF152990F8C011B9 -:10F8E0000029F4D12168C0F874116168C0F878115A -:10F8F000A168C0F87C11E168C0F88011012180F88E -:10F900007311002010BD10B5072101F051F8002837 -:10F9100004BF022010BD90F8731109B10C2010BD76 -:10F9200090F86510142918BF1529F7D1022180F825 -:10F930007311002010BDF0B50E464BF68032122137 -:10F9400083B0964217D8B6B1694600F049F900284D -:10F950001CBF03B0F0BD019800F15807841C258836 -:10F960003246294638460CF00FFA2088A842F6D1D4 -:10F9700003B00020F0BD03B00846F0BD10B582B062 -:10F9800004460088694600F02BF900281CBF02B02D -:10F9900010BD0198A37800F1580190F82C209A42EC -:10F9A00002BF0C2002B010BD7F220A728A720022B0 -:10F9B000CA72E17880F82D10217980F82E10A17894 -:10F9C00080F82C1002B0104610BD10B582B00C4665 -:10F9D000694600F005F900281CBF02B010BD01986F -:10F9E00090F87300002818BF0120207002B000209A -:10F9F00010BD30B583B00D461446694600F0F0F8EE -:10FA000000281CBF03B030BD019890F82C000128DD -:10FA10001EBF0C2003B030BD019890F86010297013 -:10FA200090F86100207003B0002030BD70B50D4625 -:10FA30001646072100F0BCFF002804BF022070BD5D -:10FA400083884FF0010CC28841880CEB430C65455C -:10FA50001AD342F2107C02FB0CF240F6C41C01FBEC -:10FA60000CF1B2FBF1F1491E8CB2B4F5FA7F88BFFC -:10FA70004FF4FA74A54238BF2C46621C591CB2FBE5 -:10FA8000F1F25143491E8BB290F8AC11002908BF26 -:10FA900003843380002070BD10B50C46072100F0B0 -:10FAA00087FF002804BF022010BD80F8DF40002C33 -:10FAB0001EBF90F8DD10002908F081FC002010BD69 -:10FAC000017800291CBF417800290ED041881B29EC -:10FAD00021BF81881B29C188022906D30A490268EF -:10FAE00040680A654865002070471220704710B5CD -:10FAF000044610F005FD204608F009FC002010BD6A -:10FB00005C00002032060020F40500202DE9F041C1 -:10FB100016460F46044601221146384610F0F3FC03 -:10FB200005460121384608F027FC854228BF2846B3 -:10FB30000123E100503189B2E631884206D901F152 -:10FB40009602401AB0FBF2F0401C83B233800020D2 -:10FB5000BDE8F08110B5044611F0E8F8042806D09D -:10FB600011F0E4F8052802D008F00AFE08B10C20D4 -:10FB700010BD601C0BF05DFF207800F0010006F066 -:10FB800005F9207800F001000EF005F9002010BD05 -:10FB900010B50446072000F0A5FE00281CBF0C206D -:10FBA00010BD207810F0010F11D0002260781146AE -:10FBB00013F0B8FC00281CBF122010BDA0680AF08A -:10FBC00048FA607861680AF04DFA002010BD002004 -:10FBD0000AF03FFA002108460AF044FA002010BD5E -:10FBE00070B50C460546062100F0E2FE606010B1DB -:10FBF0000020207070BD0721284600F0D9FE60600B -:10FC0000002804BF022070BD01202070002070BDBC -:10FC100010B582B0044600886946FFF7E1FF020094 -:10FC20001CBF02B010BDA088002818BF012804D056 -:10FC300002281EBF122002B010BDA178002908BF03 -:10FC40000321E078002808BF03204FF0000C9DF846 -:10FC500000400123002C019C06D084F8A531019CB2 -:10FC600094F8F241ECB124E084F80F31019C94F84F -:10FC700034413CB9019C94F80E411CB9019C94F8A4 -:10FC80007D400CB13A2208E0019C84F80E31019BC2 -:10FC900083F81011019981F81101019880F80FC1C2 -:10FCA00015E0019C94F8A4411CB9019C94F87D4096 -:10FCB0000CB13A2208E0019C84F8A431019B83F83E -:10FCC000A611019981F8A701019880F8A5C102B099 -:10FCD000104610BD427A12F0070F10D032F0070321 -:10FCE0000DD112F0040F01D011207047012A18BF66 -:10FCF000022AF9D190F83A301BB9012A01D012201A -:10FD000070472DE9F0074FF0000C12F0010F40F69C -:10FD1000774740F67B4337D069B14489B0F810C0CB -:10FD2000261F43F6FD75AE423CBFACF10406AE4261 -:10FD300026D2644524D3C68AB0F81CC0448C058DF5 -:10FD4000B0F82E90B0F83480A6F1060A9A453CBF70 -:10FD5000ACF1060A9A4513D2664598BFB4F5FA7F0E -:10FD60003CBFA5F10A06BE420AD2641C04FB0CFC8F -:10FD7000BCEB850F04DAC14598BF4FF0010C03D9E5 -:10FD8000BDE8F0073020704712F0020F22D000EBE0 -:10FD90004C02D68AB2F81CC0558C148DB2F82E8055 -:10FDA000928EA6F106094B4584BFACF106094B457E -:10FDB000E6D9664598BFB5F5FA7F3CBFA4F10A03C2 -:10FDC000BB42DDD26B1C03FB0CF3B3EB840FD7DA21 -:10FDD0009045D5D802782AB1012A13D0BDE8F007A2 -:10FDE000122070470029817808D0002918BF012906 -:10FDF00008D0022918BF032904D0EFE7002918BF53 -:10FE00000129EBD14078002818BF012803D002282F -:10FE100018BF0328E2D1BDE8F007002070470000BA -:10FE200030B5058825F4004421448CB24FF40041DC -:10FE300094420AD2121B92B21B339A4201D2A943B6 -:10FE400007E005F40041214303E0A21A92B2A9435E -:10FE50001143018030BD0844083050434A31084402 -:10FE600080B2704770B51D4616460B4604462946BB -:10FE70003046049AFFF7EFFF0646B34200D2FFDF99 -:10FE80002821204614F035FA4FF6FF70A082283E54 -:10FE9000B0B265776080B0F5004F00D9FFDF6188B0 -:10FEA00005F13C00814200D2FFDF60880835401B2D -:10FEB000343880B220801B2800D21B2020800020F4 -:10FEC000A07770BD8161886170472DE9F05F0D46B4 -:10FED000C188044600F12809008921F4004620F475 -:10FEE000004800F062FB10B10020BDE8F09F4FF029 -:10FEF000000A4FF0010BB0450CD9617FA8EB06005A -:10FF0000401A0838854219DC09EB060000210580FB -:10FF100041801AE06088617F801B471A083F0DD43A -:10FF20001B2F00DAFFDFBD4201DC294600E0B9B239 -:10FF3000681A0204120C04D0424502DD84F817A0AE -:10FF4000D2E709EB06000180428084F817B0CCE7C5 -:10FF500070B5044600F12802C088E37D20F400401B -:10FF60002BB110440288438813448B4201D20020F5 -:10FF700070BD00258A4202D30180458008E0891ABD -:10FF80000904090C418003D0A01D00F01EFB08E00D -:10FF9000637F00880833184481B26288A01DFFF790 -:10FFA0003FFFE575012070BD70B5034600F12804E0 -:10FFB000C588808820F400462644A84202D100204B -:10FFC000188270BD98893588A84206D3401B758871 -:10FFD0002D1A2044ADB2C01E05E02C1AA5B25C7FDC -:10FFE00020443044401D0C88AC4200D90D809C89CF -:10FFF00024B1002414700988198270BD0124F9E726 -:020000040001F9 -:1000000070B5044600F12801808820F400404518AE -:10001000208A002825D0A189084480B2A08129889F -:100020006A881144814200D2FFDF2888698800264F -:100030000844A189884212D1A069807F287169880B -:1000400019B1201D00F0C1FA08E0637F2888083349 -:10005000184481B26288201DFFF7E2FEA681268245 -:10006000012070BD2DE9F0414189878800260446B2 -:1000700000F12805B94218D004F10A0821F4004023 -:100080002844418819B1404600F09FFA08E0637F98 -:1000900000880833184481B262884046FFF7C0FEEA -:1000A000761C6189B6B2B942E8D13046BDE8F0812C -:1000B0002DE9F04104460B4627892830A68827F40D -:1000C0000041B4F80A8001440D46B74201D1002036 -:1000D000ECE70AB1481D106023B1627F691D184624 -:1000E00014F066F82E88698804F1080021B18A1995 -:1000F00096B200F06AFA06E0637F628808339919C5 -:1001000089B2FFF78DFE474501D1208960813046D5 -:10011000CCE78188C088814201D10120704700204E -:10012000704701898088814201D1012070470020F9 -:10013000704770B58588C38800F1280425F4004213 -:1001400023F4004114449D421AD08389058A5E1924 -:1001500025886388EC18A64214D313B18B4211D3BF -:100160000EE0437F08325C192244408892B2801A24 -:1001700080B22333984201D211B103E08A4201D107 -:10018000002070BD012070BD2DE9F0478846C18870 -:100190000446008921F4004604F1280720F40045B4 -:1001A00007EB060900F001FA002178BBB54204D93B -:1001B000627FA81B801A002503E06088627F801B95 -:1001C000801A083823D4E28962B1B9F80020B9F85E -:1001D00002303BB1E81A2177404518DBE08938440A -:1001E000801A09E0801A217740450ADB607FE189A7 -:1001F0000830304439440844C01EA4F81280BDE8D9 -:10020000F087454503DB01202077E7E7FFE76182C0 -:100210000020F4E72DE9F74F044600F12805C088D7 -:10022000884620F4004A608A05EB0A0608B140457A -:1002300002D20020BDE8FE8FE08978B13788B6F899 -:10024000029007EB0901884200D0FFDF207F4FF0CA -:10025000000B50EA090106D088B33BE00027A07FDD -:10026000B9463071F2E7E18959B1607F294408301D -:1002700050440844B4F81F1020F8031D94F82110CE -:100280008170E28907EB080002EB0801E181308010 -:10029000A6F802B002985F4650B1637F30880833F9 -:1002A000184481B26288A01DFFF7BAFDE78121E002 -:1002B000607FE18908305044294408442DE0FFE77D -:1002C000E089B4F81F102844C01B20F8031D94F8DF -:1002D0002110817009EB0800E28981B202EB08006D -:1002E000E081378071800298A0B1A01D00F06DF907 -:1002F000A4F80EB0A07F401CA077A07D08B1E088D4 -:10030000A08284F816B000BFA4F812B084F817B029 -:1003100001208FE7E0892844C01B30F8031DA4F8B2 -:100320001F10807884F82100EEE710B5818800F175 -:10033000280321F400442344848AC288A14212D0B5 -:10034000914210D0818971B9826972B11046FFF76C -:10035000E8FE50B91089283220F400401044197981 -:100360000079884201D1002010BD184610BD00F16F -:100370002803407F08300844C01E1060088808B970 -:10038000DB1E136008884988084480B270472DE955 -:10039000F04100F12806407F1C4608309046431883 -:1003A00008884D88069ADB1EA0B1C01C80B290421E -:1003B00014D9801AA04200DB204687B298183A462A -:1003C000414613F0C9FE002816D1E01B84B2B844A0 -:1003D000002005E0ED1CADB2F61EE8E7101A80B271 -:1003E0000119A94206D8304422464146BDE8F041F1 -:1003F00013F0B2BE4FF0FF3058E62DE9F04100F1A6 -:100400002804407F1E46083090464318002508887F -:100410004F88069ADB1E90B1C01C80B2904212D960 -:10042000801AB04200DB304685B299182A46404611 -:1004300013F0BEFE701B86B2A844002005E0FF1C2E -:10044000BFB2E41EEAE7101A80B28119B94206D899 -:1004500021183246404613F0ABFEA81985B2284653 -:1004600024E62DE9F04100F12804407F1E460830C3 -:1004700090464318002508884F88069ADB1E90B1E5 -:10048000C01C80B2904212D9801AB04200DB3046C4 -:1004900085B298182A46414613F08AFE701B86B230 -:1004A000A844002005E0FF1CBFB2E41EEAE7101AD2 -:1004B00080B28119B94206D820443246414613F031 -:1004C00077FEA81985B22846F0E5401D704710B5A3 -:1004D000044600F12801C288808820F400431944B2 -:1004E000904206D0A28922B9228A12B9A28A9042E9 -:1004F00001D1002010BD0888498831B1201D00F0CD -:1005000064F800202082012010BD637F62880833D8 -:10051000184481B2201DFFF783FCF2E70021C1815E -:1005200001774182C1758175704703881380C28944 -:1005300042B1C28822F4004300F128021A440A6042 -:10054000C08970470020704710B50446808AA0F526 -:100550007F41FF3900D0FFDFE088A082E08900B151 -:100560000120A07510BD4FF6FF71818200218175B9 -:10057000704710B50446808AA0F57F41FF3900D14D -:10058000FFDFA07D28B9A088A18A884201D1002080 -:1005900010BD012010BD8188828A914201D1807DE9 -:1005A00008B1002070470120704720F4004221F478 -:1005B00000439A4207D100F4004001F40041884210 -:1005C00001D0012070470020704730B504460088F4 -:1005D0000D4620F40040A84200D2FFDF21884FF4EE -:1005E000004088432843208030BD70B50C0005468C -:1005F00009D0082C00D2FFDF1DB1A1B2286800F09D -:1006000044F8201D70BD0DB100202860002070BD91 -:100610000021026803E093881268194489B2002A15 -:10062000F9D100F032B870B500260D46044608290D -:1006300000D2FFDF206808B91EE0044620688188E8 -:10064000A94202D001680029F7D181880646A94253 -:1006500001D100680DE005F1080293B20022994231 -:1006600009D32844491B0260818021680968216000 -:100670000160206000E00026304670BD00230B6062 -:100680008A8002680A600160704700234360021D8F -:10069000018102607047F0B50F4601884088154619 -:1006A0000C181E46AC4200D3641B3044A84200D94B -:1006B000FFDFA019A84200D9FFDF3819F0BD2DE9EE -:1006C000F041884606460188408815460C181F46AA -:1006D000AC4200D3641B3844A84200D9FFDFE019C4 -:1006E000A84200D9FFDF70883844708008EB04000E -:1006F000BDE8F0812DE9F041054600881E46174609 -:10070000841B8846BC4200D33C442C80688830441B -:10071000B84200D9FFDFA019B84200D9FFDF6888CE -:100720003044688008EB0400E2E72DE9F0410688D8 -:100730001D460446701980B2174688462080B8428C -:1007400001D3C01B20806088A84200D2FFDF70194F -:10075000B84200D9FFDF6088401B608008EB0600CC -:10076000C6E730B50D460188CC18944200D3A41AD0 -:100770004088984200D8FFDF281930BD2DE9F041AC -:10078000C84D04469046A8780E46A04200D8FFDF28 -:1007900005EB8607B86A50F8240000B1FFDFB8689F -:1007A000002816D0304600F044F90146B868FFF73B -:1007B0003AFF05000CD0B86A082E40F8245000D348 -:1007C000FFDFB9484246294650F826302046984770 -:1007D0002846BDE8F0812DE9F8431E468C19914664 -:1007E0000F460546FF2C00D9FFDFB14500D9FFDFDA -:1007F000E4B200954DB300208046E81C20F00300D1 -:10080000A84200D0FFDF4946DFF89892684689F891 -:10081000001089F8017089F8024089F8034089F8CE -:10082000044089F8054089F8066089F80770414658 -:1008300000F008F9002142460F464B460098C01CC4 -:1008400020F00300009012B10EE00120D4E703EB8A -:100850008106B062002005E0D6F828C04CF8207070 -:10086000401CC0B2A042F7D30098491C00EB8400A2 -:10087000C9B200900829E1D3401BBDE8F88310B548 -:10088000044603F071FD08B1102010BD2078854AA0 -:10089000618802EB800092780EE0836A53F8213081 -:1008A00043B14A1C6280A180806A50F82100A06098 -:1008B000002010BD491C89B28A42EED86180052013 -:1008C00010BD70B505460C46084603F04DFD08B155 -:1008D000102070BD082D01D3072070BD25700020A9 -:1008E000608070BD0EB56946FFF7EBFF00B1FFDF1A -:1008F0006846FFF7C4FF08B100200EBD01200EBD01 -:1009000010B50446082800D3FFDF6648005D10BD1F -:100910003EB5054600246946FFF7D3FF18B1FFDF57 -:1009200001E0641CE4B26846FFF7A9FF0028F8D094 -:100930002846FFF7E5FF001BC0B23EBD5949897844 -:10094000814201D9C0B27047FF2070472DE9F041C4 -:10095000544B062903D007291CD19D7900E00025BE -:1009600000244FF6FF7603EB810713F801C00AE07D -:100970006319D7F828E09BB25EF823E0BEF1000FC0 -:1009800004D0641CA4B2A445F2D8334603801846B0 -:10099000B34201D100201CE7BDE8F041EEE6A0F52E -:1009A0007F43FF3B01D0082901D300207047E5E6D3 -:1009B000A0F57F42FF3A0BD0082909D2394A937833 -:1009C000834205D902EB8101896A51F82000704702 -:1009D000002070472DE9F04104460D46A4F57F4103 -:1009E00043F20200FF3902D0082D01D30720F0E6C0 -:1009F0002C494FF000088A78A242F8D901EB85060D -:100A0000B26A52F82470002FF1D0274839462030BE -:100A100050F8252020469047B16A284641F82480A6 -:100A200000F007F802463946B068FFF727FE0020BD -:100A3000CFE61D49403131F810004FF6FC71C01C63 -:100A4000084070472DE9F843164E884605460024B5 -:100A50002868C01C20F0030028602046FFF7E9FF4B -:100A6000315D4843B8F1000F01D0002200E02A6850 -:100A70000146009232B100274FEA0D00FFF7B5FDA5 -:100A80001FB106E001270020F8E706EB8401009A79 -:100A90008A602968641C0844E4B22860082CD7D313 -:100AA000EBE60000500600204C47020070B50E46F1 -:100AB0001D46114600F0D4F804462946304600F0A1 -:100AC000D8F82044001D70BD2DE9F04190460D4638 -:100AD00004004FF0000610D00027E01C20F00300B7 -:100AE000A04200D0FFDFDDB141460020FFF77DFDD1 -:100AF0000C3000EB850617B112E00127EDE7614FDE -:100B000004F10C00A9003C602572606000EB8500D8 -:100B10002060606813F0EDFB41463868FFF765FD23 -:100B20003046BDE8F0812DE9FF4F564C804681B03C -:100B300020689A46934600B9FFDF2068027A424552 -:100B400003D9416851F8280020B143F2020005B0F2 -:100B5000BDE8F08F5146029800F082F886B2584600 -:100B60000E9900F086F885B27019001D87B22068D2 -:100B7000A14639460068FFF756FD04001FD0678084 -:100B800025802946201D0E9D07465A4601230095C3 -:100B9000FFF768F92088314638440123029ACDF8DE -:100BA00000A0FFF75FF92088C1193846FFF78AF9DE -:100BB000D9F800004168002041F82840C7E7042028 -:100BC000C5E770B52F4C0546206800B9FFDF2068E7 -:100BD000017AA9420ED9426852F8251051B100237A -:100BE00042F825304A880068FFF748FD2168002058 -:100BF0000A7A08E043F2020070BD4B6853F82030D7 -:100C000033B9401CC0B28242F7D80868FFF700FD34 -:100C1000002070BD70B51B4E05460024306800B939 -:100C2000FFDF3068017AA94204D9406850F82500F6 -:100C300000B1041D204670BD70B5124E054600245B -:100C4000306800B9FFDF3068017AA94206D94068F0 -:100C500050F8251011B131F8040B4418204670BD2E -:100C600010B50A460121FFF7F6F8C01C20F003007A -:100C700010BD10B50A460121FFF7EDF8C01C20F0A9 -:100C8000030010BD7000002070B50446C2F11005CD -:100C9000281913F08DFA15F0FF0108D0491EC9B2CA -:100CA000802060542046BDE8704013F000BB70BD4A -:100CB00030B505E05B1EDBB2CC5CD55C6C40C45447 -:100CC000002BF7D130BD10B5002409E00B78521E7F -:100CD00044EA430300F8013B11F8013BD2B2DC09BE -:100CE000002AF3D110BD2DE9F04389B01E46DDE99D -:100CF000107990460D00044622D002460846F94974 -:100D0000FDF77CFC102221463846FFF7DCFFE07B34 -:100D1000000606D5F34A3946102310320846FFF77D -:100D2000C7FF102239464846FFF7CDFFF87B000683 -:100D300006D5EC4A4946102310320846FFF7B8FFA3 -:100D40001021204613F0B3FA0DE0103EB6B208EBC6 -:100D50000601102322466846FFF7AAFF22462846CE -:100D60006946FDF74BFC102EEFD818D0F2B2414681 -:100D70006846FFF789FF10234A46694604A8FFF733 -:100D800097FF1023224604A96846FFF791FF2246E9 -:100D900028466946FDF732FC09B0BDE8F083102310 -:100DA0003A464146EAE770B59CB01E4605461346F2 -:100DB00020980C468DF80800202219460DF10900F4 -:100DC00013F0F6F9202221460DF1290013F0F0F975 -:100DD00017A913A8CDE90001412302AA31462846EC -:100DE000FFF781FF1CB070BD2DE9FF4F9FB014AE1F -:100DF000DDE92D5410AFBB49CDE900762023203129 -:100E00001AA8FFF770FF4FF000088DF808804FF028 -:100E100001098DF8099054F8010FCDF80A00A08857 -:100E2000ADF80E0014F8010C1022C0F340008DF84C -:100E3000100055F8010FCDF81100A888ADF8150085 -:100E400015F8010C2C99C0F340008DF8170006A886 -:100E5000824613F0ADF90AA883461022229913F0B6 -:100E6000A7F9A0483523083802AA40688DF83C80CD -:100E7000CDE900760E901AA91F98FFF734FF8DF880 -:100E800008808DF809902068CDF80A00A088ADF898 -:100E90000E0014F8010C1022C0F340008DF8100071 -:100EA0002868CDF81100A888ADF8150015F8010CD8 -:100EB0002C99C0F340008DF81700504613F078F9D4 -:100EC00058461022229913F073F9864835230838C2 -:100ED00002AA40688DF83C90CDE900760E901AA9E0 -:100EE0002098FFF700FF23B0BDE8F08FF0B59BB06E -:100EF0000C460546DDE922101E461746DDE9203284 -:100F0000D0F801C0CDF808C0B0F805C0ADF80CC0ED -:100F10000078C0F340008DF80E00D1F80100CDF844 -:100F20000F00B1F80500ADF8130008781946C0F3BA -:100F300040008DF815001088ADF8160090788DF8F7 -:100F400018000DF11900102213F032F90DF12900EB -:100F50001022314613F02CF90DF1390010223946D8 -:100F600013F026F917A913A8CDE90001412302AA1D -:100F700021462846FFF7B7FE1BB0F0BDF0B5A3B081 -:100F800017460D4604461E46102202A8289913F063 -:100F90000FF906A82022394613F00AF90EA82022DC -:100FA000294613F005F91EA91AA8CDE9000150231E -:100FB00002AA314616A8FFF796FE1698206023B0C5 -:100FC000F0BDF0B589B00446DDE90E070D4639786D -:100FD000109EC1F340018DF8001031789446C1F3A2 -:100FE00040018DF801101968CDF802109988ADF80C -:100FF000061099798DF808100168CDF809108188DC -:10100000ADF80D1080798DF80F0010236A46614607 -:1010100004A8FFF74DFE2246284604A9FDF7EEFA84 -:10102000D6F801000090B6F80500ADF80400D7F836 -:101030000100CDF80600B7F80500ADF80A00002061 -:10104000039010236A46214604A8FFF731FE22468A -:10105000284604A9FDF7D2FA09B0F0BD1FB51C68F7 -:1010600000945B68019313680293526803920246EE -:1010700008466946FDF7C2FA1FBD10B588B00446A0 -:10108000106804905068059000200690079008466C -:101090006A4604A9FDF7B2FABDF80000208008B046 -:1010A00010BD1FB51288ADF800201A88ADF80220D7 -:1010B0000022019202920392024608466946FDF719 -:1010C0009DFA1FBD7FB5074B14460546083B9A1C89 -:1010D0006846FFF7E6FF224669462846FFF7CDFF40 -:1010E0007FBD0000A447020070B5044600780E469C -:1010F000012813D0052802D0092813D10EE0A068DA -:1011000061690578042003F0BDF8052D0AD0782325 -:1011100000220420616903F00BF803E004206169F8 -:1011200003F0B0F831462046BDE8704001F086B8C3 -:1011300010B500F12D02C3799478411D64F00304C9 -:101140002340C371DB070DD04B79547923404B7199 -:101150000B79127913400B718278C9788A4200D9D1 -:10116000817010BD00224A710A71F5E741780129AA -:1011700000D00C21017070472DE9F04F93B04FF073 -:10118000000B0C690D468DF820B0097801260C2063 -:1011900017464FF00D084FF0110A4FF008091B29B0 -:1011A00075D2DFE811F01B00C30206031E035D03C6 -:1011B0007003A203B703F803190461049304A004A5 -:1011C000EC042A05340552055D05EE0531063406AA -:1011D00063067F06F9061D07E606EB0614B12078C4 -:1011E0001D282AD0D5F808805FEA08004FD00120DA -:1011F0008DF82000686A02220D908DF824200A20C4 -:101200008DF82500A8690A90A8880028EED098F8E3 -:10121000001091B10F2910D27ED2DFE801F07D13CA -:1012200049DEFEFDFCFBFAF938089CF8F7000228BD -:101230002DD124B120780C2801D00026EFE38DF8C1 -:101240002020CBE10420696A03F01CF8A888072855 -:10125000EED1204600F0EDFF022809D0204600F034 -:10126000E8FF032807D9204600F0E3FF072802D251 -:101270000120207004E0002CB8D020780128D7D1BC -:1012800098F80400C11F0A2902D30A2061E0C4E1D2 -:10129000A070D8F80010E162B8F80410218698F820 -:1012A000060084F83200012028700320207044E0FA -:1012B0000728BDD1002C99D020780D28B8D198F8F6 -:1012C000031094F82F20C1F3C000C2F3C0021042F3 -:1012D00001D0062000E00720890707D198F8051003 -:1012E0000142D2D198F806100142CED194F83120B3 -:1012F00098F8051020EA02021142C6D194F8322073 -:1013000098F8061090430142BFD198F80400C11F1D -:101310000A29BAD2617D00E006E281427ED8D8F87F -:1013200000106160B8F80410218198F80600A072DE -:10133000012028700E20207003208DF82000686A9C -:101340000D9004F12D000990601D0A900F300B9054 -:1013500022E12875FDE3412891D1204600F069FF84 -:10136000042802D1E078C00704D1204600F061FFD4 -:101370000F2884D1A88CD5F80C8080B24FF0400B98 -:10138000E669FFF747FC324641465B464E46CDF8DC -:101390000090FFF732F80B208DF82000686A0D905E -:1013A000E0690990002108A8FFF79EFE2078042834 -:1013B00006D0A07D58B1012809D003280AD049E3FE -:1013C00005202070032028708DF82060CDE184F87E -:1013D00000A032E712202070E9E11128BCD120469C -:1013E00000F027FF042802D1E078C00719D020467A -:1013F00000F01FFF062805D1E078C00711D1A07DBD -:1014000002280ED0204600F014FF08E0CAE081E078 -:101410006FE14EE121E101E1E7E017E0ADE11128E4 -:101420009AD1102208F1010104F13C0012F0C0FE33 -:10143000607801287ED012202070E078C00760D04C -:10144000A07D0028C8D00128C6D05AE0112890D12C -:10145000204600F0EEFE082804D0204600F0E9FE09 -:10146000132886D104F16C00102208F10101064610 -:1014700012F09EFE207808280DD014202070E1780C -:10148000C8070DD0A07D02280AD06278022A04D0B5 -:101490000328A1D035E00920F0E708B1012837D1B1 -:1014A000C80713D0A07D02281DD000200090D4E9E9 -:1014B000062133460EA8FFF776FC10220EA904F190 -:1014C0003C0012F049FEC8B1042042E7D4E90912F9 -:1014D000201D8DE8070004F12C0332460EA8616B35 -:1014E000FFF76FFDE9E7606BC1F34401491E006837 -:1014F000C84000F0010040F08000D7E720780928BC -:1015000006D185F800908DF8209033E32870ECE345 -:101510000920FBE711289AD1204600F08AFE0A280C -:1015200002D1E078C00704D1204600F082FE1528E1 -:101530008DD100E08DE104F13C00102208F10101A1 -:10154000064612F035FE20780A2816D016202070A4 -:10155000D4E90932606B611D8DE80F0004F15C0372 -:1015600004F16C0247310EA8FFF7C0FC10220EA94F -:10157000304612F0F1FD18B1F5E20B20207071E257 -:101580002046FFF7D5FDA078216A0A18C0F11001A6 -:10159000104612F08CFE23E3394608A8FFF7A4FD9D -:1015A00006463BE20228B6D1204600F042FE04285F -:1015B00004D3204600F03DFE082809D3204600F061 -:1015C00038FE0E2829D3204600F033FE122824D2FC -:1015D000A07D02289FD10E208DF82000686A0D9012 -:1015E00098F801008DF82400F0E3022893D12046FA -:1015F00000F01FFE002810D0204600F01AFE01283F -:10160000F9D0204600F015FE0C28F4D004208DF807 -:10161000240098F801008DF825005EE21128FCD125 -:10162000002CFAD020781728F7D16178606A022957 -:1016300011D0002101EB4101182606EBC101102257 -:10164000405808F1010112F0B3FD0420696A00F06E -:10165000E3FD2670F1E50121ECE70B28DDD1002C3C -:10166000DBD020781828D8D16078616A02281CD095 -:101670005FF0000000EB4002102000EBC2000958B0 -:10168000B8F8010008806078616A02280FD0002055 -:1016900000EB4002142000EBC2000958404650F80D -:1016A000032F0A604068486039E00120E2E701202A -:1016B000EEE71128B1D1002CAFD020781928ACD199 -:1016C0006178606A022912D05FF0000101EB4101EC -:1016D0001C2202EBC1011022405808F1010112F056 -:1016E00067FD0420696A00F097FD1A20B6E0012129 -:1016F000ECE7082891D1002C8FD020781A288CD1C3 -:10170000606A98F80120017862F347010170616A0C -:10171000D8F8022041F8012FB8F80600888004208C -:10172000696A00F079FD8EE2072012E63878012818 -:1017300094D1182204F11400796812F07EFDE0794A -:10174000C10894F82F0001EAD001E07861F30000AD -:10175000E070217D002974D12178032909D0C007C8 -:1017600025D0032028708DF82090686A0D904120C4 -:1017700004E3607DA178884201D90620E9E50226CC -:101780002671E179204621F0E001E171617A21F0D2 -:10179000F0016172A17A21F0F001A172FFF7C8FC9B -:1017A0002E708DF82090686A0D900720E6E20420E4 -:1017B000ACE6387805289DD18DF82000686A0D9038 -:1017C000B8680A900720ADF824000A988DF830B068 -:1017D0006168016021898180A17A81710420207073 -:1017E000F4E23978052985D18DF82010696A0D91C8 -:1017F000391D09AE0EC986E80E004121ADF824104E -:101800008DF830B01070A88CD7F80C8080B24026CC -:10181000A769FFF711FA41463A463346C846CDF864 -:101820000090FEF71EFE002108A8FFF75DFCE0789F -:1018300020F03E00801CE0702078052802D00F20A8 -:101840000CE049E1A07D20B1012802D0032802D09C -:1018500002E10720BFE584F80080EEE42070ECE4AC -:10186000102104F15C0002F034FA606BB0BBA07D83 -:1018700018B1012801D00520FDE006202870F748A6 -:101880006063A063BEE23878022894D1387908B149 -:101890002875B3E3A07D022802D0032805D022E0FA -:1018A000B8680028F5D060631CE06078012806D095 -:1018B000A07994F82E10012805D0E84806E0A17917 -:1018C00094F82E00F7E7B8680028E2D06063E0786B -:1018D000C00701D0012902D0E04803E003E0F86826 -:1018E0000028D6D0A063062010E68DF82090696A03 -:1018F0000D91E1784846C90709D06178022903D1E2 -:10190000A17D29B1012903D0A17D032900D00720A1 -:10191000287031E138780528BBD1207807281ED0FF -:1019200084F800A005208DF82000686A0D90B86842 -:101930000A90ADF824A08DF830B003210170E17851 -:10194000CA070FD0A27D022A1AD000210091D4E943 -:10195000061204F15C03401CFFF725FA67E384F8E4 -:101960000090DFE7D4E90923211D8DE80E0004F182 -:101970002C0304F15C02401C616BFFF722FB56E371 -:10198000626BC1F34401491E1268CA4002F00101B2 -:1019900041F08001DAE738780528BDD18DF82000C4 -:1019A000686A0D90B8680A90ADF824A08DF830B040 -:1019B000042100F8011B102204F15C0112F0F8FB75 -:1019C000002108A8FFF790FB2078092801D01320F8 -:1019D00044E70A2020709BE5E078C10742D0A17D52 -:1019E000012902D0022927D038E0617808A801290E -:1019F00016D004F16C010091D4E9061204F15C03E5 -:101A0000001DFFF7BBFA0A20287003268DF82080FE -:101A1000686A0D90002108A8FFF766FBDDE2C3E2CB -:101A200004F15C010091D4E9062104F16C03001D6E -:101A3000FFF7A4FA0026E9E7C0F3440114290DD208 -:101A40004FF0006101EBB0104FEAB060E0706078D9 -:101A5000012801D01020BEE40620FFE660780128AE -:101A60003FF4B7AC0A2051E5E178C90708D0A17D61 -:101A7000012903D10B20287004202FE028702DE0CD -:101A80000E2028706078616B012817D004F15C0388 -:101A900004F16C020EA8FFF7E1FA2046FFF748FBBD -:101AA000A0780EAEC0F11001304412F000FC062008 -:101AB0008DF82000686A09960D909AE004F16C0395 -:101AC00004F15C020EA8FFF7C9FAE9E739780229A8 -:101AD00003D139790029D1D029758FE28DF8200002 -:101AE000686A0D9058E538780728F6D1D4E90921BD -:101AF0006078012808D004F16C00CDE90002029161 -:101B000005D104F16C0304E004F15C00F5E704F195 -:101B10005C0304F14C007A680646216AFFF764F919 -:101B20006078012821D1A078216A0A18C0F110013B -:101B3000104612F0BCFBD4E90923606B04F12D01BF -:101B40008DE80F0004F15C0304F16C0231460EA82D -:101B500000E055E2FFF7CAF910220EA904F13C009B -:101B600012F0FAFA08B10B20AFE485F8008000BF4C -:101B70008DF82090686A0D908DF824A00CE53878D7 -:101B80000528AAD18DF82000686A0D90B8680A90DF -:101B9000ADF824A08DF830B080F80080617801297C -:101BA0001AD0D4E9093204F12D01A66B03920096F4 -:101BB000CDE9011304F16C0304F15C0204F14C0162 -:101BC000401CFFF793F9002108A8FFF78DFA607811 -:101BD000012805D0152041E6D4E90923611DE4E779 -:101BE0000E20287006208DF82000686ACDF824B0F9 -:101BF0000D90A0788DF82800CEE438780328C0D165 -:101C0000E079C00770D00F202870072066E7387889 -:101C100004286BD11422391D04F1140012F00DFBBD -:101C2000616A208CA1F80900616AA078C871E17925 -:101C3000626A01F003011172616A627A0A73616A71 -:101C4000A07A81F82400162060E485F800A08DF8C1 -:101C50002090696A50460D9190E00000A447020070 -:101C60003878052842D1B868A8616178606A02298D -:101C700001D0012100E0002101EB4101142606EB17 -:101C8000C1014058082102F024F86178606A0229F5 -:101C900001D0012100E0002101EB410106EBC1016F -:101CA000425802A8E169FFF70DFA6078626A0228DB -:101CB00001D0012000E0002000EB4001102000EBEB -:101CC000C1000223105802A90932FEF7F1FF626A2F -:101CD000FD4B0EA80932A169FFF7E3F96178606A4C -:101CE000022904D0012103E042E18BE0BDE00021A4 -:101CF00001EB4101182606EBC101A27840580EA95C -:101D000012F056FA6178606A022901D0012100E0E0 -:101D1000002101EB410106EBC1014058A1780844C4 -:101D2000C1F1100112F0C3FA05208DF82000686A95 -:101D30000D90A8690A90ADF824A08DF830B0062166 -:101D400001706278616A022A01D0012200E000225B -:101D500002EB420206EBC202401C8958102212F02C -:101D600027FA002108A8FFF7BFF91220C5F818B01C -:101D700028708DF82090686A0D900B208DF8240053 -:101D80000AE43878052870D18DF82000686A0D9033 -:101D9000B8680A900B20ADF824000A98072101705A -:101DA0006178626A022901D0012100E0002101EB83 -:101DB0004103102101EBC30151580988A0F801101B -:101DC0006178626A022902D0012101E02FE100213D -:101DD00001EB4103142101EBC30151580A6840F89B -:101DE000032F4968416059E01920287001208DF8BF -:101DF000300077E6162028708DF830B0002108A852 -:101E0000FFF772F9032617E114202870B0E638783E -:101E100005282AD18DF82000686A0D90B8680A90CC -:101E2000ADF824A08DF830B080F800906278616A37 -:101E30004E46022A01D0012200E0002202EB4202BB -:101E40001C2303EBC202401C8958102212F0B0F987 -:101E5000002108A8FFF748F9152028708DF82060A8 -:101E6000686A0D908DF824603CE680E0387805289B -:101E70007DD18DF82000686A0D90B8680A90ADF8A1 -:101E800024900921017061690978490841706169EC -:101E900051F8012FC0F802208988C18020781C28C1 -:101EA000A8D1A1E7E078C00702D04FF0060C01E00E -:101EB0004FF0070C607802280AD04FF0000000BFF6 -:101EC00000EB040101F1090105D04FF0010004E02D -:101ED0004FF00100F4E74FF000000B78204413EAC4 -:101EE0000C030B7010F8092F02EA0C02027004D1E7 -:101EF0004FF01B0C84F800C0D2B394F801C0BCF1C1 -:101F0000010F00D09BB990F800C0E0465FEACC7C9E -:101F100004D028F001060670102606E05FEA887CEF -:101F200005D528F00206067013262E70032694F8B5 -:101F300001C0BCF1020F00D092B991F800C05FEA75 -:101F4000CC7804D02CF001060E70172106E05FEA71 -:101F50008C7805D52CF002060E7019212170002610 -:101F60000078D0BBCAB3C3BB1C20207035E012E0A0 -:101F700002E03878062841D11A2019E42078012897 -:101F80003CD00C283AD02046FFF7F0F809208DF815 -:101F90002000686A0D9031E03878052805D00620C9 -:101FA000387003261820287046E005218DF820108F -:101FB000686A0D90B8680A900220ADF824000120EC -:101FC0008DF830000A980170297D4170394608A8C3 -:101FD000FFF78AF8064618202870012E0ED02BE055 -:101FE00001208DF82000686A0D9003208DF82400F0 -:101FF000287D8DF8250085F814B012E0287D80B189 -:102000001D202070172028708DF82090686A0D9090 -:1020100002208DF82400394608A8FFF765F8064627 -:102020000AE00CB1FE2020709DF8200020B10021B4 -:1020300008A8FFF759F810E413B03046BDE8F08F58 -:102040002DE9F04387B00C464E6900218DF804104D -:1020500001202578034602274FF007094FF0050CB1 -:1020600085B1012D53D0022D39D1FE2030708DF86D -:102070000030606A059003208DF80400207E8DF802 -:10208000050063E02179012925D002292DD00329FB -:1020900028D0042923D1B17D022920D131780D1F08 -:1020A000042D04D30A3D032D01D31D2917D1218905 -:1020B000022914D38DF80470237020899DF8041030 -:1020C00088421BD2082001E09C4702008DF80000E6 -:1020D000606A059057E070780128EBD0052007B0C2 -:1020E000BDE8F0831D203070E4E771780229F5D156 -:1020F00031780C29F3D18DF80490DDE7083402F82B -:1021000004CB94E80B0082E80B000320E7E7157886 -:10211000052DE4D18DF800C0656A05959568029596 -:102120008DF8101094F80480B8F1010F13D0B8F1B5 -:10213000020F2DD0B8F1030F1CD0B8F1040FCED18F -:10214000ADF804700E202870207E6870002168466B -:10215000FEF7CAFF0CE0ADF804700B202870207E5B -:10216000002100F01F0068706846FEF7BDFF377061 -:102170000020B4E7ADF804708DF8103085F800C089 -:10218000207E6870277011466846FEF7ADFFA6E70F -:10219000ADF804902B70207F6870607F00F0010024 -:1021A000A870A07F00F01F00E870E27F2A71C007CE -:1021B0001CD094F8200000F00700687194F821000A -:1021C00000F00700A87100216846FEF78DFF28681F -:1021D000F062A8883086A87986F83200A069407835 -:1021E00070752879B0700D203070C1E7A9716971E0 -:1021F000E9E700B587B004280CD101208DF8000074 -:102200008DF80400002005918DF805000146684610 -:10221000FEF76AFF07B000BD70B50C46054602F038 -:1022200031F821462846BDE870407823002201F0AD -:102230007FBF08B1007870470C20704770B50C0064 -:1022400005784FF000010CD021702146F3F701F81A -:1022500069482178405D884201D1032070BD022089 -:1022600070BDF2F7F6FF002070BD0279012A05D09B -:1022700000220A704B78012B02D003E00420704743 -:102280000A758A6102799300521C0271C1500320C1 -:102290007047F0B587B00F4605460124287905EB55 -:1022A000800050F8046C7078411E02290AD252490D -:1022B0003A46083901EB8000314650F8043C284684 -:1022C000984704460CB1012C11D12879401E10F01A -:1022D000FF00287101D00324E0E70A208DF80000F8 -:1022E000706A0590002101966846FFF7A7FF032C4E -:1022F000D4D007B02046F0BD70B515460A46044656 -:1023000029461046FFF7C5FF064674B12078FE281F -:102310000BD1207C30B100202870294604F10C003C -:10232000FFF7B7FF2046FEF721FF304670BD70472C -:1023300070B50E4604467C2111F0DBFF0225012E0C -:1023400003D0022E04D0052070BD0120607000E093 -:1023500065702046FEF70AFFA575002070BD28B104 -:10236000027C1AB10A4600F10C01C5E70120704752 -:1023700010B5044686B0042001F084FF2078FE28C2 -:1023800006D000208DF8000069462046FFF7E7FFE1 -:1023900006B010BD7CB50E4600218DF804104178C2 -:1023A000012903D0022903D0002405E0046900E0DC -:1023B00044690CB1217C89B16D4601462846FFF77E -:1023C00054FF032809D1324629462046FFF794FFDF -:1023D0009DF80410002900D004207CBD04F10C05F8 -:1023E000EBE730B40C460146034A204630BC034BB1 -:1023F0000C3AFEF756BE0000E04702009C47020080 -:1024000070B50D46040011D085B12101284611F0A8 -:102410004EFF10224E49284611F0CAFE4C480121B9 -:102420000838018044804560002070BD012070BDE7 -:1024300070B5474E00240546083E10E07068AA7B40 -:1024400000EB0410817B914208D1C17BEA7B914271 -:1024500004D10C22294611F07FFE30B1641C308873 -:102460008442EBDB4FF0FF3070BD204670BD70B58D -:102470000D46060006D02DB1FFF7DAFF002803DB7A -:10248000401C14E0102070BD314C083C208862884C -:10249000411C914201D9042070BD6168102201EBFA -:1024A0000010314611F084FE2088401C20802870E6 -:1024B000002070BD70B514460D0018D0BCB10021CD -:1024C000A170022802D0102811D105E0288870B12F -:1024D0000121A170108008E02846FFF7A9FF00281D -:1024E00005DB401CA070A8892080002070BD012061 -:1024F00070BD70B5054614460E000BD0002030703C -:10250000A878012808D005D91149A1F108010A8845 -:1025100090420AD9012070BD24B128782070288803 -:10252000000A5070022008700FE064B14968102260 -:1025300001EB00112046103911F03AFE2878207383 -:102540002888000A607310203070002070BD0000E1 -:102550007C0000202DE9F04190460C4607460025FE -:10256000FE48072F00EB881607D2DFE807F00707C1 -:10257000070704040400012500E0FFDF06F81470DB -:10258000002D13D0F548803000EB880191F827002A -:10259000202803D006EB4000447001E081F826407B -:1025A00006EB44022020507081F82740BDE8F081FE -:1025B000F0B51F4614460E460546202A00D1FFDF1F -:1025C000E649E648803100EB871C0CEB440001EB48 -:1025D0008702202E07D00CEB460140784B784870DC -:1025E000184620210AE092F82530407882F825002C -:1025F000F6E701460CEB410005704078A142F8D1A6 -:1026000092F82740202C03D00CEB4404637001E0C7 -:1026100082F826300CEB41042023637082F82710E7 -:10262000F0BD30B50D46CE4B44190022181A72EB9E -:10263000020100D2FFDFCB48854200DDFFDFC94841 -:102640004042854200DAFFDFC548401C844207DA79 -:10265000002C01DB204630BDC148401C201830BD95 -:10266000BF48C043FAE710B504460168407ABE4A45 -:1026700052F82020114450B10220084420F07F403D -:10268000F0F779FA94F90810BDE81040C9E7042082 -:10269000F3E72DE9F047B14E803696F82D50DFF87C -:1026A000BC9206EB850090F8264034E009EB8517D4 -:1026B0004FF0070817F81400012806D004282ED080 -:1026C00005282ED0062800D0FFDF01F0E3F80146F0 -:1026D00007EB4400427806EB850080F8262090F84E -:1026E0002720A24202D1202280F82720084601F0AC -:1026F000DCF82A4621460120FFF72CFF9B48414683 -:1027000000EB041002682046904796F82D5006EB27 -:10271000850090F82640202CC8D1BDE8F087022023 -:1027200000E003208046D0E710B58C4C2021803497 -:1027300084F8251084F8261084F82710002084F8E7 -:10274000280084F82D0084F82E10411EA16044F862 -:10275000100B2074607420736073A0738449E07759 -:1027600020750870487000217C4A103C02F8110066 -:10277000491CC9B22029F9D30120F0F7EAF800205A -:10278000F0F7E7F8012084F82200F9F7D1FA794848 -:10279000F9F7DDFA764CA41E20707748F9F7D7FADE -:1027A0006070BDE81040F0F761B810B5F0F783F83D -:1027B0006F4CA41E2078F9F7E3FA6078F9F7E0FA95 -:1027C000BDE8104001F09EB8202070472DE9F34F7E -:1027D000624E0025803606EB810A89B09AF8250002 -:1027E000202822D0691E02916049009501EB00105B -:1027F0008146D0E90112C0680391CDE90420B08B75 -:10280000ADF81C00B07F8DF81E009DF81500C8B112 -:102810000227554951F820400399E219114421F04B -:102820007F41019184B102210FE00120F0F791F87E -:102830000020F0F78EF8F0F75CF801F063F886F806 -:102840002F50A0E00427E4E700218DF8181002289B -:1028500001D0012820D10398391901440998081A98 -:102860009DF81C1020F07F4001B1022133318142DC -:102870000BD203208DF815000398C4F13201401AE1 -:1028800020F07F40322403900CE096F8240018B921 -:10289000F0F782FB00284CD0322C03D214B101F0A7 -:1028A00025F801E001F02EF8314A107818B393466C -:1028B0005278039B121B00219DF81840984601286E -:1028C0001AD0032818D000208DF81E00002A04DD3D -:1028D000981A039001208DF818009DF81C0000B193 -:1028E00002210398254A20F07F40039003AB09980A -:1028F00001F014F810B110E00120E5E79DF81D008B -:1029000018B99BF80000032812D08DF81C50CDF8A0 -:102910000C808DF818408DF81E509DF8180058B1A5 -:1029200003980123C11900221846F0F765F806E064 -:1029300000200BB0BDE8F08F0120F0F70AF899F9FC -:102940000C20012300200199F0F756F8012086F8A9 -:102950002F008AF828502022694611E098080020AC -:10296000FF7F841E0020A107F04702009806002088 -:102970008E000020DF3F010093260100FFFF3F0093 -:10298000F94811F05AFC0120D3E72DE9F05FDFF898 -:10299000D883064608EB860090F82550202D1FD0DE -:1029A000A8F180002C4600EB8617A0F50079DFF82F -:1029B000BCB305E0A24607EB4A004478202C0AD0BD -:1029C000F0F766F809EB04135A4601211B1D00F0CD -:1029D000A5FF0028EED0AC4202D0334652461EE09E -:1029E000E34808B1AFF30080F0F752F898F82F20D1 -:1029F0006AB1D8F80C20411C891A0902CA1701EBE8 -:102A000012610912002902DD0020BDE8F09F314665 -:102A1000FFF7DCFE08B10120F7E733462A46202104 -:102A20000420FFF7C5FDEFE72DE9F041CE4C256905 -:102A3000F0F72EF8401B0002C11700EB11600012E6 -:102A400000D4FFDF94F8220000B1FFDF012784F8F3 -:102A5000227094F82E00202800D1FFDF94F82E6019 -:102A6000202084F82E00002584F82F5084F8205070 -:102A700084F82150BF4825600078022833D003280D -:102A800031D000202077A068401C05D04FF0FF30E7 -:102A9000A0600120EFF75DFF0020EFF75AFFF0F78D -:102AA00058F8F0F750F8EFF724FF10F0D7FDB248D0 -:102AB000056005604FF0E0214FF40040B846C1F8D2 -:102AC0008002F0F7E0F894F82D703846FFF75DFFCC -:102AD0000028FAD0A448803800EB871010F81600C0 -:102AE000022802D006E00120CCE73A463146062013 -:102AF000FFF730FD84F8238004EB870090F8260070 -:102B0000202804D09B48801E4078F9F73FF9207FA9 -:102B1000002803D0F0F70DF82577657746E50146E4 -:102B2000914810B590F82D200024803800EB8210D9 -:102B300010F814302BB1641CE4B2202CF8D3202000 -:102B400010BD8E4800EB0410016021460120FFF704 -:102B500001FD204610BD10B5012801D0032800D189 -:102B600071B3814A92F82D307F4C0022803C04EBF7 -:102B7000831300BF13F812400CB1082010BD521C83 -:102B8000D2B2202AF6D37B4A48B1022807D00729BF -:102B900016D2DFE801F01506080A0C0E100000211D -:102BA0000AE01B2108E03A2106E0582104E07721E1 -:102BB00002E0962100E0B52151701070002010BD98 -:102BC000072010BD6B4810B54078EFF7D4FF80B2F6 -:102BD00010BD10B5202811D2634991F82D30A1F114 -:102BE000800202EB831414F810303BB191F82D30C1 -:102BF00002EB831212F81020012A01D0002010BD30 -:102C000091F82D2001460020FFF7A4FC012010BD03 -:102C100010B5EFF73DFFBDE81040EFF7ACBF2DE971 -:102C2000F0410E46504F01782025803F0C4607EBBF -:102C3000831303E0254603EB45046478944202D0F5 -:102C4000202CF7D108E0202C06D0A14206D103EBBE -:102C500041014978017007E00020A7E403EB44003C -:102C600003EB450140784870454F7EB127B1002104 -:102C700040F2DA30AFF300803078A04206D127B1BD -:102C8000002140F2DD30AFF30080357027B1002124 -:102C900040F2E230AFF30080012087E410B54268D3 -:102CA0000B689A1A1202D41702EB1462121216D48D -:102CB000497A91B1427A82B9324A006852F82110B9 -:102CC000126819441044001D891C081A0002C1171B -:102CD00000EB11600012322801DB012010BD002042 -:102CE00010BD2DE9F04781461F48244E00EB8100BE -:102CF000984690F825402020107006F50070154683 -:102D000000EB81170BE000BF06EB04104946001DE5 -:102D1000FFF7C4FF28B107EB44002C704478202C47 -:102D2000F2D1297888F8001013E000BF06EB0415F3 -:102D3000291D4846FFF7B2FF68B988F80040A97B13 -:102D400099F80A00814201D80020E6E407EB44002C -:102D50004478202CEAD10120DFE42DE9FC410E4625 -:102D600007460024054D18E018090020FFFF3F002A -:102D7000000000008E00002000F5004098060020B2 -:102D800000000000F04702009DF8000005EB001075 -:102D90008168384600F0D6FD01246B4601AA314611 -:102DA0003846FFF79EFF0028EED02046BDE8FC81A4 -:102DB00070B50446FF480125A54300EB841100EBE4 -:102DC0008510402211F0F4F9FB4E26B1002140F2AB -:102DD0005C40AFF30080F748803000EB850100EBEA -:102DE0008400D0F82500C1F8250026B100214FF459 -:102DF0008C60AFF30080284670BD2DE9FC4184460D -:102E0000EC481546089C00EB85170E4617F8140091 -:102E1000012803D0022801D00020C7E70B46E74A6B -:102E20000121604600F07AFDA8B101AB6A4629464F -:102E30003046FFF756FF70B1DE489DF804209DF83C -:102E40000010803000EB85068A4208D02B46052012 -:102E5000FFF7AEFB0BE02A462146042014E02029B0 -:102E600003D007EB4100407801E096F8250007EB1E -:102E7000440148709DF80000202809D007EB40006D -:102E800044702A4621460320FFF764FB01208DE7AA -:102E900006F8254F0120F070F3E7C94901EB001057 -:102EA000001DFFF7E0BB7CB51D46134604460E46E9 -:102EB00000F1080221461846EFF76AFE94F908006F -:102EC0000F2804DD1F3820722068401C206096B156 -:102ED0000220BC4951F82610461820686946801B1C -:102EE00020F07F40206094F908002844C01C1F286F -:102EF00003DA012009E00420EBE701AAEFF748FE1E -:102F00009DF8040010B10098401C009000992068C2 -:102F100031440844C01C20F07F4060607CBD2DE936 -:102F2000FE430C46064609786079907220799846EF -:102F30001546507241B19F48803090F82E102029DC -:102F40000AD00069401D0BE0D4E90223217903B0C7 -:102F50002846BDE8F043A6E79B484178701D084429 -:102F600020F07F47217900222846A368FFF79BFFC6 -:102F70003946284600F0E6FCD4E902322179684659 -:102F8000FFF791FF41462846019CFFF7E6FE2B46DE -:102F900022460021304600F0C1FC002803D1314612 -:102FA000284600F0CFFCBDE8FE832DE9FE4F8146A8 -:102FB00000F084FC30B1002799F8000020B1002017 -:102FC000BDE8FE8F0127F7E77A4D7B4C4FF0000AF2 -:102FD000803524B1002140F2D340AFF3008095F852 -:102FE0002D8085F823A0002624B100214FF49B609A -:102FF000AFF300801FB94046FFF7DAFE804624B1E8 -:1030000000214FF49C60AFF30080EFF741FD434691 -:103010006A464946FFF783FF24B1002140F2E640AB -:10302000AFF3008095F82E0020280CD02969009875 -:10303000401A0002C21700EB1260001203D5684666 -:1030400000F080FC012624B100214FF49E60AFF314 -:10305000008095F823000028BBD124B1002140F264 -:10306000F640AFF30080EFF713FD6B46534A0021A3 -:1030700000F054FC0028A3D027B941466846FFF76A -:103080006CFE064326B16846FFF7EDFAC9F8080062 -:1030900024B1002140F20950AFF3008001208FE7F6 -:1030A0002DE9FF5F8A46814600F008FC414C8034E0 -:1030B00010B39AF80000002710B1012800D0FFDFFC -:1030C0003D4D25B1002140F27F50AFF3008001203B -:1030D000A84600905FEA080604D0002140F287501D -:1030E000AFF30080009800F0E0FB94F82D50002032 -:1030F00084F8230067B119E094F82E0001272028F6 -:1031000000D1FFDF9AF800000028D9D0FFDFD7E711 -:103110002846FFF74DFE054626B1002140F29150AA -:10312000AFF3008094F823000028D3D126B100210A -:1031300040F29B50AFF30080EFF7AAFC83462B468A -:1031400001AA5146FFF7EBFE5FEA060804D0002112 -:1031500040F2A250AFF300803B462A4601A95846F0 -:10316000CDF80090FFF749FE064604EB850090F885 -:1031700028B0B8F1000F04D0002140F2A950AFF3FD -:10318000008000F087FB0090B8F1000F04D0002110 -:1031900040F2AF50AFF3008094F82300002899D19B -:1031A000B8F1000F04D0002140F2B750AFF3008017 -:1031B00003490BE09808002000000000FFFF3F00DB -:1031C00098060020F04702008E00002001EB091055 -:1031D0000DF1040C00F104009CE80E0080E80E00E4 -:1031E0004EB35FEA080604D0002140F2C450AFF3AA -:1031F00000803BEA070012D094F82E0020280ED160 -:1032000026B1002140F2C950AFF300802846FFF7F5 -:10321000BCFB20B99AF80000D8B3012849D0B8F116 -:10322000000F04D0002140F2E650AFF300802846A2 -:1032300000F029FB01265FEA080504D0002140F2D6 -:10324000EF50AFF30080009800F02FFB25B1002174 -:1032500040F2F350AFF300808EB194F82D0004EBF0 -:10326000800090F82600202809D025B1002140F2E6 -:10327000FA50AFF30080F9484078F8F787FD25B1A0 -:10328000002140F2FF50AFF3008004B03046BDE8AB -:10329000F09FFFE7B8F1000F04D0002140F2D150B9 -:1032A000AFF3008094F82D2049460420FFF752F92F -:1032B000C0E7002E3FF40EAF002140F2DC50AFF328 -:1032C000008007E72DE9F84FE54D814695F82D0080 -:1032D0004FF00008E34C4FF0010B474624B10021AA -:1032E00040F20D60AFF30080584600F0DEFA85F83A -:1032F000237024B1002140F21260AFF3008095F8F2 -:103300002D00FFF755FD064695F8230028B1002C47 -:10331000E4D000214FF4C3604BE024B1002140F21F -:103320001C60AFF30080CE48803800EB861111F8A6 -:103330001900032856D1334605EB830A4A469AF80A -:103340002500904201D1012000E0002000900AF108 -:1033500025000021FFF763FC01460098014203D0DD -:1033600001228AF82820AF77E1B324B1002140F28E -:103370002160AFF30080324649460120FFF7EAF8AA -:103380009AF828A024B1002140F22C60AFF300800D -:1033900000F080FA834624B1002140F23160AFF39F -:1033A000008095F8230038B1002C97D0002140F21E -:1033B0003560AFF3008091E7BAF1000F07D095F8C0 -:1033C0002E00202803D13046FFF7DFFAE0B124B108 -:1033D000002140F24960AFF30080304600F053FA1C -:1033E0004FF0010824B1002140F25260AFF3008099 -:1033F000584600F05AFA24B1002140F25660AFF36B -:1034000000804046BDE8F88F002CF1D0002140F24A -:103410004460AFF30080E6E70020EFF773BA0120C5 -:10342000EFF770BA8D48007870472DE9F0418C4C69 -:1034300094F82E0020281FD194F82D6004EB860705 -:1034400097F82550202D00D1FFDF8549803901EB09 -:10345000861000EB4500407807F8250F0120F87032 -:1034600084F82300294684F82E5032460220223464 -:10347000FFF770F8002020700FE42DE9F0417A4E3C -:10348000774C012538B1012821D0022879D00328B2 -:103490007DD0FFDFF0E700F029FAFFF7C6FF207EBE -:1034A00000B1FFDF84F821500020EFF752FAA16845 -:1034B000481C04D0012300221846EFF79DFA14F8A7 -:1034C0002E0F217806EB01110A68012154E0FFF765 -:1034D000ACFF0120EFF73DFA94F8210050B1A0684D -:1034E000401C07D014F82E0F217806EB01110A6852 -:1034F000062141E0207EDFF86481002708F1020800 -:10350000012803D002281ED0FFDFB5E7A777EFF729 -:1035100010FB98F80000032801D165772577607DBE -:10352000524951F8200094F8201051B948B161680F -:103530000123091A00221846EFF75EFA02202076CE -:103540009AE7277698E784F8205000F0CFF9A07F1B -:1035500050B198F8010061680123091A0022184649 -:10356000EFF74AFA257600E0277614F82E0F217837 -:1035700006EB01110A680021BDE8F041104700E0A8 -:1035800005E036480078BDE8F041F8F7FFBBFFF7EB -:103590004CFF14F82E0F217806EB01110A68052163 -:1035A000EAE710B52E4C94F82E00202800D1FFDF5A -:1035B00014F82E0F21782C4A02EB01110A68BDE89D -:1035C0001040042110477CB5254C054694F82E0088 -:1035D000202800D1FFDFA068401C00D0FFDF94F856 -:1035E0002E00214901AA01EB0010694690F90C0058 -:1035F0002844EFF7CDFA9DF904000F2801DD0120E2 -:1036000000E00020009908446168084420F07F41F0 -:10361000A16094F82100002807D002B00123BDE882 -:10362000704000221846EFF7E7B97CBD30B5104A6C -:103630000B1A541CB3EB940F1ED3451AB5EB940F21 -:103640001AD3934203D9101A43185B1C14E0954215 -:1036500010D9511A0844401C43420DE08C00002050 -:10366000180900200000000098060020F047020022 -:10367000FF7F841EFFDF0023184630BD0123002298 -:1036800001460220EFF7B8B90220EFF762B9EFF771 -:10369000FFB92DE9FC47B14C054694F82E002028CF -:1036A00000D1FFDF642D58D3AD4A0021521B71EBCE -:1036B000010052D394F82E20A0462046DFF8A492B1 -:1036C00090F82D7009EB0214D8F8000001AA2844E4 -:1036D0006946EFF75DFA9DF90400002802DD0098C5 -:1036E000401C0090A068009962684618B21A22F047 -:1036F0007F42B2F5800F30D208EB8702444692F841 -:103700002520202A0AD009EB02125268101A000262 -:10371000C21700EB1260001288421EDBA068401C3A -:1037200010D0EFF7B5F9A168081A0002C11700EB35 -:1037300011600012022810DD0120EFF70AF94FF0A6 -:10374000FF30A06020682844206026F07F40206180 -:10375000012084F82300BDE8FC870020FBE72DE969 -:10376000F0477E4C074694F82D00A4F1800606EB46 -:10377000801010F8170000B9FFDF94F82D50A04614 -:10378000794C24B1002140F66500AFF3008040F68B -:10379000710940F67A0A06EB851600BF16F8170085 -:1037A000012818D0042810D005280ED006280CD0E7 -:1037B0001CB100214846AFF3008020BF002CEDD0A3 -:1037C00000215046AFF30080E8E72A463946012041 -:1037D000FEF7C0FEF2E74FF0010A4FF00009454640 -:1037E00024B1002140F68100AFF30080504600F084 -:1037F0005CF885F8239024B1002140F68600AFF3F1 -:10380000008095F82D00FFF7D3FA064695F82300BF -:1038100028B1002CE4D0002140F68C001FE024B138 -:1038200000214FF40960AFF3008005EB860000F142 -:10383000270133463A462630FFF7F1F924B100213B -:1038400040F69400AFF3008000F024F8824695F82B -:10385000230038B1002CC3D0002140F69A00AFF30A -:103860000080BDE785F82D60012085F823005046D3 -:1038700000F01BF8002C04D0002140F6A700AFF3A5 -:103880000080BDE8F087354981F82D00012081F8DE -:103890002300704710B5354808B1AFF30080EFF34F -:1038A000108000F0010072B610BD10B5002804D1E0 -:1038B0002F4808B1AFF3008062B610BD2D480068F4 -:1038C000C005C00D10D0103840B2002806DA00F054 -:1038D0000F0000F1E02090F8140D03E000F1E0206B -:1038E00090F80004400970470820704710B51B4C41 -:1038F00094F82400002804D1F8F72AF8012084F86D -:10390000240010BD10B5154C94F82400002804D0F4 -:10391000F8F747F8002084F8240010BD10B51C68A3 -:103920005B68241A181A24F07F4420F07F40A142DB -:1039300006D8B4F5800F03D2904201D8012010BD03 -:10394000002010BDD0E90032D21A21F07F4311448B -:1039500021F07F41C0E900317047000018090020C4 -:10396000FF1FA107980600200000000000000000D3 -:103970000000000004ED00E02DE9F041044680075E -:103980004FF000054FF001060CD560480560066059 -:103990000FF0C6FC20B15E48016841F4806101600F -:1039A00024F00204E0044FF0FF3705D55948466083 -:1039B000C0F8087324F48054600003D556480560AD -:1039C00024F08044E0050FD55448C0F80052C0F8F8 -:1039D000087353490D60091D0D60514A04210C32D2 -:1039E0001160066124F48074A00409D54D48466036 -:1039F000C0F80052C0F808734B48056024F4005426 -:103A0000C4F38030C4F3C031884200D0FFDF14F427 -:103A1000404F14D045484660C0F80873444886605B -:103A2000C0F80052C0F8087342490D600A1D1660C4 -:103A30008660C0F808730D60166024F440442005C9 -:103A40000AD53D4846608660C0F80873C0F84873E0 -:103A50003A48056024F400640FF0DAFD3848044267 -:103A600000D0FFDFBDE8F08170B5202500221346AD -:103A700020FA02F1C90719D051B201F01F06012442 -:103A8000B4404E09B60006F1E026C6F88041C6F8FB -:103A90008042002906DA01F00F0101F1E02181F8EE -:103AA000143D03E001F1E02181F80034521CAA42E8 -:103AB000DED370BD70B5234C0D462060FFF75CFF70 -:103AC0002068FFF7D1FF2846F8F71FF80FF0FAF942 -:103AD00000F0AFF80FF09CFD0FF0E7FCF8F728F9C5 -:103AE000BDE870400FF09CBA10B5164C2068FFF787 -:103AF00043FF2068FFF7B8FF0FF08AFDF8F794F84E -:103B00000020206010BD0A2070470000FC1F00400C -:103B10003C17004000C0004004E501400080004028 -:103B20000485004000D0004004D5004000E0004083 -:103B300000F0004000F5004000B0004008B5004033 -:103B4000FEFF0FFD9000002070B526490A680AB3F9 -:103B50000022154601244B685B1C4B60092B00D3E7 -:103B60004D600E7904FA06F30E681E420FD0EFF393 -:103B7000108212F0010272B600D001220C689C4340 -:103B80000C6002B962B649680160002070BD521C29 -:103B9000092AE0D3052070BD4FF0E0214FF48000EA -:103BA000C1F800027047EFF3108111F0010F72B6F7 -:103BB0004FF0010202FA00F20A48036842EA0302E7 -:103BC000026000D162B6E7E706480021016041606B -:103BD00070470121814003480068084000D001205F -:103BE00070470000940000202DE9F04115460E4674 -:103BF0000446002700F0E7F8A84215D3002341202F -:103C00000FE000BF94F84220A25CF25494F84210F6 -:103C1000491CB1FBF0F200FB12115B1C84F842104E -:103C2000DBB2AB42EED3012700F0D9F83846BDE84D -:103C3000F081704910B5802081F800046E490020A1 -:103C400081F8420081F84100433181F8420081F857 -:103C50004100433181F8420081F8410067480FF08C -:103C60006DFB6648401C0FF069FBEFF71BF8BDE8E1 -:103C7000104000F0B4B8402070475F4800F0A3B88F -:103C80000A4601465C48AFE7402070475A48433037 -:103C900000F099B80A46014657484330A4E740214E -:103CA00001700020704710B504465348863000F07C -:103CB0008AF82070002010BD0A4601464E4810B513 -:103CC0008630FFF791FF08B1002010BD42F20700D7 -:103CD00010BD70B50C460546412900D9FFDF4848A4 -:103CE0000068103840B200F050F8C6B20D2000F065 -:103CF0004CF8C0B2864203D2FFDF01E0EFF722F8B2 -:103D0000224629463C48FFF76FFF0028F6D070BDD9 -:103D10002DE9F041394F002506463F1D57F8254053 -:103D2000204600F041F810B36D1CEDB2032DF5D321 -:103D30003148433000F038F8002825D02E4800F0F4 -:103D400033F8002820D02C48863000F02DF80028C9 -:103D50001AD0EEF7CDFF29480FF0F8FAB0F5005F62 -:103D600000D0FFDFBDE8F04124480FF005BB94F818 -:103D700041004121265414F8410F401CB0FBF1F2E0 -:103D800001FB12002070D3E751E7002806DA00F0AB -:103D90000F0000F1E02090F8140D03E000F1E020A6 -:103DA00090F800044009704710F8411F4122491C57 -:103DB000B1FBF2F302FB13114078814201D10120E3 -:103DC00070470020704710F8411F4078814201D3AE -:103DD000081A02E0C0F141000844C0B2704710B5B3 -:103DE00006480FF0B3FA002803D1BDE81040EEF703 -:103DF0006ABF10BD0DE000E0480900209C000020D3 -:103E000004ED00E070B5154D2878401CC4B2687808 -:103E1000844202D0EFF727F82C7070BD2DE9F041F5 -:103E20000E4C4FF0E02600BFEFF712F820BF40BF66 -:103E300020BF677820786070D6F80052EDF76EFAF0 -:103E4000854305D1D6F8040210B92078B842EBD0EA -:103E5000EEF7F9FF0020BDE8F0810000AC00002083 -:103E60002DE9F041012528034FF0E0210026C1F89B -:103E700080011E4CC4F800610C2000F02CF81C4896 -:103E800001680268C94341F3001142F01002026068 -:103E9000C4F804532560491C00E020BFD4F8002179 -:103EA000002AFAD019B9016821F010010160114807 -:103EB00007686560C4F80853C4F800610C2000F07E -:103EC0000AF83846BDE8F08110B50446FFF7C8FF90 -:103ED0002060002010BD00F01F0201219140400928 -:103EE000800000F1E020C0F88012704700C0004060 -:103EF00010ED00E008C500402DE9F047FF4C0646F4 -:103F0000FF21A06800EB061211702178FF2910D064 -:103F10004FF0080909EB011109EB06174158C05988 -:103F200000F0F4F9002807DDA168207801EB061104 -:103F300008702670BDE8F08794F8008045460DE0D3 -:103F4000A06809EB05114158C05900F0DFF90028BD -:103F500006DCA068A84600EB08100578FF2DEFD11D -:103F6000A06800EB061100EB08100D700670E1E789 -:103F7000F0B5E24B0446002001259A680C269B7898 -:103F80000CE000BF05EB0017D75DA74204D106EB9C -:103F90000017D7598F4204D0401CC0B28342F1D8D9 -:103FA000FF20F0BD70B5FFF772FBD44C08252278D6 -:103FB000A16805EB0212895800F0A8F9012808DD74 -:103FC0002178A06805EB01114058BDE87040FFF76B -:103FD00055BBFFF727FABDE87040F7F7D7BE2DE9CC -:103FE000F041C64C2578FFF752FBFF2D6ED04FF005 -:103FF0000808A26808EB0516915900F087F9022815 -:10400000A06801DD80595DE000EB051109782170A1 -:10401000022101EB0511425C5AB1521E42548159F2 -:1040200001F5800121F07F4181512846FFF764FFAF -:1040300034E00423012203EB051302EB051250F8D0 -:1040400003C0875CBCF1000F10D0BCF5007F10D915 -:10405000CCF3080250F806C00CEB423C2CF07F4C2D -:1040600040F806C0C3589A1A520A09E0FF21815449 -:104070000AE0825902EB4C3222F07F428251002248 -:1040800042542846FFF738FF0C21A06801EB0511C8 -:104090004158E06850F82720384690472078FF289C -:1040A00014D0FFF7F4FA2278A16808EB0212454613 -:1040B000895800F02BF9012893DD2178A06805EBE1 -:1040C00001114058BDE8F041FFF7D8BABDE8F081D2 -:1040D000F0B51D4614460E460746FF2B00D3FFDF02 -:1040E000A00700D0FFDF8548FF210022C0E902477A -:1040F000C57006710170427082701046012204E0A2 -:1041000002EB0013401CE154C0B2A842F8D3F0BD4A -:1041100070B57A4C064665782079854200D3FFDF7A -:10412000E06840F825606078401C6070284670BDEB -:104130002DE9FF5F1D468B460746FF24FFF7A7FAD0 -:10414000DFF8B891064699F80100B84200D8FFDFC1 -:1041500000214FF001084FF00C0A99F80220D9F81D -:1041600008000EE008EB0113C35CFF2B0ED0BB422E -:1041700005D10AEB011350F803C0DC450CD0491CF3 -:10418000C9B28A42EED8FF2C02D00DE00C46F6E709 -:1041900099F803108A4203D1FF2004B0BDE8F09FD4 -:1041A0001446521C89F8022008EB04110AEB041291 -:1041B000475440F802B00421029B0022012B01EB7E -:1041C00004110CD040F801204FF4007808234FF080 -:1041D000020C454513D9E905C90D02D002E045504E -:1041E000F2E7414606EB413203EB041322F07F4233 -:1041F000C250691A0CEB0412490A81540BE005B94C -:10420000012506EB453103EB041321F07F41C1503A -:104210000CEB0411425499F800502046FFF76CFE55 -:1042200099F80000A84201D0FFF7BCFE3846B4E779 -:1042300070B50C460546FFF72AFA06462146284681 -:10424000FFF796FE0446FF281AD02C4D082101EBFB -:104250000411A8684158304600F058F800F5805025 -:10426000C11700EBD14040130221AA6801EB0411F1 -:10427000515C09B100EB4120002800DC012070BD39 -:10428000002070BD2DE9F04788468146FFF770FE9B -:104290000746FF281BD0194D2E78A86831463446B2 -:1042A00005E0BC4206D0264600EB06121478FF2C2F -:1042B000F7D10CE0FF2C0AD0A6420CD100EB011084 -:1042C00000782870FF2804D0FFF76CFE03E0002080 -:1042D00030E6FFF7D9F941464846FFF7A9FF012329 -:1042E000A968024603EB0413FF20C854A878401EB7 -:1042F000B84200D1A87001EB041001E0140A0020BC -:1043000001EB061100780870104613E6081A000247 -:10431000C11700EB116000127047000070B5044631 -:10432000A0F500002D4EB0F1786F02D23444A4F510 -:1043300000042B48844201D2012500E0002500F052 -:1043400043F848B125B9B44204D32648006808E0D0 -:10435000012070BD002070BD002DF9D1B442F9D309 -:1043600021488442F6D2F3E710B50446A0F50000D8 -:10437000B0F1786F03D219480444A4F5000400F0AA -:1043800023F84FF0804130B11648006804E08C42B9 -:1043900004D2012003E014488442F8D2002080F0C7 -:1043A000010010BD10B520B1FFF7DEFF08B10120FC -:1043B00010BD002010BD10B520B1FFF7AFFF08B150 -:1043C000012010BD002010BD08480949006888423E -:1043D00001D101207047002070470000000000203C -:1043E000006002002000002008000020B000002033 -:1043F000BEBAFECA0548064A0168914201D10021B1 -:10440000016004490120086070470000B0000020EE -:10441000BEBAFECA40E50140534800210170417018 -:1044200010218170704770B5054616460C46022073 -:10443000EEF7D7F94C49012008704C49F01E08608E -:104440004B480560001F046070BD10B50220EEF7F8 -:10445000C8F945490120087046480021C0F80011FC -:10446000C0F80411C0F8081143494FF40000086077 -:1044700010BD3D480178C9B1404A4FF400011160B8 -:104480003C49D1F800310022002B1CBFD1F8043187 -:10449000002B02D0D1F8081111B14270102103E0B5 -:1044A0000121417036490968817002700020EEF7E1 -:1044B00098B92D480178002904BF407870472D48ED -:1044C000D0F80011002904BF02207047D0F8001175 -:1044D00000291CBFD0F80411002905D0D0F808012C -:1044E000002804BF01207047002070471E4800B517 -:1044F0000278204B4078C821491EC9B282B1D3F856 -:1045000000C1BCF1000F10D0D3F8000100281CBF7F -:10451000D3F8040100280BD0D3F8080150B107E00C -:10452000022802D0012805D002E00029E4D1FFDFF3 -:10453000002000BD012000BD0B480178002904BF08 -:10454000807870470B48D0F8001100291CBFD0F8C4 -:104550000411002902D0D0F8080108B110207047DA -:1045600007480068C0B27047B400002010F5004052 -:1045700008F5004000F0004004F5014008F5014056 -:1045800000F400404C48002101704170704770B544 -:10459000064614460D460120EEF723F9474806600B -:1045A000001D0460001D056070BD70B54249012505 -:1045B0000D7040EA0241424A41F080711160414C65 -:1045C0000026C4F80461404A4FF040711160002891 -:1045D00002BFC4F80052256070BD012818BFFFDF7C -:1045E000C4F8006225604FF000703849086070BD63 -:1045F0003148017879B1344A4FF040711160314946 -:10460000D1F804210021002A08BF417002D0304AAD -:104610001268427001700020EEF7E3B82648017876 -:10462000002904BF407870472648D0F804010028CC -:1046300008BF704726480068C0B27047002808BF0E -:10464000704730B51C480078002808BFFFDF1D48C0 -:10465000D0F80411002918BF30BD0224C0F804436B -:10466000DFF870C0DCF80010C1F30015DCF80010B2 -:1046700041F01001CCF80010D0F80411002904BF5B -:104680004FF400414FF0E02207D100BFC2F8801282 -:1046900020BFD0F80431002BF8D02DB9DCF8001081 -:1046A00021F01001CCF80010C0F8084330BD0549D6 -:1046B0000120886070470000B700002008F5004026 -:1046C00004F5004000F0004008F5014004F5014009 -:1046D00000F4004010ED00E010B5FF480024012177 -:1046E0004470047044728472C17280F82140846204 -:1046F000446314300FF004FFF849601E0860091D80 -:104700000860091D0C60091D0860091D0C60091D69 -:104710000860091D0860091D0860091D0860091D61 -:104720000860091D0860091D0860091D0860091D51 -:10473000086010BDEA48016801F00F01032904BFB9 -:1047400001207047006800F00F00042804BF022019 -:10475000704700B5FFDF012000BD30B4DE490268BC -:10476000DFF884C34A6142688A61007A08770A7D6B -:10477000DC4BACF1040401204AB10A7E00FA02F2DB -:104780001A608D7D002D0CBF2260CCF800204A7D80 -:10479000002A04BF30BC70474A7E90401860C97D33 -:1047A00000290CBF2060CCF8000030BC704730B549 -:1047B00000250446012904D002290CBF4FF0807562 -:1047C000FFDF45F4847040F48010C849086044F469 -:1047D0004030091D40F00070086030BD30B5002544 -:1047E0000446012904D002290CBF4FF08075FFDF79 -:1047F00045F4847040F48010BC49086044F44030B3 -:10480000091D40F000700860B948D0F80001002888 -:1048100018BFFFDF30BD2DE9F04102264FF0E02741 -:1048200001240025C7F88061B248056004600EF0DD -:1048300077FDB14918B1086840F4806008600868E5 -:1048400020F0770040F0880040F0004008600EF053 -:1048500051FD30B1A948016821F47F4141F4B051C4 -:1048600001600EF047FD9C4940B1A5484E770660B7 -:10487000A54AA4481060121FA4481060A44A40F240 -:104880005B601060121F40F203101060101F046084 -:10489000934A032010609F4A96201060487F0028AA -:1048A00014BF4FF4C0209C4840F440209B4A106045 -:1048B0009C4A9B481060121F9B481060C7F880629A -:1048C0008B4A1020C2F8040381F82D50BDE8F08116 -:1048D0009648016821F0010141F080710160704744 -:1048E0007D4A0368C2F802308088D0801172704718 -:1048F000794B10B51A7A8A4208D101460622981CD3 -:104900000FF02AFC002804BF012010BD002010BDBC -:10491000714890F8210070476F4A517010707047CD -:10492000F0B50546800000F1804000F580508B888E -:10493000C0F820360B78D1F8011043EA0121C0F805 -:10494000001605F10800012707FA00F6784C002A46 -:1049500004BF2068B04304D0012A18BFFFDF2068DD -:1049600030432060206807FA05F108432060F0BD5D -:104970000EF096BF584890F82E007047564890F8B1 -:10498000300070476B4AC178116000686A490002C4 -:1049900008607047252808BF02210ED0262808BFCE -:1049A0001A210AD0272808BF502106D00A2894BF10 -:1049B0000422062202EB4001C9B2604A116060493C -:1049C00008607047F0B4444B9D7A012D61D0022DF0 -:1049D0001CBFF0BC704793F815C0BCF1000F04BFBA -:1049E000F0BC70474FF47A7C012D564C564F57D08F -:1049F000DE7D5D7E002E18BF0126012908BF29211A -:104A00000CD0022A0CBF514C012A03D0042A0CBF3F -:104A10003C464F4C04F2E141B1FBFCF1491F084414 -:104A20004C4908604C490020C1F84C01280286F02E -:104A3000010140EA015040F00311187F820002F1A9 -:104A4000804202F5C042C2F81015444901EB8002D1 -:104A5000997EC80000F1804000F5F830C0F81425B8 -:104A6000DFF8FCC0C0F810C5D87EC30003F1804356 -:104A700003F5F833C3F814252B4AC3F81025012297 -:104A800002FA01F102FA00F0084336490860F0BC6E -:104A9000704793F814C0BCF1000FA3D1F0BC70476D -:104AA0009E7D1D7E002E18BF0126012965D0022A99 -:104AB00004BF2D4C4FF47A710CD0012A08BF4FF47B -:104AC000C86107D0042A07BF3C4640F69801274C2E -:104AD00040F6E44121444BE0240A0020000E00404F -:104AE00010150040180500500C050050141500402A -:104AF00000100040FC1F00403C17004040170040E1 -:104B000060150040448000409CF5014028110040A1 -:104B100038150040441500400000040408F5014029 -:104B200040800040A4F5014010110040741700407F -:104B300040160040241500401C1500400815004098 -:104B400054150040A2240200D0FB010004360200EC -:104B5000C0D401004C85004000800040006000404F -:104B60004C81004004F501406836020030D301005A -:104B700001F5FA71B1FBFCF150E7022A08BF4FF4CE -:104B80007A710AD0012A08BF4FF4C86105D0042AFF -:104B90000CBF40F6980140F6E44149F6FC6211442E -:104BA000E8E72DE9F047FC4E80460320154689468C -:104BB000C6F80002F94F787F002814BF4FF4C020D8 -:104BC000F748F849086048460EF0A5FE28460EF062 -:104BD00095FE0124B8F1000F03D0B8F1010F16D0F3 -:104BE00018E00EF087FB78B1EF490A684806022DFD -:104BF000D0F820030CBFC0F30660C0F3062022F4F7 -:104C0000FE4242EA00200860BC72346002E00220EA -:104C1000B8727460E548C464E54800682A464946AD -:104C2000BDE8F047CEE62DE9F0418846DA4907466F -:104C300003201546C1F80002D84C607F002814BF3D -:104C40004FF4C020D648D74E306040460EF063FE89 -:104C500028460EF053FE17B1012F1CD024E00EF0B1 -:104C600049FB78B1D04A11685006022DD0F82003D4 -:104C70000CBFC0F30660C0F3062021F4FE4141EAF8 -:104C8000002010600120A072606B40F4801060630F -:104C90004FF4801007E00220A072606B40F4001017 -:104CA00060634FF4001030602A464146BDE8F04191 -:104CB000002087E62DE9FF4FB74C8346002581B0E1 -:104CC00003208946C4F80002B44E707F002814BF48 -:104CD0004FF4C020B248B34F386003980EF01BFE6B -:104CE00004980EF00BFEDFF8CCA24FF00108BBF1E8 -:104CF000000F03D0BBF1010F35D046E00EF0FAFAF9 -:104D000080B1A94A0498116853060228D3F82003F9 -:104D10000CBFC0F30660C0F3062021F4FE4141EA57 -:104D200000201060CAF8004096F82D00012806D037 -:104D3000022818BFFFDF0CD086F80A8025E0DDE9E5 -:104D4000031396F82C2048460EF066FEB16A45180B -:104D5000F2E7DDE9031296F82C3048460EF0EAFD42 -:104D6000B16A4518E8E79448CAF8000096F82D00A3 -:104D7000DDE90313012896F82C20484624D00EF0D4 -:104D800095FEB16A45180220B0728C4805608D49C5 -:104D90008B480860706B40F400207063D4F8009278 -:104DA0004FF0100AC4F808A30026C4F80062864831 -:104DB0004FF4802BC0F800B0FF208DF80000C4F83D -:104DC0001061C4F810800AE00EF0F2FDB16A4518D7 -:104DD000D9E700BF9DF80000401E8DF800009DF847 -:104DE000000018B1D4F810010028F3D09DF800009D -:104DF000002808BFFFDFC4F80061C4F80C61C4F8E4 -:104E00001061C4F80461C4F81461C4F818610EF0AC -:104E100071FA002818BFC4F828616C480068009037 -:104E2000C4F80092C7F800B0C4F804A34FF40020FF -:104E300038605E48C0F84C805D480068A84228BFD2 -:104E4000FFDF2846DDE9031205B0BDE8F04FB9E504 -:104E50002DE9F84F504CD4F8000220F00B09D4F89B -:104E600004034FF0100AC0F30018C4F808A300268A -:104E7000C4F80062494D687F002814BF4FF4C02079 -:104E8000474840F4402150480160A97A0127012990 -:104E900002D0022903D014E0297D11B911E0697D07 -:104EA00079B1A97EEA7E07FA01F107FA02F211430D -:104EB0000160287F800000F1804000F5C040C0F80C -:104EC0001065FF208DF80000C4F81061276104E030 -:104ED0009DF80000401E8DF800009DF8000018B1FC -:104EE000D4F810010028F3D09DF80000002808BF76 -:104EF000FFDFC4F810610EF0FDF9002818BFC4F8F8 -:104F000028616E72AE72EF72C4F80092B8F1000FB1 -:104F100018BFC4F804A3BDE8F88F00682C4920F03E -:104F20007F40086070474FF0E0200221C0F88011F8 -:104F3000C0F8801270474FF0E0210220C1F8000154 -:104F4000704724490870704723490860704730B59E -:104F5000124C0546A06AA84228BFFFDF012020733B -:104F60002561607F40B1284420610B48D0F80012D1 -:104F700041F04001C0F800120C490020C1F8440182 -:104F8000164920690860606B064940F48000606340 -:104F90004FF48000086030BD00100040240A00205B -:104FA0000000040404F50140881500400080004022 -:104FB0004C850040ACF5014004100040488500409D -:104FC00048810040A8F5014008F501401811004053 -:104FD0003C150040B9000020041500404485004005 -:104FE00070B505460E460220FE4C2073FE4801684F -:104FF00001F00F01032908BF012207D0006800F06B -:105000000F0004280EBF0222FFDF012294F82D00BA -:1050100094F82C10012819D028460EF0A5FD206127 -:10502000607F48B1216908442061F048D0F800123F -:1050300041F04001C0F80012ED490020C1F84401E0 -:105040002169A06A0844EB49086070BD33462846D0 -:105050000EF053FDE3E7E8494FF480000860E148B3 -:10506000416B21F480014163002101737047C2004C -:1050700002F1804202F5F832E04BC2F81035C2F876 -:10508000141501218140DE480160D648426B11436E -:1050900041637047D64801214160C1600021C0F8DA -:1050A0004411D4480160CF488162704710B504466E -:1050B0000EF020F900281CBFCA484477D14804608C -:1050C000CA48D0F8001241F04001C0F8001210BDEB -:1050D000C64810B5D0F8001221F04001C0F8001207 -:1050E0000EF008F9C749002818BF0220086010BD5B -:1050F000BE48D0F8001221F01001C0F800120121C2 -:1051000081617047B9480021C0F81C11D0F8001225 -:1051100041F01001C0F800127047B44981B0D1F8D5 -:105120001C21012A1EBF002001B07047B64A126838 -:1051300002F07F02524202700020C1F81C01B34805 -:1051400000680090012001B0704730B50C000546A2 -:1051500008BFFFDF14F0010F1CBF012CFFDF002D83 -:105160000CBF012002209F4901284872CC729F4940 -:1051700004BFD1F8000240F0040007D0022807BFA6 -:10518000D1F8000240F00800FFDF30BDC1F8000296 -:1051900030BD2DE9F84FDFF8789299F80000042827 -:1051A00028BFFFDFDFF848A2DAF84C1192488D4C97 -:1051B00000274FF00108D1B1A17A012902D00229BC -:1051C00003D014E0217D11B911E0617D79B1A17E98 -:1051D000E27E08FA01F108FA02F211430160217F30 -:1051E000890001F1804101F5C041C1F81075824884 -:1051F000616B01606763217B002019B1DAF844110B -:10520000012900D00021A27A784E012A6ED0022A0C -:1052100074D000BFD6F8101101290CBF1021002155 -:1052200041EA00057B48016811F0FF0F03D0D6F872 -:105230001411012900D0002184F82E10006810F00C -:10524000FF0F03D0D6F81801012800D0002084F801 -:105250002F007148006884F83000FFF72AF9012810 -:1052600018BF002084F83100C6F80071C6F80C7130 -:10527000C6F81071C6F80471C6F81471C6F8187132 -:105280000EF038F8002818BFC6F828716348006887 -:1052900000905748C0F8447161480068DFF854A195 -:1052A0000090DAF800006062617F00291CBF401A9C -:1052B00060625C480068A0624B48016801F00F0121 -:1052C000032908BF012007D0006800F00F00042860 -:1052D0000EBF0220FFDF012084F82C00A07ADFF847 -:1052E00048B184F82D00022824D116E0D6F80C012C -:1052F000012814BF002008208CE7FFE7D6F80C0136 -:10530000012814BF00200220484A1268012A14BF55 -:1053100004220022104308437CE7607850B1DBF898 -:10532000001009780840217831EA000008BF84F8AD -:10533000208001D084F8207015F0020F07D099F872 -:1053400000103B4A4908606A52F82110884715F05E -:10535000010F18BF00210DD0364A99F80030A06A1D -:1053600052F82320904700BF99F8000010F0010F79 -:105370002AD10AE015F0020F18BF0121ECD115F077 -:10538000080F18BF0221E7D1EEE7DBF80000007834 -:1053900000F00F00072828BF84F8217014D2DBF832 -:1053A0000000062200F10901A01C0EF0D5FE40B954 -:1053B000207ADBF800100978B0EBD11F08BF01207C -:1053C00000D0002084F82100E17A002011F0020FC3 -:1053D0001CBF15F0020F15F0040F45D111F0100F8E -:1053E0002AE00000240A00201015004000100040B0 -:1053F000008000404485004008F501400411004051 -:1054000004F5014060150040481500401C110040A3 -:10541000B900002040160040101400401811004050 -:1054200044810040408500400415004000140040C5 -:1054300008480200504802001CBF94F82F20002AA0 -:1054400002D094F831207AB111F0080F1CBF94F803 -:105450002020002A08D111F0040F02D094F8211066 -:1054600011B115F0010F00D00120617A19B198B186 -:10547000FFF7EEFC1EE0607F002814BF4FF4C02150 -:105480007F4980480160D6F8000220F00300C6F88A -:10549000000284F80B800DE04FF0000B012913D0BF -:1054A000022918BFFFDF21D0A06A01225844002141 -:1054B000FFF788FA15F0010F2BD0734899F8001008 -:1054C00050F82100804745E0D6F8000220F00400A3 -:1054D000C6F80002677284F80B80012384F80A8002 -:1054E0001A46002196200EF025FA10E0D6F80002A8 -:1054F00020F00800C6F80002677284F80B800220D2 -:10550000A07201231A46002196200EF051FA83461C -:10551000CAE715F0020F08D05C4999F8002028EA84 -:10552000950051F82210884714E015F0080F06D0B6 -:10553000574899F8001050F8210080470AE015F00C -:10554000100F08BFFFDF05D0524899F8001050F83F -:1055500021008047A07A022818BFBDE8F88F207B81 -:10556000002808BFBDE8F88F4B49C1F844710228F4 -:1055700014D0012818BFFFDFA16A2069884298BFB4 -:10558000FFDF2069CAF80000606B444940F48000E6 -:1055900060634FF480000860BDE8F88F2169A06A5D -:1055A0000844EFE738B500253D4C002818BFC4F883 -:1055B0000052C4F80051C4F80C51C4F81051C4F89A -:1055C0000451C4F81451C4F818510DF093FE00288A -:1055D00018BFC4F8285133480068009038BD01282E -:1055E00004BF28207047022804BF1820704700B568 -:1055F000FFDF282000BD012804BF41F6A4707047DA -:10560000022804BF41F28830704700B5FFDF41F641 -:10561000A47000BD012804BF41F2D4707047022875 -:1056200004BF41F20400704700B5FFDF41F2D470BF -:1056300000BD012812BF02280020704700B5FFDF1F -:10564000002000BD16490820C1F800021648407F1E -:10565000002814BF4FF4C02009480A4908601449C3 -:1056600012480860091D13480860091D12480860A7 -:10567000091D1248086009494FF44020086070472E -:105680000000040408F50140104802002048020010 -:1056900030480200404802000080004004F501400C -:1056A0000010004018110040240A002000110040A2 -:1056B000A0F50140141000401C11004010100040E3 -:1056C00010B53F4822210EF0F2FD3D48017821F04F -:1056D00010010170012107F017FC3A49002081F800 -:1056E00022004FF6FF70888437490880488010BD3B -:1056F000704734498A8C824218BF7047002081F875 -:1057000022004FF6FF70888470472D490160704772 -:105710002D49088070472B498A8CA2F57F43FF3BB7 -:1057200003D0002101600846704791F822202549E6 -:10573000012A1ABF0160012000207047214901F1B0 -:10574000220091F82220012A04BF00207047012284 -:1057500002701D4800888884104670471A494880A6 -:1057600070471849184B8A8C5B889A4206D191F889 -:105770002220002A1EBF01600120704700207047D0 -:105780001048114A818C5288914209D14FF6FF711D -:10579000818410F8221F19B1002101700120704787 -:1057A000002070470748084A818C5288914205D1F1 -:1057B00090F8220000281CBF00207047012070478D -:1057C000820A00205C0A0020BA0000207047574A75 -:1057D000012340B1012818BF70471370086890601A -:1057E00088889081704753700868C2F802008888E2 -:1057F000D08070474D4A10B1012807D00EE0507894 -:1058000060B1D2F802000860D08804E0107828B1B6 -:105810009068086090898880012070470020704758 -:10582000424910B1012803D006E0487810B903E0DE -:10583000087808B1012070470020704730B58DB05E -:105840000C4605460D2104A80EF053FDE0788DF8B6 -:105850001F0020798DF81E0060798DF81D002868E2 -:10586000009068680190A8680290E8680390684614 -:105870000DF0C2FB20789DF82F1088420CD1607883 -:105880009DF82E10884207D1A0789DF82D108842EF -:1058900002BF01200DB030BD00200DB030BD30B5CD -:1058A0000C4605468DB04FF0030104F1030012B120 -:1058B000FEF7F0F901E0FEF70CFA60790D2120F017 -:1058C000C00040F04000607104A80EF012FDE078C6 -:1058D0008DF81F0020798DF81E0060798DF81D006D -:1058E0002868009068680190A8680290E8680390B2 -:1058F00068460DF081FB9DF82F0020709DF82E006A -:1059000060709DF82D00A0700DB030BD10B500295D -:1059100004464FF0060102D0FEF7BCF901E0FEF7A5 -:10592000D8F9607920F0C000607110BDBE00002081 -:1059300070B5F84E0446306890F800110025012932 -:1059400019D090F8FA10012924D090F8D01001292C -:105950002AD090F8F21001291CBF002070BD65709C -:1059600017212170D0F8F4106160B0F8F81021818F -:1059700080F8F25016E065701C212170D0F80111FA -:105980006160D0F80511A16090F80911217380F8C9 -:10599000005107E0657007212170D0F8FC106160AC -:1059A00080F8FA50012070BD65701421217000F15B -:1059B000D2012022201D0EF0FBFB01212172306854 -:1059C00080F8D050D448B0F8D420A0F8FC207268F9 -:1059D000537B80F8FE3080F8FA101088FBF71AF934 -:1059E000FAF7C1FDDEE7CB48006890F8D010002937 -:1059F00014BFB0F8D4004FF6FF70704770B5C54CB7 -:105A00002068002808BFFFDF0025206845700028B7 -:105A100008BFFFDF2068417800291CBFFFDF70BD91 -:105A20004FF486710EF065FC2068FF2101707F2124 -:105A300080F8361013214184282180F8CC100121F0 -:105A400080F8B81080F8BD50FFF742FBFEF711FD5B -:105A5000B24806F0E5FFB24806F0E2FFBDE870404C -:105A6000B04806F0DDBFAB490968097881420CBF38 -:105A7000012000207047A748006890F82200C0F37A -:105A8000001070472DE9F04FA248016891F82400FA -:105A9000B1F822C0C0F38002C0F340031A4400F002 -:105AA00001001044CCF300121AB3BCF1130F1BD049 -:105AB0000BDCBCF1100F02BF9B4931F81000BDE8B0 -:105AC000F08FBCF1120F0FD00AE0BCF1150F08BF28 -:105AD00096490AD0BCF11D0F04BF9548BDE8F08F70 -:105AE000FFDF0020BDE8F08F924931F81000BDE8DB -:105AF000F08F002491F8BA2091F8BB108E4E8F4F92 -:105B00001CF0030F4FF47A7B4FF0190A25464FF42F -:105B1000C8784FF4BF794FF018037DD01CF0010F07 -:105B20001BD0082904BF44464FF0400C0FD0042975 -:105B300004BF4C464FF0100C09D0022907BF05F1F5 -:105B400018044FF0040C05F128044FF0080C0CEB7E -:105B50004C0E0EEB0C1CA44417E0082904BFC446ED -:105B600040240CD0042904BFCC46102407D00229BD -:105B700007BF05F1180C042405F1280C082404EBD8 -:105B8000C40404EB44040CEB440C022A04BF6C4E26 -:105B90004FF47A740CD0012A08BF4FF4C86407D0C0 -:105BA000042A07BF674E40F698043E4640F6E44498 -:105BB000344404F2E734B4FBFBF4C0EB001606EB0C -:105BC000860604EB8604082A30D0042A29D0022A4B -:105BD00007BF05F11802042505F128024FF0190A44 -:105BE00018BF08251AFB052212FB0040082922D005 -:105BF000042925D0022904BF0421C03004D0282361 -:105C000003F5A87108440821C1EBC10101EB410172 -:105C100003EB4101084400E017E0604400F52674FE -:105C200018E04A464FF0140A1025DBE742464FF0D1 -:105C3000140A4025D6E74346402100F53D60E3E7DE -:105C40004B46102100F57C70DEE71CF0020F18BFF8 -:105C5000FFDF02D02046BDE8F08F022A04BF384E95 -:105C60004FF47A7C0CD0012A08BF4FF4C86C07D0DF -:105C7000042A07BF334E40F6980C3E4640F6E44CEB -:105C8000B4440CF2E73CBCFBFBFCC0EB001404EB9F -:105C900084040CEB840C082A04BF4FF0140A402241 -:105CA0000CD0042A29D0022A07BF05F118080422C3 -:105CB00005F128084FF0190A18BF08221AFB0282C2 -:105CC00012FB00C0082904BF4FF4A87340210AD07A -:105CD000042904BF4FF4A873102104D002290EBF79 -:105CE000042128230821C1EBC10101EB410103EB91 -:105CF0004101084400F5B274ACE7C8464FF0140AFD -:105D00001022DBE7034840F271210068806A4843B3 -:105D100070470000CC000020A40A0020B00B002037 -:105D2000D80B0020000C0020744802007C480200C0 -:105D3000F18913006C480200A224020030D3010054 -:105D400068360200D0FB0100F848006890F8350082 -:105D5000002818BF0120704710B5F54C207B0228A1 -:105D600018BF032808D1207D04F1150105F018FDA6 -:105D700008281CBF012010BD207B002816BF022868 -:105D800000200120BDE81040FFF74ABDE74909683F -:105D900081F8300070472DE9F047E44D2968087B11 -:105DA000002816BF02280020012048730E31FFF79B -:105DB00021FD2968087B022816BF03280122002242 -:105DC00081F82F20082081F82D00487B012600272C -:105DD00001F10E03012804BF5B7913F0C00F0AD054 -:105DE00001F10E03012804D1587900F0C0004028C9 -:105DF00001D0002000E0012081F82E00002A04BF1D -:105E000091F8220010F0040F06D0087D153105F03E -:105E1000C7FC296881F82D0028684760FCF7F8FE68 -:105E20002968C34C4FF00009886094F82D0005F0F4 -:105E3000D3FC804694F82F00002818BFB8F1000F5B -:105E400004D01021404606F050FB68B194F83000B1 -:105E500000281CBF94F82E0000281DD0607B04F1A0 -:105E60000E0101280ED012E066734A4604F10E01BD -:105E70004046FFF714FD94F82D1004F10E0005F0D4 -:105E8000A4FD09E0487900F0C000402831D039462F -:105E900004F10E00FFF73AFD2868C77690F822005B -:105EA00010F0040F08BFBDE8F087002794F82D001C -:105EB00005F09BFC040008BFBDE8F087102106F048 -:105EC00014FB002818BFBDE8F08728683A4600F1A7 -:105ED0001C01C6762046FFF7E2FC286800F11C0191 -:105EE000944806F0D4FDBDE8F0470121914806F042 -:105EF000E9BD05F0A3FD4A4604F10E01FFF7CFFC12 -:105F0000CAE778B58A490446884D407B08732968FA -:105F1000207808706088ADF8000080B200F00102BF -:105F2000C0F3400342EA4302C0F3800342EA830223 -:105F3000C0F3C00342EAC302C0F3001342EA0312F3 -:105F4000C0F3401342EA4312C0F3801042EA8010CB -:105F50004884E07D012808BF012603D0022814BF31 -:105F6000FFDF0226286880F8BA60607E012808BF3B -:105F7000012603D0022814BFFFDF0226286880F81C -:105F8000BB60217B80F82410418C1D290CBF0021AF -:105F900061688162617D80F83510A17B002916BFA0 -:105FA0000229002101210175D4F80F10C0F8151045 -:105FB000B4F81310A0F81910A17EB0F8CE2061F348 -:105FC0000302A0F8CE20E17E012918BF002180F84D -:105FD0003410002078BD55480068408CC0F3001193 -:105FE00019B110F0040F05D002E010F0020F01D03B -:105FF00000207047012070474C4A00231268C2F805 -:10600000C030B2F822C0BCF11D0F02BFC2F8C830C8 -:1060100082F8C4307047002908BFC2F8C8300AD0DF -:10602000936A40F2712C03FB0CF31944491EB1FB37 -:10603000F3F1C2F8C81082F8C400704703463B4829 -:1060400010B50168D1F8C820002A1ABFD1F8C0C025 -:10605000BCF1000F012405D09A4205D90124D01AC1 -:10606000C1F8C800204610BD91F82210002411F09C -:10607000010F1CBF406800884FF0430108BF00209B -:1060800001F009F9EEE72948006890F8B700002808 -:106090000CBF01200020704770B51F2834BF044694 -:1060A0001F240022214D286880F8B920224678302C -:1060B0000EF07EF82868012180F8974080F8B9102A -:1060C00070BD10B51F2828BF1F20C2B2174C002377 -:1060D000206880F8B83080F8B72098300EF068F863 -:1060E0002168012081F8B80010BD1049096881F8C5 -:1060F000BD0070470D48006890F8220000F00100D4 -:1061000070470A48006890F82200C0F340007047CA -:106110000648006890F82200C0F34010704703481A -:10612000006890F82200C0F3C0007047CC00002047 -:10613000A40A0020B00B002001207047F748006837 -:1061400090F8BB00704770B5FEF7A4FFFEF783FF21 -:10615000FEF77EFEFEF7E7FEF04C2068D0F8C01098 -:10616000491CC0F8C01090F83300002530B1FEF78C -:10617000AFFFFEF77EF9206880F833502068457045 -:1061800090F8C410F9B1D0F8C02091421BD8042077 -:1061900002F050FA206890F8220010F0010F0CD0A5 -:1061A00060684321008801F076F860680088FAF79B -:1061B00031FDBDE87040FAF7C7B9BDE87040432132 -:1061C000002001F068B8D0F8C81019B1D0F8C0208C -:1061D000914202D990F83700D8B1042002F02AFA8F -:1061E000206890F8220010F0010F0CD060683C216C -:1061F000008801F050F860680088FAF70BFDBDE8F0 -:106200007040FAF7A1B9BDE870403C21002001F0D0 -:1062100042B8BDE87040002002F00CBA2DE9F84FFA -:10622000BE4E8046174630688B464FF0000A458CBC -:1062300015F0030F10D015F0010F05F0020005D086 -:10624000002808BF4FF0010A06D004E0002818BF5C -:106250004FF0020A00D1FFDF4FF000094C4615F065 -:10626000010F05F002000BD070B915F0040F0BD030 -:1062700049F00800002F18BF40F0030440D090E020 -:1062800010B115F0040F0DD015F0070F10D015F058 -:10629000010F05F0020036D0002808BF15F0040FEA -:1062A00027D03DE0002F18BF49F0090479D134E030 -:1062B0002FB149F0080415F0200F14D071E03168B7 -:1062C00005F0200291F87700104308BF49F001045F -:1062D00067D049F0180415F0200F62D191F8BA1078 -:1062E00008295AD156E0316891F8BA10082951D1DD -:1062F00053E049F00800002F18BF40F0010450D1CE -:1063000040F010044DE0002818BF15F0040F07D02E -:10631000002F18BF49F00B0443D149F0180440E0A6 -:1063200015F0030F3CD115F0040F39D077B1316867 -:1063300049F0080091F8BA1008290CBF40F0020497 -:1063400020F0020415F0200F22D02AE0316805F079 -:10635000200291F87700104308BF49F0030420D0D1 -:1063600049F0180015F0200F09D000BF91F8BA10BD -:10637000082914BF40F0020420F0020411E091F853 -:10638000BA20082A14BF40F0010020F00100EDE718 -:10639000082902D024F0010403E044F0010400E0E5 -:1063A000FFDF15F0400F18BFFFDFA8F8009098F846 -:1063B0000000072120F0200088F80000404606F089 -:1063C00034FB5146404606F033FD2146404606F078 -:1063D00038FD14F0010F0CD03068062300F10E01D7 -:1063E0000022404606F00AFD3068417B404606F038 -:1063F0005CFB14F0020F1BD03068BBF1000F0BD018 -:1064000000F11C0106230122404606F0F7FC0121A1 -:10641000404606F057FB0BE000F115010623012270 -:10642000404606F0EBFC3068017D404606F04AFB32 -:1064300014F0040F18BFFFDF14F0080F17D0CDF8C9 -:1064400000903068BDF800100223B0F8CE000209B9 -:1064500062F30B01ADF800109DF80110032260F308 -:1064600007118DF801106946404606F0C7FC012F60 -:1064700016D1306890F8770090B1404606F0D4FC11 -:106480003368401CC0B293F87710C0F125008142F8 -:10649000B8BF084682B203F15801404606F0FFFC3F -:1064A0000020002818BFFFDF0020002818BFFFDFF2 -:1064B0000020002818BFFFDFBDE8F88F2DE9F84362 -:1064C000164C2068002808BFFFDF2068417811BB08 -:1064D0000178FF291FD0002780F83170877080F87D -:1064E00037703846FEF72DFDFEF795F9206890F9D4 -:1064F000BD00FEF73DFA0A48FEF744FA0948FEF7E8 -:106500000CFD206890F8240010F0010F0CD025201D -:10651000FEF740FA10E00C20BDE8F883CC00002024 -:10652000684802006548020010F0020F18BF2620DC -:1065300068D000BFFEF72EFA206890F8BA10252028 -:10654000FEF735F9206880F82C70FEF7F4FC20681F -:10655000002190F8BA200846FEF765FB0F210520C0 -:10656000FEF7DAF92068FF4D012690F82E10002979 -:1065700001BF90F82F10002990F8220010F0040FAE -:1065800070D0FCF745FB8046206841468068FDF7E7 -:106590004DF8F54990FBF1F901FB190041424046E5 -:1065A000FCF73FF80146206881604168494441603A -:1065B00005F0F3F801462068426891426DD8C0E9C1 -:1065C00001784FF0010895F82D0005F005F9814696 -:1065D00095F82F00002818BFB9F1000F04D0102142 -:1065E000484605F082FFA0B195F8300000281CBF96 -:1065F00095F82E00002824D0687B05F10E010128B3 -:1066000015D019E010F0040F14BF2720FFDF91D13F -:1066100092E732466E7305F10E014846FFF73FF9E7 -:1066200095F82D1005F10E0005F0CFF909E0487935 -:1066300000F0C000402816D0414605F10E00FFF7DB -:1066400065F9206890F8220010F0040F25D095F825 -:106650002D0005F0CAF85FEA00081ED0102105F0F1 -:1066600044FF40B119E005F0E9F9324605F10E01A9 -:10667000FFF715F9E5E72068324600F11C01C67600 -:106680004046FFF70CF9206800F11C01B74806F0FE -:10669000FEF90121B54806F015FA2068417B0E305D -:1066A000FEF71EF9206890F8B81079B390F8B7207B -:1066B00080F8772000F1980158300DF0BEFD206879 -:1066C00090F82210C1F30011E9B9B0F8CE00022110 -:1066D0000609ADF800606846FDF7DCFA28B1BDF8A0 -:1066E0000000C0F30B00B04204D1BDF80000401C14 -:1066F000ADF800002168BDF80000B1F8CE2060F3CD -:106700000F12A1F8CE20206880F8B870206890F8A9 -:10671000B91059B190F8972080F8572000F178010E -:1067200038300DF08AFD206880F8B9702068B0F824 -:10673000CE10D0F8C020090951FA82F190F8BC209F -:10674000DFF82CC2114463460022E1FB0C3212092F -:106750006FF0240302FB031180F8BC1090F82210A4 -:10676000824E90F81B80C1F3001106F12809002920 -:106770005DD03780317821F020013170408C1328B2 -:1067800037D01CDC10284DD0122846D0FFDF00BFC8 -:1067900005F10E01754806F06CF9697B734806F047 -:1067A00084F92068418C1D2918BF15297ED090F8E6 -:1067B000772000F15801304606F0ADF97EE015284B -:1067C00018BF1D28E2D10121304606F02EF930789D -:1067D000B8F1000F40F020003070206812D000F1B6 -:1067E0001C01304606F053F90121304606F06AF9E3 -:1067F000CEE70021304606F018F9307840F020004E -:106800003070C5E700F11501304606F040F9206808 -:10681000017D304606F056F9BAE70621304606F00B -:1068200004F9B5E70221304606F0FFF8B0E7002290 -:1068300041463046FFF7F2FC206890F877100029B7 -:1068400004BF408C10F0010F05D110F0020F08BFFB -:1068500010F0200F04D0012241464846FFF7DEFC2D -:10686000F07810F03F0F1CBF307910F0100F25D0DA -:10687000304606F0D8F82268014692F82400C0F3AA -:106880008003C0F3400C634400F00100034492F81D -:106890002C00C0F38002C0F3400C624400F0010001 -:1068A0001044181AC0B200F00AFD00E006E00090A3 -:1068B000032304226946304606F0A0FA206890F8C7 -:1068C0002200C0F30010B0B12A4E042130463780B8 -:1068D00006F0ABF805F10E01304606F0CAF8697B08 -:1068E000304606F0E2F8206800F1380190F85720B1 -:1068F000304606F034F904F0C5FF03211E4805F0C8 -:1069000054F8216881F83300002005E61B494860EF -:1069100070472DE9F843194C8046206890F83120E3 -:1069200032B1408C1D2808BFFFDFBDE8F8430AE400 -:10693000012639B390F8BC00FEF72CF8206890F8D7 -:10694000BB102520FDF733FF206801224FF496711C -:1069500090F8BB300020FEF7ADF90948FEF7F4FAD5 -:10696000206810E0A40A002040420F00B00B002075 -:1069700053E4B36E000C0020280C0020CC00002053 -:10698000D80B002005E04670867080F83160BDE8C5 -:10699000F883FE48FEF7D8FA2068002590F8241006 -:1069A00090F82C0021EA000212F0010F18BF012517 -:1069B0000ED111F0020F04D010F0020F08BF022513 -:1069C00006D011F0040F03D010F0040F08BF042507 -:1069D0000027B8F1000F5CD0012D1CD0022D08BF9C -:1069E00026201CD0042D14BFFFDF272017D02068DD -:1069F00090F8BA102520FDF7DAFE206890F82210F2 -:106A0000C1F3001171B1002201234FF496711046B9 -:106A1000FEF750F93DE02520FDF7BCFFE7E7FDF765 -:106A2000B9FFE4E790F8BA3001224FF496710020E4 -:106A3000FEF740F9D548C17811F03F0F1CBF00792F -:106A400010F0100F25D0D14805F0EDFF2368014666 -:106A500093F82420C2F38000C2F3400C604402F09B -:106A6000010200EB020C93F82C20C2F38000C2F369 -:106A70004003184402F001020244ACEB0200C0B231 -:106A800000F01DFC0090032304226946BF4806F075 -:106A9000B5F9206890F82C10294380F82C1090F854 -:106AA000242032EA010112D04670408C132821D0F4 -:106AB0001CDC102808BFBDE8F88312281AD000BFDC -:106AC000C0F30010002818BFFFDFBDE8F883418C39 -:106AD0001D2908BF80F82C70E6D0C1F300110029F1 -:106AE00014BF80F8316080F83170DDE7152818BFD9 -:106AF0001D28E5D1BDE8F84301210846FEF725BB76 -:106B0000A34810B50068417841B90078FF2805D046 -:106B100000210846FFF7FDFE002010BDFEF7BAFA7F -:106B2000FEF799FAFEF794F9FEF7FDF90C2010BD77 -:106B300097490120096881F837007047944909682E -:106B400081F83200704770B5002501F0E3FB0028A2 -:106B50007CD08F4C2068417800260122012905D085 -:106B6000022901D003297DD0FFDF70BD8178022684 -:106B700039B390F8220010F0030F67D08548FEF774 -:106B8000E3F920680122962190F8BB301046FEF709 -:106B900091F800219620FEF723FA2068467090F8BD -:106BA000330020B1FDF751FC4020FEF77FFA20684A -:106BB00090F83400002808BF70BDBDE87040FEF7B3 -:106BC000A1BA418CC1F300129AB1102929D090F8D2 -:106BD000330020B1FDF739FC4020FEF767FA6D481D -:106BE000FEF7B2F9206890F8221011F0040F1DD0C2 -:106BF00027E090F8242090F82C309A4211D190F898 -:106C00007700002808BF11F0010F05D111F0020F25 -:106C100008BF11F0200F52D0BDE870400121084696 -:106C200077E6BDE870400021012072E690F835005B -:106C3000012814BF0328102545F00E010020FEF79F -:106C400084FA206890F83400002801E037E009E079 -:106C500018BFFEF757FA00219620FEF7C1F9206809 -:106C6000467070BD817801B3418C11F0010F21D0C5 -:106C700080F8D02090F8D210B0F8D40000F00BFBD0 -:106C800060680088F9F7C6FFF9F75EFC2068467077 -:106C9000FEF700FAFEF7DFF9FEF7DAF8FEF743F940 -:106CA000BDE87040032001F0C5BC8178BDE87040AC -:106CB00001202EE611F0020F04BFFFDF70BDBDE81A -:106CC0007040FFF740BAFFF73EBA10B5304C20686D -:106CD00090F8341049B13630FEF71FFA18B9216820 -:106CE0007F2081F83600FEF703FA206890F8330021 -:106CF00018B1FEF7EDF9FDF7BCFB01F00BFBA8B1F5 -:106D0000206890F82210C1F3001179B14078022870 -:106D100018BFFFDF00210120FFF7FBFD206841784D -:106D200000291EBF40780128FFDF10BDBDE81040DC -:106D3000FFF709BA2DE9F047154F0E4603283A68C8 -:106D4000518C0BD092F8320001F0010410F10009CF -:106D500018BF4FF001094FF0010805E0C1F34004EE -:106D60004FF000094FF00208FDF704FE054634EA33 -:106D7000090008BFBDE8F0873868064C90F833007A -:106D800098B104F064FD3070014605E0B00B0020BE -:106D9000CC000020280C0020FF2806D0E01C04F0C6 -:106DA0004BFD307804F05EFD05432078C0F3801180 -:106DB0003868027D914209D100F115010622E01CDC -:106DC0000DF0CAF9002808BF012000D0002031785A -:106DD000FF2906D0C0B9386890F82D00884215D137 -:106DE00012E098B12078E11CC0F3801004F0D8FCC8 -:106DF000064604F03BFE38B1304604F0F6FC18B10C -:106E0000102105F072FB08B1012000E00020396874 -:106E100091F8221011F0040F01D0F0B11AE0CDB9B1 -:106E2000FE4890F83500002818BF404515D114F8E9 -:106E3000030B2146C0F3801004F0B2FC044604F0BA -:106E400015FE38B1204604F0D0FC18B1102105F031 -:106E50004CFB10B10120BDE8F0870020BDE8F087B1 -:106E60002DE9F04FEE4D804683B02868002740782A -:106E7000022818BFFFDF28687F2490F8341049B13A -:106E80003630FEF74AF9002804BF286880F83640FB -:106E9000FEF72EF9E34805F0E8FD0646B8F1000FCD -:106EA00000F0A381DF4805F079FF002800F09D8104 -:106EB000FDF72EFD002800F098813046D94EFF21C5 -:106EC000DFF864A34FF000084FF0030B4FF0010907 -:106ED000062880F0B981DFE800F0FDFDFD03FD8F9D -:106EE0008DF8001069460320FFF724FF002828686A -:106EF0007CD090F8341011B190F8001159B1286885 -:106F0000807801283ED0C948FEF71EF8286880F82E -:106F100001B000F06EB99DF8003080F80091017862 -:106F200080F80111FF2B10D000F20312511E1846F9 -:106F300004F064FC002808BFFFDF286890F8021105 -:106F400041F0020180F802110DE03178C1F38011A7 -:106F500080F80211B149D1F88721C0F80321B1F8B6 -:106F60008B11A0F80711286800F2091690F8360076 -:106F70007F2808BFFFDF286890F83610317080F84E -:106F80003640BCE7A94CDAF8049004F12806A4F8CE -:106F900000800721204605F048FD0021204605F02D -:106FA00047FF4946204605F04CFF0623002206F124 -:106FB0000901204605F022FF2868417B204605F0A4 -:106FC00074FD286800F1380190F85720204605F03C -:106FD00066FF2046FDF7B8FF28680122962190F849 -:106FE000BB300020FDF766FE90E7FFE780780028C1 -:106FF00040F0FD8000F0F9B88DF8081002A90520D6 -:10700000FFF798FE0028286800F0EA808278884917 -:10701000002A7DD0A1F11F066C6890F8BB90D6F8CD -:107020000F00C4F80E00B6F813006082707D207562 -:10703000B07D6075B6F81700E082B6F81900608080 -:10704000B6F81B00A080B6F81D00E08004F108002F -:107050000DF064FA96F8240000F01F00207696F8F0 -:107060002400400984F86C0184F8549084F8559009 -:10707000286890F8CC1084F8561090F8BD0084F879 -:1070800057009DF80810686800F079F9022001F0B7 -:10709000D1FAA6F12804DAF80090A4F800800821BB -:1070A000204605F0C2FC0021204605F0C1FE4946FD -:1070B000204605F0C6FE6946304605F0EFFC304636 -:1070C00005F009FD0146204605F0EFFC06230022ED -:1070D000694600E0B8E0204605F090FE694630467B -:1070E00005F0CEFC304605F0E9FC0146204605F0EF -:1070F000E9FC062301226946204605F07FFE204672 -:10710000FDF722FF28680122962190F8BB3000E0AD -:1071100006E00020FDF7CEFD286880F801B068E0A9 -:107120006C6832783F4E607BC2F34012104060734F -:10713000D6F80F00C4F80E00B6F813006082707D18 -:107140002075B07D6075B6F81700E082B6F81900BA -:107150006080B6F81B00A080B6F81D00E0804FF0FC -:10716000010A04F108000DF0D9F996F8240000F0A6 -:107170001F00207696F82400400984F86C0184F8FA -:1071800054A084F855A0286890F8CC1084F85610C4 -:1071900090F8BD0084F857009DF80810686800F06A -:1071A000EEF8286880F8D09090F8D210B0F8D400AB -:1071B00000F071F868680088F9F72CFDF9F7C4F958 -:1071C000286880F80180FDF765FFFDF744FFFDF7B3 -:1071D0003FFEFDF7A8FE012001F02CFA09E000BFF8 -:1071E00090F82200C0F3001008B1012701E0FEF77B -:1071F000AAFF286890F8330018B1FDF769FFFDF782 -:1072000038F91FB100210120FFF783FB286841787E -:1072100000291ABF4178012903B00BE0A40A00201D -:10722000CC000020280C002060480200000C002048 -:10723000470C002008BFBDE8F08F4078032818BF36 -:10724000FFDF03B0BDE8F08F286890F82200C0F39C -:1072500000100028CBD0C8E770B5864C06460D4616 -:107260002068807858B1FDF765FA216803463046FA -:1072700091F8BB202946BDE8704001F048BAFDF7FF -:1072800059FA21680346304691F8BA202946BDE8EC -:10729000704001F03CBA784A137882F8F530A2F8D1 -:1072A000F60082F8F410012082F8F20092F8C4008F -:1072B000002818BF92F8C00082F8F800704778B52F -:1072C00004466C4800230093006890F8BA20082A0E -:1072D00004BF4FF4C87240230DD0042A04BF4FF4FA -:1072E000BF72102307D0022A07BF03F1180204233C -:1072F00003F128020823491D01FB032690F8BC2056 -:107300009DF8001062F3050141F040058DF8005032 -:1073100090F8BB00012804BF9DF8020020F0E000B7 -:107320002AD0022818BFFFDF21D000BF25F080003F -:107330008DF80000C4EB041106FB04F001EB8101A1 -:1073400000EB81044D48844228BFFFDF4C48A0FB7E -:107350000410BDF80110000960F30C01ADF8011034 -:10736000BDF800009DF8021040EA014078BD9DF88C -:10737000020020F0E00020308DF80200D6E72DE971 -:10738000F0413C4D04460E46286890F8D000002895 -:1073900018BFFFDF0027286880F8D2702188A0F886 -:1073A000D4106188A0F8EA10A188A0F8EC10E18858 -:1073B000A0F8EE1094F86C1180F8F01090F82F10EF -:1073C00049B1427B00F10E01012A04D1497901F053 -:1073D000C001402935D090F8301041B1427B00F116 -:1073E0000E01012A04BF497911F0C00F29D0DE3007 -:1073F0000DF082F82348FF2E0078C0F380106076ED -:107400001D48D0F88711C4F81A10B0F88B01E0833A -:1074100028681ED0C0F8E410E18BA0F8E81000F155 -:10742000D802511E304604F0E9F9002808BFFFDFFA -:10743000286890F8D71041F0020180F8D710BDE815 -:10744000F081D0F80E10C0F8DE10418AA0F8E210EA -:10745000D0E7C0F8E470A0F8E870617E80F8D7103B -:10746000D4F81A10C0F8D810E18BA0F8DC10BDE8F1 -:10747000F0810000CC000020A40A0020C4BF03005B -:1074800089888888280C0020FE48406870472DE9CC -:10749000F0410F46064601461446012005F098F9D2 -:1074A000054696F85500FEF7A6F8014696F85500F1 -:1074B000022808BFF44807D0012808BFF34803D0CA -:1074C00004280CBFF248F34808444FF47A7100F2E4 -:1074D000E140B0FBF1F0718840F271225143C0EB02 -:1074E0004100001BA0F5597402F0B6FD002818BF3A -:1074F0001E3CAF4234BF28463846A04203D2AF42BA -:107500002CBF3C462C467462BDE8F0812DE9FF4F4C -:107510008FB0044690F855601C98994640EA0900DF -:10752000039094F86500002790460D280CBF0120B9 -:1075300000200990B9F1000F04BF94F80C01032852 -:107540002BD1099848B3B4F88E01404525D1D4F821 -:107550001401C4F80001608840F2E2414843C4F8D5 -:107560000401B4F85A01B4F8E6100844C4F808015C -:10757000204602F07BFDB4F89201E08294F890017D -:107580006075B4F894016080B4F89601A080B4F8F6 -:107590009801E080022084F80C01D4F864010C907A -:1075A000B4F8E6B0B4F85801D4F860A1D4F8541196 -:1075B0000691B9F1000F03D094F8201149B193E07E -:1075C00004F1E00107917431089104F5A075091DDB -:1075D00007E004F59A710791091D089104F5927569 -:1075E000091D0A91B4F85810A8EB0000A8EB01019E -:1075F00009B200B20091002805DAD4F850010690D3 -:1076000001200390084694F80C11002971D001293B -:1076100000F03782022900F05F81032918BFFFDFE5 -:1076200000F0728239460698FAF7FBFF08990126A6 -:1076300040F2712208600A98A0F8008000202870AB -:107640002E7108980068A8606188D4F8140151432D -:10765000C0EB41009049A0F54D70886149698142B5 -:1076600087BF07990860079801600798616A0068FA -:10767000084400F5D270E86002F0EEFC10B1E86852 -:107680001E30E8606E71B4F8D000A0EB080000B2C4 -:107690000028C4BF03206871099800281C9800F0D6 -:1076A000A682C0B1B4F8F81000290CBF0020B4F8CD -:1076B000FA00A4F8FA0094F8FC20401C50438842D9 -:1076C00009D26879401E002805DD6E71B4F8FA0011 -:1076D000401CA4F8FA00B9F1000F00F0AB8294F856 -:1076E0002001002800F0A28213B00220BDE8F08F34 -:1076F000FFE7BAF1000F08BFFFDF94F855106148AB -:1077000090F8280005F079F90C90E18A40F2712098 -:1077100041430C98002200EB41011098002806D04C -:1077200000FB01F15D48B1FBF0F000F10102C4F88B -:107730001021608840F2E24100FB01F210994FF005 -:10774000000006D0554801FB02F1B1FBF0F000F15A -:107750000100C4F8140186B221464FF00100D4F8AC -:1077600028B005F035F8074694F85500FDF743FFBB -:10777000014694F85500022808BF434807D0012865 -:1077800008BF424803D004280CBF41484148084480 -:1077900000F2E1414FF47A70B1FBF0F1608840F201 -:1077A00071225043C1EB4000801BA0F5597602F0D6 -:1077B00053FC002818BF1E3EBB4534BF3846584610 -:1077C000B04203D2BB452CBF5E463E46666294F88B -:1077D0005500FDF72EFF4FF47A7600F2E140B0FB42 -:1077E000F6F000EB0A0794F85500FDF722FF01467A -:1077F00094F85500022808BF234A07D0012808BF83 -:10780000224A03D004280CBF214A224A01EB020B72 -:10781000FDF7F1FE584400F2DB514FF47A70B1FBF2 -:10782000F0F1E08A40F2712242430C98D4F810B192 -:1078300000EB4200401AA0EB0B003844A0F12007F7 -:10784000607D40F2E24110FB01F0049094F8556035 -:107850003046FDF7D0FE0146022E08BF0A4807D089 -:10786000012E08BF094803D0042E0CBF0848094860 -:10787000084400F2E1414FF47A70B1FBF0F000EB04 -:107880004B010DE0500C002004360200A22402003F -:10789000D0FB0100C0D40100D400002040420F0002 -:1078A000049801EB000B3046FDF799FE584400F1B7 -:1078B0006201FD48416194F85500FDF7BAFE00F2FF -:1078C000E1414FF47A70B1FBF0F05044381AB0F552 -:1078D0003D7F38BFFFDFA5E6E08A40F27121D4F892 -:1078E0000421484302EB400210980021002806D0F2 -:1078F00000FB02F1ED48B1FBF0F000F10101C4F82A -:107900001011618840F2E24001FB00F210994FF043 -:10791000000006D0E54801FB02F1B1FBF0F000F1F8 -:107920000100C4F8140186B221464FF00100D4F8DA -:1079300028A004F04DFF074694F85500FDF75BFEC4 -:10794000014694F85500022808BFD94807D00128FD -:1079500008BFD84803D004280CBFD748D7480844EC -:1079600000F2E1414FF47A70B1FBF0F1608840F22F -:1079700071225043C1EB4000801BA0F5597602F004 -:107980006BFB002818BF1E3EBA4534BF3846504630 -:10799000B04203D2BA452CBF56463E466662BBF1A2 -:1079A000000F2ED11C9860B394F855603046FDF757 -:1079B00022FE022E08BFBE4907D0012E08BFBD49D6 -:1079C00003D0042E0CBFBC49BC49084400F2E1417D -:1079D0004FF47A70B1FBF0F0D4F81011E38A084448 -:1079E00040F27121D4F80421594302EB41010F1AEE -:1079F0003046FDF7F4FD0C99081A3844A0F1200731 -:107A00000AE0E18A40F27122D4F80401514300EB0C -:107A10004100D4F81011471AD4F80821D4F8001105 -:107A2000D4F8100101FB020B607D40F2E24110FB33 -:107A300001FA94F855603046FDF7DDFD0146022E4F -:107A400008BF9B4807D0012E08BF9A4803D0042ED8 -:107A50000CBF99489948084400F2E1414FF47A700C -:107A6000B1FBF0F000EB4B0082443046FDF7B7FD70 -:107A7000504400F160018C484161012084F80C0100 -:107A8000D0E5628840F27123D4F814115A43C1EB57 -:107A9000420202FB00F70098D4F800C10BEB000291 -:107AA000D4F80801D4F81031121A0CFB0030521E21 -:107AB00002FB010B607D40F2E24110FB01FA94F8F9 -:107AC00055000646FDF797FD0146022E08BF78488F -:107AD00007D0012E08BF774803D0042E0CBF76488C -:107AE0007648084400F2E1414FF47A70B1FBF0F0BF -:107AF00000EB4B0082443046FDF771FD504400F12D -:107B00006001694841618DE5628840F27123D4F8D3 -:107B100014115A43C1EB420101FB00F794F86400D1 -:107B200024281CBF94F8650024280BD1B4F88E01DA -:107B3000A8EB000000B2002804DB94F891010028B3 -:107B400018BF0646039850B3BBF1000F27D10C981D -:107B5000002814BFBAF1000FFFDF94F85500FDF7BD -:107B60004AFD022E08BF524907D0012E08BF5149D5 -:107B700003D0042E0CBF50495049084400F2E141A3 -:107B80004FF47A70B1FBF0F03F1A94F85500FDF70E -:107B900026FD01460C98401A3844A0F120070098B1 -:107BA000D4F81411584400FB01FA3046FDF723FDC8 -:107BB0000146022E08BF3E4807D0012E08BF3D48AF -:107BC00003D0042E0CBF3C483C48084400F2E1417D -:107BD0004FF47A70B1FBF0F000EB4A0A3046FDF743 -:107BE000FEFC504400F160012F4841611AE5002875 -:107BF0007FF458AD94F80C0100283FF46CAD618817 -:107C000040F27122D4F814015143C0EB41012846DF -:107C100004F08DFD0004000C3FF45DAD1D990029BA -:107C200018BF0880012013B0BDE8F08F94F85C0104 -:107C3000FBF748FB94F85C012946FBF731FA002872 -:107C40001CBF89F0010084F82101002013B0BDE8B9 -:107C5000F08F2DE9F04F1A4C074683B02078894603 -:107C6000114E00254FF00208032804BF207BB842C4 -:107C70007ED1606830612078032818BFFFDF0327BA -:107C8000B9F1080F7FD2DFE809F0041D2828237E10 -:107C90007E796562FEF712FC002818BFFFDFB7701F -:107CA00003B0BDE8F08F0000D400002040420F0078 -:107CB00004360200A2240200D0FB0100C0D401005F -:107CC000500C0020FEF71CFF002818BFFFDFE7E77D -:107CD00003B0BDE8F04FFDF75CBA2775257494F842 -:107CE0002C00012658B14FF47A71A069FAF799FC7B -:107CF000A061002104F1100004F019FD1AE0012137 -:107D00006846FBF7BDFF9DF8000042F210710002CB -:107D1000B0FBF1F201FB1205FDF7F4FF0544294623 -:107D2000A069FAF77EFCA061294604F1100004F076 -:107D3000FEFC461C208C411C0A293CBF3044208498 -:107D4000606830B1208C401C0A2828BF84F8158058 -:107D500000D267753046FEF771F90028A0D0607A2E -:107D600000289DD1207B04F11001FBF799F901E077 -:107D70000BE008E0002808BFFFDF91E7207BFAF75F -:107D800028FF25708CE7FFDF8AE7202F28BFFFDF61 -:107D9000DFF804A407213AF81700F8F709FE0400F9 -:107DA00008BFFFDF202F28BFFFDFFB48218830F806 -:107DB0001700884218BFFFDF01273461B9F1080FAF -:107DC00080F05481DFE809F0049EA6A6A1F0F0EF50 -:107DD000C4F86051F580C4F8645194F8210138B9B1 -:107DE000FAF716FFD4F82C11FBF720FC00281BDC57 -:107DF000B4F81E11B4F85800814206D1B4F8D4107A -:107E0000081AA4F8D600204605E0081AA4F8D600FF -:107E1000B4F81E112046A4F85810D4F84811C4F83C -:107E20002C11C0F850111DE0B4F81C11B4F8580022 -:107E3000091AA4F8D610B4F81C112046A4F858105A -:107E4000D4F82C11C4F84811C4F85011D4F83411E6 -:107E5000C4F8E010D4F83811C4F85411B4F83C1147 -:107E6000A4F8581101F0ACFFFAF7ACFE94F855A055 -:107E700081465046FDF7BFFBBAF1020F08BFC74964 -:107E800009D0BAF1010F08BFC54904D0BAF1040FF7 -:107E90000CBFC449C44908444FF47A7100F2E14070 -:107EA000B0FBF1F1D4F8140140F271220144608872 -:107EB0005043C1EB4000A0F1300AB9F1B70F98BFB1 -:107EC0004FF0B7092146012004F082FC4844AAEB98 -:107ED0000000A0F21939A2462146012004F078FCE6 -:107EE000DAF824109C30814288BF0D1AC6F80C9035 -:107EF0004D4538BFA946C6F8089084F8207186F829 -:107F00000280CDE602F0A3F801E0FDF742F984F823 -:107F10002071C5E6FAF77CFED4F8502101461046E0 -:107F2000FBF784FB48B1628840F27123D4F8141146 -:107F30005A43C1EB4201B0FBF1F094F865100D29F2 -:107F40000FD0B4F85820B4F81E1113189942AEBFE0 -:107F5000481C401C1044A4F81E0194F8220178B972 -:107F600005E0B4F81E01401CA4F81E0108E0B4F8B6 -:107F70001E01B4F8D410884204BF401CA4F81E01AE -:107F8000B4F85A01DFF82492401CA4F85A01B4F85E -:107F90008000B4F87E10401AB4F85810401E08440F -:107FA0001FFA80FB24E053E060E000BF96F80080F9 -:107FB000B8F10C0F28BFFFDF39F8188094F86CA1D6 -:107FC000BAF10C0F28BFFFDF39F81A000023404434 -:107FD00081B202A8CDE90050B4F81E212046FFF777 -:107FE00095FA00283FF45CAE012818BFFFDF27D0C8 -:107FF000B4F81E01ABEB000000B20028D6DA08206E -:1080000084F8740084F87370204601F02AFB84F829 -:108010000C5194F85C514FF6FF77202D00D3FFDF11 -:108020005D4820F8157094F85C01FAF7D2FD202025 -:1080300084F85C01307903B0BDE8F04FF3F7A6BED9 -:10804000B4F81E01BDF808100844A4F81E01CFE7DB -:1080500094F80C01042818BFFFDF84F80C5194F841 -:108060005C514FF6FF77202DDAD3D8E7FFDF17E614 -:1080700010B54F4C207850B101206072FEF75EFDC4 -:108080002078032805D0207A002808BF10BD0C20D6 -:1080900010BD207BFBF716F9207BFBF760FB207BF4 -:1080A000FAF797FD002808BFFFDF0020207010BD01 -:1080B0002DE9F04F3E4F83B0387801244FF000088F -:1080C00040B17C720120FEF739FD3878032818BFD3 -:1080D000387A0DD0DFF8DC9089F803406946072034 -:1080E000F8F7EFFB002818BFFFDF4FF6FF7440E002 -:1080F000387BFBF7E7F8387BFBF731FB387BFAF787 -:1081000068FD002808BFFFDF87F80080E2E70298DB -:1081100000281CBF90F80C1100292AD00088A0422A -:108120001CBFDFF874A04FF0200B4AD00721F8F7EE -:108130003FFC040008BFFFDF94F85C01FBF70FFB76 -:1081400084F80C8194F85C514FF6FF76202D28BFFF -:10815000FFDF2AF8156094F85C01FAF73AFD84F81D -:108160005CB169460720F8F7ACFB002818BFFFDFB9 -:1081700022E06846F8F783FB0028C8D021E0029887 -:1081800000281CBF90F80C11002915D00088A0F51C -:108190007F41FF39CAD114E0840C0020043602006C -:1081A000A2240200D0FB0100C0D4010084480200D8 -:1081B000500C0020D40000206846F8F760FB00282F -:1081C000DDD089F8038087F82C8087F80B8003B016 -:1081D0000020BDE8F08F70B50446FD4890F800041B -:1081E000FC4D400995F800144909884218BFFFDF8B -:1081F00095F8140D4009F84991F80014490988428E -:1082000018BFFFDFF549002001220C7188700A7049 -:108210004870C870F2490870BDE8704048E7EF49FF -:10822000087070472DE9F843ED4C064688462078E3 -:1082300000285CD1EB48FAF772FC2073202856D056 -:10824000032766602770002565722572AEB1012193 -:1082500006F1FC00FBF73DFD0620F8F751FB8146D7 -:108260000720F8F74DFB96F8FC104844B1FBF0F2FC -:1082700000FB1210401C86F8FC00FAF7A3FCDA4958 -:10828000091838BF40F2F65000F23D1086B2FDF7F3 -:10829000F9FBE061FDF736FD4FF0010950B384F8BA -:1082A0000A9001216846FBF7EBFC9DF8000042F2C2 -:1082B00010710002B0FBF1F201FB12000644FAF764 -:1082C000A7FC3146FAF7ADF9A061277567752574EB -:1082D000207B04F11001FAF7E3FE002808BFFFDF5E -:1082E00025840020FEF72AFC0020BDE8F8830C203E -:1082F000BDE8F883FAF78CFC3146FAF792F9A061F1 -:10830000A57284F82C90A8F226502063DDE7B349CB -:1083100048707047B24810B5417A0124002918BF4F -:10832000002409D190F82C1031B1416A006B8142D0 -:1083300084BF0024FEF7FCFB204610BD70B5A74C9F -:108340000546E088401CE080D4E902016278D5F857 -:108350006061002A1CBF324604F019FAA060864210 -:1083600008D895F80C01012804D0E078002804BF53 -:10837000012070BD002070BD70B50C4640F2E24196 -:1083800000FB01F52046FDF736F9022C08BF97499E -:1083900007D0012C08BF964903D0042C0CBF954987 -:1083A000954908444FF47A7100F2E140B0FBF1F0D6 -:1083B00000F54D7085428CBF281A002070BD2DE954 -:1083C000F04F83B04FF00009044680F8209190F8F8 -:1083D000DE00002807BF94F80C01032803B0BDE8B5 -:1083E000F08FFAF715FCD4F8502101461046FBF740 -:1083F0001DF90028DCBF03B0BDE8F08F628840F2B1 -:108400007123D4F814115A43C1EB4201B0FBF1F0CF -:10841000411CB4F858000144A4F81C11B4F8D4105D -:10842000B4F81C21891A09B20029DCBF03B0BDE8E9 -:10843000F08F012184F82211B4F88010B4F87E2066 -:108440006E4F891A491E084485B2DFF890A10DF1DC -:10845000080B25E09AF800600C2E28BFFFDF37F8E4 -:10846000166094F86C81B8F10C0F28BFFFDF37F865 -:108470001800CDE9009B3044B4F81C2181B20123DF -:108480002046FFF743F8002804BF03B0BDE8F08F93 -:1084900001280FD0022812BFFFDF03B0BDE8F08F24 -:1084A000B4F81C01281A00B20028BCBF03B0BDE814 -:1084B000F08FCFE7B4F81C01BDF808100844A4F809 -:1084C0001C01EDE72DE9F0430422002583B00629C5 -:1084D0007DD2DFE801F0074B03191951044680F8FB -:1084E0000C2107E004463D48C178002918BF84F8F4 -:1084F0000C210CD0FAF798FAA4F85A51B4F85800A5 -:10850000A4F81E0184F8225103B0BDE8F083067878 -:108510000C2E28BFFFDF394F94F80C0137F8166096 -:108520004FF00109032807D00128E3D194F86C81AA -:10853000B8F10C0F0AD308E0C4F80851C4F8005190 -:1085400094F86C81B8F10C0F00D3FFDF37F81800F6 -:10855000CDE90095304481B2B4F8D4200023204600 -:10856000FEF7D4FF002818BFFFDFC3E7032180F820 -:108570000C1103B0BDE8F0830546876AB0F814011A -:10858000294686B2012004F023F9044695F85500E7 -:10859000FDF731F895F85510022908BF134907D0A7 -:1085A000012908BF124903D004290CBF11491249FF -:1085B00008444FF47A7100F2E140B0FBF1F06988B1 -:1085C00040F271225143C0EB4100801B18E02DE0C6 -:1085D00001E000E00BE000E019E000E0D400002042 -:1085E000500C0020537C01000AFAFFFF0436020001 -:1085F000A2240200D0FB0100C0D401008448020084 -:10860000A0F5597601F028FD002818BF1E3EA742AC -:1086100034BF20463846B04228BF344602D2A74273 -:1086200028BF3C466C6203B0BDE8F083FFDF03B0B7 -:10863000BDE8F083F8B5894C0246874F0025616894 -:10864000606A052A48D2DFE802F0032F34373E0083 -:10865000A07A002660B101216846FBF71BFB9DF85C -:10866000000042F210710002B0FBF1F201FB1206B1 -:10867000FDF748FB8119A069F9F7D3FFA0612574C4 -:1086800003206075607A38B9207B04F11001FAF795 -:1086900007FD002808BFFFDF2584FAF7C5F9387900 -:1086A000BDE8F840F3F772BBBDE8F840002100F0E8 -:1086B0006DB8C1F86001F8BDD1F86001BDE8F840BF -:1086C000012100F063B884F82C50FAF7ADF938793D -:1086D000BDE8F840F3F75ABBFFDFF8BD70B55E4C5C -:1086E000A178022906BFE188002970BD2569C5F877 -:1086F000640195F85500FCF772FFD5F86411081A6B -:10870000A1680144A160E1680844E06070BD70B5F3 -:108710000546514890F802C0BCF1020F06BF00693F -:1087200000F5B0744E4C002904BF256070BD4FF4B5 -:108730007A7601290DD002291CBFFFDF70BD1046DB -:10874000FCF768FF00F2E140B0FBF6F0281A206069 -:1087500070BD1846FCF76DFF00F2E140B0FBF6F08B -:10876000281A206070BD3D48007800281CBF0020FA -:10877000704710B50720F8F7B5F880F0010010BD7C -:1087800036480078002818BF012070472DE9F047CF -:10879000324C82B0002584F82C50D4F8188084F82C -:1087A0002810E572814625700127277229466068E6 -:1087B00003F030FB6168C1F85081267B81F85C6171 -:1087C000C1F86091C1F85481B1F80080202E28BF13 -:1087D000FFDF244820F81680646884F80C51DFF825 -:1087E0007880A4F8585198F800600C2E28BFFFDF5D -:1087F000DFF8749039F816A094F86C610C2E28BF3D -:10880000FFDF39F816000023504481B200951A4664 -:1088100020460195FEF77AFE002818BFFFDFC4F856 -:108820000851C4F8005184F80C71A4F81E51A4F842 -:108830001C5184F82251B4F85800401EA4F8580086 -:10884000A4F85A51FAF7F0F898F8040002B0BDE81D -:10885000F047F3F79BBA0000D4000020500C002032 -:10886000740C0020840C00208448020070B5FE4C7B -:1088700021690A88A1F8FC2181F8FA0191F85400D5 -:10888000012808BF012503D0022814BFFFDF0225FD -:10889000206980F8FE5190F85500012808BF012595 -:1088A00003D0022814BFFFDF02252069012180F8D0 -:1088B000FF5180F8F811002180F8A4112079BDE85B -:1088C0007040F3F763BA2DE9F04FE74C83B0A0791D -:1088D00010F0010F04BF03B0BDE8F08FA0690123C1 -:1088E0000521C578206990F86520583003F0B5FE61 -:1088F00068B1A81E0A2806D2DFE800F009090505BC -:10890000090905050909A07840F00800A070A078C1 -:1089100000281CBF03B0BDE8F08FA06920274FF0EE -:10892000020890F80390B9F1000F1CBFB9F1010FD4 -:10893000B9F1160F1ED1206990F8640003F076FE9D -:10894000C0B1216991F864001F2813D0202808D0F5 -:10895000B9F1160F0CBFA77084F8028003B0BDE810 -:10896000F08F262081F86400B9F1160F1CBF2A2071 -:10897000FFF77CFF47F6FE7A012600254FF0280B13 -:10898000B9F10C0F00F049810BDCB9F10C0F80F04C -:108990005884DFE809F068412BD9F6F6F5F4F3F6D0 -:1089A000AAD0B9F1150F00F0518211DCB9F1110F05 -:1089B00000F0BE83B9F1120F00F0C981B9F1130FB5 -:1089C00000F0B881B9F1140F00F0D58100F039BC86 -:1089D000B9F1160F00F06C82B9F1180F00F0CE82D9 -:1089E000B9F1FF0F00F0268400F02BBC20690123B1 -:1089F000194690F86720583003F02FFE002840F009 -:108A00002284A06904F018FB216981F87201072013 -:108A100081F8670000F017BC20690123002190F85D -:108A20006520583003F019FE002800F0BA83A069D1 -:108A300004F0FFFA2169A1F88E01B1F85820801ADC -:108A400000B28245A8BF0028DCBF81F874B081F86D -:108A5000736040F3F88301F5C871A06904F0E4FA8B -:108A60000B2021693DE020690123002190F8652059 -:108A7000583003F0F2FD002800F09383A06904F061 -:108A8000AFFA002800F0DD83A0692269B0F80D106C -:108A9000A2F88E11B2F85830C91A09B28A45A8BF97 -:108AA0000029DCBF82F874B082F8736040F3CB8396 -:108AB000017982F89011B0F80510A2F8921104F033 -:108AC00082FA2169A1F89401A06904F07FFA216972 -:108AD000A1F89601A06904F080FA2169A1F8980133 -:108AE0000D2081F8650000F0AEBB20690123002154 -:108AF00090F86520583003F0B0FD002820690BD0B5 -:108B0000A0F88A5090F88C10491C80F88C10102125 -:108B100080F8651000F097BB90F8652001230521CF -:108B2000583003F09AFD00281CBF0820A07040F0C8 -:108B30008A8300F036BB206990F86510112908BFC0 -:108B4000122140F09C82E3E720690123002190F884 -:108B50006520583003F081FDA0B9206990F86520A8 -:108B6000122A0FD001230521583003F076FD00288A -:108B700018BF082000F0158300F097B9B7E0F6E2BF -:108B800036E05EE3206990F88E1031B9A0F88A5083 -:108B900090F88C10491C80F88C1000F1E801A06955 -:108BA00004F063FA206900F1C001A06904F068FADA -:108BB000206990F8C001002818BFFFDF20690188F4 -:108BC000A0F8C21100F5E271A06904F03CFA206936 -:108BD00000F5E671A06904F03EFA206980F8C061F2 -:108BE000142180F865102079F3F7D0F800F02BBB42 -:108BF000206990F86510172940F0418290F88C1098 -:108C0000491E49B280F88C100029B8BFFFDF1B2035 -:108C1000216981F8650000F016BB206990F86610A4 -:108C200011F0020F09D090F8642001230821583078 -:108C300003F013FD002800F0B482206990F8900042 -:108C400010F0020F18D1A06904F02EFA216981F802 -:108C50009100A069B0F80520A1F89220B0F80700B3 -:108C6000A1F8940002E00000F000002091F89000CC -:108C700040F0020081F89000206990F8901011F007 -:108C8000010F05D0206990F8641006291CD114E06A -:108C900090F8660010F0020F18BFFFDF206990F80F -:108CA000661041F0020180F86610A0F88A5090F832 -:108CB0008C10491C80F88C10E4E780F8645080F830 -:108CC00088502079F3F762F8206990F88C11042914 -:108CD00040F0B98280F88C512079F3F757F8206979 -:108CE00090F86410002940F0AE8200F01EBA2069AE -:108CF00090F8660010F0010F77D16946A06904F082 -:108D0000DAF99DF8000000F02501206980F896103E -:108D10009DF8011001F0410180F89710A0F88A50E9 -:108D200090F88C10491C80F88C1090F8661041F077 -:108D300001011CE020690123092190F864205830CA -:108D400003F08BFC002840F0248200F02ABA20694E -:108D500090F8661011F0040F40F02382A0F88A50BA -:108D600090F88C2041F00401521C80F88C2080F88F -:108D7000661000F068BA206990F8660010F0300FB5 -:108D800033D1A06904F0B4F9002800F05A822769B1 -:108D9000A06904F0A9F938872769A06904F0A0F94F -:108DA00078872769A06904F0A1F9B8872769A069C5 -:108DB00004F098F9F887A07910F0020F03D06069E9 -:108DC000C078142812D0206990F864101C290DD0A6 -:108DD00090F84E1001290CD090F89B11002904BF87 -:108DE00090F89A1100290CD003E05BE0206980F82C -:108DF0004E60206990F8661041F0100180F866100E -:108E00001AE090F8661041F0200180F866100288A0 -:108E1000A0F8E021028FA0F8E221428FA0F8E4211F -:108E2000828F00F5D671A0F8E621C08F888781F87F -:108E300032602079F2F7AAFF2069A0F88A5090F8F2 -:108E40008C10491C80F88C1000F0FDB920690123BA -:108E50000A2190F86420583003F0FFFB10B3A0699A -:108E600004F046F9A8B12669A06904F03DF93087FD -:108E70002669A06904F034F970872669A06904F0B6 -:108E800035F9B0872669A06904F02CF9F08701F064 -:108E9000EDFA206980F8885080F8645001F0B6FA45 -:108EA00000F0D1B9A07840F00100A07000F0CBB97B -:108EB000206901230B2190F86520583003F0CDFB89 -:108EC00010B1A77000F0BFB920690123002190F80C -:108ED0006520583003F0C1FB002800F06281206952 -:108EE00090F864002428ECD0A06904F01CF9002854 -:108EF00000F0A781206990F8961041F0040180F8F5 -:108F00009610A1694A7902F0070280F85120097988 -:108F100001F0070180F8501090F8A531002B04BF34 -:108F200090F8A431002B1CD190F855C000F15403E7 -:108F30008C4502BF1978914280F87D6011D000F510 -:108F4000D67180F8F2610288A0F8F42190F85020E0 -:108F500080F8F62190F8510081F84B002079F2F763 -:108F600015FF2069212180F86510A0F88A5090F83B -:108F70008C10491C80F88C1000F065B9206990F8BD -:108F80006410202914BF0027012790F865102229BA -:108F900008BF00F1650804D0002F18BF00F1640875 -:108FA0006DD090F8961041F0040180F89610A069F9 -:108FB00004F0DBF8F0B3D4F81890484604F0C9F890 -:108FC0000090484604F0C9F8814603F03CFC0100DB -:108FD00018D0206990F854208A4213D090F8A43118 -:108FE00023B190F8A63113EA090F4BD0002F04BF2C -:108FF00090F8513013EA090F01D18A4242D890F813 -:10900000A401B8B1DDF80090484603F01CFC78B12B -:10901000216991F8552082420AD091F8A40120B12B -:1090200091F8A70110EA090F2CD091F8A40108B11A -:109030006A4600E026E0A169206903F013FCE8B36A -:10904000A06904F090F82169A1F88E01B1F85820C8 -:10905000801A00B28245A8BF0028DCBF81F874B036 -:1090600081F8736052DD9DF8000081F890019DF851 -:10907000010081F89101242088F8000046E084F87E -:109080000280E0E0206990F8A40100281CBF1E20A7 -:10909000FFF7ECFBB7B1A0692169C07881F8CA007D -:1090A00006FA00F010F0807F08BFFFDF0A21206978 -:1090B00080F8641090F88800002800E014E008BFF1 -:1090C000FFDF0DE088F80050216991F88C00401E08 -:1090D00040B281F88C000028B8BFFFDF01F07BF9B7 -:1090E000206980F87D50AEE0206990F8A40120B19D -:1090F0000020FFF7BBFB88F80050206900F16501F4 -:1091000080F87D50884508BF80F86550206900F1DF -:109110006501884509D190F88C10491E49B280F844 -:109120008C100029B8BFFFDF8DE080F888508AE0FE -:10913000206990F8961041F0040180F89610A0691B -:1091400004F02FF816287ED1206990F864002028BA -:1091500002D0262805D076E0A06904F026F8FFF7B3 -:1091600085FB206980F8645080F888506BE02069A6 -:1091700090F864200E2A03D1A1690979122902D03E -:109180001C2A1AD10FE001230921583003F065FA97 -:1091900038B1206980F87C5080F8885080F864509D -:1091A00051E0A6704FE0A1690979142904BF80F845 -:1091B000645080F888503FF471AE202A03D1A16931 -:1091C0000979162914D0262A03D1A169097916290B -:1091D0000ED0A1690979172904BF90F86520222AC9 -:1091E00013D0E2691AB1FF2908BF80F886612AE02E -:1091F00080F8645080F8885090F86500212818BFE6 -:109200001A2020D0FFF732FB1DE080F8655090F85F -:109210008C10491E49B280F88C100029B8BFFFDFBE -:10922000206980F87D5090F8A401002818BF002024 -:1092300009D0E7E7E06900281CBF206980F8866153 -:1092400001D101F0C8F82069D0E92A12491C42F185 -:109250000002C0E92A1203B0BDE8F08F70B5FB4EE2 -:1092600005460C46306990F8CB00FE2818BFFFDF9A -:1092700032690020002C82F8CB501CBFA2F88A0073 -:1092800070BDA2F88400012082F8880070BD30B55E -:1092900085B005466846FCF73EFA002808BFFFDFA8 -:1092A000222100980BF003F80321009803F040FE00 -:1092B0000098017821F010010170294603F066FE44 -:1092C000E24C0D2D04BF0621009830D00BDCA5F137 -:1092D00002000B2819D2DFE800F0201863191926C4 -:1092E000187018192C00152D7BD008DC112D2DD0ED -:1092F000122D18BF132D09D0142D30D005E0162DD6 -:1093000046D0172D6BD0FF2D6AD0FFDFFCF716FA81 -:10931000002808BFFFDF05B030BD2069009990F834 -:10932000CC000871F2E72169009891F8CC10017126 -:10933000ECE7E26800981178017191884171090A9F -:1093400081715188C171090A0172DFE70321009818 -:1093500003F025FF0621009803F025FFD6E72069DA -:10936000B0F84410009803F0ABFE2069B0F8461046 -:10937000009803F0A9FE2069B0F84010009803F0AF -:10938000A7FE2069B0F84210009803F0A5FEBDE7E3 -:109390002069009A90F8A611117190F8A7014BE08E -:1093A000206900F1F001009803F06EFE206900F1E1 -:1093B000C401009803F072FEA8E7A549D1E90001B5 -:1093C000CDE90201206902A990F8960000F025007D -:1093D0008DF80800009803F09CFE97E701E019E083 -:1093E0002CE02069B0F84010009803F071FE20696D -:1093F000B0F84210009803F06FFE2069B0F84410F6 -:10940000009803F05DFE2069B0F84610009803F064 -:109410005BFE7BE7206990F8A41139B1009990F8C0 -:10942000A6210A7190F8A70148716FE7009A90F899 -:109430005410117190F85500507167E7206990F849 -:109440008721D0F88811009803F0AEFD5EE770B573 -:109450000C4605464FF4007120460AF04AFF25806D -:1094600070BDF7F7AEBB2DE9F0410D460746072169 -:10947000F7F79EFA040008BFBDE8F08194F8AC014C -:109480000026B8B16E700920287094F8AC0178B14C -:10949000268484F8AC61D4F8AE016860D4F8B201D7 -:1094A000A860B4F8B601A88194F8AC010028EFD107 -:1094B0002E7144E094F8B801002837D094F8B80130 -:1094C0000D2818D00E2818BFFFDF38D12088F7F7F5 -:1094D000A1FB0746F7F74DF8A0B96E700E20287073 -:1094E00094F8BA0128712088E88084F8B861384679 -:1094F000F7F739F823E02088F7F78CFB0746F7F7F2 -:1095000038F810B10020BDE8F0816E700D20287091 -:1095100094F8BA0128712088E88094F8BE01287276 -:1095200084F8B8613846F7F71EF808E094F8F001BF -:1095300040B16E701020287084F8F061AF80012077 -:10954000BDE8F08194F8C00190B16E700A202870D7 -:109550002088A880D4F8C401D4F8C811C5F8060042 -:10956000C5F80A10B4F8CC01E88184F8C061E6E7D8 -:1095700094F8CE0140B16E701A202870B4F8D00172 -:10958000A88084F8CE61DAE794F8EA0180B16E70C1 -:109590001B20287094F8EA010028D0D084F8EA61F2 -:1095A000D4F8EC01686094F8EA010028F6D1C6E727 -:1095B00094F8D2012F1DA0B16E701520287094F878 -:1095C000D201002818BF04F5EA75B8D084F8D2613A -:1095D000294638460AF099FF94F8D2010028F5D1BF -:1095E000ADE794F8DE0150B16E701D20287084F84C -:1095F000DE6104F5F07138460AF087FF9FE794F8C2 -:10960000F20138B11E20287084F8F261D4F8F40118 -:10961000686094E794F8F801002808BFBDE8F0817D -:109620006E701620287094F8F801002887D000BFCB -:1096300084F8F861D4F8FA016860B4F8FE01288172 -:1096400094F8F8010028F3D179E70000F000002039 -:109650009C480200FE4AD0600020D0611062117167 -:109660007047002180F8641080F8651080F8681059 -:1096700090F8DE1011B10221FEF724BF0321FEF79E -:1096800021BF2DE9F047F24C814686B020690D4696 -:109690000088F7F7D1FA070008BFFFDFA07828435A -:1096A000A070A0794FF0000510F0200F20691CBFBA -:1096B000A0F87E5080F8E45004D1B0F87E10491C28 -:1096C000A0F87E102069012690F86A1039B990F848 -:1096D000652001230621583002F0BFFF48B3E0881F -:1096E00010F4006F07D0206990F86A10002918BFA5 -:1096F000A0F876501DD12069B0F87610491C89B2C7 -:10970000A0F87610B0F878208A422CBF531A0023B4 -:10971000B4F808C00CF1050C634598BF80F87C6074 -:10972000914206D3A0F8765080F8F0612079F2F7E4 -:109730002DFBA0794FF0020A10F0600F11D02069C4 -:1097400090F8681011B1032906D00AE080F868602B -:109750000121FEF7B7FE04E080F868A00121FEF7C2 -:10976000B1FE206990F86810012905D1E18811F453 -:10977000807F18BF80F868A04FF00808B9F1000F8B -:1097800040F09981E28812F4007F18BFA0F8F850E9 -:1097900004D1B0F8F810491CA0F8F81012F0080F26 -:1097A00050D0A17800294DD190F8CB00FE2808BFF9 -:1097B000FFDFFE21206980F8CB1090F86510192991 -:1097C00007D0206990F864101F2911D027292AD0CA -:1097D0002FE080F88D5090F88C10491E49B280F827 -:1097E0008C100029B8BFFFDF206980F86550E8E7DA -:1097F00090F8650002F01AFF80B12069262101234C -:1098000080F8641090F865200B21583002F025FF95 -:10981000002804BF2A20FFF729F80AE02169202048 -:1098200081F8640005E080F8856180F8645080F874 -:109830008850206990F86710082904BF84F800A0B8 -:1098400080F8CBA0FFF73FF8A07910F0040F07D005 -:10985000A07828B9206990F86700072808BF26700B -:1098600000F038FCA07910F0100F09D0A07838B9BA -:10987000206990F865100B2904BF0C2180F8651051 -:10988000E07810F0080F11D020690123052190F82D -:109890006520583002F0E1FE28B184F8028020698A -:1098A00080F8B85102E0002001F0F2FAE0690028E7 -:1098B0005BD000950195029503950495206990F879 -:1098C0005500FBF798FE4FF47A7100F5FA70B0FB83 -:1098D000F1FA206990F85500FBF781FE5044ADF88D -:1098E000060020690188ADF80010B0F85810ADF8F6 -:1098F00004104188ADF8021090F8860130B1A069DB -:10990000C11C039103F0FEFA8DF81000206990F855 -:1099100085018DF80800E16968468847206980F86C -:10992000865180F885510399F9B190F88411E1B915 -:1099300090F86410272918D09DF81010039AA1B14F -:109940001378FF2B06D0072B02BF02295178FF297D -:1099500002D00AE01B2908D880F884610399C0F876 -:1099600088119DF8101080F8871100F0CCFD01F0EF -:1099700085FA0028206918BFA0F8D85004D1B0F8A3 -:10998000D810491CA0F8D81001F07BFA40B1216929 -:1099900091F8E40002289CBF401C81F8E40004D840 -:1099A000206990F8E400022806D92069A0F8D85070 -:1099B000A0F8DA5080F8E45020690123002190F8E3 -:1099C0006520583002F049FE20B9206990F8650002 -:1099D0000C285AD120690123002190F864205830C6 -:1099E00002F03BFEB0B320690123002190F867200C -:1099F000583002F032FE68B3206990F868100229EE -:109A000004BF90F8E40000283FD13846F6F781FB08 -:109A100000B3206990F8CB10FE2936D1B0F8D210EF -:109A2000012932D980F8DD60B0F88010B0F87E20CE -:109A30008B1E9A42AFBF0121891A491E89B2B0F824 -:109A4000D82023899A422EBF01229A1A521C02E082 -:109A5000F000002019E038BF92B2914288BF114651 -:109A6000012908BF80F8DD5090F869218AB1B0F86B -:109A7000DA20B0F86A0182422FBF0120801A401C10 -:109A800080B2814288BF014603E02069012180F84D -:109A9000DD502069B0F85820114489B2A0F8D410E4 -:109AA00090F86830002B18BF012B5DD0022B1CBF33 -:109AB000032BFFDF09D0E088C0F340200028206995 -:109AC00018BFA0F8E65059D151E090F86730082B44 -:109AD00021D0B0F87E10B0F8802000278B1C9A426D -:109AE00006D3511A891E0F043F0C1CBF791E8FB27A -:109AF00090F87C1051B190F864200123092158306E -:109B000002F0ABFD002808BF002729D0206990F89B -:109B10006A1089B908E0B0F87E30032B24D3B0F87E -:109B200080101144491C1FE090F865200123062194 -:109B3000583002F092FD78B121690020B1F8782008 -:109B4000B1F876108B1C9A4203D3501A801E18BFAE -:109B5000401EB84238BF87B2002F1CBF781E87B2A4 -:109B60002069B0F8D4103944A0F8D010A3E7B0F8B9 -:109B7000E610B0F8D6201144A0F8E610206990F85D -:109B8000701139B990F8672001231946583002F056 -:109B900064FD38B12069B0F88210B0F8D6201144C5 -:109BA000A0F88210206990F8883033B1B0F88410A2 -:109BB000B0F8D6201144A0F8841090F98C20002A27 -:109BC00006DDB0F88A10B0F8D6C06144A0F88A105B -:109BD0004FF03D0CB9F1000F18BF80F874C049D1A7 -:109BE0002178022911D0012908BF90F872113FD0C5 -:109BF000A17821B380F8736011F0140F18BF1E21F3 -:109C000009D000BF80F8741050E090F8CC100629FD -:109C100018BF16212CE011F0080F18BF80F874C08F -:109C200044D111F0200F18BF2321EBD111F0030F05 -:109C300008BFFFDF2A20216981F8740032E02BB1D0 -:109C4000B0F88410B0F88630994210D2002A05DDB1 -:109C5000B0F88A10B0F88620914208D2B0F882207D -:109C6000B0F880108A4208D390F870212AB12221DE -:109C700080F8741080F8736018E090F868203AB1AA -:109C8000B0F87E208A4228BF80F87480F2D209E0C2 -:109C9000B0F87E10062905D33E2180F8741080F8B4 -:109CA000736003E0206990F8731079B1206980F83F -:109CB000645080F8655080F8685090F8DE100029F4 -:109CC00014BF02210321FEF7FDFB02E00021FEF795 -:109CD000F9FB206980F8DE5006B0BDE8F047FBF7DD -:109CE0004FBDF84902468878CB78184313D108460F -:109CF00000694AB1897911F0080F03D090F8670024 -:109D0000082808D001207047B0F84810028E914210 -:109D100001D8FEF713BB0020704770B5E94C05462B -:109D20000E46E0882843E08015F0020F04D015F0BD -:109D3000010F18BFFFDF666115F0010F4FF0000241 -:109D40004FF001001AD0A661F178062902D00B2944 -:109D50000BD013E0216991F86530172B0ED1002349 -:109D6000C1E9283381F8690008E0216991F865307C -:109D7000112B04BF81F8692081F88E0015F0020FC5 -:109D800018D06169C978052902D00B290BD011E0E0 -:109D9000216991F86520152A0CD10022C1E92A22F7 -:109DA00081F86A0006E0206990F86510102908BF64 -:109DB00080F86A2015F0800F1CBF0820E07070BD8D -:109DC0002DE9F84FBF4C00254FF00108E580A57044 -:109DD000E5702570206168F30709074680F8DE808A -:109DE0000088F6F729FF5FEA000A08BFFFDF206955 -:109DF0000088FBF78DFC20690088FBF7AFFC206929 -:109E0000B0F8D21071B190F8CB10FE290FD190F8B4 -:109E1000701189B190F8672001231946583002F07B -:109E20001CFC88B1206990F8CB00FE2804D0206982 -:109E300090F8CB00FFF72BFA206990F8DF1000298B -:109E400018BF25811BD10FE02069A0F8825090F83F -:109E5000711180F8CC1000210220FFF7FFF9206972 -:109E600080F8DD500220E5E790F8AC1129B9018CAB -:109E70008288914288BF218101D881882181B0F8F0 -:109E8000D610491E8EB2B0F8D8103144A0F8D810C0 -:109E900090F8DC1000291CBFA0F8DA5080F8DC50E4 -:109EA00004D1B0F8DA103144A0F8DA10B0F87E101E -:109EB0003144A0F87E1090F86A1039B990F8652006 -:109EC00001230621583002F0C8FB28B12069B0F800 -:109ED00076103144A0F876102069B0F8D21001292C -:109EE0009CBF491CA0F8D210002E18BF80F8E45087 -:109EF00090F8DD10A1B1B0F8D800218988420FD2C6 -:109F00005046F6F706F958B1206990F8691139B151 -:109F1000B0F8DA10B0F86A01814228BF00F0B4FF4F -:109F2000206980F8DD5090F865100B2918BF0C29C6 -:109F300016D1B0F85820B0F88E31D21A12B2002AD9 -:109F40000EDBD0F89011816090F89411017302211A -:109F500001F060FF206980F8655080F898804AE041 -:109F6000242924D1B0F85810B0F88E21891A09B2EA -:109F700000291CDB90F8A42190F89011002908BF5B -:109F800090F8541080F8541090F89111002908BFEF -:109F900090F8551080F85510002A1CBF0020FEF7DD -:109FA00065FC206980F8655080F87D5023E090F8CA -:109FB0006410242918BF25291DD1B0F85810B0F815 -:109FC0008E21891A09B2002915DB90F89011002919 -:109FD00008BF90F8541080F8541090F8911100299F -:109FE00008BF90F8551080F855100020FEF73EFC91 -:109FF000206980F86450216901F15800B1F8D62039 -:10A0000002F02CF9206990F86911002918BFA0F816 -:10A01000DA502D4800902D4B2D4A3946484600F025 -:10A0200073FE216A00291CBF6078FBF720F82069C5 -:10A030000123052190F86520583002F00EFB00281E -:10A0400008BFBDE8F88FBDE8F84F00F066BC00F02F -:10A05000FBBE1C49C86170471A48C069002818BF78 -:10A0600001207047174A50701162704710B50446BE -:10A07000B0F894214388B0F89611B0F898019A424C -:10A0800001BFA3889942E38898420FD02388A4F89F -:10A09000B031A4F8B221A4F8B411A4F8B60101209B -:10A0A00084F8AC0107480079F1F770FE01212046E1 -:10A0B00001F0B0FE002084F86500032084F86800F9 -:10A0C00010BD0000F000002083960100E39C010019 -:10A0D0001B9D010070B5FE4CA07910F0020F08BF67 -:10A0E00070BDA078002818BF70BD6169F8482722AC -:10A0F000CB780E26002500690D2B78D00BDCA3F160 -:10A1000002030B2B1FD2DFE803F0201E808B9F2F52 -:10A110001E591E73D100152B00F02A810BDC112B68 -:10A1200065D0122B00F0F480132B00F0FF80142B6D -:10A1300000F00E8107E0162B00F03281172B00F0A3 -:10A140003F81FF2B35D0FFDF70BD90F867200123E2 -:10A150001946583002F081FA002818BF70BD082057 -:10A16000216981F8670070BD90F8643009790A2B85 -:10A1700001BF90F8CA308B4280F8645080F8885054 -:10A1800008BF70BD90F8663013F0080F0DD023F0B3 -:10A19000080180F8661090F88C10491E49B280F8CA -:10A1A0008C100029A8BF70BDCFE0FF291CBFFFDFC6 -:10A1B00070BD80F8642080F8845170BD90F866000E -:10A1C00010F0010F08BFFFDF216991F88C00401EDD -:10A1D00040B281F88C000028B8BFFFDF206990F8FA -:10A1E000661021F0010100BF80F8661070BD21E00B -:10A1F00090F86500102818BFFFDF0121206980F862 -:10A200008D10112180F8651070BD90F8650014283C -:10A2100018BFFFDF0121206980F88D101521F1E7BB -:10A2200090F86500152818BFFFDF1720216981F815 -:10A23000650070BD90F86500152818BFFFDF192074 -:10A24000216981F8650070BD90F865001B2818BF72 -:10A25000FFDF206980F88D5090F8B801002818BF02 -:10A26000FFDF206990F88E1049B180F88E50018888 -:10A27000A0F8BC1180F8BA5180F8B8610AE00188F2 -:10A28000A0F8BC1180F8BA51012180F8BE110D214F -:10A2900080F8B8110088F6F7BDFCF6F755F920797B -:10A2A000F1F774FD206980F8655070BD90F88C114D -:10A2B000042915D0206990F8661011F0020F08BF2C -:10A2C00070BD90F88C10491E49B280F88C1000299E -:10A2D000B8BFFFDF206990F8661021F0020183E724 -:10A2E00090F8642001230021583002F0B6F90028CC -:10A2F00008BFFFDF206990F8901011F0020F07BF30 -:10A30000062180F8641080F8885080F88C51D1E7DD -:10A3100090F8642001230021583002F09EF90028B3 -:10A3200008BFFFDF206980F8646070BD90F8661098 -:10A3300021F0040180F8661090F88C10491E49B293 -:10A3400080F88C100029A8BF70BDFFDF70BD00BF72 -:10A3500090F8642001230021583002F07EF9002893 -:10A3600008BFFFDF1C20216981F8640070BD00BFB9 -:10A3700090F8660000F03000102818BFFFDF206959 -:10A3800090F8661021F0100180F8661090F88C109B -:10A39000491E49B280F88C100029A8BF70BDD4E7CF -:10A3A00090F8642001230021583002F056F900286B -:10A3B00008BFFFDF1F20216981F8640070BD00BF66 -:10A3C00090F8650021281CBF0028FFDF22202169AA -:10A3D00081F8650070BD3E49086990F8662012F06A -:10A3E000080F1EBF01208870704742F0080280F8F5 -:10A3F00066208969C97880F8C9100021A0F88A1000 -:10A4000090F88C10491C80F88C10704710B5304CB7 -:10A4100005212069FEF756F8206990F84E100129B1 -:10A4200002BF022180F84E1010BD00F5D6710288DF -:10A43000A0F8D421028EA0F8D621828EA0F8D821CF -:10A44000028FB0F844309A4228BF1A46CA85828FDC -:10A45000B0F84600824238BF10460886012081F8D5 -:10A4600026002079BDE81040F1F790BC184830B4C0 -:10A47000006990F84E30B0F832C0C48EB0F8401089 -:10A48000428F022B28D08A4238BF11460186C28FE4 -:10A49000B0F842108A4238BF11468186028FB0F868 -:10A4A00044108A4238BF11464186828FB0F8461068 -:10A4B0008A4238BF1146C186418E614588BF8C46AD -:10A4C000A0F832C0C18EA14288BF0C46C48601E00C -:10A4D000F000002030BC7047038E9A4228BF1A4615 -:10A4E000C58F838E9D4238BF2B468A4238BF1146A6 -:10A4F0000186B0F842108B4228BF0B4683860021AC -:10A5000080F84E10CAE770B5FE4C206990F8CB1069 -:10A51000FE2906BFA178002970BD90F867200123AD -:10A520001946583002F099F8002818BF70BD20690C -:10A53000002590F8701159B1A0F8825090F871116F -:10A5400080F8CC10BDE8704000210220FEF786BEE6 -:10A5500090F8652001230421583002F07EF80600AF -:10A560000CD0D4F810C09CF86500102861D01428D5 -:10A5700065D015287BD01B287ED0BEE0216991F8DC -:10A58000660010F0010F05D0BDE8704001210920E0 -:10A59000FEF764BE10F0020F0BD001210C20FEF775 -:10A5A0005DFE206990F8901041F0010180F8901054 -:10A5B00070BD10F0040F05D0BDE8704001211320DC -:10A5C000FEF74CBE10F0080F09D091F8C90081F8D1 -:10A5D000CC00BDE8704001210720FEF73FBE10F01F -:10A5E000100F02D091F89B0120B191F8650021284D -:10A5F00073D179E091F89A0188B1B1F89C01A1F882 -:10A600004000B1F89E01A1F84200B1F8A001A1F804 -:10A610004400B1F8A201A1F8460081F89A51FFF771 -:10A6200025FFFFF7F3FEBDE8704001211520FEF77E -:10A6300015BEBDE8704001210B20FEF70FBEF9F7F3 -:10A6400025FB0C2838BF70BD08212069F030F9F7D0 -:10A6500021FB28B120690421C430F9F71BFB00B9A4 -:10A66000FFDFBDE8704001210420FEF7F7BD9CF834 -:10A67000730101280DD000E030E0022818BF70BD42 -:10A680009CF88E00D8B106208CF8CC000121022065 -:10A690001DE09CF8B801002818BF70BD0CF1B00394 -:10A6A00000220CF1E8010CF5BA7001F052FF012113 -:10A6B0000520FEF7D3FD206980F8735170BD9CF82A -:10A6C000960010F0040F14BF11200D200121FEF799 -:10A6D000C5FD206980F8735170BD0EE0BDE8704083 -:10A6E00001210620FEF7BABD91F87D00C0B991F8AE -:10A6F000A40110B191F8A50190B1206901230021B6 -:10A7000090F86420583001F0A8FFC8B120690123F7 -:10A71000042190F86520583001F09FFF30B10FE020 -:10A72000BDE8704001211720FEF798BD206990F820 -:10A730007C0028B1BDE8704000211220FEF78EBDDC -:10A74000206990F864200A2A2BD0002E18BF70BD13 -:10A7500001230021583001F080FF48B1206990F8B2 -:10A760008C11042904BF90F8900010F0030F22D040 -:10A7700020690123002190F86420583001F06DFF1A -:10A7800000287DD0206990F89A1111B190F89B11A2 -:10A79000E9B190F8A411002972D090F8A511E9B39D -:10A7A00092E090F8CA1080F8CC10BDE8704000210B -:10A7B0000720FEF753BD00210C20FEF74FFD206956 -:10A7C00090F8901041F0010180F8901070BDB0F841 -:10A7D0009C11A0F84010B0F89E11A0F84210B0F8FB -:10A7E000A011A0F84410B0F8A211A0F8461080F80B -:10A7F0009A5190F8660010F0200F13D0FFF736FE44 -:10A80000FFF704FE01211520FEF728FD206990F8CE -:10A81000661021F0200141F0100100E008E080F80E -:10A82000661070BDBDE8704000211420FEF716BD13 -:10A8300090F8652001230B21583001F00EFFF8B984 -:10A84000206990F85400012808BF012503D0022890 -:10A8500014BFFFDF0225206990F85500012808BFCA -:10A86000012603D0022814BFFFDF02262069012D34 -:10A8700090F8A61105D0022D08BF022903D00DE0E3 -:10A8800022E001290AD190F8A711012E04D0022E4E -:10A8900008BF02290BD001E0012908D090F86520FB -:10A8A00001230321583001F0D8FE68B903E00020ED -:10A8B000FDF7DCFF08E020690123022190F8652004 -:10A8C000583001F0CAFEB0B120690123002190F890 -:10A8D0006420583001F0C1FE002808BF70BD206917 -:10A8E00090F88401002808BF70BD0021BDE87040C9 -:10A8F000FF20FEF7B3BCBDE8704000211620FEF734 -:10A90000ADBC0000F000002030B5FB4C05462078BF -:10A91000002818BFFFDF657230BDF74901200872BB -:10A9200070472DE9F14FF54F39464E68304696F89D -:10A93000551001F042FF96F8551080B211F00C0F3F -:10A940006FF00D047FD0B0F5747F38BF002506D3BB -:10A950005038C11700EB916004EBA01085B2708EE7 -:10A96000A84238BF0546E648DFF88C93C9F82400B2 -:10A97000786800F15808834609F13400BBF832705A -:10A9800040689BF8551090F86AA0584601F015FFF2 -:10A990009BF8551080B211F00C0F5FD0B0F5747FAA -:10A9A00038BF002406D35038C21700EB926004EB86 -:10A9B000A01084B2A74238BF3C46BAF1000F1CBFBA -:10A9C000201D84B2E0B2F9F709FF98F812000028C0 -:10A9D0004FD008F15801CA4891E80E1000F50274F2 -:10A9E00084E80E10D8F86810C0F82112D8F86C105E -:10A9F000C0F8251200F58170FAF7A6FABF48007872 -:10AA000000280CBF0120002080F00101BD48017624 -:10AA1000D8E91412C0E90412A0F58372D9F8241001 -:10AA2000F9F7B5FD96F85500012808BF002204D0BB -:10AA300002281ABFFFDF00220122E9B20120F9F744 -:10AA4000B4FD1CE0FFE7022919BF04EBD00085B27A -:10AA50006FF00E0101EB900081D17FE7022919BF51 -:10AA600004EBD00084B26FF00E0202EB9000A1D193 -:10AA70009FE7D9F82400FAF767FAF9F7B9FD0098CB -:10AA800050B9012296F8553096211046FAF712F97E -:10AA900000219620FAF7A4FA96F82C00012808BFA6 -:10AAA000FAF730FB022089F80000BDE8F88F2DE9A5 -:10AAB000F04FDFF8488283B0414681464D68A1F1EE -:10AAC0001400009095F85D0005F158060127A1F1EA -:10AAD000340470B3012879D0022878D0032818BF35 -:10AAE000FFDF75D0206A0823017821F0080101708A -:10AAF000B27903EAC202114321F004010170F27934 -:10AB0000042303EA8202114321F01001017096F838 -:10AB100005B0E06AF5F70DFB8246FAF743FEBBF19C -:10AB2000020F7AD0BBF1010F78D0BBF1030F76D0C2 -:10AB30008AE0FFE700F0CAFB0146284601F03BFE31 -:10AB40001FFA80FB00F0C2FB10F00C0F6FF00D013C -:10AB50004FF0000A20D0BBF5747F38BF504607D3B2 -:10AB6000ABF15000C21700EB926001EBA01080B275 -:10AB7000298E814238BF0846ADF80800A5F8480084 -:10AB80000098FAF7EEFD90B1216AA77062694FF460 -:10AB90008060904703202CE0022819BF01EBDB0006 -:10ABA00080B26FF00E0000EB9B00E1D1DFE701AA5D -:10ABB00002A9E06AF5F7F8F9206210B196F83510AD -:10ABC00039B10098FAF7A1FD77718BE713E016E031 -:10ABD00026E09DF8041031B9A0F800A080F802A08A -:10ABE000012102F0A5F9BDF80810206A02F0DFFA91 -:10ABF0000220707176E70098FAF787FD72E7B5F8E2 -:10AC00004800ADF8000001AA6946E06AF5F7CCF902 -:10AC10002062002808BFFFDF64E708E00BE00EE0D9 -:10AC20000098FAF79EFD002808BFFFDF5AE730EAD8 -:10AC30000A0009D106E030EA0A0005D102E0BAF1C3 -:10AC4000000F01D0012100E00021206A027842EAD1 -:10AC500001110170717C00291CBF7179012933D069 -:10AC600006F15801264891E80E1000F5027A8AE8AC -:10AC70000E10B16EC0F82112F16EC0F8251200F569 -:10AC80008170FAF761F998F8000000280CBF0121E3 -:10AC900000211C480176D6E91212C0E90412A0F581 -:10ACA0008371226AF9F773FC95F85400012808BFF4 -:10ACB000002204D002281ABFFFDF00220122FB215C -:10ACC0000020F9F772FC03E0FAF73EF9F9F790FC7F -:10ACD000B9F1000F06D195F85430012296210020D9 -:10ACE000F9F7E8FF6771206A0188E18180782074B4 -:10ACF000277003B0BDE8F08F140100204801002048 -:10AD0000C80C0020D00E00202DE9F0471E46174643 -:10AD100081460C46FE4DDDF82080287828B9002FAA -:10AD20001CBF002EB8F1000F00D1FFDFC5F81C805A -:10AD3000C5E90576C5E90D9400272F72EF712F71D3 -:10AD4000EF706F71AF71AF70AF81F24E04F15808C0 -:10AD50002088F5F771FFE8622088F5F75BFF28632C -:10AD6000F9F759FD94F95700F9F702FE04F11200C2 -:10AD7000FAF7D3F804F10E00F9F704FE3078002852 -:10AD80000CBF03200120FAF7DCF898F81A00F9F755 -:10AD900001FEFAF7D0F83078002804BFFF2094F8BD -:10ADA000544023D098F81250B4F8328094F85510DB -:10ADB000204601F002FD94F8554080B214F00C0FCB -:10ADC0006FF00D012CD0B0F5747F06D35038C21748 -:10ADD00000EB926001EBA01087B24046B84528BF57 -:10ADE0003846002D1CBF001D80B2C0B22146F9F7C5 -:10ADF000F5FC3078F8B1706890F86801002818BF49 -:10AE0000F9F766FD224600210120F9F70CFF706872 -:10AE1000D0F8E000FAF79BF8BDE8F047012080E5A4 -:10AE2000022C19BF01EBD00087B26FF00E0101EBCD -:10AE30009000D2D1D0E7002122460846F9F7F3FE70 -:10AE4000BDE8F047012032E6B24800B50178343859 -:10AE5000007819B1022818BFFFDF00BD012818BF14 -:10AE6000FFDF00BDAA4810B50078022818BFFFDF39 -:10AE7000BDE8104000F080BA00F07EBAA4484079E6 -:10AE80007047A34800797047A14901208871704735 -:10AE90002DE9F04706009F489D4D406800F1580499 -:10AEA000686A90F8019018BF012E03D1296B08F051 -:10AEB00093FE6870687800274FF00108A0B1012860 -:10AEC0003CD0022860D003281CBFFFDFBDE8F0871C -:10AED000012E08BFBDE8F087286BF5F71FFB687AE5 -:10AEE000BDE8F047F0F752BF012E14D0A86A002841 -:10AEF00008BFFFDF6889C21CD5E9091009F058F9BD -:10AF0000A86A686201224946286BF5F783F9022E88 -:10AF100008BFBDE8F087D4E91401401C41F10001ED -:10AF2000C4E91401E079012801D1E77101E084F856 -:10AF30000780687ABDE8F047F0F728BF012E14D0EB -:10AF4000A86A002808BFFFDF6889C21CD5E909107C -:10AF500009F02EF9A86A686200224946286BF5F7C5 -:10AF600059F9022E08BFBDE8F087D4E91410491C36 -:10AF700040F10000C4E91410E07901280CBFE7712A -:10AF800084F80780BDE8F087012E06D0286BF5F71E -:10AF9000C5FA022E08BFBDE8F087D4E91410491C99 -:10AFA00040F10000C4E91410E0790128BFD1BCE7EA -:10AFB0002DE9F041574F3846A7F13404406800F1BD -:10AFC00058052078012818BFFFDFA878012648B16E -:10AFD0000021A970A6706269042090473878002883 -:10AFE00018BF2E71206A0321007831EA000004BFE7 -:10AFF000E878002805D1EE70216AA6706269022007 -:10B0000090470121002000F0D6F918B1BDE8F041C9 -:10B0100000F0B2B9BDE8F041002082E42DE9F14F23 -:10B020003C4E4FF000083046A6F1340540683178B8 -:10B0300000F1580A2878C146022818BFFFDFA88906 -:10B0400040F40070A88171683078FF2091F85410A6 -:10B05000F9F7C4FB009800289AF8120000F0FD8070 -:10B06000F9F7ECFAF9F7DAFA012788B99AF8120039 -:10B0700070B1686A417859B100789AF80710C0F346 -:10B08000C000884204D1EF70BDE8F84F00F074B9F9 -:10B09000686A41786981002908BFC5F8288003D013 -:10B0A000286BF5F771F8A862A88940F02000A88104 -:10B0B00085F804803078706800F1580B044690F8E9 -:10B0C0002C0001281AD1FAF713F85946204601F04E -:10B0D00080FA98B13078002870680CBF00F58A704B -:10B0E00000F5F570218841809BF8081001719BF8EC -:10B0F000091041710770687AF0F748FE686A9AF89B -:10B1000006100078C0F3800088423BD0307803E01E -:10B110001401002048010020706800F1580490F8E4 -:10B120005D0058B3022847D084F8058030780028A5 -:10B130001CBF2079002806D084F80480AF706A69AB -:10B14000414610209047E07890B184F80380FAF7E8 -:10B1500017FB002808BFFFDF0820AF706A690021D5 -:10B160009047D4E91202411C42F10000C4E91210D8 -:10B17000A07901280CBF84F80680A771A88940F443 -:10B180008070A881686A9AF807300178C1F3C0021C -:10B190009A424FD13278726801F0030102F15804EB -:10B1A000012918BF022932D003291CBFE87940F0D9 -:10B1B000040012D0E8713DE0E86AF4F721FF0028AE -:10B1C00008BFFFDFD4E91210491C40F10000C4E9B8 -:10B1D0001210687AF0F7DAFDA6E701F0C1FE90B12F -:10B1E000A770A989384641F40061A981696AAF70E6 -:10B1F0006A699047E079012803D100BF84F807808D -:10B2000018E0E77116E0E87940F01000D2E74078E6 -:10B21000F8B1A98941F40061A981A96A51B1FB285B -:10B22000F1D8287A002808BFB94603D080206A697F -:10B23000002190470120009900F0BDF8B0B1B9F1AC -:10B24000000F1CBF0020FFF723FEBDE8F84F00F001 -:10B2500093B8E0790128D4D1D0E7002818BFF9F7D6 -:10B2600026FAA88940F04000A881E3E7B9F1000F71 -:10B270001CBF0120FFF70CFE0020FFF718FCB9F1FE -:10B28000000F08BFBDE8F88F0220BDE8F84FFFE5CA -:10B2900070B50D4606466848674900784C6850B15D -:10B2A000F9F748FA034694F8542029463046BDE899 -:10B2B0007040FDF72CBAF9F73DFA034694F8542094 -:10B2C00029463046BDE8704005F00ABD5A4802786C -:10B2D0004168406801F1580C91F8643090F85400CE -:10B2E000242B1CBF9CF80DC0BCF1240F13D01F2BC6 -:10B2F00018BF202B24D0BCF1220F18BF7047002AA2 -:10B3000008BF704791F8A62191F85110114011F033 -:10B31000010F27D02EE04AB191F89011002908BF03 -:10B320007047012818BF012924D021E091F8F210BC -:10B33000002908BF7047012818BF01291AD017E05B -:10B34000BCF1220FDBD0002A08BF704791F8A6118C -:10B3500011F0010F0ED111F0020F08BF7047012844 -:10B3600008D005E011F0020F08BF7047012801D096 -:10B3700002207047012070472F4910B54C68F9F73B -:10B3800089FEF9F768FEF9F763FDF9F7CCFDF9F7E7 -:10B390002FF994F82C00012808BFF9F7A9FE274CD3 -:10B3A00000216269A0899047E269E179E0789047DD -:10B3B0000020207010BD70B5204C0546002908BF44 -:10B3C000012D05D12079401CC0B22071012831D84F -:10B3D000A1692846884700282CD0A179184839B19E -:10B3E000012D01BF41780029017811F0100F21D003 -:10B3F000E179F9B910490978002908BF012D05D074 -:10B4000000290CBF01210021294311D10D490978E0 -:10B4100011F0100F04BF007810F0100F0AD0A078C0 -:10B4200040B9A06A20B9608910B111F0100F01D0A5 -:10B43000002070BD012070BD4801002014010020D3 -:10B44000C80C00202201002010B540F2C311F748BB -:10B4500008F02DFFFF220821F54808F020FFF548ED -:10B46000002141704FF46171418010BD2DE9F04120 -:10B470000E46054600F046FBEC4C102816D004EBB7 -:10B48000C00191F84A0110F0010F1CBF0120BDE876 -:10B49000F081607808283CBF012081F84A011CD265 -:10B4A0006078401C60700120BDE8F0816078082859 -:10B4B00013D222780127501C207004EBC208306898 -:10B4C000C8F84401B088A8F84801102A28BFFFDF57 -:10B4D00088F8435188F84A71E2E70020BDE8F0811E -:10B4E000D2480178491E4BB2002BB8BF704770B4E8 -:10B4F0005FF0000500EBC30191F84A1111F0010F54 -:10B500003BD04278D9B2521E427000EBC10282F8A1 -:10B510004A5190F802C00022BCF1000F0BD98418E8 -:10B5200094F803618E4202D1102A26D103E0521C06 -:10B53000D2B29445F3D80278521ED2B202708A4237 -:10B540001BD000EBC20200EBC10CD2F84341CCF897 -:10B550004341D2F84721CCF84721847890F800C0C5 -:10B560000022002C09D9861896F8036166450AD195 -:10B57000102A1CBF024482F80311591E4BB2002B43 -:10B58000B8DA70BC7047521CD2B29442EBD8F4E7E0 -:10B590002DE9F05F1F4690460E46814600F0B2FA54 -:10B5A000A24D0446102830D0A878002100280ED9DA -:10B5B0006A1892F80331A34205D110291CBF12204A -:10B5C000BDE8F09F03E0491CC9B28842F0D80828C2 -:10B5D00034D2102C1CD0AE781022701CA87005EB51 -:10B5E000061909F10300414600F0A2FF09F18300AA -:10B5F0001022394600F09CFFA819002180F8034171 -:10B6000080F83B110846BDE8F09FA878082815D2BD -:10B610002C78CA46601C287005EBC4093068C9F84C -:10B620004401B0884FF0000BA9F84801102C28BF46 -:10B63000FFDF89F843A189F84AB1CCE70720BDE8CC -:10B64000F09F70B479488178491E4BB2002BBCBF83 -:10B6500070BC704703F0FF0C8178491ECAB282703B -:10B6600050FA83F191F8031194453ED000EB021596 -:10B6700000EB0C14D5F80360C4F80360D5F807603C -:10B68000C4F80760D5F80B60C4F80B60D5F80F60FC -:10B69000C4F80F60D5F88360C4F88360D5F887607C -:10B6A000C4F88760D5F88B60C4F88B60D5F88F50EC -:10B6B000C4F88F50851800EB0C0402EB420295F899 -:10B6C00003610CEB4C0C00EB420284F8036100EBCD -:10B6D0004C0CD2F80B61CCF80B61B2F80F21ACF82E -:10B6E0000F2195F83B2184F83B2100EBC10292F831 -:10B6F0004A2112F0010F33D190F802C00022BCF1B0 -:10B70000000F0BD9841894F803518D4202D1102AEE -:10B7100026D103E0521CD2B29445F3D80278521ECF -:10B72000D2B202708A421BD000EBC20200EBC10C05 -:10B73000D2F84341CCF84341D2F84721CCF8472115 -:10B74000847890F800C00022002C09D9851895F85B -:10B75000035165450BD1102A1CBF024482F8031126 -:10B76000591E4BB2002BBFF675AF70BC7047521C10 -:10B77000D2B29442EAD8F3E72E49487070472D4878 -:10B780004078704738B14AF2B811884203D8294945 -:10B790004880012070470020704726484088704745 -:10B7A00010B500F0AFF9102814D0204A014600204F -:10B7B00092F802C0BCF1000F0CD9131893F80331B2 -:10B7C0008B4203D1102818BF10BD03E0401CC0B24B -:10B7D0008445F2D8082010BD14498A78824286BF79 -:10B7E00001EB001083300020704710498A788242B4 -:10B7F00086BF01EB0010C01C002070470B4B93F874 -:10B8000002C084459CBF00207047184490F8030193 -:10B8100003EBC00090F843310B70D0F84411116075 -:10B82000B0F848019080012070470000F80E002019 -:10B830005A01002050010020FE4A114491F80321D2 -:10B84000FD490A7002684A6080880881704710B517 -:10B85000F8F74CFE002804BFFF2010BDBDE81040E3 -:10B86000F8F76ABEF3498A7882429CBF002070478D -:10B87000084490F8030101EBC00090F84A0100F081 -:10B88000010070472DE9F047EA4F0026B0463878AE -:10B89000002886BF4FF0080ADFF8A093BDE8F087C4 -:10B8A00007EBC80505F5A27195F8430100F02AF9E8 -:10B8B000102808BF544610D0B978002400290BD9AD -:10B8C0003A1992F80321824202D1102C05D103E0EB -:10B8D000621CD4B2A142F3D80824B878A04286BF33 -:10B8E00007EB0410C01C002095F84A1111F0010F5D -:10B8F00016D050B1082C04D2391991F83B11012906 -:10B9000003D0102100F0F1FD50B109F80640304697 -:10B91000731C95F8432105F5A271DEB2F9F700F822 -:10B9200008F1010000F0FF0838784045B8D8BDE8BC -:10B93000F0872DE9F041BF4C00263546A07800285D -:10B940008CBFBE4FBDE8F0816119C0B291F8038190 -:10B95000A84286BF04EB0510C01C002091F83B11E3 -:10B96000012903D0102100F0C0FD58B104EBC8003C -:10B97000BD5590F8432100F5A2713046731CDEB22C -:10B98000F8F7CEFF681CC5B2A078A842DCD8BDE8A5 -:10B99000F08110B5F8F7EEFF002804BF082010BDB5 -:10B9A000F8F7ECFFA549085C10BD0A46A24910B59E -:10B9B000497841B19F4B997829B10244D81CF8F7D6 -:10B9C00032FD012010BD002010BD9A4A01EB41015B -:10B9D00002EB41010268C1F80B218088A1F80F0138 -:10B9E00070472DE9F041934D07460024A8780028C0 -:10B9F00098BFBDE8F081C0B2A04213D905EB041096 -:10BA000010F183060ED01021304600F06EFD48B9CB -:10BA100004EB440005EB400000F20B113A463046BF -:10BA2000F9F73DFF601CC4B2A878A042E3D8BDE896 -:10BA3000F08101461022824800F07ABD80487047AC -:10BA400070B57C4D0446A878A04206D905EB0410D9 -:10BA50001021833000F049FD08B1002070BD04EBD7 -:10BA6000440005EB400000F20B1070BD71498A786C -:10BA7000824206D9084490F83B01002804BF012007 -:10BA80007047002070472DE9F0410E4607461546E5 -:10BA90000621304600F029FD664C98B1A17871B1BD -:10BAA00004F59D7011F0010F18BF00F8015FA17837 -:10BAB000490804D0457000F8025F491EFAD1012000 -:10BAC000BDE8F0813846314600F01CF8102816D049 -:10BAD000A3780021002B12D9621892F80321824228 -:10BAE00009D1102918BF082909D0601880F83B51E6 -:10BAF0000120BDE8F081491CC9B28B42ECD800207E -:10BB0000BDE8F0812DE9F0414A4D06460024287831 -:10BB10000F46002812D900BF05EBC40090F843116E -:10BB2000B14206D10622394600F5A27008F014FB96 -:10BB300038B1601CC4B22878A042EDD81020BDE80E -:10BB4000F0812046BDE8F0813A4910B44A7801EB13 -:10BB5000C003521E4A70002283F84A2191F802C0A5 -:10BB6000BCF1000F0DD98B1893F80341844204D126 -:10BB7000102A1CBF10BC704703E0521CD2B294457F -:10BB8000F1D80A78521ED2B20A70824204BF10BCA9 -:10BB9000704701EBC00301EBC202D2F843C1C3F806 -:10BBA00043C1D2F84721C3F847218C7891F800C0EF -:10BBB0000022002C9CBF10BC70478B1893F80331F7 -:10BBC000634506D1102A1CBF114481F8030110BC43 -:10BBD0007047521CD2B29442EFD810BC704770B478 -:10BBE00014490D188A78521ED3B28B7095F8032130 -:10BBF000984247D001EB031C01EB0014DCF8036012 -:10BC0000C4F80360DCF80760C4F80760DCF80B6078 -:10BC1000C4F80B60DCF80F60C4F80F60DCF88360D8 -:10BC2000C4F88360DCF88760C4F88760DCF88B6058 -:10BC300008E00000F80E0020500100205A0100200A -:10BC4000BB100020C4F88B60DCF88FC0C4F88FC034 -:10BC500001EB030C03EB43039CF8034100EB4000B2 -:10BC600001EB430385F8034101EB4000D3F80B419E -:10BC7000C0F80B41B3F80F31A0F80F319CF83B012D -:10BC800085F83B0101EBC20090F84A0110F0010F6A -:10BC90001CBF70BC704700208C78002C0DD90B188D -:10BCA00093F803C1944504D110281CBF70BC7047A1 -:10BCB00003E0401CC0B28442F1D80878401EC0B2F4 -:10BCC0000870904204BF70BC704701EBC20301EBE7 -:10BCD000C000D0F843C1C3F843C1D0F84701C3F84E -:10BCE00047018C780B780020002C9CBF70BC7047FB -:10BCF00001EB000C9CF803C19C4506D110281CBF29 -:10BD0000084480F8032170BC7047401CC0B28442D4 -:10BD1000EED870BC7047000010B50A7B02F01F021D -:10BD20000A73002202768B181B7A03F0010C5B0861 -:10BD300003F00104A4445B0803F00104A4445B087D -:10BD400003F00104A4445B0803F0010464444FEAD7 -:10BD5000530C0CF0010323444FEA5C0C0CF001047B -:10BD6000234403EB5C0300EB020C521C8CF81330F1 -:10BD700090F818C0D2B263440376052AD3D3D8B260 -:10BD8000252888BFFFDF10BD0023C383428401EB59 -:10BD9000C202521EB2FBF1F10184704770B46FF021 -:10BDA0001F02010C02EA90251F23A1F5AA40543876 -:10BDB0001CBFA1F5AA40B0F1550009D0A1F528504B -:10BDC000AA381EBFA1F52A40B0F1AA00012000D177 -:10BDD00000204FF0000C62464FEA0C048CEA01068A -:10BDE000F6431643B6F1FF3F11D005F001064FEAC6 -:10BDF0005C0C4CEAC63C03F0010652086D085B0877 -:10BE0000641C42EAC632162CE8D370BC704770BC82 -:10BE1000002070472DE9F04701270025044603293B -:10BE20000FD04FF4FA4200297CD0012900F006819E -:10BE3000022918BFBDE8F0870146BDE8F047583039 -:10BE40006AE704F158067821304608F052FAB571D5 -:10BE5000F57135737573F573357475717576B576DF -:10BE6000212086F83E00412086F83F00FE2086F81B -:10BE7000730084F82C50258484F8547084F855702D -:10BE8000282084F856001B20208760874FF4A47078 -:10BE9000E087A0871B20208660864FF4A470E08690 -:10BEA000A0861B20A4F84000A4F844004FF4A4701E -:10BEB000A4F84600A4F842001B20A4F84A00A4F805 -:10BEC0004C00A4F8480067734FF448606080A4F801 -:10BED000D050A4F8D250A4F8D450A4F8D650A4F866 -:10BEE000D850A4F8DA5084F8DD5084F8DF50A4F874 -:10BEF000E65084F8E450A4F8F850A4F8FA5084F816 -:10BF00009A5184F89B5184F8A45184F8A55184F87F -:10BF1000695184F8705184F8735184F88C51BDE8EC -:10BF2000F087FFE7A4F8E65084F8DE506088FE4909 -:10BF30000144B1FBF0F1A4F878104BF68031A4F87D -:10BF40007A10E388A4F87E50B4F882C0DB000CFBC2 -:10BF500000FCB3FBF0F39CFBF0FC5B1CA4F882C07C -:10BF60009BB203FB00FC04F15801A4F88030BCF53F -:10BF7000C84FC4BF5B1E0B85B2FBF0F2521CCA85D2 -:10BF800000F5802202F5EE32531EB3FBF0F20A8474 -:10BF9000CB8B03FB00F2B2FBF0F0C883214604F127 -:10BFA0005800FFF7B9FE07F0A5F9E8B3D4F80E1072 -:10BFB0006FF01F02080C02EA91281F26A0F5AA4183 -:10BFC00054391CBFA0F5AA41B1F155010AD0A0F522 -:10BFD0002851AA391EBFA0F52A41B1F1AA014FF09C -:10BFE000010901D14FF00009002211464FEA020C6D -:10BFF00082EA0003DB430B43B3F1FF3F1AD008F0A2 -:10C000000103520842EAC33206F0010349087608E8 -:10C010000CF1010C41EAC3314FEA5808BCF1160F8C -:10C02000E6D3B9F1000F00E000E003D084F86851D6 -:10C03000BDE8F08784F86871BDE8F087A4F8E650A1 -:10C04000B4F89401B4F89831B4F802C004F158017E -:10C05000A4F87E50B4F88240DB0004FB0CF4B3FB80 -:10C06000F0F394FBF0F45B1C4C859BB203FB00F4F3 -:10C070000B85B4F5C84FC4BF5B1E0B85B2FBF0F255 -:10C08000521CCA854A8C00EBC202521EB2FBF0F26F -:10C090000A84CA8B02FB0CF2B2FBF0F0C883BDE845 -:10C0A000F08770B50025044603290DD04FF4FA42FD -:10C0B000002963D001297DD0022918BF70BD014637 -:10C0C000BDE87040583027E604F158067821304624 -:10C0D00008F00FF9B571F57135737573F573357433 -:10C0E00075717576B576212086F83E00412086F878 -:10C0F0003F00FE2086F8730084F82C502584012030 -:10C1000084F8540084F85500282184F856101B2127 -:10C11000218761874FF4A471E187A1871B212186C4 -:10C1200061864FF4A471E186A1861B21A4F840101A -:10C13000A4F844104FF4A471A4F84610A4F84210D7 -:10C140001B21A4F84A10A4F84C10A4F848106073FE -:10C15000A4F8D850202084F8DA0084F8D050C4F82D -:10C16000D45084F8045184F8055184F80E5184F8B1 -:10C170000F5184F8F45084F8005170BD60886A490A -:10C180000144B1FBF0F1A4F878104BF68031A4F82B -:10C190007A10E388A4F87E50B4F882C0DB000CFB70 -:10C1A00000FC9CFBF0FCB3FBF0F304F15801A4F895 -:10C1B00082C000E022E05B1C9BB203FB00FCA4F801 -:10C1C0008030BCF5C84FC4BF5B1E0B85B2FBF0F2DC -:10C1D000521CCA8500F5802202F5EE32531EB3FBD5 -:10C1E000F0F20A84CB8B03FB00F2B2FBF0F0C883C1 -:10C1F000214604F15800BDE870408DE5D4F8F830D0 -:10C20000B4F802C004F158005989DB89A4F87E50C3 -:10C21000B4F88240DB0004FB0CF4B3FBF1F394FBB5 -:10C22000F1F45B1C44859BB203FB01F40385B4F578 -:10C23000C84FC4BF5B1E0385B2FBF1F2521CC2851E -:10C24000428C01EBC202521EB2FBF1F20284C28B9D -:10C2500002FB0CF2B2FBF1F1C18370BD2DE9F003DA -:10C26000047E0CB1252C03D9BDE8F00312207047E1 -:10C27000002A02BF0020BDE8F003704791F80DC00E -:10C280001F260123294D4FF00008BCF1000F77D085 -:10C29000BCF1010F1EBF1F20BDE8F0037047B0F8CE -:10C2A00000C00A7C8F7B91F80F907A404F7C87EA20 -:10C2B000090742EA072282EA0C0C00270CF0FF096A -:10C2C0004FEA1C2C99FAA9F99CFAACFC4FEA1969BF -:10C2D0004FEA1C6C49EA0C2C0CEB0C1C7F1C9444A0 -:10C2E000FFB21FFA8CFC032FE8D38CEA020C0F4F2D -:10C2F0000022ECFB057212096FF0240502FB05C257 -:10C30000D2B201EBD207427602F007053F7A03FA78 -:10C3100005F52F4218BF82767ED104FB0CF2120C79 -:10C32000521CD2B2002403E0FFDB050053E4B36EDD -:10C3300000EB040C9CF813C094453CBFA2EB0C022C -:10C34000D2B212D30D194FF0000C2D7A03FA0CF76C -:10C350003D421CBF521ED2B2002A6AD00CF1010C21 -:10C360000CF0FF0CBCF1080FF0D304F1010C0CF041 -:10C37000FF04052CD7D33046BDE8F0037047FFE734 -:10C3800090F819C00C7E474604FB02C2FA4C4FF0ED -:10C39000000CE2FB054C4FEA1C1C6FF024040CFB64 -:10C3A0000422D2B201EBD204427602F0070C247AC6 -:10C3B00003FA0CFC14EA0C0F1FBF82764046BDE85E -:10C3C000F003704790F818C0B2FBFCF40CFB142289 -:10C3D000521CD2B25FF0000400EB040C9CF813C0B6 -:10C3E00094453CBFA2EB0C02D2B212D30D194FF010 -:10C3F000000C2D7A03FA0CF815EA080F1CBF521E28 -:10C40000D2B27AB10CF1010C0CF0FF0CBCF1080FA8 -:10C41000F0D304F1010C00E00EE00CF0FF04052C59 -:10C42000DAD3A8E70CEBC40181763846BDE8F00307 -:10C4300070470CEBC40181764046BDE8F0037047BD -:10C44000CE4A016812681140CD4A1268114301605A -:10C45000704730B4CB49C94B00244FF0010C0A7827 -:10C46000521CD2B20A70202A08BF0C700D781A68CC -:10C470000CFA05F52A42F2D0097802680CFA01F1AB -:10C480005140016030BC7047017931F01F0113BF8A -:10C49000002000221146704710B4435C491C03F091 -:10C4A000010C5B0803F00104A4445B0803F00104E1 -:10C4B000A4445B0803F00104A4445B0803F00104F6 -:10C4C000A4445B0803F001045B08A44403F00104E6 -:10C4D000A4440CEB53031A44D2B20529DDDB012A34 -:10C4E0008CBF0120002010BC704730B40022A1F1A5 -:10C4F000010CBCF1000F11DD431E11F0010F08BF4C -:10C5000013F8012F5C785FEA6C0C07D013F8025F18 -:10C5100022435C782A43BCF1010CF7D1491E5CBF71 -:10C52000405C0243002A0CBF0120002030BC704751 -:10C53000130008BF704710B401EB030CD41A1CF8A9 -:10C5400001CC5B1E00F804C013F0FF03F4D110BC53 -:10C550007047F0B58DB0164610251C466A46AC46AD -:10C5600000EB0C03A5EB0C0713F8013CD355ACF121 -:10C57000010313F0FF0CF3D115461032102084464E -:10C580000B18ACEB000713F8013C401ED35510F01C -:10C59000FF00F5D1284606F02FFD86B1102005F1E9 -:10C5A000200201461318A1EB000C13F8013C401EB9 -:10C5B00004F80C3010F0FF00F4D10DB0F0BD089875 -:10C5C0002060099860600A98A0600B98E0600DB048 -:10C5D000F0BD38B505460C466846F8F79EFD0028C4 -:10C5E00008BF38BD9DF900202272A07E607294F9C8 -:10C5F0000A100020511A48BF494295F82D308B424D -:10C60000C8BF38BDFF2B08BF38BDE17A491CC9B28D -:10C61000E17295F82E30994203D8A17A7F2918BF8C -:10C6200038BDA2720020E072012038BD0C2818BF6E -:10C630000B2810D00D2818BF1F280CD0202818BF99 -:10C64000212808D0222818BF232804D024281EBF60 -:10C65000262800207047012070470C2963D2DFE8AC -:10C6600001F006090E13161B323C415C484E002AAD -:10C670005BD058E0072A18BF082A56D053E00C2A8E -:10C6800018BF0B2A51D04EE00D2A4ED04BE0A2F13C -:10C690000F000C2849D946E023B1A2F110000B2865 -:10C6A00043D940E0122A18BF112A3ED090F8360034 -:10C6B00020B1122A37D31A2A37D934E0162A32D3B6 -:10C6C0001A2A32D92FE0A2F10F0103292DD990F8AF -:10C6D000360008B31B2A28D925E0002B08BF042AFE -:10C6E00021D122E013B1062A1FD01CE0012A1AD161 -:10C6F0001BE01C2A1CBF1D2A1E2A16D013E01F2A6D -:10C7000018BF202A11D0212A18BF222A0DD0232A8F -:10C710001CBF242A262A08D005E013B10E2A04D013 -:10C7200001E0052A01D000207047012070472DE963 -:10C73000F04187680D4604462046F6F736FC98B16E -:10C7400015B33846A168F6F771FF00281CDD2844B0 -:10C75000401EB0FBF5F606FB05F13846F5F761FF24 -:10C76000A0603046BDE8F081F6F752FA40F233712E -:10C77000F5F757FFA060DFE753E4B36EA44802006B -:10C78000A8480200620100200020BDE8F08190422C -:10C7900028BF704770B50446101B642838BF64205A -:10C7A00025188D4205D8F6F774FF00281CBF2846CF -:10C7B00070BD204670BD808E7047C08E70470844A3 -:10C7C00018449830002A14BF0421002108447047FF -:10C7D00030B491F854300A8E13F00C0F4FF4747C7F -:10C7E0001CBF0CEB821292B21DD08B8E934238BFCD -:10C7F0001A464B8E91F8554014F00C0F1CBF0CEBF1 -:10C8000083139BB217D0C98E994238BF0B460028BC -:10C810000CBF01200020D1189831002818BF042037 -:10C82000084430BC7047022B07BF92003C32D20054 -:10C83000703292B2D9E7022C07BF9B003C33DB0079 -:10C8400070339BB2DFE710F0010F1CBF012070476F -:10C8500010F0020F1CBF0220704710F0040018BF38 -:10C86000082070472DE9F041054617468846012605 -:10C87000084600F06EFC0446404600F06EFC03469D -:10C8800010F0010F18BF012008D113F0020F18BFDC -:10C89000022003D113F0040018BF082014F0010F88 -:10C8A00018BF4FF0010C20D050EA0C0108BF002641 -:10C8B00013F0030F08BF002014F0030F08BF4FF060 -:10C8C000000C95F85410814208BF0020387095F88C -:10C8D0005510614508BF4FF0000C87F801C00028D3 -:10C8E00008BFBCF1000F1CD10DE014F0020F18BFFF -:10C8F0004FF0020CD8D114F0040F14BF4FF0080C05 -:10C900004FF0000CD0E7404600F02DFCB5F8581071 -:10C91000401A00B247F6FE71884201DC002800DCB4 -:10C9200000263046BDE8F08101281CBF0228002007 -:10C93000704718B4CBB2C1F3072CC1B2C0F30720C3 -:10C94000012B05D0022B08BFBCF1020F1BD002E067 -:10C95000BCF1010F17D0012904D0022908BF022819 -:10C9600011D001E001280ED001EA0C0161F30702A9 -:10C9700010EA030060F30F22D0B210F0020F18BFCC -:10C9800002200BD106E0084003EA0C01084060F3E6 -:10C990000702EFE710F0010018BF01208DF800003A -:10C9A000C2F3072010F0020F18BF022003D110F0CD -:10C9B000010018BF01208DF80100BDF8000018BC6F -:10C9C0007047162A10D12A220C2818BF0D280FD024 -:10C9D0004FF0230C1F280DD031B10878012818BF63 -:10C9E000002805D0162805D0002070470120704788 -:10C9F0001A70FBE783F800C0F8E7012902D002298A -:10CA000005D007E0002804BF40F2E240704740F63E -:10CA1000C410704700B5FFDF40F2E24000BD0000E7 -:10CA2000282107F044BC4078704730B505460078AF -:10CA300001F00F0220F00F0010432870092910D2D6 -:10CA4000DFE801F0050705070509050B0D000624C1 -:10CA500009E00C2407E0222405E0012403E00E2471 -:10CA600001E00024FFDF6C7030BD007800F00F00A3 -:10CA700070470A68C0F803208988A0F8071070473B -:10CA8000D0F803200A60B0F80700888070470A6871 -:10CA9000C0F809208988A0F80D107047D0F8092047 -:10CAA0000A60B0F80D00888070470278402322F0B9 -:10CAB000400203EA81111143017070470078C0F30E -:10CAC000801070470278802322F0800203EAC111AF -:10CAD0001143017070470078C0097047027802F076 -:10CAE0000F02072A16BF082AD0F80520D0F8032025 -:10CAF000C1F809200CBFB0F80920B0F80720A1F850 -:10CB00000D200A7822F080020A700078800942EA3B -:10CB1000C0100870704770B514460E4605461F2AAF -:10CB200088BFFFDF2246314605F1090007F040FBD0 -:10CB3000A01D687070BD70B544780E460546062C81 -:10CB400038BFFFDFA01F84B21F2C88BF1F242246DE -:10CB500005F10901304607F02BFB204670BD70B58A -:10CB600014460E4605461F2A88BFFFDF224631467F -:10CB700005F1090007F01CFBA01D687070BD70B5C1 -:10CB800044780E460546062C38BFFFDFA01F84B24E -:10CB90001F2C88BFFFDF224605F10901304607F050 -:10CBA00007FB204670BD0968C0F80F1070470A885F -:10CBB000A0F8132089784175704790F8242001F07F -:10CBC0001F0122F01F02114380F82410704707292B -:10CBD00088BF072190F82420E02322F0E00203EA36 -:10CBE0004111114380F8241070471F3007F096BCA4 -:10CBF00010B5044600F0E3FA002818BF204410BD29 -:10CC0000C17811F03F0F1BBF027912F0010F002213 -:10CC1000012211F03F0F1BBF037913F0020F002315 -:10CC200001231A4402EB4202530011F03F0F1BBFD5 -:10CC3000027912F0080F0022012203EB420311F0E7 -:10CC40003F0F1BBF027912F0040F00220122134490 -:10CC500011F03F0F1BBF027912F0200F00220122BA -:10CC600002EBC20203EB420311F03F0F1BBF02793C -:10CC700012F0100F0022012202EB42021A4411F0BE -:10CC80003F0F1BBF007910F0400F0020012010441F -:10CC900010F0FF0014BF012100210844C0B270470A -:10CCA00070B50278417802F00F02082A4DD2DFE811 -:10CCB00002F004080B4C4C4C0F14881F1F280AD993 -:10CCC00043E00C2907D040E0881F1F2803D93CE02F -:10CCD000881F1F2839D8012070BD4A1E242A34D845 -:10CCE0008446C07800258209032A09D000F03F0459 -:10CCF000601C884204D86046FFF782FFA04201D939 -:10CD0000284670BD9CF803004FF0010610F03F0F5D -:10CD10001EBF1CF10400007810F0100F13D0644601 -:10CD20000421604600F04BFA002818BF14EB000005 -:10CD3000E6D0017801F03F012529E1D28078022177 -:10CD4000B1EB501FDCD3304670BD002070BDC07801 -:10CD5000800970470178002201F00F030121042BA4 -:10CD60000BD0082B1CBF0020704743780E2B04BF4C -:10CD7000C3785FEA931C04D106E04078801F1F2827 -:10CD800000D911460846704713F03F0F1EBF0079C7 -:10CD900010F0010F10F0020FF4D1F2E710B4017897 -:10CDA00001F00F01032920D0052921D14478B0F8E2 -:10CDB0001910B0F81BC0B0F81730827D222C17D1A3 -:10CDC000062915D3B1F5486F98BFBCF5FA7F0FD28D -:10CDD00072B1082A98BF8A420AD28B429CBFB0F82F -:10CDE0001D00B0F5486F03D805E040780C2802D04C -:10CDF00010BC0020704710BC012070472DE9F041A5 -:10CE00001F4614460D00064608BFFFDF2146304688 -:10CE100000F0D5F9040008BFFFDF30193A46294673 -:10CE2000BDE8F04107F0C4B9C07800F03F0070479A -:10CE3000C02202EA8111C27802F03F021143C170A0 -:10CE40007047C9B201F00102C1F340031A4402EB7A -:10CE50004202C1F3800303EB4202C1F3C00302EBC1 -:10CE60004302C1F3001303EB43031A44C1F340131D -:10CE700003EBC30302EB4302C1F380131A4412F025 -:10CE8000FF0202D0521CD2B20171C37802F03F01FE -:10CE900003F0C0031943C170511C417070472DE964 -:10CEA000F0410546C078164600F03F04C4F1240066 -:10CEB0000F46B042B8BFFFDF281932463946001D81 -:10CEC00007F076F9A019401C6870BDE8F0812DE9E3 -:10CED000F04105464478C0780F4600F03F06002C2C -:10CEE00008BFFFDFA01B401E84B21F2C88BF1F2479 -:10CEF0002FB1A819011D2246384607F059F92046DE -:10CF0000BDE8F0814078704700B5027801F0030376 -:10CF100022F003021A430270012914BF02290021E2 -:10CF200004D0032916BFFFDF012100BD417000BD01 -:10CF300000B5027801F0030322F003021A430270E5 -:10CF4000012914BF0229002104D0032916BFFFDFE5 -:10CF5000012100BD417000BD007800F00300704762 -:10CF6000417889B1C0780E2818BF0F2803D0102847 -:10CF700018BF192802D3FB2904D905E0BF4A105C69 -:10CF8000884201D1012070470020704730B501244C -:10CF90000546C17019293CBFB848445C02D3FF293B -:10CFA00018BFFFDF6C7030BD70B515460E460446E5 -:10CFB0001B2A88BFFFDF65702A463146E01CBDE8AA -:10CFC000704007F0F5B8B0F807007047B0F80900F6 -:10CFD0007047C172090A01737047B0F80B007047BF -:10CFE00030B4B0F80720A64DB0F809C0B0F805304D -:10CFF0000179941F2D1998BFBCF5FA7F0ED269B143 -:10D00000082998BF914209D293429FBFB0F80B0004 -:10D01000B0F5486F012030BC98BF7047002030BC8D -:10D020007047001D07F07ABA021D0846114607F046 -:10D0300075BAB0F809007047007970470A68426015 -:10D0400049688160704742680A608068486070473C -:10D050000988818170478089088070470A68C0F814 -:10D060000E204968C0F812107047D0F80E200A60F0 -:10D07000D0F81200486070470968C0F81610704771 -:10D08000D0F81600086070470A68426049688160FD -:10D09000704742680A608068486070470968C160EC -:10D0A0007047C06808607047007970470A6842603E -:10D0B00049688160704742680A60806848607047CC -:10D0C0000171090A417170478171090AC171704784 -:10D0D0000172090A417270478172090AC172704770 -:10D0E00080887047C08870470089704740897047C2 -:10D0F00001891B2924BF4189B1F5A47F07D3818809 -:10D100001B2921BFC088B0F5A47F012070470020F3 -:10D1100070470A68426049688160704742680A60E7 -:10D12000806848607047017911F0070F1BBF407994 -:10D1300010F0070F002001207047017911F0070F50 -:10D140001BBF407910F0070F0020012070470171CC -:10D15000704700797047417170474079704781711D -:10D16000090AC1717047C088704746A282B0D2E9EF -:10D170000012CDE900120179407901F007026946F9 -:10D180001DF80220012A07D800F00700085C0128DA -:10D190009EBF012002B07047002002B070470171AD -:10D1A000704700797047417170474079704730B5DA -:10D1B0000C460546FB2988BFFFDF6C7030BDC37885 -:10D1C000024613F03F0008BF70470520127903F0B4 -:10D1D0003F0312F0010F36D0002914BF0B20704717 -:10D1E00012F0020F32D0012914BF801D704700BF1A -:10D1F00012F0040F2DD0022914BF401C704700BF4D -:10D2000012F0080F28D0032914BF801C704700BFFC -:10D2100012F0100F23D0042914BFC01C704700BFA8 -:10D2200012F0200F1ED005291ABF1230C0B270476D -:10D2300012F0400F19D006291ABF401CC0B2704727 -:10D24000072918D114E00029CAD114E00129CFD14F -:10D2500011E00229D4D10EE00329D9D10BE0042931 -:10D26000DED108E00529E3D105E00629E8D102E096 -:10D27000834288BF7047002070470000AC4802001E -:10D2800086F3FFFF00010102010202032DE9F041D4 -:10D29000FA4D0446284600216A78806801270E4628 -:10D2A00012B1012A1ED006E090F86620002A18BFAD -:10D2B0006F7000D001216A78C2EB421200EB42028B -:10D2C00092F82830194324D0667090F8D90002F102 -:10D2D0002A0170B12A22201D06F06AFF0420207066 -:10D2E00027710DE090F82820002A18BF6E70E1D158 -:10D2F000E1E73C22201D06F05BFF0520207027712E -:10D300006878A968C0EB401001EB400080F8286005 -:10D310001DE090F8A410E9B190F8D900012818BFD9 -:10D32000FFDFA868D0F8A5106160D0F8A910A1604F -:10D33000D0F8AD10E160D0F8B110216190F8B510CF -:10D340002175667013212170277180F8A460012077 -:10D35000BDE8F08190F82210012922D0017801293E -:10D360001CBF0020BDE8F081667014212170811C73 -:10D370002022201D06F01CFF2672A9680E70C048EE -:10D3800082888284D0F8C420527B80F8262080F8DE -:10D390002270D1F8C4000088F3F73CFCF3F7E3F8FF -:10D3A000D5E7667007212170416A616080F82260CC -:10D3B000CDE7B24880680178002914BF80884FF615 -:10D3C000FF7070472DE9F84F4FF000088946064678 -:10D3D0000127CDF80080FFF748FBBDF80010A74DEE -:10D3E00021F06004ADF8004008284FD2DFE800F0DB -:10D3F00004070D4E184E132C44F003000DE044F0CA -:10D400001500ADF80000474641E044F0100000BFB1 -:10D41000ADF800003BE044F0020040F01000F7E7F8 -:10D42000A86890F8E000052818BFFFDF44F01A0054 -:10D43000ADF80000A96891F8E710002914BF40F08A -:10D44000010020F00100E3E7A86890F8E01003294C -:10D450000AD090F8E010062958D090F8E00004288F -:10D4600018BFFFDF5FD012E03046FFF770FC0028E6 -:10D4700018BFFFDF0AD1F07810F03F0F1FBF3079DF -:10D4800010F0020F44F00400ADF800004746BDF86C -:10D4900000000090BDF80000C0F3C00BA868CBEB03 -:10D4A0004B1A00EB4A0090F82800002818BFBDE88E -:10D4B000F88F3046FFF7D9FA80467048806800EB55 -:10D4C0004A0190F8C90001F12A04012808BF01258A -:10D4D00003D0022814BFFFDF0225257300206073EC -:10D4E0006648806890F8E11084F83B10FF21A17332 -:10D4F0007F21E176BDF80010618190F8E0100429E9 -:10D500001CBF90F8E01006293AD044E044F00A012C -:10D51000ADF8001090F8FA00002814BF41F00400A4 -:10D5200021F0040074E73046FFF711FCD8B1012860 -:10D5300004BF44F00100ADF8000014D0022818BF69 -:10D54000FFDFA4D144F00200ADF80000A96891F813 -:10D55000FA10002914BF40F0040020F00400ADF8D8 -:10D560000000474693E7F07810F03F0F1FBF307977 -:10D5700010F0020FBDF8000040F0040087D047E72C -:10D5800090F8E200012808BF012503D0022814BF4B -:10D59000FFDF0225657304F10900384D00902878FB -:10D5A0007F2808BFFFDF2978009801707F2028704E -:10D5B0006FB1B8F1070F04F11C01304603D2FFF739 -:10D5C000BAFA207239E0FFF782FC207204E00020F2 -:10D5D0002072B8F1070F30D3B8F1070F0DD1A8684A -:10D5E00090F8F91001B3D0F8EA10C4F80210B0F8BE -:10D5F000EE10E18090F8F0006070A07A10F0040F57 -:10D600000ED0A86890F8FA10E9B190F8F7102175DB -:10D61000D0F8F110C4F81510B0F8F500A4F819000E -:10D62000B8F1070F38D098E0F07810F03F0F1ABF2C -:10D63000307910F0010FFF20DED0621CA11C3046B3 -:10D6400001F071FDD9E7B8F1070F1CBFB8F1010F68 -:10D65000FFDFB9F1000F08BFFFDF99F80000207568 -:10D66000B8F1010F03D0B8F1070F0BD075E004F14A -:10D6700015013046FFF712FA6FE000006401002048 -:10D68000CC10002001213046FFF7B2FA0168C4F83F -:10D6900015108088A4F81900F07810F03F0F1CBF17 -:10D6A000317911F0080F1AD0A86890F8E020042A08 -:10D6B00006D090F8E000032811D111F0100F0ED021 -:10D6C00003213046FFF794FA407803210009A07344 -:10D6D0003046FFF78DFA0088C0F30B002082F07807 -:10D6E00010F03F0F1CBF307910F0400F13D0FA48F4 -:10D6F000FFF72DFBA96891F8E020032A14D006213A -:10D700003046FFF775FA0078E076A86890F8E010E8 -:10D71000062922D118E0A86890F8FB10002918BF4C -:10D7200090F8F800F0D1F0E791F8C910042914BF7F -:10D7300008290028E3D1F07810F03F0F1CBF3079A2 -:10D7400010F0080FDBD1E0E790F8E9100909A173A8 -:10D75000B0F8E800C0F30B002082A968012001EBBB -:10D760004A0181F82800BBF1000F14BF06200520F4 -:10D77000BDE8F84F03F0F4B82DE9F041D74DAA68A1 -:10D7800092F8D930002B6ED07F27012611B109788D -:10D79000FE2914D0804692F82800002818BFBDE862 -:10D7A000F08102F12A044046FFF75FF900210828C2 -:10D7B00079D2DFE800F0515356787878595CC64C3E -:10D7C00092F8A400002818BFBDE8F08182F8A66096 -:10D7D00092F8DD0018B1F6F76CFE012829D020463A -:10D7E000FFF76CF90146A86880F8A71000F1A801BE -:10D7F0002046FFF745F92046FFF76DF90146A86876 -:10D8000080F8AE1000F1AF012046FFF747F9A86895 -:10D8100000F1B50428787F2808BFFFDF2878207042 -:10D820002F70A86880F8A460BDE8F041052003F0DF -:10D8300097B8F6F781FEA96801F1A802A731FDF7B4 -:10D84000DDFF002808BFFFDFA86890F8A71041F0AF -:10D85000020180F8A710CEE7A17209E0A67221723A -:10D860000CE0032001E021E00220A07200E0FFDFD5 -:10D8700004F10B014046FFF75EF92072621CA11C07 -:10D88000404601F050FC287809347F2808BFFFDFAC -:10D89000287820702F70A86880F82860BDE8F041D3 -:10D8A000052003F05DB82172BDE8F081BDE8F041CC -:10D8B00088E570B5894C0022A06890F8C910104620 -:10D8C00002F0A8FE002831D0F7F735FBA0688449A4 -:10D8D00090F8DF000D5C2846F7F75CF8A06880F848 -:10D8E000E15090F8C910082916BF04290F202520FF -:10D8F000F6F75DFFA068002190F8C9200120F7F736 -:10D9000050F97548F7F720FBA068D0F80001F7F749 -:10D910001EFBA06890F8C91080F8E21090F8C800CB -:10D92000032814BF0228012908D103E0BDE8704094 -:10D9300001F032BC08210020F7F707FCA06890F83E -:10D94000C91080F8E210F7F7DDFBA06890F8DD0061 -:10D9500020B1F6F77AFD4020F7F7A8FBA168032075 -:10D9600081F8E00070BD2DE9F0410F469046054674 -:10D970000321FFF73DF94078584C0209A06890F860 -:10D98000E91062F3071180F8E91003212846FFF738 -:10D990002FF90188A068B0F8E82061F30B02A0F825 -:10D9A000E82080F8E77090F8C910012905D090F8B8 -:10D9B000E000032808BFBDE8F081E8784FF00106D9 -:10D9C00010F03F0F1CBF287910F0400F09D006213E -:10D9D0002846FFF70DF90178A06880F8F81080F864 -:10D9E000FB60A06890F8E01003292AD0E97811F0D4 -:10D9F0003F0F1CBF297911F0010F08D000F1F00290 -:10DA0000911F284601F08FFBA06880F8F960E87844 -:10DA100010F03F0F1ABF287910F0020FBDE8F08117 -:10DA200001212846FFF7E4F8A1680268C1F8F12057 -:10DA30008088A1F8F50081F8F78081F8FA60BDE8E8 -:10DA4000F081022F18BF012FD0D1BDE8F08123490A -:10DA5000896881F80A01704770B5204DA86890F870 -:10DA6000E010022919BF90F8E010012900210C46AE -:10DA70001CBF0C2070BD00BFC1EB411200EB420285 -:10DA8000034682F82840491CC9B20229F4D3047025 -:10DA900080F8224093F8DD0030B1F7F719FBF6F774 -:10DAA000E8FCA86880F8DD40A868012180F8DC4027 -:10DAB00080F8C11080F8C84080F8DF40282180F845 -:10DAC0000B1180F80A41A0F8E34080F8E5400721F7 -:10DAD00080F8C010002070BDD81100206401002023 -:10DAE000D4480200F74810B58068002180F8E010A3 -:10DAF000012180F8E010FFF7AFFF002818BFFFDF1B -:10DB000010BD2DE9F047EF4C07460C26A06890F8B1 -:10DB1000E01001291FBF90F8E00002280C20BDE8AA -:10DB2000F087F6F778FEA06890F90A01F6F720FF73 -:10DB3000A06890F8C91080F8E21090F8C010012594 -:10DB4000002978D090F8C8004FF00009032802D0CF -:10DB5000022805D008E00521DB4801F0ADFB03E019 -:10DB60000321D94801F0A8FBA06890F8D81000293B -:10DB700004BF90F8DB00002843D0F5F749F80646CB -:10DB8000A0683146D0F8D400F5F750FDCF4990FB9E -:10DB9000F1F801FB180041423046F4F742FD01461E -:10DBA000A068C0F8D410D0F8D0104144C0F8D0100C -:10DBB000FDF7F3FD0146A068D0F8D020914220D8AF -:10DBC000C0E9349690F8DB0000281CBF0120FDF767 -:10DBD00008FF0121A06890F8DC20002A1CBF90F803 -:10DBE000D820002A0DD090F8B93000F1BA02012BEC -:10DBF00004D1527902F0C002402A14D0BA30F7F7AB -:10DC000085FEA06890F8B910BA30F6F769FE0F21CA -:10DC10000720F6F781FEA068002690F8E0100129A1 -:10DC200018D112E007E0FDF709FFA1682A46BA31D2 -:10DC3000F7F735FEE5E790F8E010022904BF80F819 -:10DC4000E0500C2006D1BDE8F08780F80451022195 -:10DC500080F8E010A06890F8C10088B1FDF769FE77 -:10DC600003219B48FDF7A1FE0146A06880F8DD1066 -:10DC7000C0F800719748F7F750F93046BDE8F087D3 -:10DC8000FDF700FEECE738B58E4CA06890F8E01088 -:10DC900002291CBF0C2038BD012180F80511A0F815 -:10DCA000081129208DF800006846F5F7F3FF30B120 -:10DCB000A0689DF8001090F80601884205D1A06880 -:10DCC00090F80601401C8DF80000A1689DF8000046 -:10DCD00081F806010220F7F734F97F48F6F752FE83 -:10DCE000A168DFF8F8C1002091F8C03091F8DF207A -:10DCF000521CACFB02546408A4EB8404224481F857 -:10DD0000DF2023FA02F212F0010F03D1401CC0B24F -:10DD10000328EBD3FFF7CDFD002038BD69498968A2 -:10DD200081F8C900002070476649896881F8DA00E7 -:10DD3000704710B5634CA36893F8B830022B14BF3A -:10DD4000032B00280BD100291ABF02290120002033 -:10DD50001146FDF725FD08281CBF012010BDA06855 -:10DD600090F8B800002816BF022800200120BDE866 -:10DD70001040F7F755BD5348806890F8B800002868 -:10DD800016BF022800200120F7F74ABD4D498968D7 -:10DD900081F8B80070474B49896881F8DC0070470A -:10DDA00070B5484CA16891F8B800002816BF022849 -:10DDB0000020012081F8B900BA31F7F71BFDA068F7 -:10DDC00090F8B810022916BF03290121002180F81C -:10DDD000DB1090F8B920002500F1BA03012A04BF36 -:10DDE0005B7913F0C00F0AD000F1BA03012A04D105 -:10DDF0005A7902F0C002402A01D0002200E001223C -:10DE000080F8D820002A04BF002970BDC0F8D05087 -:10DE1000F4F7FEFEA168C1F8D40091F8DB000028F9 -:10DE20001CBF0020FDF7DDFD0026A06890F8DC1087 -:10DE300000291ABF90F8D810002970BD90F8B920B9 -:10DE400000F1BA01012A04D1497901F0C001402949 -:10DE500005D02946BDE87040BA30F7F757BDFDF749 -:10DE6000EDFDA1683246BDE87040BA31F7F717BD45 -:10DE700070B5144D0C4600280CBF01230023A9687F -:10DE800081F8C13081F8CB004FF0080081F8CC0058 -:10DE90000CD1002C1ABF022C012000201146FDF7E6 -:10DEA0007FFCA968082881F8CC0001D0002070BD53 -:10DEB000022C14BF032C1220F8D170BD002818BF0B -:10DEC00011207047640100200012002040420F0022 -:10DED000D8110020D1480200D7480200ABAAAAAA54 -:10DEE0000328FE4A926808BFC2F8C41082F8C8002E -:10DEF0000020704710B5044602F018FF052809D02D -:10DF000002F014FF042805D0F448806880F8D94056 -:10DF1000002010BD0C2010BDF048816891F8C800A9 -:10DF2000032804D0012818BF022807D004E091F884 -:10DF3000CB00012808BF70470020704791F8CA0045 -:10DF4000012814BF03280120F6D1704710B5F7F758 -:10DF5000A1F8F7F780F8F6F77BFFF6F7E4FFDF4C60 -:10DF6000A06890F8DD0038B1F7F7B2F8F6F781FA5B -:10DF7000A168002081F8DD00A068012180F804116B -:10DF8000022180F8E010002010BDD449896881F892 -:10DF9000FC007047017801291CBF122070474278AD -:10DFA0000023032ACD49896808BFC1F8C43081F82D -:10DFB000C820012281F8C920C27881F8B8200279EE -:10DFC000002A16BF022A0123002381F8C13081F8FC -:10DFD000CA20427981F8C020807981F8DA000020D7 -:10DFE0007047BE488068704701F0D6B82DE9F84FF9 -:10DFF0004FF00008B948F7F790F8B84C4FF07F0A97 -:10E00000002808BF84F800A0F7F772F8B448FEF7BC -:10E010002CFDA070A16891F8E220012A18BFFFDF53 -:10E020000AD0A06890F8DD0018B1F7F751F8F6F7BC -:10E0300020FA4046BDE8F88FA94D0026A5F5867761 -:10E04000072836D291F8C10028B9F6F793FC0028CA -:10E0500008BF002600D00126A06890F8DD0080B13E -:10E06000FDF7F5FBA168FF2881F8DE000ED0014620 -:10E07000E81CFDF7E1FBA06890F8DE00FDF7F2FB7D -:10E080000643A06890F8DE00FF2817D1FDF781FC59 -:10E0900087F8DE0097F8C11081B108280ED12878E2 -:10E0A000E91CC0F38010FDF77BFB082818BF002691 -:10E0B00004E002BF91F8D90000280126A0784FF0B3 -:10E0C00000094FF0010B08281BD2DFE800F035AF44 -:10E0D000041A1A1A12F9002E00F06581A06890F84F -:10E0E000C800012818BF022840F05D81F6F7B0FE95 -:10E0F0007AE036B1A06890F8C800022806D001285E -:10E1000072D0F6F7A5FE4FF003088AE700217448A5 -:10E11000FFF732FBA0684FF00808C0F8E790C0F89E -:10E12000EB90C0F8EF90C0F8F390C0F8F79080F84B -:10E13000FB9080F8E79074E74FF00008002E00F0A5 -:10E140003281A26892F8C80002282DD001284BD055 -:10E1500003287FF466AFD2F8C400E978837E994241 -:10E160001BD12979C37E994217D16979037F9942DE -:10E1700013D1A979437F99420FD1E979837F9942DD -:10E180000BD1297AC37F994207D12978437EC1F305 -:10E190008011994208BF012100D0002192F8CB20C4 -:10E1A000012A26D0A9B3FBE000214D48FFF7E4FA8D -:10E1B000A06890F8051129B1491E11F0FF0180F8FF -:10E1C00005117CD1C0F8E790C0F8EB90C0F8EF9053 -:10E1D000C0F8F390C0F8F79080F8FB904FF0080873 -:10E1E00080F8E7B01DE7FFE700213D48FFF7C4FADC -:10E1F00019E0002965D100BF00F11A013848FEF787 -:10E200003FFC3748FEF75AFCA168D1F8C4104876A5 -:10E21000C6E0FFE797F8CC00082850D097F8DE104A -:10E2200081424ED0BFE04FF00308FAE6A06890F8B4 -:10E23000DB1000290CBF4FF0010B4FF0000B4FF02B -:10E240000008297805F10902C90907D0517901F0C0 -:10E25000C001402908BF4FF0010901D04FF000096B -:10E2600090F8C810032906D190F8C110002918BFF2 -:10E2700090F8CC0001D190F8DE00FDF7ADFA5FEA2E -:10E28000000A13D01021FEF730F9002818BF4FF014 -:10E29000010BB9F1000F04BFA06890F8B9A00DD030 -:10E2A00005F109015046F7F7C9FA8046A068B9F1AF -:10E2B000000F90F8B9A018BF4AF0020A02E072E01D -:10E2C0008CE06DE090F8C810032913D0F6F7C0FD7C -:10E2D000DEB3F6F71DFB50EA080003E064010020FE -:10E2E000D811002062D08DF800A06946FD48FFF7E4 -:10E2F00043FA98E7D0F8C400E978827E91421BD1B6 -:10E300002979C27E914217D16979027F914213D156 -:10E31000A979427F91420FD1E979827F91420BD155 -:10E32000297AC27F914207D12978407EC1F38011BA -:10E33000814208BF012500D0002597F8DE0008289B -:10E3400008D097F8CC10884200E02FE008BF4FF0CB -:10E35000010901D04FF00009B8F1000F05D1BBF160 -:10E36000000F04D0F6F7D4FA08B1012000E0002035 -:10E370004EB197F8CB10012903D021B955EA090114 -:10E3800001D0012100E0002108420CD0A06890F8E3 -:10E39000CB10012904BF002DD0F8C4003FF42CAFEE -:10E3A0004FF00A083DE6F6F753FD3CE7A06890F809 -:10E3B000CA00032818BF02287FF435AFB9F1000F57 -:10E3C0003FF431AFB8F1000F7FF42DAFC648694676 -:10E3D00040680090C348FFF7CFF924E7A06890F8A1 -:10E3E000DA0000283FF48DAEF6F732FDA06890F811 -:10E3F000D91000297FF417AFC0F8E790C0F8EB9070 -:10E40000C0F8EF90C0F8F390C0F8F79080F8FB9058 -:10E4100080F8F8A0B348FEF79AFCE8B301287CD056 -:10E4200002287FF400AFA0684FF0030890F8C800FE -:10E43000032814BF0020012036EA00003FF4F1ADAC -:10E44000A84D1820E97811F03F0F3FF4EAAD297983 -:10E4500088437FF4E6AD04212846FEF7C9FB064653 -:10E46000A06890F8E20002F0CCF80146304600F0D7 -:10E47000B5FE00283FF4D5AD002202212846FFF763 -:10E4800072FA2846FEF763FC0146A06880F8E610A1 -:10E490003188A0F8E31000E005E0B17880F8E510DD -:10E4A0004FF00408BDE5002E3FF4BDAEA06890F823 -:10E4B000C810012918BF02297FF4B5AE894DE9784B -:10E4C00011F03F0F1CBF297911F0020F05D011F098 -:10E4D000010F18BF4FF0010901D14FF000094FF0B3 -:10E4E0000008B9F1000F52D028780027C609012191 -:10E4F0002846FEF77DFB36B1407900F0C000402889 -:10E5000008BF012600D00026A06890F8C810032993 -:10E5100008D190F8C110002900E0AEE018BF90F8D3 -:10E52000CC0001D190F8DE00FDF756F95FEA000853 -:10E530000CD01021FDF7D9FF46B101212846FEF786 -:10E5400057FB01464046F7F779F90746A068002EC9 -:10E5500090F8B98018BF48F00208E87810F03F0F33 -:10E560001CBF287910F0020F0ED02846FEF7B3FA30 -:10E57000824601212846FEF73BFB5146F6F7B8F9E3 -:10E58000002818BF012000D1002038435FD0E87870 -:10E5900010F03F0F1EBF297911F0100F11F0080F76 -:10E5A00041D004212846FEF723FB0646A06890F8D8 -:10E5B000E20002F026F80146304600F00FFEA0B15E -:10E5C000424600212846FFF7CEF94648FEF7BFFB3A -:10E5D0000146A06880F8E6103188A0F8E310B17811 -:10E5E00080F8E5104FF004081BE5A06890F8E20001 -:10E5F00001287FF418AEE87810F03F0F1CBF28798F -:10E6000010F0010F3FF40FAEB9F1000F04D100215B -:10E610002846FEF7D7FE06E68DF8008069462846B4 -:10E62000FEF7D0FEFFE510F03F0F1CBF297911F077 -:10E63000100F7FF4F8AD10F03F0F1CBF287910F0D9 -:10E64000010F3FF4F0ADB9F1000FE5D1DFE7A068AD -:10E6500090F8CA00032818BF02287FF4E4AD002E0A -:10E660003FF4E1AD002F7FF4DEAD1F48694600683E -:10E6700000902846FEF7A6FED5E5002E3FF4D3AD68 -:10E68000184D1820E97811F03F0F3FF4CCAD2979EF -:10E6900088437FF4C8AD04212846FEF7A9FA064650 -:10E6A000A06890F8E20001F0ACFF0146304600F0AF -:10E6B00095FD00283FF4B7AD002201212846FFF761 -:10E6C00052F92846FEF743FB0146A06880F8E610A1 -:10E6D0003188A0F8E310B17880F8E5104FF0040815 -:10E6E0009FE40000D8110020C84802002DE9F04145 -:10E6F000FD4CA0680078002818BFFFDF0025A06847 -:10E7000001278570D0F8C4100A8882804A88428325 -:10E710008A888283C988C18380F82050F34990F8A1 -:10E72000DB20A1F59A764AB10A78C2F38013CA1C9D -:10E7300023B1527902F0C002402A33D090F8DC2095 -:10E7400042B111F8032BC2F380121AB1497911F0CA -:10E75000C00F27D00E3005F0CFFEA06890F8DD0086 -:10E7600018B1F5F7A6FE012824D0A068D0F8C4108F -:10E770004A7EC271D1F81A208260C98B81814561BD -:10E780000583A0680770D0F8C42090F80A1182F8B9 -:10E790005710D0F8C4000088F2F73CFABDE8F04109 -:10E7A000F1F7D2BED6F83711C0F80E10B6F83B110B -:10E7B0004182D2E7F5F7C0FEA16801F10802C91D48 -:10E7C000FDF71CF8002808BFFFDFA068C17941F001 -:10E7D0000201C171D6F80F114161B6F8131101831E -:10E7E000CFE72DE9F84FC04C0546FF21A068002770 -:10E7F0004FF0010980F8DE1090F8C800BA460128F1 -:10E8000018BF022802D0032818BFFFDF28004FF0EE -:10E81000040B4FF07F08B54EA6F1280500F04B81A0 -:10E820002846FEF73DFA28B92846FEF793FA002855 -:10E8300000F04181A06890F8E000082880F038815D -:10E84000DFE800F0FEFEFE04080CCF7BFFF7CEFBF6 -:10E8500000F0C5B800F093FD00F0C1B8A448FEF781 -:10E8600004F92071E878717A88421CD12879B17A4C -:10E87000884218D16879F17A884214D1A879317B1D -:10E88000884210D1E879717B88420CD1287AB17B1B -:10E89000884208D128783178C0F38010B0EBD11FBE -:10E8A00008BF012500D00025F6F7D2FA8E48F6F70A -:10E8B00034FC002808BF84F80080F6F719FC2079A2 -:10E8C000042840F04D81002D00F04A81CDF800A0D1 -:10E8D000A2688748694692F8D93053B3064692F841 -:10E8E0006600002840F03C8102F1680582F872B0B1 -:10E8F0006932A91C304600F016FC05F10B013046C8 -:10E90000FEF73DF9C0B228721F2884BF1F2028726D -:10E91000207809357F2808BFFFDF2078287084F829 -:10E920000080A06880F86690062002F019F800F0D8 -:10E9300017B9FEF747FD00F013B903276A48F6F749 -:10E94000ECFB002808BF84F80080F6F7D1FB68488C -:10E95000FEF78BF880466648FEF7F9F9B8F1080F24 -:10E9600008BF00283AD1E978032011F03F0F35D0D5 -:10E970002979884332D100215D48FEF739F9062212 -:10E9800006F1090105F0E8FB40BB5948FEF796F88F -:10E9900080465648FEF79FF880451FD10121544814 -:10E9A000FEF726F90622F11C05F0D6FBB0B9504857 -:10E9B000FEF791F880464D48FEF780F880450DD16E -:10E9C000F6F768FBF6F747FBF6F742FAF6F7ABFA0D -:10E9D0000227FFF78BFE042001F0C2FF38460746EE -:10E9E000B2E0F6F735FA4048F6F797FB002808BF83 -:10E9F00084F80080F6F77CFB3D48FEF736F80746C2 -:10EA00003B48FEF7A4F9072F08BF00284FD1E9784B -:10EA1000012011F03F0F4AD02979884347D10021C6 -:10EA20003348FEF7E5F8062206F1090105F094FBEC -:10EA300000283CD12E48FEF741F805462B4800E05F -:10EA400036E0FEF748F8854231D1A06890F804110D -:10EA500029B3B0F8082190F80611012A05D9520807 -:10EA6000A0F8082108BFA0F80891012914BF0029C7 -:10EA70000D21C943C1EBC10202EB011190F8052140 -:10EA8000D24302EB8203C3EB82121144B0F8082197 -:10EA9000890CB1FBF2F302FB131180F8051180F829 -:10EAA000049169461248CDF800A0FEF78BFC57E0B0 -:10EAB000FFDFBDE8F88FA06890F8E000082843D297 -:10EAC000DFE800F0424242041F2E3F350648F6F7C9 -:10EAD00024FB002808BF84F80080F6F709FBA06833 -:10EAE00090F8DD0050B105E0640100200012002024 -:10EAF000D8110020F6F7ECFAF5F7BBFCF6F7A8F909 -:10EB00002EE0FE48F6F709FB002808BF84F80080D5 -:10EB1000F6F7EEFAA06890F8DD000028EED0E2E704 -:10EB2000F648F6F7FAFA38B984F8008004E0F348BA -:10EB3000F6F7F3FA0028F7D0F6F7DAFAF6F788F9DD -:10EB40000EE000F02FFE0BE00C2F80F01982DFE8C2 -:10EB500007F006FDFC07FBFAFAFA0BF94FBBA8E732 -:10EB6000BDE8F84FFEF7A5BE00220121022001F00A -:10EB700051FD002800F04181E149A1F12800FDF795 -:10EB8000ADFFA068DE4E90F8B9103046FDF78DFF5E -:10EB9000A06800F1BA013046FDF76BFFA06890F85D -:10EBA000DB10C1B190F8C810032906D190F8C1104C -:10EBB000002918BF90F8CC0001D190F8DE00FCF7D6 -:10EBC0003FFF050007D001213046FDF76EFF2946C3 -:10EBD0003046FDF74EFFCA48F6F7B6F90121084660 -:10EBE000F6F7B3FAA168082081F8E000BDE8F88FD5 -:10EBF000A06890F8E21090F8E2100022032001F0E3 -:10EC000009FD00287ED0BF4F0A2087F8E0000120D0 -:10EC100001F0A6FE07F59A71A1F12800FDF75EFF4D -:10EC2000A06807F59A7890F8B9104046FDF73DFFC7 -:10EC3000A06800F1BA014046FDF71BFFA06890F8FC -:10EC4000DB10C9B190F8C810032906D190F8C110A3 -:10EC5000002918BF90F8CC0001D190F8DE00FCF735 -:10EC6000EFFE5FEA000907D001214046FDF71DFFD6 -:10EC700049464046FDF7FDFEA268A149D2F8C4000E -:10EC8000C08AC875000A0876D2F8C400407DB07505 -:10EC90000846F6F759F99A48D7F8C41020230278A5 -:10ECA000497B22F0200203EA411111430170D7F899 -:10ECB000C4002A78417BC2F340121140417397F897 -:10ECC0000B01D7F8C4106FE0A06890F8E21090F83C -:10ECD000E2100022052001F09DFC98B1894D0B2027 -:10ECE00085F8E000022001F03BFE05F59A71A1F1E4 -:10ECF0002800FDF7F3FEA06805F59A7790F8B910A3 -:10ED0000384600E079E0FDF7D0FEA06800F1BA01D6 -:10ED10003846FDF7AEFEA06890F8DB10F9B190F828 -:10ED2000C810032906D190F8C110002918BF90F827 -:10ED3000CC0001D190F8DE00FCF782FE5FEA00080B -:10ED40000DD004E034E01BE18EE085E07FE001219E -:10ED50003846FDF7AAFE41463846FDF78AFEA2680E -:10ED60006749D2F8C400C08AC875000A0876D2F88C -:10ED7000C400407DB0750846F6F7E6F8D5F8C40043 -:10ED800080F80D90A06890F8E230012296210020D2 -:10ED9000F5F790FF5A48017821F020010170A06832 -:10EDA000D5F8C41090F80B0181F85600BDE8F88F33 -:10EDB000A06890F8E21090F8E2100022042001F020 -:10EDC00029FCD0B14E49A1F12800FDF787FEA068CB -:10EDD0004B4E90F8B9103046FDF767FEA06800F181 -:10EDE000BA013046FDF745FEA06890F8DB10E9B1A6 -:10EDF00090F8C810032904D00AE0BDE8F84F00F0ED -:10EE0000CBB990F8C110002918BF90F8CC0001D1FF -:10EE100090F8DE00FCF714FE050007D00121304613 -:10EE2000FDF743FE29463046FDF723FE3448F6F74A -:10EE30008BF8A06890F8E230012296210020F5F7C7 -:10EE400039FFA168092081F8E000BDE8F88FA068CB -:10EE500080F8E090BDE8F88FA068022180F8049166 -:10EE600080F8E010BDE8F88FA56815F8E31F11F0F1 -:10EE7000800F0CBF1E204FF49670B5F80120C2F32E -:10EE80000C0212FB00F6C80908BF4FF01E0906D09D -:10EE9000002806BFFFDF4FF000094FF49679A878ED -:10EEA000400908BF012703D0012814BF002702270B -:10EEB000A06890F8E20001F0A4FBA6EB0008287817 -:10EEC00008EB0906C0F38010002808BF4FF4FA7A57 -:10EED00005D006BFFFDF4FF0000A4FF0320A0948A5 -:10EEE00090F8FC90B9F10C0F28BFFFDF0648074AE5 -:10EEF00030F819000AEB00010AE00000640100206C -:10EF000000120020CC100020DC4802003F420F001D -:10EF100001FB0620511CB0FBF1F000F120094E442A -:10EF2000F6F709F8287800F03F052846F5F732FD96 -:10EF3000A06880F8E15039462520F5F738FC012219 -:10EF4000A8EB09013B461046F5F7B4FEFE48F5F77D -:10EF5000FBFF00213046F6F743F8A06880F8E27026 -:10EF6000F6F7D0F8A06890F8DD0020B1F5F76DFA5B -:10EF70005020F6F79BF8A06880F8E0B0BDE8F88F65 -:10EF8000FFDFBDE8F88FF14810B5806890F8E00029 -:10EF90000C285FD2DFE800F05E5E5E5E5E5E5E5E65 -:10EFA0000613472DE848F5F7CFFFF6F7ABF8002139 -:10EFB0009620F6F715F8E5490520896830E0E24823 -:10EFC000F5F7C2FFE14CA06890F8E23001229621EB -:10EFD0001046F5F76FFEA06890F8E2000021962039 -:10EFE000F5F7FEFFF6F78EF8A168062081F8E0003D -:10EFF00010BDD548F5F7A8FFD44CA06890F8E230D2 -:10F00000012296211046F5F755FEA06890F8E2001F -:10F0100000219620F5F7E4FFF6F774F8A1680720C1 -:10F0200081F8E00010BDF6F735F8F6F714F8F5F7BB -:10F030000FFFF5F778FFC5480121806880F80411BB -:10F04000022180F8E010FFF751FBBDE810400320DB -:10F0500001F086BCFFDF10BD70B5BC4CA06890F815 -:10F06000E0007F25082828BF70BDDFE800F03F3FA3 -:10F070003F172304390AB548F6F74FF830B9257021 -:10F0800004E0B248F6F749F80028F8D0F6F730F86F -:10F09000F5F7DEFEBDE87040FEF70BBCAB48F6F7B7 -:10F0A0003CF8002808BF2570F6F722F8BDE870404C -:10F0B00000F072B8A548F6F730F8002808BF2570B0 -:10F0C000F6F716F8A06890F8DD0018B1F6F700F82A -:10F0D000F5F7CFF9F5F7BCFEBDE87040FEF7E9BBE8 -:10F0E00000F060FBBDE87040FEF7E3BB70BD70B59B -:10F0F000964C06460D46012909D0A06890F8E230EA -:10F1000090F8E2203046BDE8704001F0E9BDF5F727 -:10F1100011FBA16891F8E220034629463046BDE87C -:10F12000704001F0DDBD70B50646884814460D46B6 -:10F13000806890F8DD0018B1F5F7BBF901280ED012 -:10F140003046FDF7BBFC20703046FDF78EFC0728EB -:10F1500013D229463046BDE87040FDF791BCF5F763 -:10F16000EBF92A462146FCF749FB002808BFFFDFE0 -:10F17000207840F00200207070BD3046FDF775FC2D -:10F18000072818BF70BD00213046FDF731FD01682A -:10F1900029608088A88070BD10B5F5F77BFFF5F772 -:10F1A0005AFFF5F755FEF5F7BEFE684CA06890F8DB -:10F1B000DD0038B1F5F78CFFF5F75BF9A1680020A9 -:10F1C00081F8DD00A068012180F80411022180F897 -:10F1D000E010BDE81040002001F0C2BB2DE9F04175 -:10F1E000044680780222B2EB501F26D00D462178CB -:10F1F00011F0800F0CBF1E204FF49670B4F8012060 -:10F20000C2F30C0212FB00F6C80908BF1E2105D08C -:10F21000002806BFFFDF00214FF49671701BA27813 -:10F22000520908BF012703D0012A14BF0027022773 -:10F23000B0F5877F28BFAE4202D20020BDE8F08142 -:10F2400045182078C0F38010002808BF4FF4FA76E4 -:10F2500003D006BFFFDF002632263D4890F8FC4071 -:10F260000C2C28BFFFDF3B483B4A30F81400311814 -:10F2700001FB0520511CB0FBF1F020300544334860 -:10F28000806890F8E200F6F7B6F904463846F6F7DB -:10F29000B2F94FF47A7184423ABF001B00F2E730B2 -:10F2A000201AB0FBF1F034BF42192A1A3946BDE8E2 -:10F2B000F041012001F0AEB970B50D460446FDF7EE -:10F2C000AFFB032D55D0052D18BF70BD052120467D -:10F2D000FDF7ABFB1D4DA868D0F8C40000F10E018E -:10F2E0002046FDF760FCA868D0F8C40000F11201C8 -:10F2F0002046FDF75CFCA868D0F8C410497DA175D4 -:10F30000D0F8C410C98AE175090A2176D0F8C41072 -:10F3100049886176090AA176D0F8C4108988E17617 -:10F32000090A2177D0F8C410C9886177090AA17742 -:10F33000D0F8C40000F108012046FDF756FCA8688B -:10F34000D0F8C400017E09E0D8110020640100203B -:10F35000CC100020DC4802003F420F002046FDF7A1 -:10F360002CFCA86890F8FC102046BDE87040FDF722 -:10F370002EBC2046BDE870400321FDF756BB2DE9A9 -:10F38000F84FFD48F5F7C9FEFB4C002804BF7F206D -:10F390002070F5F7ADFEA06890F8D900002818BFDE -:10F3A000FFDFF648FDF761FBDFF8D083E0704FF038 -:10F3B000000998F803004D4610F03F0F1CBF98F865 -:10F3C000040010F0080F14D0EC48FDF7C0FC70B139 -:10F3D000012802D002280AD00BE098F8030010F0B0 -:10F3E0003F0F1CBF98F8040010F0010F01D04FF040 -:10F3F0000109A06890F8DD0018B1F5F769FEF5F78E -:10F4000038F898F803002E4637464FF0000A10F0FF -:10F410003F0F1CBF98F8040010F0020F43D0A06803 -:10F42000DFF858A3002690F8DB0000280CBF012766 -:10F4300000279AF800000121C5095046FDF7D8FBC6 -:10F4400035B1407900F0C000402808BF012500D048 -:10F450000025A06890F8C810032906D190F8C110C3 -:10F46000002918BF90F8CC0001D190F8DE00FCF71D -:10F47000B3F95FEA000B0FD01021FDF736F8002832 -:10F4800018BF012745B101215046FDF7B1FB0146E8 -:10F490005846F6F7D3F90646A068002D90F8B9A0B3 -:10F4A00018BF4AF0020AE0784FF0030B072875D125 -:10F4B000B248FDF74CFC002800F0F280012803D090 -:10F4C000022800F031819FE0009700270321AB481C -:10F4D000FDF78EFBB9F1000F7ED0A16891F8E7200F -:10F4E000012A79D1427891F8E9301209B2EB131F61 -:10F4F00072D10088B1F8E810C0F30B00C1F30B0122 -:10F50000884269D19D48FDF722FCA16891F8E62068 -:10F51000904261D191F8C800012818BF022802D09A -:10F5200003283CD0B9E0F5F793FC98F8030010F0FD -:10F530003F0F1CBF98F8040010F0020F17D08F4F38 -:10F540003846FDF7C8FA804601213846FDF750FBE2 -:10F550004146F5F7CDF9002818BF012030430BD004 -:10F560008DF800A069468548FDF72CFF14E00021C6 -:10F570008248FDF727FF0FE0A06890F8CA00032833 -:10F5800018BF022808D13DB136B97D486946806868 -:10F5900000907A48FDF716FF03277EE034E0002153 -:10F5A0007648FDF725FBA1680622D1F8C4101A3170 -:10F5B00004F0D2FD50B97148FDF780FAA168D1F886 -:10F5C000C410497E884208BF012500D0002598F864 -:10F5D000030010F03F0F00E05CE01CBF98F804004F -:10F5E00010F0020F01D0CEB127E0A06890F8CB1048 -:10F5F000012901D015B10CE05DB937E090F8DE10BB -:10F6000090F8CC00814204D0F5F722FC5846BDE8C2 -:10F61000F88FA06890F8E2000B273EE0009870B1E8 -:10F62000564E3046FDF757FA074601213046FDF7A2 -:10F63000DFFA3946F5F75CF908B1012200E0002253 -:10F64000A06890F8CB10012907D041B92DB990F8E6 -:10F65000DE3090F8CC00834201D1012000E0002090 -:10F66000024217D0012908BF002DD2D10021434802 -:10F67000FDF7BEFAA1680268D1F8C410C1F81A20DB -:10F680008088C8833D48FDF719FAA168D1F8C410F5 -:10F690004876BEE7F5F7DCFB03273846BDE8F88F70 -:10F6A000F5F7D6FB03213548FDF7A2FAB9F1000FB3 -:10F6B00036D0A16891F8E7206ABB427891F8E9302A -:10F6C0001209B2EB131F2BD10088B1F8E810C0F378 -:10F6D0000B00C1F30B01884222D12848FDF737FB0C -:10F6E000A16891F8E62090421AD191F8C80001284B -:10F6F00018BF022814D198F8030010F03F0F1CBF68 -:10F7000098F8040010F0020F06D08DF800A06946AA -:10F710001A48FDF757FE03E000211848FDF752FE96 -:10F720005846BDE8F88F00BFF5F792FBA06890F847 -:10F73000C80003281CD01148FDF709FBA16891F807 -:10F74000E620904214D198F80320092012F03F0FD0 -:10F750000ED098F8042090430AD1B9F1000F07D0D9 -:10F7600091F8C80002280DD000210448FDF72AFEB8 -:10F770000320BDE8F88F000064010020D8110020AC -:10F78000C848020091F8050128B1401E10F0FF00A2 -:10F7900081F80501ECD1524601212348FEF7E3F838 -:10F7A0000920E6E710B5F5F753FB2048F5F7B5FC5F -:10F7B0001E4C002804BF7F202070F5F799FCA0683C -:10F7C00090F8041119B1002180F8041110BDB0F8AF -:10F7D000082190F80611FF2A0AD24FF6FF7303EAB8 -:10F7E0004202A0F80821FF2A84BFFF22A0F80821C6 -:10F7F000012914BF00290D21C943C1EBC10202EB4D -:10F80000011290F80511C94301EB8103C3EB81118B -:10F810001144B0F80821890CB1FBF2F302FB13117B -:10F8200080F80511CFE70000D81100206401002006 -:10F830002DE9FF4F07460C46488881B040F2E2416F -:10F8400048430090E08A002600FB01FB94F8640026 -:10F8500091460D2818BF0C281FD024281EBF94F8ED -:10F86000650024284FF0000A17D0049818B1012130 -:10F87000204602F0B2FB94F8540094F8558094F8B6 -:10F88000D010054661B101296DD0022952D003295B -:10F8900018BFFFDF67D000F0D5B84FF0010AE4E7EA -:10F8A000B9F1000F08BFFFDFFD4EB068002808BFA8 -:10F8B000FFDF94F85410FB4890F82400FDF79DF802 -:10F8C000009094F85400F5F7A5FE00F2E7314FF4EC -:10F8D0007A79B1FBF9F1F24880680E1894F8540077 -:10F8E000F5F798FE014694F85400022804BFEE484C -:10F8F0004FF47A720DD0012804BFEC484FF4C8626F -:10F9000007D0042807BFEA4840F69802E94840F6C5 -:10F91000E4421044084400F2E731B1FBF9F10098E9 -:10F92000401A00EB0B01DE48406930440844061DD4 -:10F93000012015E0DA48A9F101018068084308BFF9 -:10F94000FFDFDD48B9F1000F006800EB0B0606D0C1 -:10F95000D348806800F22230B04288BFFFDF032026 -:10F9600084F8D0006DE094F86410009E24291EBF36 -:10F9700094F86520242A25294FD1B4F85810B4F8FA -:10F98000F020891A491C09B2002946DB94F8F210CC -:10F99000002942D00D4694F8F310002918BF88467C -:10F9A000022804BFC0494FF47A700DD0012804BF6B -:10F9B000BE494FF4C86007D0042807BFBC4940F6D1 -:10F9C0009800BC4940F6E4400144022D04BFB6480B -:10F9D0004FF47A720DD0012D04BFB4484FF4C862C1 -:10F9E00007D0042D07BFB24840F69802B14840F650 -:10F9F000E4421044814208D9081A00F5FA714FF424 -:10FA00007A70B1FBF0F0064407E0401A00F5FA7195 -:10FA10004FF47A70B1FBF0F0361AB9F1000F10D044 -:10FA2000DFF87C92D9F8080020B9B9F80200002864 -:10FA300018BFFFDFD9F8080000F22230B04288BFBB -:10FA4000FFDF06B9FFDF3146D4F8D400F2F7E9FD55 -:10FA5000C4F8D400B860002038704FF0010987F86E -:10FA60000490204602F0A6FBAAF10101084208BF5B -:10FA700087F8059006D094F8D00001280CBF02202A -:10FA8000032078714046D4F824B0F5F7B4FD014660 -:10FA9000022D04BF84484FF47A720DD0012D04BFAB -:10FAA00082484FF4C86207D0042D07BF804840F653 -:10FAB0009802804840F6E4421044084400F23F6156 -:10FAC0004FF47A70B1FBF0F0584400F5C970F8605B -:10FAD000049830EA0A0004BF05B0BDE8F08F314653 -:10FAE0003846FCF724FE85B2204602F063FBA842AC -:10FAF0000FD8054687F8059006FB05F1D4F8D40029 -:10FB0000F2F78FFDB86031463846FCF710FE284406 -:10FB100085B22946204602F060FAB868C4F8D400DD -:10FB200005B0BDE8F08F2DE9F0430446634885B089 -:10FB30000D4690F80004DFF88891400999F8001408 -:10FB40004909884218BFFFDFDFF85481002708F118 -:10FB50004406082D80F00E81DFE805F0046872721B -:10FB60006DFEFEB6202C28BFFFDF36F814000621FC -:10FB7000F0F71EFF050008BFFFDF202C28BFFFDFC6 -:10FB800036F814002988884218BFFFDF95F8D000A6 -:10FB9000002808BFFFDF284601F02EFFC8F80870D4 -:10FBA000A8F8027029460020C8F81470FCF710FE6F -:10FBB00000F19804686AA04225D995F85500F5F738 -:10FBC0001AFD014695F85400022804BF36484FF448 -:10FBD0007A720DD0012804BF34484FF4C86207D0B0 -:10FBE000042807BF324840F69802324840F6E44203 -:10FBF000104408444FF47A7100F23F60B0FBF1F119 -:10FC0000686A0844071B29460020C8F80C70FCF7F6 -:10FC1000DFFD698840F2E24251439830081AA0F2B1 -:10FC20002230C8F8100005B0BDE8F08305B0BDE88B -:10FC3000F04302F0ADB805B0BDE8F043F5F7A9BA5E -:10FC400099F8140D1F49400991F800144909884298 -:10FC500018BFFFDF202C28BFFFDF36F81400062175 -:10FC6000F0F7A6FE050008BFFFDF202C28BFFFDF4E -:10FC700036F814002988884218BFFFDF00220123CC -:10FC800029466846FFF7D4FD95F8DA006946F3F790 -:10FC900007FA002808BFFFDF05B0BDE8F0830000C9 -:10FCA000281200204412002068360200A22402001C -:10FCB000D0FB010030D301007401002001E000E01E -:10FCC0000BE000E019E000E0202C28BFFFDF36F851 -:10FCD00014000621F0F76CFE050008BFFFDF202CA2 -:10FCE00028BFFFDF36F814002988884218BFFFDFDD -:10FCF00095F8D000042818BFFFDF85F8D07095F87C -:10FD0000DA404FF6FF79202C28BFFFDF26F8149049 -:10FD100095F8DA00F2F75DFF002808BFFFDF20202A -:10FD200085F8DA00D5F8E000002804BFD5F8DC003B -:10FD3000C8F8180008D0D5E9391211448269114475 -:10FD40008161D5E93701C860D5F8DC0000281CBF07 -:10FD5000D5F8E010016100E00CE004D1D5F8E00036 -:10FD6000002818BF8761FE48007805B0BDE8F04361 -:10FD7000ECF70CB8FFDF05B0BDE8F0832DE9F05FCC -:10FD8000F84E07468B46F08B7568401CF083307840 -:10FD90004FF00008002808BFFFDF07D0DFF8C89346 -:10FDA00004282ED0052818BFFFDF5BD05846FEF789 -:10FDB00018F9040008BFFFDF29463069F2F731FC6B -:10FDC000B86087F800800120387194F8C9000228D3 -:10FDD00008BFE64807D0012808BFE54803D004283B -:10FDE0000CBFE448E4484FF47A7100F2E140B0FB04 -:10FDF000F1F0B168FA300844F860307804287DD119 -:10FE000083E0002AD2D0D6F810A0D9F8184034B335 -:10FE1000A146E468002CFBD1B9F1000F1FD099F87E -:10FE20000000002808BFFFDFD9F81410D9F804003B -:10FE300001445046F3F7FAFB002807DA291A491E55 -:10FE400091FBF5F101FB05042A4604E090FBF5F176 -:10FE500001FB15042A46944288BFFFDF00E04446B8 -:10FE60002546A3E7002AA1D0B569002D08BFFFDF12 -:10FE70000024D5F8E420D9F818002346611E58B1B3 -:10FE80008369934228BF994284BF194604460346BA -:10FE9000C0680028F4D104B91C46C5F8E040D0354C -:10FEA000002C04BFC5F80C80C9F8185005D0E068D4 -:10FEB000E560E860002818BF0561D5F81090C5F826 -:10FEC0001880B9F1000F0ED0D9F8180048B1D5F854 -:10FED00014A0504538BFFFDFD9F81800A0EB0A0086 -:10FEE000A861C9F81880002C08BFC6F8208009D086 -:10FEF0002078002808BFFFDF616900E00AE0606841 -:10FF00000844306240F6B83550E7F08B0A2838BF15 -:10FF1000032000D302207871F08B012807D93846DE -:10FF20007168FCF704FC0146F08B0844F083B86864 -:10FF30003061BDE8F09F2DE9F04107468F4884B05D -:10FF40000D4690F80004DFF83882400998F8001454 -:10FF50004909884218BFFFDF01200026082D814C87 -:10FF600080F0BB80DFE805F004718C8C87B9B9A5FF -:10FF700060732073607800281CBF04B0BDE8F08176 -:10FF800079488660466126733846FEF72AF80500F0 -:10FF900008BFFFDF95F8C900022804BF79494FF474 -:10FFA0007A720DD0012804BF71494FF4C86207D09E -:10FFB000042807BF6F4940F69802734940F6E442AF -:10FFC00011444FF47A7201F2E731B1FBF2F1A26809 -:10FFD0008C18F5F704FB024695F8C900082808BFFD -:10FFE000082127D004280CBF0221002322D0022898 -:10FFF0000CBF182128211944042816BF08280F23F4 -:020000040002F8 -:1000000025235B1D082808BF402007D0042808BF0F -:10001000102003D002280CBF0420082013FB00107E -:10002000801A201AFDF76DFD002818BFFFDF04B00D -:10003000BDE8F08101EB410101F12803082814BF5C -:1000400004284FF4A871D6D0D1E7617851B1207B54 -:10005000002808BFFDF77AFF667304B0BDE8F041E1 -:10006000F2F7E2BCA073FDF70EFE002818BFFFDF19 -:1000700004B0BDE8F08104B0BDE8F041F5F789B8FF -:1000800098F8140D4149400991F800144909884233 -:1000900018BFFFDF002239466846FFF76FFE69464A -:1000A0003846F2F7FDFF002808BFFFDF04B0BDE8C7 -:1000B000F0812078052818BFFFDF207F002808BFC7 -:1000C000FFDF26772670207DF2F783FD002808BF2A -:1000D000FFDF267504B0BDE8F081FFDF04B0BDE8A6 -:1000E000F0812DE9F0411F4C0026207804281FBF25 -:1000F000207805280C20BDE8F08101206070607B2D -:100100000025A8B1EFF3108010F0010F72B60CBFFC -:1001100000270127607B00281CBFA07B002805D09A -:10012000FDF714FF6573A573F2F77EFC2FB903E0AA -:10013000207DF3F7C7F800E062B6207DF3F70FFBF0 -:10014000207F28B125772078052818BFFFDF0C26EF -:1001500065702570207DF2F73CFD002818E0000056 -:1001600070010020441200202812002004360200F2 -:10017000A2240200D0FB0100C0D4010001E000E095 -:100180000BE000E06836020030D3010019E000E027 -:1001900008BFFFDF25753046BDE8F0812DE9F04F3F -:1001A000FD4883B00078002818BFFFF79AFF0120B0 -:1001B000DFF8E88388F8000069460620F0F781FB45 -:1001C000002818BFFFDF00274FF6FF7934E00298C0 -:1001D00000281CBF90F8D01000292DD00088484579 -:1001E0001CBFDFF8BCA34FF0200B3BD00621F0F77B -:1001F000DFFB040008BFFFDF94F8DA00F3F7AFFA83 -:1002000084F8D07094F8DA504FF6FF76202D28BF8E -:10021000FFDF2AF8156094F8DA00F2F7DAFC00281C -:1002200008BFFFDF84F8DAB069460620F0F749FB23 -:10023000002818BFFFDF10E06846F0F720FB002819 -:10024000C5D00FE0029800281CBF90F8D0100029FC -:1002500003D000884845C9D104E06846F0F70FFB99 -:100260000028EFD088F80070C8F8187003B000209C -:10027000BDE8F08F10B5CB4C60B101280CBF40F643 -:10028000C410FFDF06D0A06841F66A01884228BF8B -:10029000FFDF10BDA060F6E710B5DFF808C3BE4C65 -:1002A00000238CF80000237063702377237363733B -:1002B000A3732020A3612075A4F11C004370423079 -:1002C00010214FF6FF72428020F8042F491EFAD108 -:1002D000CCF80830DCF8080041F66A01884228BFF3 -:1002E000FFDFFFF75BFF40F6C41101206160F5F707 -:1002F00082F900F2E7314FF47A70B1FBF0F042F28C -:1003000010710844A0606168A1F21731884298BF5B -:100310000146A16010BDF0B59F4C054685B0207820 -:1003200000281EBF0C2005B0F0BD95F8546095F86C -:1003300055006F6AF5F75FF9022E04BF9A494FF432 -:100340007A720DD0012E04BF98494FF4C86207D0CD -:10035000042E07BF964940F69802964940F6E442BB -:10036000114408444FF47A7100F23F60B0FBF1F0A1 -:10037000384400F22230C5F8E400A56195F8D000B9 -:10038000002818BFFFDF0020844948610521217043 -:1003900060702077E0838848F2F7C1FB2075202841 -:1003A00008BFFFDFF2F734FC2061217D012268469F -:1003B000FFF7E4FC207D6946F2F772FE002808BFD3 -:1003C000FFDF002005B0F0BD7348007800281CBF97 -:1003D0000020704710B50620F0F784FA80F0010085 -:1003E00010BD70B56C4C05462078002818BFFFDFA3 -:1003F000287801281CBF112070BD698840F2712245 -:10040000AD88514301206160F5F7F5F800F2E7315E -:100410004FF47A70B1FBF0F040F2712105FB01005E -:10042000A0606168A1F21731884298BF01460020A0 -:10043000A16070BD10B584B008431EBF112004B088 -:1004400010BD554C207800281EBF0C2004B010BDF4 -:100450000020607004212170E0835748F2F75FFBB1 -:100460002075202808BFFFDF4C48806938B101465D -:10047000C0680028FBD111B1F2F7CAFB05E0F2F722 -:10048000C7FB40F6B831F2F7CCF82061217D01229C -:100490006846FFF773FC207D6946F2F701FE0028ED -:1004A00008BFFFDF002004B010BD70B53A4CA16951 -:1004B0000160FFF716FE002300BBA169D1F8E02020 -:1004C0005AB1D1E939C5AC449569AC44C2F818C0F9 -:1004D000D1E9372CCCF80C2005E0DFF8C0C0D1F80A -:1004E000DC20CCF81820D1F8DC20D1F8E010002A6C -:1004F00018BF116102D1002918BF8B61A36170BDC3 -:1005000026494870704770B540F2E24300FB03F59E -:1005100010460C46F5F76FF8022C04BF22494FF441 -:100520007A720DD0012C04BF20494FF4C86207D065 -:10053000042C07BF1E4940F698021E4940F6E442CB -:10054000114408444FF47A7100F23F60B0FBF1F0BF -:1005500000F2223085428CBF281A002070BD70B591 -:100560000D46064601460020FCF732F9044696F88F -:100570005500F5F740F8014696F85400022804BFEC -:10058000094A4FF47A7020D0012804BF074A4FF47B -:10059000C8601AD0042811E044120020281200205C -:1005A0006C1200207001002068360200A2240200B4 -:1005B000D0FB010030D3010037FF010007BFFC4A28 -:1005C00040F69800FB4A40F6E440104408444FF4DB -:1005D0007A7100F23F60B0FBF1F0718840F2712255 -:1005E0005143C0EB4100A0F22230A54234BF214666 -:1005F0002946814203D2A5422CBF2846204670627C -:1006000070BD10B5F4F7EBFFEB498A684968511AE1 -:10061000084410BD2DE9F74FE74A00231826D2F809 -:1006200008B028270BF198044FF004084FF0100988 -:100630004FF0080A4FF4C8724FF4BF754FF0400CEA -:1006400006287CD2DFE800F0034A21472465142005 -:10065000042912D0082909D02A20022911D010FB20 -:100660000A40002328211944441877E010FB0C406D -:100670004FEA0C034FF4A871F5E710FB09402E2355 -:10068000F8E710FB08401821EDE704F5317465E048 -:10069000082904BF4FF4BA6140200CD0042915D0BA -:1006A000022903BF03F15C01324604203A461CBF15 -:1006B00003F1B001082000EBC00000EB400002EBAA -:1006C00040000844204400F19C0447E02A4640F2E0 -:1006D0008E211020EFE704F5B0743FE0082908BF31 -:1006E00040200CD0042904BF2A46102007D002293C -:1006F00007BF03F11802042003F128020820C0EB11 -:10070000C00000EB400002EB4001029858440C1876 -:1007100024E0082904BF4FF4356140200CD004299F -:1007200016D0022903BF324603F1B401042003F5B9 -:10073000B0711CBF3A46082000EB400300E00CE01B -:1007400003EB001010440844204400F19C0405E031 -:100750002A4640F2EE311020EEE7FFDF974880682E -:10076000A0428CBF0120002003B0BDE8F08F10B57F -:10077000914C607828B1D4E90301A268FCF707F82E -:10078000E060D4E9020188429CBF2078002814BFB1 -:100790000020012010BD04222DE9F04F884E894F22 -:1007A000DFF80C82DFF80C9285B04FF47A7A0529D5 -:1007B00080F0D280DFE801F00A2B0331920080F84C -:1007C000D02005B0BDE8F04FF2F72EB904467A48C4 -:1007D0000078002818BF84F8D02004D005B0BDE808 -:1007E000F04FF2F721B90122002321466846FFF7B6 -:1007F0001FF894F8DA006946F2F752FC002808BFA7 -:10080000FFDFB4F85800401CA4F85800E6E70321C5 -:1008100080F8D01005B0BDE8F08F8346408840F2E4 -:10082000E241484368490860DBF8F800594600890E -:10083000ABF81600DBF8F80080798BF81500DBF8D0 -:10084000F8004089ABF80200DBF8F8008089ABF8CB -:100850000400DBF8F800C089ABF806000020DBF8E4 -:100860002850FBF7B5FF04469BF85500F4F7C3FE8C -:100870009BF85410022908BF4FF47A710DD001295A -:1008800004BF3E464FF4C86107D0042907BF46465F -:1008900040F698014E4640F6E4413144084400F2E7 -:1008A0003F60B0FBFAF1BBF8020040F27122504306 -:1008B000C1EB4000A0F22230A54234BF21462946B8 -:1008C000814203D2A5422CBF28462046CBF8240003 -:1008D00002208BF8D00005B0BDE8F08F83460146BA -:1008E000856A0020FBF774FF04469BF85500F4F777 -:1008F00082FE9BF85410022908BF4FF47A710DD084 -:10090000012904BF3E464FF4C86107D0042907BF40 -:10091000464640F698014E4640F6E44131440844CC -:1009200000F23F60B0FBFAF0BBF8021040F2712217 -:100930005143C0EB4100A0F22230A54234BF214612 -:100940002946814203D2A5422CBF28462046CBF837 -:10095000240005B0BDE8F08FFFDF05B0BDE8F08FE3 -:100960002DE9F043DFF864800024144D98F800105E -:1009700085B0072880F0AD81DFE800F0042A2AFC6A -:10098000FCFBFB00EC830846EBF700FA68780028D4 -:1009900040F05E81297D00226846FFF7EFF9287D4F -:1009A0006946F2F77DFB002808BFFFDF00F050B971 -:1009B000D0FB010030D30100281200204412002097 -:1009C00068360200A2240200740100207001002099 -:1009D00002280CBF01260026287DFDF702FB04003B -:1009E00008BFFFDF94F8E2103046FCF706F8DFF8A6 -:1009F000449301462869D9F80820002E024408BF14 -:100A00004FF4FC706ED094F8E20094F8E2000828ED -:100A10001EBF94F8E2000428002000F0B98000BF57 -:100A200094F8E230082B1ABF94F8E230042B4FF40C -:100A3000A87305D094F8E230022B0CBF18232823AA -:100A4000034494F8E200082808BF40200BD094F833 -:100A5000E200042808BF102005D094F8E200022824 -:100A60000CBF04200820C0EBC00C0CEB401003446A -:100A700094F8E20008281EBF94F8E2000428002041 -:100A800079D000BF94F8E2C0BCF1080F1ABF94F807 -:100A9000E2C0BCF1040F4FF4A87C08D094F8E2C087 -:100AA000BCF1020F0CBF4FF0180C4FF0280C84441F -:100AB00094F8E200082808BF40200BD094F8E20028 -:100AC000042808BF102005D094F8E20002280CBFCB -:100AD0000420082000EB400606EB00106044184498 -:100AE00000F59A7010440844061D94F8E200F4F7EB -:100AF00082FD94F8E210022908BF8F490BD094F8C8 -:100B0000E210012908BF8D4905D094F8E2100429AC -:100B10000CBF8B498B4994F8E220022A08BF4FF49E -:100B20007A720ED094F8E220012A08BF4FF4C8620E -:100B300007D094F8E220042A0CBF40F6980240F651 -:100B4000E442114408444FF47A7100F2E730B0FBFC -:100B5000F1F0A969301A40F2E2434A88D03102FB31 -:100B600003F6D9F818208A4208BF00272AD0296A3C -:100B700002E0A8E055E014E0F2F758FD002819DA89 -:100B8000311A4A1E92FBF6F202FB0607314616E0C6 -:100B900094F8E200082818BF022000EB400028303B -:100BA0003EE794F8E200082818BF022000EB40005E -:100BB000283067E790FBF6F202FB160731468F42BA -:100BC00088BFFFDFD8F80800874208D2A86940F242 -:100BD00071224188C1824A4307EB420705E040F297 -:100BE000E240B7FBF0F0A969C88294F8E210A86966 -:100BF00080F8541094F8E21080F8551005214175E2 -:100C0000C08A6FF41C71484307EB400040F6354141 -:100C1000C9F81400B0EB410F28BFFFDF05B0BDE8F5 -:100C2000F08304280CBF01260026EC830846EBF76E -:100C3000ADF80120287785F82460A8692969C0F8F3 -:100C4000D41080F8D0402978052918BFFFDF06D0DE -:100C5000F1F7EAFE6C73AC7305B0BDE8F0830028D1 -:100C600008BFFFDFA86990F8D000002818BFFFDF99 -:100C7000A86990F8DA00202818BFFFDF3248F1F7A2 -:100C80004EFFA9690646202881F8DA000F8828BFA0 -:100C9000FFDF2E4820F81670A86990F8DA002028A7 -:100CA00008BFFFDF002301226846A969FEF7C0FDE7 -:100CB000A869694690F8DA00F2F7F2F9002808BF4F -:100CC000FFDFAC61C4E705B00846BDE8F043EBF7D1 -:100CD0005DB8FFDF05B0BDE8F08316494860704796 -:100CE00070B5144D0446002904BFA86070BD4FF4D0 -:100CF0007A76012910D002291CBFFFDF70BD6888F9 -:100D0000401C68801046F4F785FC00F2E730B0FB29 -:100D1000F6F0201AA86070BD1846F4F78AFC00F2BD -:100D2000E730B0FBF6F0201AA86070BD08480078E4 -:100D3000704700002812002068360200A22402003A -:100D4000D0FB010030D3010027FB01006C12002012 -:100D500044120020F7490C28896881F8CB001ABF9B -:100D6000132818287047002211280FD0072808BF21 -:100D7000704715280AD001281ABF0028022870479A -:100D8000A1F88420012081F888007047A1F88A200A -:100D9000704770B5E74CA1680A88A1F83E2181F838 -:100DA0003C0191F85400012808BF012503D0022816 -:100DB00014BFFFDF0225A06880F8405190F855006D -:100DC000012808BF012503D0022814BFFFDF022538 -:100DD000A068012180F8415180F83A11002180F883 -:100DE0000E11E078BDE87040EAF7D0BFD14A012982 -:100DF00092681BD0002302290FD0032922D030B3E0 -:100E000001282FD0032818BF704792F864001328D8 -:100E10001CBF1628182805D1704792F8CB0000286F -:100E200008BF7047D2F8F8000370704792F8CB0003 -:100E3000012808BF704700BFD2F8FC000178491EA6 -:100E40000170704792F8CB000328EBD17047D2F8BD -:100E5000F800B2F858108288891A09B20029A8BF90 -:100E600003707047B2F85800B2F80211401A00B28D -:100E70000028E1DA70472DE9F041AE4C0026032747 -:100E8000D4F808C0012590B12069C0788CF8CA0058 -:100E900005FA00F010F4000F08BFFFDFA06880F82B -:100EA0006470A0F8846080F88850BDE8F081002369 -:100EB0009CF8652019460CF15800FBF7CEFB002882 -:100EC00004BF6570BDE8F0816078002818BFBDE8F8 -:100ED000F0812069C178A06880F8C91080F8657039 -:100EE000A0F88A6080F88C50BDE8F08170B5914C14 -:100EF00084B0207910F0010F04BF04B070BD2069E8 -:100F000000230521C578A06890F864205830FBF7CD -:100F1000A4FB002818BF062D09D020DC022D1CBF21 -:100F2000042D052D03D0607840F0080060706078D3 -:100F300000281CBF04B070BD2069C078801E162830 -:100F400080F00783DFE800F011FF89A7D52CFFFEB2 -:100F5000FF7FFDD2FFFFFFC5FCFBFAF9F8F50B2D73 -:100F60001CBF0D2D112DDED1E1E7A068002301216A -:100F700090F867205830FBF770FB002840F05C8346 -:100F80002069FCF759F8A16881F8F600072081F87C -:100F90006700002081F88C0081F8880000F04CBBCD -:100FA000A0680921002390F864205830FBF755FB16 -:100FB00018B120690079122812D0A0680A210023F4 -:100FC00090F864205830FBF748FB18B1206900798D -:100FD000142820D020690079162840F02D8324E0C1 -:100FE000A0680125002390F8642009215830FBF700 -:100FF00034FB002808BF657000F01E83607800286D -:1010000040F01A83A16881F87C0081F8880081F89B -:10101000640000F011BBA168002081F86400A1F811 -:10102000840081F8880000F035BAA06890F8641058 -:101030001F2940F00183002180F8641080F8881097 -:101040001A2000F0F7BAA06890F864100F2927D191 -:10105000002180F86910122137E0A06890F8641030 -:1010600013291DD1D0F8F81000884988814218BF93 -:10107000FFDFA068D0F8F80000F126012069FCF736 -:1010800008F8A06800F1C4012069FCF70AF81620EE -:10109000A16800F05BB9A26892F86400162802D03B -:1010A000022000F03BBAD2F8F80002F1B00300F1E0 -:1010B0001E0100220E30FBF74CFAA0680021C0E9A7 -:1010C0002811012180F86910182180F8641000F0BF -:1010D000B3BA2069FCF765F8032840F0AD822069B7 -:1010E000FCF763F801F0D0FB00F0A6BA20690079A4 -:1010F000F8E7A06890F864101A29D1D1002580F88B -:101100008D5080F88850D0F8F810008849888142C6 -:1011100018BFFFDFA068D0F8F8100D70D0F84411A8 -:101120000A78002A18BFFFDF7ED190F88E20DAB14E -:101130000AE03CE27C010020B6E181E125E1F1E03A -:1011400008E12BE09EE0A9E180F88E500288CA8079 -:10115000D0F844110D71D0F844210E211170D0F84F -:1011600044210188518010E00288CA80D0F84411DF -:101170000D71D0F8442101211172D0F844210D21C4 -:101180001170D0F84421018851800088EFF742FDAA -:10119000EFF7DAF9E078EAF7F9FDBEE0A06800239E -:1011A000194690F865205830FBF757FA50B9A068F7 -:1011B0000023082190F864205830FBF74EFA0028ED -:1011C00000F0FA816078002840F03682A06890F83C -:1011D000900010F0020F14D12069FBF765FFA168A1 -:1011E00081F891002069B0F80520A1F89220B0F8AC -:1011F0000700A1F8940091F8900040F0020081F8F7 -:101200009000A06890F8901011F0010F14D190F8A0 -:101210006520002319465830FBF71FFA002808BF45 -:10122000FFDF0121A06800E077E080F8651080F81A -:101230008C100021A0F88A10A06890F86410012991 -:1012400007D1002180F8641080F88810E078EAF770 -:101250009DFDA168D1F8F800098842888A4204BF40 -:101260000178042940F0E88100250570E078EAF76C -:101270008DFDA06890F86410002908BF80F88850A0 -:1012800000F0DAB9A0680023072190F864205830F4 -:10129000FBF7E3F9002800F08F816078002840F028 -:1012A000CB8102A92069FBF739FF9DF808000025D2 -:1012B00000F02501A06880F896109DF8091001F053 -:1012C000410180F8971080F88850D0F8F810008815 -:1012D0004988814218BFFFDFA068D0F8F8100D7070 -:1012E000D0F844110A78002A18BFFFDF15D1028810 -:1012F000CA80D0F844110D71D0F84411029A8A6066 -:10130000039ACA60D0F84421082111700188D0F8EE -:1013100044014180E078EAF739FDA06880F8645024 -:1013200000F08AB9A0680023092190F864205830A1 -:10133000FBF793F9002800F03F816078002840F027 -:101340007B81A16881F87C0081F8880081F86400C5 -:1013500000F072B9A0680023194690F86520583053 -:10136000FBF77BF9002800F027816078002840F027 -:101370006381A0680021A0F88A10012180F88C10F8 -:10138000022180F8651000F057B9A06800231946C3 -:1013900090F865205830FBF760F900287FD020696D -:1013A000FBF7A6FE002879D0A5682069FBF79CFE14 -:1013B0002887A5682069FBF793FE6887A5682069E0 -:1013C000FBF794FEA887A5682069FBF78BFEE887EA -:1013D000A06890F864101C2913BF90F84E100121EA -:1013E00080F84E10012907D090F80511002904BF9C -:1013F00090F80411002903D01E2180F8651017E031 -:101400001D2180F865100288A0F82A21028FA0F81B -:101410002C21428FA0F82E21828F00F58A71A0F82E -:101420003021C08FC88301200875E078EAF7AEFC50 -:10143000A0680021A0F88A10012180F88C10FBE040 -:10144000A06800230A2190F864205830FBF705F9C2 -:1014500018B32069FBF74CFEA8B1A5682069FBF71B -:1014600043FE2887A5682069FBF73AFE6887A568D0 -:101470002069FBF73BFEA887A5682069FBF732FED1 -:10148000E88700F0FEFEA168002081F8880081F85E -:10149000640000BF00F0C6FECEE000E059E06078D6 -:1014A00040F001006070C7E0A0680023194690F882 -:1014B00065205830FBF7D1F878B3A06890F8640045 -:1014C000232812BF2428607840F0200026D06846E8 -:1014D000F4F747F9002808BF002104D0009802A9BA -:1014E000C0788DF80800A06801AB162290F864005F -:1014F000FBF767FAA0B1A0689DF80420162180F8D8 -:10150000EC2080F8ED10192180F86510012180F899 -:101510008C100021A0F88A108EE04DE060708BE006 -:101520002069FBF700FEA0B12269107900F00701E5 -:10153000A06880F85010527902F0070280F851201C -:1015400090F80F31002B04BF90F80E31002B04D01F -:1015500022E00020FFF78FFC6EE090F855C000F10C -:1015600054038C4501BF19789142012180F87D1008 -:1015700012D00288A0F8362190F8502000F58A7128 -:1015800080F8382190F8510081F82500012081F879 -:101590002000E078EAF7FAFBA068212180F86510C6 -:1015A000012180F88C100021A0F88A1044E0A06886 -:1015B00090F864001F2801D00120AFE72069FBF7F5 -:1015C000BCFD88B32069A2680179407901F0070168 -:1015D00061F30705294600F0070060F30F210120A1 -:1015E00082F888000025A2F88450232082F8640045 -:1015F000566DD2F81001FBF79CF9F2B2C1B28A42E3 -:1016000007BFA16881F8F250A26882F8F210C6F311 -:101610000721C0F30720814219BFA16881F8F300B8 -:10162000A06880F8F35007E0FFE70120FFF723FCF4 -:101630005FF01E00FFF7ADFBA068D0E92A12491C3D -:1016400042F10002C0E92A1204B070BD2DE9F04752 -:10165000FE4D04464FF0000768780843687028790B -:1016600010F0200F2846806818BFA0F87E7004D1C3 -:10167000B0F87E10491CA0F87E1090F86A10012680 -:1016800039B990F86420002306215830FAF7E5FFB5 -:1016900058B3A88810F4006F07D0A86890F86A10B3 -:1016A000002918BFA0F876701FD1A868B0F876108E -:1016B000491C89B2A0F87610B0F878208A422CBF75 -:1016C000511A00218288521D8A4228BF80F87C600E -:1016D000B0F87610B0F87820914206D3A0F8767072 -:1016E00080F81A61E878EAF751FB287910F0600F6A -:1016F00008D0A86890F8681021B980F868600121C6 -:10170000FFF749F84FF00808002C56D168780028F8 -:1017100051D1287910F0040F0DD0A86890F864001A -:10172000032808BFFFDFA86890F86710072904BFE7 -:101730002E7080F8677001F0F7F8287910F0080F24 -:1017400019D06878B8B9A868002190F8CB00FFF7E5 -:101750004DFBA86890F8CB00FE2808BFFFDFFE21F4 -:10176000A86880F8CB1090F86710082903D10221EF -:10177000297080F86770FFF7B9FBA87810F0080FA0 -:1017800016D0A8680023052190F864205830FAF795 -:1017900064FF50B185F80180A868D0F8441108783A -:1017A0000D2808BF0020087002E00020F9F770FB48 -:1017B000A86800F0F2FF00F0AEFDA868A14600F1B5 -:1017C000580490F8F40030B9E27B00230121204650 -:1017D000FAF743FF10B1608D401C60853D21B9F1DF -:1017E000000F18D12878022808BF16200ED0012833 -:1017F00004BFA86890F8F60008D06878E8B110F047 -:10180000140F1CBF1E20207702D005E0207703E0D4 -:1018100010F0080F02D02177E67641E010F0030FB8 -:1018200003D02A202077E6763AE010F0200F08BF98 -:10183000FFDF23202077E67632E094F8300028B1ED -:10184000A08D411CA185E18D884213D294F834000B -:1018500028B1608E411C6186E18D88420AD2618D7B -:10186000208D814203D3AA6892F8F42012B9E28D48 -:10187000914203D322202077E67611E0217C31B11A -:10188000E18C814228BF84F81C80C5D206E0E08C40 -:10189000062803D33E202077E67601E0E07EA0B163 -:1018A0002773677327740221A868FEF774FFA8687E -:1018B00090F8CB10012904D1D0F8FC000178491E22 -:1018C0000170E878EAF762FA03E00021A868FEF701 -:1018D00062FFBDE8F047F3F753BF5C4A5178937855 -:1018E000194314D111460128896809D0107910F0E4 -:1018F000040F03D091F86700072808D00120704733 -:10190000B1F84800098E884201D8FEF730BF0020A8 -:10191000704770B54D4C06460D46A0883043A080F8 -:1019200016F0020F04D016F0010F18BFFFDFE560BC -:1019300016F0010F18BF256116F0020F10D0E878DD -:10194000062802D00B2837D00AE0A06890F864106F -:10195000182905D10021C0E92A11012180F86A1057 -:1019600016F0800F1CBF0820A07016F4806F08BF0F -:1019700070BDA268B2F8580091880844801DE978CB -:1019800080B2012908BFA2F8020107D0002904BFD4 -:10199000D2F8F810888001D0182915D0E9782846A7 -:1019A00001291CD009B3182918BF70BDB2F8F01076 -:1019B000BDE87040FBF7D3BBA06890F86410122913 -:1019C00008BF0021CCD1C9E792F8F210002902BF6C -:1019D00092F8F31000290020A2F8F000DEE7B2F838 -:1019E00002114172090AA97270BDD2F8F8108988F3 -:1019F0004173090AA97370BDF0B5144C85B0002677 -:101A0000A060A6806670A670054626700088F3F771 -:101A10007FFEA0680088F3F7A1FEB5F8D800A168A2 -:101A2000401C82B201F15800FAF718FC002818BFD8 -:101A3000FFDF95F8650024280ED1B5F85810B5F8E9 -:101A4000F000081A00B2002802E000007C0100202B -:101A5000A4BF6078002806D095F86400242818BF39 -:101A600025283BD119E0A06890F8F210002908BFA2 -:101A700090F8541080F8541090F8F310002908BF23 -:101A800090F8551080F855100020FFF782F985F87E -:101A90006560A16881F87D6020E0B5F85810B5F860 -:101AA000F000081A00B20028A4BF6078002815D101 -:101AB000A06890F8F210002908BF90F8541080F840 -:101AC000541090F8F310002908BF90F8551080F8D2 -:101AD00055100020FFF75DF985F86460A5F8D8601F -:101AE000A06890F8881039B1B0F88410B0F886205A -:101AF000914224BF05B0F0BD90F88C1039B1B0F818 -:101B00008A10B0F88620914224BF05B0F0BDB0F82D -:101B10008220B0F880108A4224BF05B0F0BD90F852 -:101B200068208AB3B0F87E208A4224BF05B0F0BD99 -:101B300090F8CB70FE2F00F012816846F3F7EBFDB2 -:101B4000002808BFFFDF2221009802F0B0FB03212C -:101B50000098FBF7EDF90098017821F01001017071 -:101B60003946FBF713FA192F71D2DFE807F0271F68 -:101B70001445D6D6D71971D6D7D763D6D6D6D6C9F7 -:101B8000D7D77B94ADD6B600B0F87E10062924BF17 -:101B900005B0F0BDCCE7A168009891F8F51003E01E -:101BA000A168009891F8CC100171B7E0A068D0F856 -:101BB000FC00411C0098FBF734FAAFE0A1680098E4 -:101BC000D1F8F82092790271D1F8F8201289427187 -:101BD000120A8271D1F8F8205289C271120A027277 -:101BE000D1F8F82092894272120A8272D1F8F81064 -:101BF000C989FBF7EEF991E0A068D0F8F800011D63 -:101C00000098FBF71BFAA068D0F8F80000F10C016F -:101C10000098FBF71DFAA068D0F8F80000F11E014B -:101C20000098FBF71BFAA06800F1C0010098FBF7D1 -:101C300023FA73E06269009811780171918841710B -:101C4000090A81715188C171090A017266E064E074 -:101C5000FD49D1E90001CDE9020102A90098FBF795 -:101C600025FA5BE0A068B0F844100098FBF728FA6A -:101C7000A068B0F846100098FBF726FAA068B0F804 -:101C800040100098FBF724FAA068B0F842100098C2 -:101C9000FBF722FA42E0A068B0F840100098FBF78A -:101CA00017FAA068B0F842100098FBF715FAA06880 -:101CB000B0F844100098FBF703FAA068B0F846109B -:101CC0000098FBF701FA29E0A168009891F810212B -:101CD000027191F81111417120E0A06890F8F300B1 -:101CE000FAF722FE01460098FBF735FAA06890F853 -:101CF000F200FAF719FE01460098FBF728FA0DE00A -:101D0000A06890F8ED100098FBF749FAA06890F8E9 -:101D1000EC100098FBF747FA00E0FFDFF3F70EFD49 -:101D2000002808BFFFDF0098C178012903D049B11E -:101D300018290FD013E0A168B1F802114172090A05 -:101D400081720CE0A168D1F8F81089884173090A02 -:101D5000817304E0A168B1F8F010FBF700FABB480A -:101D60000090BB4BBB4A29463046F8F7CDFFA06830 -:101D70000023052190F864205830FAF76EFC002803 -:101D800004BF05B0F0BD05B0BDE8F040F8F7C5BD33 -:101D9000B148806890F8881029B1B0F88410B0F884 -:101DA000862091421AD290F88C1029B1B0F88A108E -:101DB000B0F88620914211D2B0F88220B0F880109D -:101DC0008A420BD290F86820B0F87E0022B1884297 -:101DD00004D200BFF9F738B80628FBD3002001462B -:101DE00034E470B50C46064615464FF4A4712046FF -:101DF00002F07FFA2680002D08BFFFDF2868C4F8B4 -:101E0000F8006868C4F8FC00A868C4F8440170BD14 -:101E1000EEF7D7BE2DE9F0410D4607460621EEF755 -:101E2000C7FD040008BFBDE8F081D4F844110026C6 -:101E3000087858B14A8821888A4207D1092810D0E9 -:101E40000E281DD00D2832D008284CD094F81A0145 -:101E5000002857D06E701020287084F81A61AF8067 -:101E60003EE06E7009202870D4F844014168696032 -:101E70008168A9608089A881D4F8440106702FE0A8 -:101E80000846EEF7C7FE0746EEF773FBB0B96E7073 -:101E90000E202870D4F8440140686860D4F84401EA -:101EA00006703846EEF75FFB0120BDE8F08108467A -:101EB000EEF7B0FE0746EEF75CFB10B10020BDE880 -:101EC000F0816E700D202870D4F84401416869607B -:101ED00000892881D4F8440106703846EEF743FBA8 -:101EE0000120BDE8F0816E7008202870D4F844010C -:101EF00041688268C0686960AA60E860D4F84401FB -:101F00000670EDE794F81C01B0B16E7015202870D2 -:101F100094F81C010028E3D084F81C61D4F81E0159 -:101F20006860D4F82201A860B4F82601A88194F86A -:101F30001C010028F0D1D3E794F8280170B16E702D -:101F40001D20287084F82861D4F82A016860D4F82C -:101F50002E01A860B4F83201A881C1E794F83401D9 -:101F600040B16E701E20287084F83461D4F83601B8 -:101F70006860B5E794F8140180B16E701B2028707A -:101F800094F814010028ABD084F81461D4F8160139 -:101F9000686094F814010028F6D1A1E794F83A019A -:101FA000002808BFBDE8F0816E701620287094F8F4 -:101FB0003A01002894D000BF84F83A61D4F83C017B -:101FC0006860B4F84001288194F83A010028F3D100 -:101FD00086E7214A5061D17070472DE9F0470446E9 -:101FE000481E85B238BFBDE8F08704F10808012615 -:101FF000DFF864904FF0090A5FF00007B4F8D800EA -:10200000401CA4F8D800B4F87E00401CA4F87E0060 -:1020100094F86A0040B994F864200023062104F182 -:102020005800FAF71AFB30B3B4F87600401C80B2BF -:10203000A4F87600B4F8781081422CBF0A1A002266 -:10204000A3885B1D934209E0F44802004D1602008C -:10205000DB180200131902007C01002028BF84F85D -:102060007C60884207D3A4F8767084F81A6199F8E6 -:102070000300E9F78BFE94F8880020B1B4F88400DF -:10208000401CA4F8840094F88C0020B1B4F88A00B5 -:10209000401CA4F88A0094F8F40040B994F8672032 -:1020A0000023012104F15800FAF7D7FA20B1B4F85F -:1020B0008200401CA4F8820094F864000C2802D02E -:1020C0000D2820D067E0B4F85800411CB4F8020194 -:1020D000814260D1D4F8FC00411C404602F01EFA57 -:1020E00002212046F9F7DDFFD4F8FC000078002833 -:1020F00008BFFFDF0121FE20FEF778FE84F8647040 -:1021000084F8986047E0B4F85800411CD4F8F8000F -:10211000808881423FD1D4F844010178002918BF5A -:10212000FFDF22D12188C180D4F8F8004189D4F89A -:1021300044010181D4F8F8008189D4F84401418137 -:10214000D4F8F800C189D4F844018181D4F844015D -:102150000771D4F8440180F800A0D4F84401218824 -:10216000418099F80300E9F711FE01212046F9F7B3 -:1021700098FF03212046FEF70EFBD9F80800D0F89F -:10218000F8000078022818BFFFDF0221FE20FEF7CA -:102190002DFE84F86470B4F85800401C691EA4F841 -:1021A00058008DB2BFF42AAFBDE8F087F84AC2E903 -:1021B0000601704770B50446B0F87E0094F86810C8 -:1021C000002908BFC0F1020503D0B4F88010081A36 -:1021D000051F94F87C0040B194F864200023092185 -:1021E00004F15800FAF739FAA0B1B4F8766094F81F -:1021F0006A0058B994F864200023062104F15800BD -:10220000FAF72BFA002808BF284603D0B4F8780064 -:10221000801B001F8542C8BF0546002DD4BF00208B -:10222000A8B270BD042110B5D94CA068FEF7B3FA6E -:10223000A06890F84E10012902BF022180F84E10CC -:1022400010BD00F58A710288A0F81E21028EA0F848 -:102250002021828EA0F82221028FB0F844309A42C9 -:1022600028BF1A460A82828FB0F84600824238BFE1 -:102270001046488201200872E078BDE81040E9F776 -:1022800085BDC34830B4806890F84E30B0F832C095 -:10229000C48EB0F84010428F022B25D08A4238BF3E -:1022A00011460186C28FB0F842108A4238BF1146EB -:1022B0008186028FB0F844108A4238BF11464186A9 -:1022C000828FB0F846108A4238BF1146C186418ECF -:1022D000614588BF8C46A0F832C0C18EA14288BF3C -:1022E0000C46C48630BC7047038E9A4228BF1A46FB -:1022F000C58F838E9D4238BF2B468A4238BF114618 -:102300000186B0F842108B4228BF0B46838600211D -:1023100080F84E10CDE770B59D4CA06890F8CB10BA -:10232000FE2906BF6178002970BD90F86720002360 -:1023300001215830FAF791F9002818BF70BDA06844 -:1023400090F8F41021B1BDE870400220FEF702BD04 -:1023500090F86420002319465830FAF77EF940B10E -:10236000A06890F87C0020B1BDE870401220FEF714 -:10237000F1BCA068002590F86420122A1FD004DC6C -:10238000032A3FD0112A1FD003E0182A35D0232A70 -:1023900043D0002304215830FAF75FF9002818BF12 -:1023A00070BDD4F808C09CF8650019287CD03BDCCF -:1023B00001286BD0022879D003285DD038E0BDE831 -:1023C00070400B20FEF7C6BCF1F760FC0C2838BF4C -:1023D00070BDA0680821D0F8F8001E30F1F75AFC53 -:1023E00028B1A0680421C030F1F754FC00B9FFDF28 -:1023F000BDE870400320FEF7ADBCBDE8704006208C -:10240000FEF7A8BC90F8CA1080F8CC100720FEF7A1 -:10241000A1FCA06880F8645070BD1820FEF79AFCFB -:10242000A068A0F8845070BD1E2847D021286BD02A -:10243000DCF8F80001260178002973D04088BCF848 -:10244000001088426ED100239CF8642019460CF1DC -:102450005800FAF702F9002864D0A068D0F8F81004 -:10246000097802297ED003297DD004297CD0052952 -:1024700008BF082079D0C7E09CF8C9008CF8CC00D0 -:102480000720FEF767FCA06800F06DB90C20FEF78E -:1024900061FCA068A0F88A5090F8901041F001010A -:1024A00080F8901000F05FB96DE0FFE71320FEF7B1 -:1024B00051FCA068A0F88A5000F055B99CF80501BD -:1024C000002818BF70BD9CF8040188B1BCF8060153 -:1024D000ACF84000BCF80801ACF84200BCF80A01B6 -:1024E000ACF84400BCF80C01ACF846008CF8045180 -:1024F000FFF7C7FEFFF796FE1520FEF72BFCA0683E -:10250000A0F88A5000F02FB99CF87D0058B18CF8E3 -:10251000F2508CF8F3501820FEF71CFCA068A0F8CD -:102520008A5070BD70E09CF80F01002818BF70BD84 -:102530009CF80E01002808BF70BDDCE91416DCF819 -:102540001001FAF7F6F9F2B2C1B28A4207BFA168E8 -:1025500081F8F250A26882F8F210C6F30721C0F3A6 -:10256000072003E016E01BE03BE022E0814219BFB8 -:10257000A16881F8F300A06880F8F3501820BDE846 -:102580007040FEF7E7BB1120FEF7E4FBA068EAE02D -:102590007C01002090F86500FAF748F8A0BB08E03D -:1025A00090F8691041B190F86A00002808BFFFDF79 -:1025B0000A20FEF7CFFB27E0F1F768FB0C2823D3B6 -:1025C000A0680821D0F8F8001E30F1F763FB28B1AD -:1025D000A0680421C030F1F75DFB00B9FFDF0320E4 -:1025E000E7E790F8900010F0030F0DD10C20FEF7F4 -:1025F000B1FBA068A0F8845080F8886090F8901033 -:1026000041F0010180F89010A06890F8CB10FE29ED -:1026100018BF70BD90F86420002319465830FAF7AF -:102620001CF8002808BF70BDA06890F80011E9B33D -:10263000A1690978D1BB90F86500F9F7F7FFA8BB4D -:10264000A068B0F858100A2931D900F10801052214 -:10265000E06901F081FD0028A06804BF80F8005106 -:1026600070BDD0F8FC00017861B1411C0522E06921 -:1026700001F072FD002818BF70BDA068D0F8FC0002 -:10268000007830B9A068E169D0F8FC00401C01F086 -:1026900045FFA068D0F8FC000178491C01700120BA -:1026A000FEF758FBA06880F8005170BDFFE7A068F6 -:1026B00090F8041111B190F8051181B390F80E1142 -:1026C000002908BF70BD90F80F11002918BF70BD18 -:1026D00090F86500F9F7AAFF002818BF70BDA06840 -:1026E00090F85400012808BF012503D0022814BF28 -:1026F000FFDF0225A06890F85500012808BF0126D9 -:1027000003D0022814BFFFDF0226A168012D91F833 -:1027100010012BD0022D08BF022829D033E0FFE79B -:10272000B0F80611A0F84010B0F80811A0F8421057 -:10273000B0F80A11A0F84410B0F80C11A0F8461037 -:1027400080F8045190F865001D2804D0BDE8704061 -:102750001420FEF7FFBAFFF794FDFFF763FD152085 -:10276000FEF7F8FAA06880F8655070BD01280AD11C -:1027700091F81101012E04D0022E08BF022807D0C3 -:1027800001E0012804D0BDE870401620FEF7E2BA4F -:10279000BDE870400020FEF7FCBA70B5044690F822 -:1027A000640000250C2814D00D2818BF70BDB4F8A3 -:1027B0005800D4F8F810401C8988884218BF70BDB2 -:1027C000D4F84401FE4E0178002918BFFFDF45D13F -:1027D00022E0B4F85800B4F80211401C884218BF37 -:1027E00070BDD4F8FC00411C04F1080001F096FE15 -:1027F00002212046F9F755FCD4F8FC0000780028A7 -:1028000008BFFFDF0121FE20FEF7F0FA84F86450D4 -:10281000012084F8980070BD2188C180D4F8F800A8 -:10282000D4F8441140890881D4F8F800D4F8441150 -:1028300080894881D4F8F800D4F84411C08988818F -:10284000D4F844010571D4F8441109200870D4F873 -:10285000441120884880F078E9F798FA0121204651 -:10286000F9F71FFC03212046FDF795FFB068D0F86B -:10287000F8000078022818BFFFDF0221FE20FEF7D3 -:10288000B5FA84F8645070BD70B5CD4CA16891F86C -:102890006420162A11BF132A91F88E20002A62782C -:1028A0001BBF02206070002A70BD81F8C80000259F -:1028B00081F88D5081F88850D1F8F8000988408857 -:1028C000884218BFFFDFA068D0F8F800007803281E -:1028D00018BFFFDF0321FE20FEF788FAA068D0F8BA -:1028E00044110A78002A18BFFFDF19D10288CA8074 -:1028F000D0F8442190F8C8101171D0F844110D722D -:10290000D0F844210D211170D0F844210188518064 -:102910000088EEF77FF9EDF717FEE078E9F736FA71 -:10292000A06880F8645070BD10B5A54C207910F0F7 -:10293000020F08BF10BD6078002818BF10BDE06806 -:10294000C078192880F06981DFE800F05F4F0D8FB3 -:10295000F8F8A6223FF86F83B1F8F8F8F8F7E3E04B -:10296000F9F5F4F8F300A0680023012190F867203E -:102970005830F9F772FE002818BF10BD0821A06872 -:1029800080F86710002180F8881080F88C1010BD46 -:10299000A0680023194690F865205830F9F75DFECD -:1029A00018B1A168002081F88C00A06800231946A6 -:1029B00090F864205830F9F750FE002808BF10BD89 -:1029C0000020A16881F8880010BDA0680023194686 -:1029D00090F864205830F9F740FE002808BFFFDF68 -:1029E0000420A16881F8640010BDA0680023194686 -:1029F00090F864205830F9F730FE002808BFFFDF58 -:102A00000C20A16881F8640010BDA068002319465D -:102A100090F864205830F9F720FE002808BFFFDF47 -:102A20000D20A16881F8640010BDA068002319463C -:102A300090F864205830F9F710FE002808BFFFDF37 -:102A40000121A06880F88D105FF00F0180F86410FC -:102A500010BDA06890F86400122818BFFFDF0121A4 -:102A6000A06880F88E101121F0E7A06800231946B5 -:102A700090F864205830F9F7F0FD28B9A06890F874 -:102A80008E00002808BFFFDF0121A06880F88D10AC -:102A9000132180F8641010BDA06890F86400182815 -:102AA00018BFFFDF1A20A16881F8640010BDA0687C -:102AB000D0F8F81003884A889A4204BF097804299C -:102AC00019D190F86420002319465830F9F7C5FD54 -:102AD000002808BFFFDFA06890F8901011F0020FE7 -:102AE00004BF012180F8641005D0002180F888100F -:102AF000D0F8F8000170A0680023194690F865200E -:102B00005830F9F7AAFD002808BF10BD0020A168C1 -:102B100080E0A0680023194690F864205830F9F747 -:102B20009CFD002808BFFFDF0520A16881F8640034 -:102B300010BD30E01FE012E001E067E06DE0A0684A -:102B40000023194690F864205830F9F786FD0028D4 -:102B500008BFFFDF1C20A16881F86400E8E7A068D7 -:102B60000023194690F865205830F9F776FD0028C3 -:102B700008BFFFDFCAE7A0680023194690F8642069 -:102B80005830F9F76AFD002808BFFFDF1F20A16851 -:102B900081F86400CCE7A06890F8651021291DD069 -:102BA00090F86410232918BFFFDFC1D190F8F2100C -:102BB000002906BF90F8F3100029242102E000004C -:102BC0007C01002018BF80F864107FF4F9AE00216A -:102BD00080F864100846FEF7DCF8F1E690F8F21091 -:102BE000002907BF90F8F3100029242180F8651010 -:102BF0008CD1002180F8651080F87D1090F80E01CE -:102C000000281CBF0020FEF7C4F87FE7A168002061 -:102C100081F8650081F88C008AE7FFDF88E7000013 -:102C200070B58D4C0829207A63D2DFE801F0041AD0 -:102C30005A5A2662625A80B1F1F7EDFD012211461F -:102C40001046F1F7F0FFF2F7FDFC0020A072F1F75B -:102C5000A1FEBDE87040F2F76EB9BDE87040EFF735 -:102C6000E3BED4E90001EFF7DCFC2060A07A401C51 -:102C7000C0B2A07228281CD370BDA07A0025401EC7 -:102C8000C6B2E0683044F2F748FA10B9E1687F2034 -:102C90008855A07A272828BF01252846F2F782FC0C -:102CA000A07A282809D2401CC0B2A072282828BFC8 -:102CB00070BDBDE87040F1F76DBE207A00281CBFE2 -:102CC000012000F085F8F2F7C3F8F2F72CF90120A3 -:102CD000E07262480078E9F759F8BDE87040EFF714 -:102CE000A3BE002808BF70BD0020BDE8704000F002 -:102CF0006FB8FFDF70BD10B5574C207A002804BFB5 -:102D00000C2010BD00202072E072607AF0F7DAFA31 -:102D1000607AF0F724FD607AEFF75BFF00280CBFC4 -:102D20001F20002010BD002270B54B4C06460D46FA -:102D3000207A68B12272E272607AF0F7C3FA607AA0 -:102D4000F0F70DFD607AEFF744FF002808BFFFDFC2 -:102D50004248E560067070BD70B5050007D0A5F566 -:102D6000E8503F494C3881429CBF122070BD3A4C1C -:102D7000E068002804BF092070BD207A00281CBF2D -:102D80000C2070BD3748EFF7CAFE6072202804BFE0 -:102D90001F2070BDEFF73CFF2060002D1CBF2844B2 -:102DA0002060012065602072002000F011F80020F2 -:102DB00070BD2949CA7A002A04BF002070471F222B -:102DC000027000224270CB684360CA7201207047D3 -:102DD0002DE9F04184B00746EFF71AFF1E4D8046FB -:102DE000414668682C6800EB800046002046F0F7FA -:102DF0001DFCB04206DB6868811B4046EFF711FC02 -:102E00000446286040F2337621464046F0F70EFC37 -:102E1000B04204DA31464046EFF703FC0446002096 -:102E20008DF8000040F2E760039004208DF8050063 -:102E3000002F14BF012003208DF80400684602947F -:102E4000F0F7B3F8687A6946F0F72AF9002808BF66 -:102E5000FFDF04B0BDE8F081AC1200209C0100202F -:102E6000B5EB3C00212C02002DE9F0410C46124943 -:102E70000D68114A114908321160A0F12001312971 -:102E800001D301200CE0412810D040CC0C4F94E835 -:102E90000E0007EB8000241F50F8807C3046B847B6 -:102EA00020600548001D0560BDE8F0812046DEF782 -:102EB00097F9F5E706207047100502400100000170 -:102EC000FC48020010B5524800F038FA00B1FFDFAC -:102ED0004F48401C00F032FA002800D0FFDF10BD40 -:102EE0002DE9F14F4B4ED6F800B00127484800F0CD -:102EF0002DFADFF81C8128B95FF0000708F1010006 -:102F000000F03AFA444C00254FF0030901206060BC -:102F1000C4F80051C4F80451009931602060DFF812 -:102F2000FCA018E0DAF80000C00614D50E2000F06E -:102F300064F8EFF3108010F0010072B600D00120A9 -:102F4000C4F80493D4F8001119B9D4F8041101B9E4 -:102F500020BF00B962B6D4F8000118B9D4F8040152 -:102F60000028DFD0D4F804010028CFD137B1C6F84B -:102F700000B008F1010000F0E9F911E008F10100EA -:102F800000F0E4F90028B9D1C4F80893C4F804515A -:102F9000C4F800510E2000F030F81D4800F0ECF9A4 -:102FA0000020BDE8F88F2DE9F0438DB00D460646B0 -:102FB00000240DF110090DF1200817E004EB44077F -:102FC000102255F82710684601F0F2F805EB870744 -:102FD00010224846796801F0EBF86846FFF780FF59 -:102FE00010224146B86801F0E3F8641CB442E5DB06 -:102FF0000DB00020BDE8F08372E700F01F02012150 -:1030000091404009800000F1E020C0F88012704734 -:103010009D01002004E5004000E0004010ED00E0CC -:10302000AA4900200870704770B5A94D01232B6094 -:10303000A84B1C68002CFCD0002407E00E6806603A -:103040001E68002EFCD0001D091D641C9442F5D39F -:103050000020286018680028FCD070BD70B59B4E19 -:1030600004469D4D3078022800D0FFDFAC4200D3EB -:10307000FFDF71699948012903D847F23052944221 -:1030800001DD03224271491C7161291BC160934912 -:103090007078F0F705F8002800D1FFDF70BD70B53B -:1030A0008A4C0D466178884200D0FFDF8A4E082D99 -:1030B0004BD2DFE805F04A041E2D4A4A4A382078F0 -:1030C000022800D0FFDF03202070A078012801D063 -:1030D00020B108E0A06800F0B7FD04E004F10800AA -:1030E00007C8FFF7A1FF05202070BDE87040EFF78B -:1030F0009BBCEFF78DFD01466068F0F797FAB04290 -:1031000002D2616902290BD30320F0F74CFD12E0D3 -:10311000EFF77EFD01466068F0F788FAB042F3D21F -:10312000BDE870409AE7207802280AD0052806D02A -:10313000FFDF04202070BDE8704000F0BDB8022021 -:1031400000E00320F0F72FFDF3E7FFDF70BD70B55F -:103150000546EFF75DFD5D4C60602078012800D0EA -:10316000FFDF5E49012008700020087104208D6097 -:1031700048715948C860022020706078EFF790FFCE -:10318000002800D1FFDF70BD10B5504C207838B951 -:103190000220F0F71EFD18B90320F0F71AFD08B160 -:1031A000112010BD4E48EFF7BAFC6070202804D003 -:1031B000012020700020606110BD032010BD2DE9AA -:1031C000F041144600EB84070E4605463F1F00F011 -:1031D0004EFD4FF080521169484306EB8401091FF0 -:1031E000B14201D2012100E000211CB11269B4EB0F -:1031F000920F02D90920BDE8F0813A4A95420ED3D8 -:10320000AF420CD3854205D2874203D245EA06007D -:10321000800701D01020EEE7964200D309B10F20BD -:10322000E9E7314831490068884205D022463146F5 -:103230002846FFF7F9FE10E0FFF7A6FF0028DAD1D5 -:10324000224800218560C0E9036481704FF4A971B0 -:1032500004FB01F01830FFF77AFF0020CBE770B5D0 -:103260004FF08055044628691E49B1FBF0F08442B6 -:1032700001D20F2070BD00F0FAFCA04201D810204E -:1032800070BD194819490068884204D02869604314 -:1032900000F0DAFC0CE0FFF777FF0028F0D1296995 -:1032A0000A4861438160012181701148FFF74FFF97 -:1032B000002070BD00F024BF10B5044C6078EFF71B -:1032C00088FC00B9FFDF0020207010BDA0010020A5 -:1032D00004E5014000E40140105C0C00BC12002039 -:1032E0009F30020000600200B0000020BEBAFECA9B -:1032F0007C5E01004FF08050D0F83011062903D0D9 -:10330000D0F83011491C07D1D0F83411062905D363 -:10331000D0F83401401C01D00020704701207047D4 -:103320004FF08050D0F83011062905D1D0F8340183 -:10333000062801D30120704700207047002101704A -:10334000084670470146002008707047EFF310816F -:1033500001F0010172B60278012A01D0012200E0D9 -:1033600000220123037001B962B60AB10020704740 -:103370004FF400507047E9E7EFF3108111F0010FAF -:1033800072B64FF00002027000D162B600207047A2 -:10339000F2E700004C4909680160002070474A4983 -:1033A00008600020704701218A0720B1012804D05D -:1033B00042F204007047916700E0D1670020704737 -:1033C00042490120086042F20600704708B5042314 -:1033D0003E4A1907103230B1C1F80433106840F08A -:1033E000010010600BE0106820F001001060C1F8CF -:1033F00008330020C1F8080135480068009000201B -:1034000008BD011F0B2909D8304910310A6822F084 -:103410001E0242EA400008600020704742F20500A8 -:103420007047000100F18040C0F804190020704787 -:10343000000100F18040C0F8081900207047000129 -:1034400000F18040D0F80009086000207047012892 -:1034500001D9072070471F4A52F8200002680A432A -:10346000026000207047012801D907207047194ADF -:1034700052F8200002688A43026000207047012849 -:1034800001D907207047134A52F8200000680860ED -:1034900000207047020010494FF0000003D0012ABD -:1034A00001D0072070470A6070474FF0804100202C -:1034B000C1F808014FF0E020802180F800140121BC -:1034C000C0F80011704700000004004000050040F3 -:1034D00008010040C0490200780500406249634B82 -:1034E0000A6863499A42096801D1C1F31001016079 -:1034F000002070475C495D4B0A685D49091D9A428E -:1035000001D1C0F310000860002070475649574BA6 -:103510000A68574908319A4201D1C0F31000086087 -:103520000020704730B5504B504D1C6842F20803E4 -:10353000AC4202D0142802D203E0112801D318466D -:1035400030BDC3004B481844C0F81015C0F814250E -:10355000002030BD4449454B0A6842F209019A42B5 -:1035600002D0062802D203E0042801D3084670479F -:10357000404A012142F83010002070473A493B4B45 -:103580000A6842F209019A4202D0062802D203E0F8 -:10359000042801D308467047364A012102EBC000D7 -:1035A00041600020704770B52F4A304E314C15688D -:1035B00042F2090304EB8002B54204D0062804D28B -:1035C000C2F8001807E0042801D3184670BDC1F303 -:1035D0001000C2F80008002070BD70B5224A234ECA -:1035E000244C156842F2090304EB8002B54204D072 -:1035F000062804D2D2F8000807E0042801D31846B0 -:1036000070BDD2F80008C0F310000860002070BD43 -:10361000174910B50831184808601120154A0021D3 -:1036200002EBC003C3F81015C3F81415401C14288E -:10363000F6D3002006E0042804D302EB8003C3F88D -:10364000001807E002EB8003D3F80048C4F310042D -:10365000C3F80048401C0628EDD310BD04490648B5 -:103660000831086070470000B0000020BEBAFECAF2 -:1036700000F5014000F001400000FEFF7E4B1B689A -:1036800003B19847BFF34F8F7C4801687C4A01F42F -:10369000E06111430160BFF34F8FFEE710B5EFF318 -:1036A000108010F0010F72B601D0012400E0002458 -:1036B00000F0D9F850B1DDF72DFEEFF776F8F0F70E -:1036C00013FADFF7A2FB6F490020086004B962B665 -:1036D000002010BD70B50C460546EFF3108010F0C9 -:1036E000010F72B601D0012600E0002600F0BBF801 -:1036F00018B106B962B6082070BDDDF787FDDDF7A9 -:103700000DFE0246002043099B0003F1E02300F078 -:103710001F01D3F80031CB40D9071BD0202803D29A -:1037200022FA00F1C90722D141B2002906DA01F0DC -:103730000F0101F1E02191F8141D03E001F1E021F6 -:1037400091F800144909082911D281B101290ED03C -:1037500004290CD0401C6428D5D3DFF72DFB494940 -:10376000494808602046F0F7D9FD60B904E006B981 -:1037700062B641F2010070BD3F4804602DB1284699 -:10378000F0F719FE18B110242CE0404D19E028780C -:10379000022802D94FF4805424E0072400286878D6 -:1037A00001D0F8B908E0E8B120281BD8A878212872 -:1037B00018D8012816D001E0A87898B9E8780B2825 -:1037C00010D83349802081F8140DDDF7A7FD294674 -:1037D000F0F770F9EEF7A8FF00F07CFA2846DDF765 -:1037E0006BFD044606B962B61CB1FFF757FF2046D1 -:1037F00070BD002070BD10B5044600F034F800B173 -:1038000001202070002010BD224908600020704770 -:1038100070B50C4620490D681F49204E08310E60D6 -:10382000102807D011280CD012280FD0132811D03F -:10383000012013E0D4E90001FFF74CFF354620607A -:103840000DE0FFF72BFF0025206008E02068FFF760 -:10385000D2FF03E00F4920680860002020600E4876 -:10386000001D056070BD074807490068884201D106 -:103870000120704700207047B80100200CED00E0E7 -:103880000400FA05B0000020BEBAFECAC849020012 -:103890000BE000E0040000201005024001000001E0 -:1038A00000B5C44910F1080F08BFF82024D014DC7B -:1038B00010F1280F08BFD8201ED010F1140F08BF38 -:1038C000EC2019D010F1100F08BFF02014D010F127 -:1038D0000C0F08BFF4200FD00CE010F1040F08BF4C -:1038E000FC2009D0002818BF032805D0042804BFF5 -:1038F000086000BDFFDF00BD086000BD00B5AE4937 -:10390000012808BF032004D0022816BFFFDF0420CF -:1039100000BD086000BDA949002804BF086820F068 -:10392000010005D0012806BF086840F0010070477B -:103930000860704770B51E460546012924D0022A4A -:1039400004BF9F484FF47A710DD0012A04BF9D48EF -:103950004FF4C86107D0042A07BF9B4840F698017E -:103960009A4840F6E44144181846F1F744FE0444EE -:103970003046F1F75EFE20444FF47A7100F2712078 -:10398000B0FBF1F0281A70BD022A08BF4FF47A701C -:103990000AD0012A08BF4FF4C86005D0042A0CBF22 -:1039A00040F6980040F6E44049F608514418DBE739 -:1039B00070B514460546012908BF49F6CA660DD000 -:1039C000022B08BF824807D0012B08BF7D4803D0D7 -:1039D000042B0CBF7C487F4800F1FA061046F1F733 -:1039E00019FE012C08BF4FF47A710AD0022C08BFCF -:1039F0004FF4FA7105D0042C0CBF4FF4FA614FF468 -:103A0000FA51711A08444FF47A7100F28920B0FB20 -:103A1000F1F0281A801E70BD70B5144606460129C3 -:103A200030D0022B04BF66494FF47A700DD0012BC1 -:103A300004BF64494FF4C86007D0042B07BF624934 -:103A400040F69800614940F6E4400D181046F1F741 -:103A5000E1FD012C08BF4FF47A710AD0022C08BF97 -:103A60004FF4FA7105D0042C0CBF4FF4FA614FF4F7 -:103A7000FA51691A08444FF47A716438B0FBF1F0D6 -:103A8000301A70BD022B08BF4FF47A700AD0012B98 -:103A900008BF4FF4C86005D0042B0CBF40F6980057 -:103AA00040F6E44049F608514518CFE770B5164690 -:103AB0000446012908BF49F6CA650DD0022B08BF8C -:103AC000434807D0012B08BF3E4803D0042B0CBF4E -:103AD0003D48404800F1FA051046F1F78CFD0544D9 -:103AE0003046F1F7A6FD28444FF47A7100F2E14028 -:103AF000B0FBF1F0201A801E70BD2DE9F0410746A1 -:103B00001E460C4615461046082A16BF04284DF6D8 -:103B10008830F1F770FD07EB4701C1EBC71100EBEF -:103B2000C100012C08BF4FF47A710AD0022C08BFE3 -:103B30004FF4FA7105D0042C0CBF4FF4FA614FF426 -:103B4000FA5147182046F1F765FD381A4FF47A719B -:103B500000F60F60B0FBF1F42846F1F740FD204479 -:103B60003044401DBDE8F08170B5054614460E4650 -:103B70000846F1F740FD05EB4502C2EBC512C0EB6C -:103B8000C2053046F1F755FD2D1A2046082C16BF08 -:103B900004284DF68830F1F72EFD28444FF47A7151 -:103BA00000F6B730B0FBF1F52046F1F718FD2844D8 -:103BB000401D70BD0C15004010150040501600400F -:103BC00068360200A2240200D0FB010030D30100BD -:103BD00004360200C0D401002DE9FE430C468046A5 -:103BE000F9F7BAF9074698F80160204601A96A4634 -:103BF000ECF79BFC05000DD0012F02D00320BDE89F -:103C0000FE83204602AA0199ECF7B1FB0298B0F8B6 -:103C100003000AE0022F14D1042E12D3B8F80300D7 -:103C2000BDF80020011D914204D8001D80B2A919E1 -:103C3000814202D14FF00000E1E702D24FF00100D3 -:103C4000DDE74FF00200DAE70B4A022111600B4971 -:103C50000B68002BFCD0084B1B1D1860086800285F -:103C6000FCD00020106008680028FCD070474FF09E -:103C7000805040697047000004E5014000E40140C5 -:103C800002000B464FF00000014620D0012A04D06C -:103C9000022A04D0032A0DD103E0012002E0022011 -:103CA00015E00320072B05D2DFE803F00406080A1D -:103CB0000C0E100007207047012108E0022106E0E9 -:103CC000032104E0042102E0052100E00621EEF7D3 -:103CD00042BF0000F9480521817000210170417048 -:103CE0007047F7490A78012A05D0CA681044C860AD -:103CF0004038EFF768BC8A6810448860F8E700280D -:103D000019D00378EF49F04A13B1012B0ED011E01E -:103D10000379012B00D06BB943790BB1012B09D189 -:103D20008368643B8B4205D2C0680EE00379012BA7 -:103D300002D00BB10020704743790BB1012BF9D1B0 -:103D4000C368643B8B42F5D280689042F2D8012070 -:103D50007047DB4910B501220A700279A2B1002236 -:103D60000A71427992B104224A718268D34C52326C -:103D70008A60C0681434C8606060EEF749FFCF49BC -:103D800020600220887010BD0322E9E70322EBE7E0 -:103D900070B5044609B1012000E00320C84D0021A0 -:103DA0002970217901B100202871607968B104205F -:103DB000C24E6871A168F068EEF733FCA860E06855 -:103DC0005230E8600320B07070BD0320F0E72DE9A9 -:103DD000F04105460226EFF722FB006800B1FFDF45 -:103DE000B64C01273DB12878B0B1012805D0022892 -:103DF00010D0032813D027710CE06868C82807D3B7 -:103E0000EFF747FC20B16868FFF76BFF012603E07E -:103E1000002601E000F05CF93046BDE8F081207832 -:103E20000028F7D16868FFF76AFF0028E3D06868C8 -:103E3000017879B1A078042800D0FFDF01216868FB -:103E4000FFF7A6FF9E49E078EFF72AF90028E1D1B5 -:103E5000FFDFDFE7FFF77DFF6770DBE72DE9F04766 -:103E6000964C8846E178884200D0FFDFDFF84C921C -:103E700000250127924E09F11409B8F1080F75D2F7 -:103E8000DFE808F0040C28527A808D95A07803288A -:103E900002D0022800D0FFDFBDE8F087A078032819 -:103EA00002D0022800D0FFDF0420A0702571207806 -:103EB000002878D1FFF715FF3078012806D0B068C8 -:103EC000E06000F031F92061002060E0E078EEF77A -:103ED000E4FFF5E7A078032802D0022800D0FFDF36 -:103EE000207800286DD1A078032816D0EEF790FE38 -:103EF00001464F46D9F80000EFF798FB00280EDB8B -:103F0000796881420BDB081AF0606D49E078EFF7C1 -:103F1000C7F80028C0D1FFDFBEE7042028E0042056 -:103F2000EFF741FEA570B7E7A078032802D002287A -:103F300000D0FFDF207888BBA078032817D0EEF7E9 -:103F400067FE01464F46D9F80000EFF76FFB0028E7 -:103F5000E5DB79688142E2DB081AF0605849E078D5 -:103F6000EFF79EF8002897D1FFDF95E740E00520A6 -:103F7000EFF719FEA7708FE7A078042800D0FFDFC5 -:103F8000022004E0A078042800D0FFDF0120A1680F -:103F90008847FFF71CFF054630E004E011E0A078F9 -:103FA000042800D0FFDFBDE8F04700F091B8A0780A -:103FB000042804D0617809B1022800D0FFDF2078FE -:103FC00018B1BDE8F04700F08CB8207920B1062088 -:103FD000EFF7E9FD2571CDE7607838B13849E07831 -:103FE000EFF75EF800B9FFDF657055E70720BFE720 -:103FF000FFDF51E73DB1012D03D0FFDF022DF9D1E5 -:104000004AE70420C3E70320C1E770B5050004D0E8 -:104010002A4CA078052806D101E0102070BD0820A8 -:10402000EFF7D7FD08B1112070BD2848EEF777FDF6 -:10403000E070202803D00020A560A07070BD032090 -:1040400070BD1E4810B5017809B1112010BD8178EE -:10405000052906D0012906D029B1012101700020CF -:1040600010BD0F2010BD00F03CF8F8E770B5134C00 -:104070000546A07808B1012809D155B12846FFF7B7 -:104080003EFE40B1287840B1A078012809D00F2029 -:1040900070BD102070BD072070BD2846FFF759FE87 -:1040A00003E000212846FFF773FE0549E078EEF7AC -:1040B000F7FF00B9FFDF002070BD0000BC01002049 -:1040C000CC1200203D860100FF1FA1075D3E0200CB -:1040D0000A4810B5006900F01FF8BDE81040EEF77F -:1040E000A3BC064810B5C078EEF773FD00B9FFDF3A -:1040F0000820EFF758FDBDE81040EBE5BC010020BB -:1041000010B5134C2060201D016011481030026072 -:10411000001D0360002010BD0E490A6848F202131A -:104120009A4302430A6070470A4A116848F2021330 -:1041300001EA0300994311607047054B02465B4258 -:1041400010201344FC2B01D81160002070470000A0 -:1041500000060040C806024040EA010310B59B0774 -:104160000FD1042A0DD310C808C9121F9C42F8D0E1 -:1041700020BA19BA884201D9012010BD4FF0FF3092 -:1041800010BD1AB1D30703D0521C07E0002010BDA8 -:1041900010F8013B11F8014B1B1B07D110F8013B34 -:1041A00011F8014B1B1B01D1921EF1D1184610BD15 -:1041B000032A40F2308010F0030C00F0158011F853 -:1041C000013BBCF1020F624498BF11F801CB00F82B -:1041D000013B38BF11F8013BA2F1040298BF00F87F -:1041E00001CB38BF00F8013B11F0030300F025803C -:1041F000083AC0F0088051F8043B083A51F804CB63 -:10420000A0E80810F5E7121D5CBF51F8043B40F828 -:10421000043BAFF30080D20724BF11F8013B11F833 -:1042200001CB48BF11F8012B24BF00F8013B00F877 -:1042300001CB48BF00F8012B704710B5203AC0F001 -:104240000B80B1E81850203AA0E81850B1E8185097 -:10425000A0E81850BFF4F5AF5FEA027C24BFB1E8D4 -:104260001850A0E8185044BF18C918C0BDE8104045 -:104270005FEA827C24BF51F8043B40F8043B08BF4E -:104280007047D20728BF31F8023B48BF11F8012B15 -:1042900028BF20F8023B48BF00F8012B704702F00E -:1042A000FF0343EA032242EA024200F002B84FF061 -:1042B00000020429C0F0128010F0030C00F01B80F3 -:1042C000CCF1040CBCF1020F18BF00F8012BA8BF01 -:1042D00020F8022BA1EB0C0100F00DB85FEAC17CC5 -:1042E00024BF00F8012B00F8012B48BF00F8012B78 -:1042F00070474FF0000200B51346944696462039A9 -:1043000022BFA0E80C50A0E80C50B1F12001BFF48E -:10431000F7AF090728BFA0E80C5048BF0CC05DF8F4 -:1043200004EB890028BF40F8042B08BF704748BF42 -:1043300020F8022B11F0804F18BF00F8012B7047B6 -:10434000FEDF04207146084219D10699124A9142B3 -:1043500015DC069902394878DF2810D10878FE2844 -:1043600007D0FF280BD14FF001004FF000020B4B9C -:10437000184741F201000099019A084B1847084B71 -:10438000002B02D01B68DB6818474FF0FF307146E6 -:104390004FF00002014B1847006002007D3602001A -:1043A00004000020184819497047FFF7FBFFDCF7AD -:1043B00005FF00BD4FF4805015490968884203D1BC -:1043C000144A13605B68184700BD000020BFFDE77A -:1043D0004FF480500E490968884210D10E4B18687E -:1043E0004FF0FF318842F1D080F308884FF0202150 -:1043F000884204DD0948026803210A430260084834 -:10440000804708488047FFDFE0120020E0120020CC -:104410000000002004000020006002001409004099 -:10442000F5430100B543020004207146084202D062 -:10443000EFF3098101E0EFF3088188690238007821 -:10444000102813DB20280FDB2C280BDB0A4A12680C -:104450000A4B9A4203D1602804DB094A1047022024 -:1044600008607047074A1047074A1047074A126812 -:104470002C32126810470000B0000020BEBAFECAFD -:1044800021130000692E02001138020004000020F0 -:104490000D4B0E4908470E4B0C4908470D4B0B4975 -:1044A00008470D4B094908470C4B084908470C4B76 -:1044B000064908470B4B054908470B4B034908477A -:1044C0000A4B02490847000049BB00000D2F0000BD -:1044D0006D2C0000092B0000972A00000F2D000012 -:1044E0003D13000053280000C1BD0000C9110000A9 -:1044F00000210160017170470021016081807047D7 -:10450000002101604160017270470A684B680260D7 -:104510004360B1F808C0A0F808C070470A6802609C -:104520000B79037170470000B19500003B970000C4 -:1045300099980000BD980000F79800002B990000A2 -:104540005D9900008D990000039A00008996000093 -:10455000A7120000A712000075440000C14400002B -:10456000E5440000794500009546000057470000EB -:1045700089470000714800000349000057490000C6 -:104580003D4A00005D4A0000DF15000003160000F0 -:10459000331500008715000035160000C91600000D -:1045A0005B6000000B620000DF650000F566000044 -:1045B0007F670000FD6700006168000085690000FA -:1045C000556A0000C16A00007F4A0000854A000069 -:1045D0008F4A000085410000F74A00005941000061 -:1045E0007B4C0000B34C0000294D00000F4E000032 -:1045F000254E0000A7120000A7120000A71200001D -:10460000A7120000A7120000A7120000A7120000C6 -:10461000A7120000BF24000045250000612500000E -:104620007D2500000B270000A7250000B125000014 -:10463000F325000015260000F126000033270000B6 -:10464000A7120000A71200005F8300007F83000014 -:1046500081830000C5830000F3830000E184000033 -:104660006F85000083850000D1850000C1860000B1 -:10467000678800009189000073730000A989000019 -:10468000A7120000A7120000C9B4000033B6000052 -:1046900087B60000F3B60000A3B7000001000000D9 -:1046A00000000000100110013A0200001A02000090 -:1046B000F3900000E1900000FFFFFFFF0000FFFF0C -:1046C000C5AC0000253D000065200000BD73000062 -:1046D000598E0000000000000000020000000000F1 -:1046E00000020000000000000001000000000000C7 -:1046F0000B810000EB800000598100004124000084 -:1047000003240000232400002FA800005BA8000061 -:1047100063AA0000515900007981000000000000E8 -:10472000A98100008F2400000000000000000000AC -:104730000000000045A9000000000000E55900004D -:10474000000000004808000048080000D3560000A0 -:10475000D35600005144000071AB00003F760000CA -:10476000771F0000E31D02004F9401001157000065 -:104770001157000073440000D3AB0000C376000063 -:10478000E91F0000111E0200639401007001700116 -:10479000400038005C0024004801000200000300D3 -:1047A000656C746200000000000000000000000062 -:1047B0000000000087000000000000000000000072 -:1047C00000000000BE83605ADB0B376038A5F5AAF5 -:1047D0009183886C010000007911010041200100E3 -:1047E00000000001020603040500000007000000AD -:1047F00000000000060000000A0000003200000077 -:1048000073000000B4000000DD860100DB0C020034 -:10481000CB6C010065AE010059F0010065AE0100EE -:10482000616E01001DB00100E3E701001DB0010051 -:10483000476B0100B1AF010087EF0100B1AF01008C -:10484000C76C010079AE0100E9DF010079AE01001B -:104850005972010091B20100EFF0010091B2010024 -:104860000300000001555555D6BE898E0000C706CD -:10487000C70CC71200006B030F06B3080000B70493 -:10488000A708970CF401FA00960064004B00320070 -:104890001E0014000A000500020001000041000093 -:1048A00000000000AAAED7AB154120100C0802177B -:1048B0000D0101020909010106020918180301018D -:1048C0000909030305000000FE000000FE000000CF -:1048D000FE555555252627D6BE898E00F401FA00CF -:1048E000960064004B0032001E0014000A00050010 -:1048F000020001002541000000000000DD3402003C -:10490000F53402000D350200253502005535020050 -:104910007D350200A7350200DB3502005F32020060 -:10492000BF310200B53202003B4102003D330200BC -:104930004D330200793302009F3C0100A73C010087 -:10494000B93C0100A7330200C133020095330200D5 -:104950009F330200CD33020003340200B52E020063 -:1049600023340200313402003F3402004F3402008D -:10497000673402007F34020095340200B52E020035 -:104980000000000077B90000CDB90000E3B90000D5 -:10499000813C0200E12E0200A72F02000B40020022 -:1049A000434002006D400200493B0100C93E010046 -:1049B000B52E0200B52E0200B52E0200B52E020063 -:1049C0001C0500402005004000100200EC490200D8 -:1049D00008000020D001000044110000244A020019 -:1049E000D801002008110000A0110000011813C810 -:1049F000140250201A0102227C2720FB349B5F8086 -:104A00001280021A10138B091B2048041ACE0401CD -:104A1000200B50A40AAC01300912CB637F010B6854 -:044A2000CC10A00016 -:00000001FF diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json deleted file mode 100644 index 9b00dbe5a1..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_FULL/mbed_lib.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "softdevice", - "macros": [ - "SOFTDEVICE_PRESENT=1", - "S132", - "BLE_STACK_SUPPORT_REQD", - "NRF_SDH_CLOCK_LF_XTAL_ACCURACY=7", - "NRF_SD_BLE_API_VERSION=6", - "NRF_SDH_ENABLED=1", - "NRF_SDH_BLE_ENABLED=1", - "PEER_MANAGER_ENABLED=1", - "NRF_SDH_BLE_GATT_MAX_MTU_SIZE=23", - "NRF_SDH_BLE_OBSERVER_PRIO_LEVELS=4", - "NRF_SDH_BLE_GAP_EVENT_LENGTH=3", - "BLE_ADV_BLE_OBSERVER_PRIO=1", - "BLE_CONN_STATE_BLE_OBSERVER_PRIO=0", - "BLE_CONN_PARAMS_BLE_OBSERVER_PRIO=1", - "NRF_BLE_GATT_BLE_OBSERVER_PRIO=1", - "NRF_SDH_DISPATCH_MODEL=2", - "NRF_SDH_SOC_ENABLED=1", - "NRF_SDH_STACK_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_STATE_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_SOC_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_REQ_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", - "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", - "FDS_BACKEND=2", - "SWI_DISABLE1", - "SWI_DISABLE2", - "SWI_DISABLE3", - "SWI_DISABLE4", - "SWI_DISABLE5" - ], - "target_overrides": { - "*": { - "target.features_add": ["BLE"], - "target.bootloader_img": "hex/s132_nrf52_6.0.0_softdevice.hex", - "target.app_offset": "0x26000", - "target.mbed_ram_start": "0x200032E8", - "target.mbed_ram_size": "0xCD18" - } - } -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/CMakeLists.txt deleted file mode 100644 index eb60b0d115..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./libraries - ./libraries/fstorage - ./nrf_soc_nosd -) - -target_sources(mbed-core - INTERFACE - libraries/fstorage/nrf_fstorage_nvmc.c - nrf_soc_nosd/nrf_nvic.c - nrf_soc_nosd/nrf_soc.c -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_mbr.h deleted file mode 100644 index cc5971c7a3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_mbr.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_mbr.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_mbr.hex deleted file mode 100644 index a8e5a7c926..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/hex/mbr_nrf52_2.2.2_mbr.hex +++ /dev/null @@ -1,154 +0,0 @@ -:020000040000FA -:1000000000040020E90800007D050000C908000088 -:1000100087050000910500009B050000000000001E -:100020000000000000000000000000000D090000BA -:10003000A505000000000000AF050000B9050000A4 -:10004000C3050000CD050000D7050000E105000054 -:10005000EB050000F5050000FF05000009060000A3 -:10006000130600001D0600002706000031060000F0 -:100070003B060000450600004F0600005906000040 -:10008000630600006D060000770600008106000090 -:100090008B060000950600009F060000A9060000E0 -:1000A000B3060000BD060000C7060000D106000030 -:1000B000DB060000E5060000EF060000F906000080 -:1000C000030700000D0700001707000021070000CC -:1000D0002B070000350700003F070000490700001C -:1000E000530700005D07000067070000710700006C -:1000F0007B070000850700008F07000099070000BC -:10010000A30700001FB500F003F88DE80F001FBD26 -:1001100000F0E0BB1FB56FF00100009040100390AD -:10012000029001904FF010208069000B420900F00E -:100130001F045DF822300120A04083434DF8223097 -:10014000684600F045F91FBDF0B54FF6FF734FF458 -:10015000B4751A466E1E11E0A94201D3344600E080 -:100160000C46091B30F8027B641E3B441A44F9D14B -:100170009CB204EB134394B204EB12420029EBD17E -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000DE4992B00446D1E90001CDE91001FF2209 -:1001A0004021684600F03CFB94E80F008DE80F000A -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7C0FF1090AA208DF8440068 -:1001D000FFF7A0FF00F0F3F84FF01024A069102201 -:1001E0006946803000F002F9A069082210A900F0E9 -:1001F000FDF800F0D8F84FF080510A6949690068AD -:100200004A43824201D8102070470020704710B541 -:10021000D0E900214FF0805002EB8103026944696C -:100220006243934209D84FF01022536903EB8103D4 -:100230000169406941438B4201D9092010BD5069D1 -:10024000401C01D0002010BD0F2010BD70B501680A -:100250000446AF4D4FF01020072952D2DFE801F0DD -:10026000330419293C1E2500D4E902656468294637 -:10027000304600F0CDF82A462146304600F0B6F868 -:10028000AA002146304600F09FFA002800D0032043 -:1002900070BD00F051FB4FF4805007E0201DFFF7C8 -:1002A000AAFF0028F4D100F047FB60682860002016 -:1002B00070BD241D94E80700920000F085FA002824 -:1002C000F6D00E2070BD8069401C12D0201DFFF7B3 -:1002D0009EFF0028F6D109E08069401C09D0201D4E -:1002E000FFF789FF0028EDD1606820B12046FFF7B5 -:1002F0004FFF042070BDFFF70DFF00F060F800F025 -:1003000052F8072070BD10B50C46182802D0012005 -:10031000086010BD2068FFF799FF206010BD4FF006 -:100320001024A069401C05D0A569A66980353079E4 -:10033000AA2808D06069401C2DD060690068401C64 -:1003400029D060692CE010212846FFF7FDFE3168B6 -:1003500081421CD1A16901F18002C03105E030B1B8 -:1003600008CA51F8040D984201D1012000E0002094 -:100370008A42F4D158B1286810B1042803D0FEE7AE -:10038000284600F057F862496868086008E000F005 -:1003900016F800F008F84FF480500168491C01D0AD -:1003A00000F0A4FAFEE7BFF34F8F5A4801685A4A9B -:1003B00001F4E06111430160BFF34F8FFEE74FF09E -:1003C00010208169491C02D0806900F0AEB87047E6 -:1003D000524A01681160121D416811604F4A8168DC -:1003E00010321160111DC068086070472DE9F0419E -:1003F00017460D460646002406E03046296800F000 -:10040000A7F8641C2D1D361DBC42F6D3BDE8F08153 -:1004100070B50C4605464FF4806608E0284600F0AB -:1004200084F8B44205D3A4F5806405F58055002C0A -:10043000F4D170BD4168044609B1012500E00025F2 -:100440004FF010267069A268920000F0BDF9C8B1A3 -:10045000204600F01AF89DB17669A56864684FF4EB -:10046000002084420AD2854208D229463046FFF74E -:10047000CFFF2A4621463046FFF7B8FFFFF79FFF20 -:10048000FFF791FFFFF746FEF8E72DE9FF414FF038 -:100490001024616980680D0B01EB800000F6FF708D -:1004A000010B0020009001900290024603906846E4 -:1004B00001230BE0560902F01F0C50F8267003FAD6 -:1004C0000CFC47EA0C0740F82670521CAA42F1D3F4 -:1004D0000AE04A0901F01F0650F8225003FA06F616 -:1004E000354340F82250491C8029F2D3A169090BF9 -:1004F0004A0901F01F0150F822408B409C4340F80C -:100500002240FFF765FFBDE8FF8100005C090000A5 -:10051000000000200CED00E00400FA050006004099 -:10052000144801680029FCD07047134A0221116069 -:1005300010490B68002BFCD00F4B1B1D186008687E -:100540000028FCD00020106008680028FCD070470C -:10055000094B10B501221A60064A1468002CFCD021 -:10056000016010680028FCD0002018601068002886 -:10057000FCD010BD00E4014004E5014008208F4993 -:1005800009680958084710208C4909680958084724 -:1005900014208A49096809580847182087490968BA -:1005A0000958084730208549096809580847382004 -:1005B00082490968095808473C2080490968095858 -:1005C000084740207D4909680958084744207B496D -:1005D00009680958084748207849096809580847B0 -:1005E0004C20764909680958084750207349096822 -:1005F0000958084754207149096809580847582084 -:100600006E490968095808475C206C49096809580F -:100610000847602069490968095808476420674904 -:100620000968095808476820644909680958084753 -:100630006C20624909680958084770205F490968B9 -:100640000958084774205D49096809580847782007 -:100650005A490968095808477C20584909680958C7 -:10066000084780205549096809580847842053499C -:1006700009680958084788205049096809580847F7 -:100680008C204E4909680958084790204B49096851 -:10069000095808479420494909680958084798208B -:1006A00046490968095808479C204449096809587F -:1006B0000847A0204149096809580847A4203F4934 -:1006C000096809580847A8203C490968095808479B -:1006D000AC203A49096809580847B02037490968E9 -:1006E00009580847B4203549096809580847B8200F -:1006F0003249096809580847BC2030490968095837 -:100700000847C0202D49096809580847C4202B49CB -:10071000096809580847C82028490968095808473E -:10072000CC202649096809580847D0202349096880 -:1007300009580847D4202149096809580847D82092 -:100740001E49096809580847DC201C4909680958EE -:100750000847E0201949096809580847E420174963 -:10076000096809580847E8201449096809580847E2 -:10077000EC201249096809580847F0200F49096818 -:1007800009580847F4200D49096809580847F82016 -:100790000A49096809580847FC20084909680958A6 -:1007A00008475FF480700549096809580847000048 -:1007B00003480449024A034B704700000000002030 -:1007C000680900006809000040EA010310B59B07B2 -:1007D0000FD1042A0DD310C808C9121F9C42F8D0AB -:1007E00020BA19BA884201D9012010BD4FF0FF305C -:1007F00010BD1AB1D30703D0521C07E0002010BD72 -:1008000010F8013B11F8014B1B1B07D110F8013BFD -:1008100011F8014B1B1B01D1921EF1D1184610BDDE -:1008200002F0FF0343EA032242EA024200F005B865 -:100830007047704770474FF000020429C0F01280E3 -:1008400010F0030C00F01B80CCF1040CBCF1020F83 -:1008500018BF00F8012BA8BF20F8022BA1EB0C0158 -:1008600000F00DB85FEAC17C24BF00F8012B00F84E -:10087000012B48BF00F8012B70474FF0000200B574 -:10088000134694469646203922BFA0E80C50A0E8B3 -:100890000C50B1F12001BFF4F7AF090728BFA0E861 -:1008A0000C5048BF0CC05DF804EB890028BF40F82D -:1008B000042B08BF704748BF20F8022B11F0804F6F -:1008C00018BF00F8012B7047014B1B68DB68184705 -:1008D0000000002009480A497047FFF7FBFFFFF7B7 -:1008E00011FC00BD20BFFDE7064B1847064A10600B -:1008F000016881F30888406800470000680900002B -:10090000680900001F030000000000201EF0040F13 -:100910000CBFEFF30881EFF3098188690238007892 -:10092000182803D100E00000074A1047074A126860 -:100930002C3212681047000000B5054B1B68054AB1 -:100940009B58984700BD00000703000000000020EE -:100950005809000004000000001000000000000022 -:0809600000FFFFFF0090D0032F -:04000005000008E906 -:00000001FF diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.c deleted file mode 100644 index 14b1859c93..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.c +++ /dev/null @@ -1,217 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include "sdk_common.h" - -#if NRF_MODULE_ENABLED(NRF_FSTORAGE) - -#include "nrf_fstorage_nvmc.h" -#include -#include -#include -#include "nrf_nvmc.h" -#include "nrf_atomic.h" - - -static nrf_fstorage_info_t m_flash_info = -{ -#if defined(NRF51) - .erase_unit = 1024, -#elif defined(NRF52_SERIES) - .erase_unit = 4096, -#endif - .program_unit = 4, - .rmap = true, - .wmap = false, -}; - - - /* An operation initiated by fstorage is ongoing. */ -static nrf_atomic_flag_t m_flash_operation_ongoing; - - -/* Send event to the event handler. */ -static void event_send(nrf_fstorage_t const * p_fs, - nrf_fstorage_evt_id_t evt_id, - void const * p_src, - uint32_t addr, - uint32_t len, - void * p_param) -{ - if (p_fs->evt_handler == NULL) - { - /* Nothing to do. */ - return; - } - - nrf_fstorage_evt_t evt = - { - .result = NRF_SUCCESS, - .id = evt_id, - .addr = addr, - .p_src = p_src, - .len = len, - .p_param = p_param, - }; - - p_fs->evt_handler(&evt); -} - - -static ret_code_t init(nrf_fstorage_t * p_fs, void * p_param) -{ - UNUSED_PARAMETER(p_param); - - p_fs->p_flash_info = &m_flash_info; - - return NRF_SUCCESS; -} - - -static ret_code_t uninit(nrf_fstorage_t * p_fs, void * p_param) -{ - UNUSED_PARAMETER(p_fs); - UNUSED_PARAMETER(p_param); - - (void) nrf_atomic_flag_clear(&m_flash_operation_ongoing); - - return NRF_SUCCESS; -} - - -static ret_code_t read(nrf_fstorage_t const * p_fs, uint32_t src, void * p_dest, uint32_t len) -{ - UNUSED_PARAMETER(p_fs); - - memcpy(p_dest, (uint32_t*)src, len); - - return NRF_SUCCESS; -} - - -static ret_code_t write(nrf_fstorage_t const * p_fs, - uint32_t dest, - void const * p_src, - uint32_t len, - void * p_param) -{ - if (nrf_atomic_flag_set_fetch(&m_flash_operation_ongoing)) - { - return NRF_ERROR_BUSY; - } - - nrf_nvmc_write_words(dest, (uint32_t*)p_src, (len / m_flash_info.program_unit)); - - /* Clear the flag before sending the event, to allow API calls in the event context. */ - (void) nrf_atomic_flag_clear(&m_flash_operation_ongoing); - - event_send(p_fs, NRF_FSTORAGE_EVT_WRITE_RESULT, p_src, dest, len, p_param); - - return NRF_SUCCESS; -} - - -static ret_code_t erase(nrf_fstorage_t const * p_fs, - uint32_t page_addr, - uint32_t len, - void * p_param) -{ - uint32_t progress = 0; - - if (nrf_atomic_flag_set_fetch(&m_flash_operation_ongoing)) - { - return NRF_ERROR_BUSY; - } - - while (progress != len) - { - nrf_nvmc_page_erase(page_addr + (progress * m_flash_info.erase_unit)); - progress++; - } - - /* Clear the flag before sending the event, to allow API calls in the event context. */ - (void) nrf_atomic_flag_clear(&m_flash_operation_ongoing); - - event_send(p_fs, NRF_FSTORAGE_EVT_ERASE_RESULT, NULL, page_addr, len, p_param); - - return NRF_SUCCESS; -} - - -static uint8_t const * rmap(nrf_fstorage_t const * p_fs, uint32_t addr) -{ - UNUSED_PARAMETER(p_fs); - - return (uint8_t*)addr; -} - - -static uint8_t * wmap(nrf_fstorage_t const * p_fs, uint32_t addr) -{ - UNUSED_PARAMETER(p_fs); - UNUSED_PARAMETER(addr); - - /* Not supported. */ - return NULL; -} - - -static bool is_busy(nrf_fstorage_t const * p_fs) -{ - UNUSED_PARAMETER(p_fs); - - return m_flash_operation_ongoing; -} - - -/* The exported API. */ -nrf_fstorage_api_t nrf_fstorage_nvmc = -{ - .init = init, - .uninit = uninit, - .read = read, - .write = write, - .erase = erase, - .rmap = rmap, - .wmap = wmap, - .is_busy = is_busy -}; - - -#endif // NRF_FSTORAGE_ENABLED diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.h deleted file mode 100644 index bacd7457e0..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/libraries/fstorage/nrf_fstorage_nvmc.h +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/** - * @file - * - * @defgroup nrf_fstorage_nvmc NVMC implementation - * @ingroup nrf_fstorage - * @{ - * - * @brief API implementation of fstorage that uses the non-volatile memory controller (NVMC). -*/ - -#ifndef NRF_FSTORAGE_NVMC_H__ -#define NRF_FSTORAGE_NVMC_H__ - -#include "nrf_fstorage.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/**@brief API implementation that uses the non-volatile memory controller. - * - * @details An fstorage instance with this API implementation can be initialized by providing - * this structure as a parameter to @ref nrf_fstorage_init. - * The structure is defined in @c nrf_fstorage_nvmc.c. - */ -extern nrf_fstorage_api_t nrf_fstorage_nvmc; - - -#ifdef __cplusplus -} -#endif - -#endif // NRF_FSTORAGE_NVMC_H__ -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/mbed_lib.json deleted file mode 100644 index bf28c4cb5b..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/mbed_lib.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "softdevice_mbr", - "target_overrides": { - "*": { - "target.bootloader_img": "hex/mbr_nrf52_2.2.2_mbr.hex" - } - } -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_error.h deleted file mode 100644 index c673beb10d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_error.h +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -/* Header guard */ - -#ifndef SOFTDEVICE_PRESENT - -/** - @defgroup nrf_error Global Error Codes - @{ - - @brief Global Error definitions -*/ - -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#ifdef __cplusplus -} -#endif - -#endif // NRF_ERROR_H__ - -/** - @} -*/ - -#endif // SOFTDEVICE_PRESENT diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.c deleted file mode 100644 index 8fa8b2beb9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.c +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include -#include "nrf_soc.h" -#include "nrf_error.h" - -static uint8_t m_in_critical_region = 0; - -uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - NVIC_EnableIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - NVIC_DisableIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (p_pending_irq != NULL) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - return NRF_ERROR_NULL; -} - -uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - NVIC_SetPriority(IRQn, priority); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (p_priority != NULL) - { - *p_priority = NVIC_GetPriority(IRQn); - return NRF_SUCCESS; - } - - return NRF_ERROR_NULL; -} - -uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - __disable_irq(); - - *p_is_nested_critical_region = (m_in_critical_region != 0); - m_in_critical_region++; - - return NRF_SUCCESS; -} - -uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - m_in_critical_region--; - - if (is_nested_critical_region == 0) - { - m_in_critical_region = 0; - __enable_irq(); - } - return NRF_SUCCESS; -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.h deleted file mode 100644 index 58dd0274eb..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_nvic.h +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - */ -uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - */ -uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - */ -uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - */ -uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - */ -uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - */ -uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - */ -uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -uint32_t sd_nvic_SystemReset(void); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_NVIC_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_sdm.h deleted file mode 100644 index ec3f150fc6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_sdm.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - - diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.c deleted file mode 100644 index da25fbbd32..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.c +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include -#include "nrf_soc.h" -#include "nrf_error.h" - -uint32_t sd_app_evt_wait(void) -{ - __WFE(); - return NRF_SUCCESS; -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.h deleted file mode 100644 index c1c9d04416..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_MBR/nrf_soc_nosd/nrf_soc.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -uint32_t sd_app_evt_wait(void); - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SOC_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/CMakeLists.txt deleted file mode 100644 index eb60b0d115..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./libraries - ./libraries/fstorage - ./nrf_soc_nosd -) - -target_sources(mbed-core - INTERFACE - libraries/fstorage/nrf_fstorage_nvmc.c - nrf_soc_nosd/nrf_nvic.c - nrf_soc_nosd/nrf_soc.c -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_migration-document.pdf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/doc/s132_nrf52_6.0.0_migration-document.pdf deleted file mode 100644 index e88cd69f04013d7025d510d0cc9133c58c9d965b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133032 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 JNhwQX|3Ak065{{> diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_err.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_err.h deleted file mode 100644 index 1b4820dc3d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_err.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ -#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ -#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_.h or ble_error_.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif - - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gap.h deleted file mode 100644 index 8b13816106..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gap.h +++ /dev/null @@ -1,2653 +0,0 @@ -/* - * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ - SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ - SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ - SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ - SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ - SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ - SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ - SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ - SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ - SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ - SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ - SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ - SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ - SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ - SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ - SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ - SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ - SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ - SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ -}; - -/**@brief GAP Event IDs. - * IDs that uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, - BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ - BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ - BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ - BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ - BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ - BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ - BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ - BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ - BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ - BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ - BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ - BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ - BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ - BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ - BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ - BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ - BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ -}; - -/**@brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ - BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ - BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ - BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ - BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ -}; - -/**@brief GAP Configuration IDs. - * - * IDs that uniquely identify a GAP configuration. - */ -enum BLE_GAP_CFGS -{ - BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ - BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ -}; - -/**@brief GAP TX Power roles. - */ -enum BLE_GAP_TX_POWER_ROLES -{ - BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ - BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ - BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ -}; - -/** @} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ -#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ -#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. - This type of advertising is called anonymous. */ -/**@} */ - - -/**@brief The default interval in seconds at which a private address is refreshed. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ - - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN (6) - -/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes - * @{ */ -#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, - and will not accept a peer using identity address as sender address when - the peer IRK is exchanged, non-zero and added to the identity list. */ -/**@} */ - -/** @brief Invalid power level. */ -#define BLE_GAP_POWER_LEVEL_INVALID 127 - -/** @brief Advertising set handle not set. */ -#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) - -/** @brief The default number of advertising sets. */ -#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) - -/** @brief The maximum number of advertising sets supported by this SoftDevice. */ -#define BLE_GAP_ADV_SET_COUNT_MAX (1) - -/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. - * @{ */ -#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. */ -/**@}. */ - -/** @brief Set ID not available in advertising report. */ -#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF - -/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons - * @{ */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ -/**@} */ - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ -#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ -#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. - @note Support for values above @ref BLE_GAP_ADV_INTERVAL_MAX - is experimental. Values above 0xFFFFFF, i.e 10,485.759375 s - are not supported. */ - /**@} */ - - -/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min - * @{ */ -#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min - * @{ */ -#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min - * @{ */ -#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ -#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ - /** @} */ - -/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size - * - * Scan buffers are used for storing advertising data received from an advertiser. - * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. - * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. - * @{ */ -#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an - extended advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an - extended advertising set. - @note Extended scanning is only - supported as an experimental - feature in this SoftDevice. - The scanner will only receive - advertising data up to 31 bytes. */ -/** @} */ - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * - * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. - * - * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. - * Note that some of the advertising types do not support advertising data. Non-scannable types do not support - * scan response data. - * - * @{ */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising - events. Advertising interval is less that 3.75 ms. - Use this type for fast reconnections. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising - events. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status - * @{ */ -#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. */ -/**@} */ - -/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies - * @{ */ -#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets - not addressed to this device. */ -#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed - packets not addressed to this device. */ -#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. - For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - - -/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types - * @{ */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@defgroup BLE_GAP_DEVNAME GAP device name defines. - * @{ */ -#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -/**@} */ - - -/**@brief Disable RSSI events for connections */ -#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF - -/**@defgroup BLE_GAP_PHYS GAP PHYs - * @{ */ -#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ -#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ -#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ -#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ -#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ - -/**@brief Supported PHYs in connections, for scanning, and for advertising. */ -#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS) /**< All PHYs except @ref BLE_GAP_PHY_CODED are supported. */ - -/**@} */ - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Random Number Length. */ -#define BLE_GAP_SEC_RAND_LEN 8 - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -#define BLE_GAP_LESC_P256_PK_LEN 64 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -#define BLE_GAP_LESC_DHKEY_LEN 32 - - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - - -/**@brief Maximum amount of addresses in the whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - - -/**@brief Maximum amount of identities in the device identities list. */ -#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) - - -/**@brief Default connection count for a configuration. */ -#define BLE_GAP_CONN_COUNT_DEFAULT (1) - - -/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. - * @{ */ -#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ -#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. - * @{ */ -#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ - -/**@} */ - -/**@brief Automatic data length parameter. */ -#define BLE_GAP_DATA_LENGTH_AUTO 0 - -/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. - * @{ */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ -/**@} */ - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@brief The total number of channels in Bluetooth Low Energy. */ -#define BLE_GAP_CHANNEL_COUNT (40) - -/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines - * @{ */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ - /**@} */ - -/** @} */ - - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Advertising event properties. */ -typedef struct -{ - uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ - uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. - @note Anonymous advertising is only available for - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ - uint8_t include_tx_power : 1; /**< Include TxPower set by @ref sd_ble_gap_tx_power_set in the extended header - of the advertising PDU. - @note TxPower can only be added to the extended header when @ref type is an extended advertising type. */ -} ble_gap_adv_properties_t; - - -/**@brief Advertising report type. */ -typedef struct -{ - uint16_t connectable : 1; /**< Connectable advertising event type. */ - uint16_t scannable : 1; /**< Scannable advertising event type. */ - uint16_t directed : 1; /**< Directed advertising event type. */ - uint16_t scan_response : 1; /**< Received a scan response. */ - uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ - uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ - uint16_t reserved : 9; /**< Reserved for future use. */ -} ble_gap_adv_report_type_t; - -/**@brief Advertising Auxiliary Pointer. */ -typedef struct -{ - uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ - uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ -} ble_gap_aux_pointer_t; - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. - Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ - uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. - addr is not used if addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - * - * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: - * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval - * that corresponds to the following Bluetooth Spec requirement: - * The Supervision_Timeout in milliseconds shall be larger than - * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP connection security modes. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Channel mask (40 bits). - * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, - * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents - * channel index 39. If a bit is set to 1, the channel is not used. - */ -typedef uint8_t ble_gap_ch_mask_t[5]; - - -/**@brief GAP advertising parameters. */ -typedef struct -{ - ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ - ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. - @note ble_gap_addr_t::addr_type cannot be - @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. - - When privacy is enabled and the local device uses - @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, - the device identity list is searched for a matching entry. If - the local IRK for that device identity is set, the local IRK - for that device will be used to generate the advertiser address - field in the advertising packet. - - If @ref ble_gap_adv_properties_t::type is directed, this must be - set to the targeted scanner or initiator. If the peer address is - in the device identity list, the peer IRK for that device will be - used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE - target addresses used in the advertising event PDUs. */ - uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE - advertising, this parameter is ignored. */ - uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, - an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - @sa BLE_GAP_ADV_TIMEOUT_VALUES. */ - uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling - advertising. Setting the value to 0 disables the limitation. When - the count of advertising events specified by this parameter - (if not 0) is reached, advertising will be automatically stopped - and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, - this parameter is ignored. - @note Setting max_adv_evts to a values not equal to 0 is only supported - as an experimental feature in this SoftDevice. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be used. - Masking away secondary advertising channels is not supported. */ - uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets - are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS - will be used. - The only supported value by this SoftDevice is @ref BLE_GAP_PHY_1MBPS. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets - are transmitted. - If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. - Valid values are - @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_2MBPS. @ref BLE_GAP_PHY_CODED - is not supported by this SoftDevice. - If @ref ble_gap_adv_properties_t::type is an extended advertising type - and connectable, this is the PHY that will be used to establish a - connection and send AUX_ADV_IND packets on. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other - advertising sets transmitted by this and other devices. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a - scan request is received and the scanner address is allowed - by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is a non-scannable - advertising type. */ -} ble_gap_adv_params_t; - - -/**@brief GAP advertising data buffers. - * - * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and - * shall never be modified while advertising. The data shall be kept alive until either: - * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding - * advertising handle. - * - Advertising is stopped. - * - Advertising data is changed. - * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ -typedef struct -{ - ble_data_t adv_data; /**< Advertising data. - @note - Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type - that is allowed to contain advertising data. */ - ble_data_t scan_rsp_data; /**< Scan response data. - @note - Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type - that is scannable. */ -} ble_gap_adv_data_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. - If set to 0, the scanner will not receive advertising packets - on secondary advertising channels, and will not be able - to receive long advertising PDUs. - @note Extended scanning is only supported as an experimental feature in this - SoftDevice. */ - uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have - @ref ble_gap_adv_report_type_t::status set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. - This parameter is ignored when used with @ref sd_ble_gap_connect - @note This may be used to abort receiving more packets from an extended - advertising event, and is only available for extended - scanning, see @ref sd_ble_gap_scan_start. - @note This feature is not supported by this SoftDevice. */ - uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. - This parameter is ignored when used with @ref sd_ble_gap_connect. */ - uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. - @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and - @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with - @ref sd_ble_gap_connect */ - uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, - scan_phys will default to @ref BLE_GAP_PHY_1MBPS. - - If @ref ble_gap_scan_params_t::extended is set to 0, the only - supported PHY is @ref BLE_GAP_PHY_1MBPS. - - When used with @ref sd_ble_gap_scan_start, - the bitfield indicates the PHYs the scanner will use for scanning - on primary advertising channels. The scanner will accept - @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. - - When used with @ref sd_ble_gap_connect, the - bitfield indicates the PHYs on where a connection may be initiated. - If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, - the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. */ - uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ - uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. */ - uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be - set to 0. - Masking away secondary channels is not supported. */ -} ble_gap_scan_params_t; - - -/**@brief Privacy. - * - * The privacy feature provides a way for the device to avoid being tracked over a period of time. - * The privacy feature, when enabled, hides the local device identity and replaces it with a private address - * that is automatically refreshed at a specified interval. - * - * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). - * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, - * and devices can establish connections without revealing their real identities. - * - * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) - * are supported. - * - * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all - * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. - * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. - */ -typedef struct -{ - uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ - uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ - uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ - ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. - When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. - By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -} ble_gap_privacy_params_t; - - -/**@brief PHY preferences for TX and RX - * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. - * @code - * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * @endcode - * - */ -typedef struct -{ - uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ -} ble_gap_phys_t; - -/** @brief Keys that can be exchanged during a bonding procedure. */ -typedef struct -{ - uint8_t enc : 1; /**< Long Term Key and Master Identification. */ - uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ - uint8_t sign : 1; /**< Connection Signature Resolving Key. */ - uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -} ble_gap_sec_kdist_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ - uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ - uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< The OOB data flag. - - In LE legacy pairing, this flag is set if a device has out of band authentication data. - The OOB method is used if both of the devices have out of band authentication data. - - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. - The OOB method is used if at least one device has the peer device's OOB data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ - ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ - ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 6; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP LE Secure Connections P-256 Public Key. */ -typedef struct -{ - uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -} ble_gap_lesc_p256_pk_t; - - -/**@brief GAP LE Secure Connections DHKey. */ -typedef struct -{ - uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -} ble_gap_lesc_dhkey_t; - - -/**@brief GAP LE Secure Connections OOB data. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address of the device. */ - uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ - uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -} ble_gap_lesc_oob_data_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ - uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ -} ble_gap_evt_connected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -typedef struct -{ - uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ -} ble_gap_evt_phy_update_request_t; - -/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ -typedef struct -{ - uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ - uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ -} ble_gap_evt_phy_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ - uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply - with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or - @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -} ble_gap_evt_passkey_display_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -typedef struct -{ - uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -} ble_gap_evt_key_pressed_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -typedef struct -{ - ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory - inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ - uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -} ble_gap_evt_lesc_dhkey_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ - uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Encryption Key. */ -typedef struct -{ - ble_gap_enc_info_t enc_info; /**< Encryption Information. */ - ble_gap_master_id_t master_id; /**< Master Identification. */ -} ble_gap_enc_key_t; - - -/**@brief Identity Key. */ -typedef struct -{ - ble_gap_irk_t id_info; /**< Identity Resolving Key. */ - ble_gap_addr_t id_addr_info; /**< Identity Address. */ -} ble_gap_id_key_t; - - -/**@brief Security Keys. */ -typedef struct -{ - ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ - ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ - ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ - ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined - in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -} ble_gap_sec_keys_t; - - -/**@brief Security key set for both local and peer keys. */ -typedef struct -{ - ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ - ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -} ble_gap_sec_keyset_t; - - -/**@brief Data Length Update Procedure parameters. */ -typedef struct -{ - uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ - uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ -} ble_gap_data_length_params_t; - - -/**@brief Data Length Update Procedure local limitation. */ -typedef struct -{ - uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ - uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ - uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ -} ble_gap_data_length_limitation_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - uint8_t bonded : 1; /**< Procedure resulted in a bond. */ - uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ - ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ - union - { - ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released - scan buffer is contained in this field. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ -} ble_gap_evt_rssi_changed_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ -typedef struct -{ - uint8_t reason; /**< Reason for why the advertising set terminated. See - @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ - uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, - this field indicates the number of completed advertising events. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. */ -} ble_gap_evt_adv_set_terminated_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. - * - * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * not all fields in the advertising report may be available. - * - * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. - */ -typedef struct -{ - ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the - peer's identity address. */ - ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if - @ref ble_gap_adv_report_type_t::directed is set to 1. If the - SoftDevice was able to resolve the address, - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr - contains the local identity address. If the target address of the - advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, - and the SoftDevice was unable to resolve it, the application may try - to resolve this address to find out if the advertising event was - directed to us. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received on. - See @ref BLE_GAP_PHYS. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received on. - See @ref BLE_GAP_PHYS. This field is to 0 if no packets where received on - a secondary advertising channel. */ - int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. - This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the - last received packet did not contain the Tx Power field. - @note TX Power is only included in extended advertising packets. */ - int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. */ - uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ - uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present - if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID - is not present if @ref ble_gap_evt_adv_report_t::set_id is set to - @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - ble_data_t data; /**< Received advertising or scan response data. If - @ref ble_gap_adv_report_type_t::status is not set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided - in @ref sd_ble_gap_scan_start is now released. */ - ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising - event. @note This field is only set if @ref ble_gap_adv_report_type_t::status - is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ -} ble_gap_evt_adv_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection requested. */ - uint8_t lesc : 1; /**< LE Secure Connections requested. */ - uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -} ble_gap_evt_sec_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -typedef struct -{ - uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ - int8_t rssi; /**< Received Signal Strength Indication in dBm. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ -} ble_gap_evt_scan_req_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ -} ble_gap_evt_data_length_update_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ -typedef struct -{ - ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ -} ble_gap_evt_data_length_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ -typedef struct -{ - int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy - channels, in dBm, indexed by Channel Index. - If no measurement is available for the given channel, channel_energy is set to - @ref BLE_GAP_POWER_LEVEL_INVALID. */ -} ble_gap_evt_qos_channel_survey_report_t; - -/**@brief GAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ - ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ - ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ - ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ - ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ - ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ - ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ - ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ - ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ - ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_t; - - -/** - * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. - * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. - */ -typedef struct -{ - uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. - The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ - uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. - The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. - The event length and the connection interval are the primary parameters - for setting the throughput of a connection. - See the SoftDevice Specification for details on throughput. */ -} ble_gap_conn_cfg_t; - - -/** - * @brief Configuration of maximum concurrent connections in the different connected roles, set with - * @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too - * large. The maximum supported sum of concurrent connections is - * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. - * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. - * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum - * supported advertising handles is - * @ref BLE_GAP_ADV_SET_COUNT_MAX. - */ -typedef struct -{ - uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ - uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ - uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ - uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ - uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the - application using @ref sd_ble_gap_qos_channel_survey_start. */ -} ble_gap_cfg_role_count_t; - - -/** - * @brief Device name and its properties, set with @ref sd_ble_cfg_set. - * - * @note If the device name is not configured, the default device name will be - * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be - * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name - * will have no write access. - * - * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, - * the attribute table size must be increased to have room for the longer device name (see - * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). - * - * @note If vloc is @ref BLE_GATTS_VLOC_STACK : - * - p_value must point to non-volatile memory (flash) or be NULL. - * - If p_value is NULL, the device name will initially be empty. - * - * @note If vloc is @ref BLE_GATTS_VLOC_USER : - * - p_value cannot be NULL. - * - If the device name is writable, p_value must point to volatile memory (RAM). - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Invalid device name location (vloc). - * - Invalid device name security mode. - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). - * - The device name length is too long for the given Attribute Table. - * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. - */ -typedef struct -{ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ - uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ - uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -} ble_gap_cfg_device_name_t; - - -/**@brief Configuration structure for GAP configurations. */ -typedef union -{ - ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ - ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ -} ble_gap_cfg_t; - - -/**@brief Channel Map option. - * - * @details Used with @ref sd_ble_opt_get to get the current channel map - * or @ref sd_ble_opt_set to set a new channel map. When setting the - * channel map, it applies to all current and future connections. When getting the - * current channel map, it applies to a single connection and the connection handle - * must be supplied. - * - * @note Setting the channel map may take some time, depending on connection parameters. - * The time taken may be different for each connection and the get operation will - * return the previous channel map until the new one has taken effect. - * - * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. - * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. - * - * @retval ::NRF_SUCCESS Get or set successful. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Less then two bits in @ref ch_map are set. - * - Bits for primary advertising channels (37-39) are set. - * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. - * - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ - uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -} ble_gap_opt_ch_map_t; - - -/**@brief Local connection latency option. - * - * @details Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * @details Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is disabled by default, and needs to be enabled for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - -/**@brief Disable slave latency - * - * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection - * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the - * peripheral will ignore the slave_latency set by the central. - * - * @note Shall only be called on peripheral links. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ -} ble_gap_opt_slave_latency_disable_t; - -/**@brief Passkey Option. - * - * @details Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication - * instead of generating a random one. - * - * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Compatibility mode 1 option. - * - * @details This can be used with @ref sd_ble_opt_set to enable and disable - * compatibility mode 1. Compatibility mode 1 is disabled by default. - * - * @note Compatibility mode 1 enables interoperability with devices that do not support a value of - * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a - * limited set of legacy peripheral devices from another vendor. Enabling this compatibility - * mode will only have an effect if the local device will act as a central device and - * initiate a connection to a peripheral device. In that case it may lead to the connection - * creation taking up to one connection interval longer to complete for all connections. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable compatibility mode 1.*/ -} ble_gap_opt_compat_mode_1_t; - - -/**@brief Authenticated payload timeout option. - * - * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other - * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. - * - * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated - * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted - * link. - * - * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance - * to reset the timer. In addition the stack will try to prioritize running of LE ping over other - * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects - * on other activities, it is recommended to use high timeout values. - * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ -} ble_gap_opt_auth_payload_timeout_t; - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ - ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ - ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ - ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ - ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set the local Bluetooth identity address. - * - * The local Bluetooth identity address is the address that identifies this device to other peers. - * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @note The identity address cannot be changed while advertising, scanning or creating a connection. - * - * @note This address will be distributed to the peer during bonding. - * If the address changes, the address stored in the peer device will not be valid and the ability to - * reconnect using the old address will be lost. - * - * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being - * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged - * for the lifetime of each IC. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in] p_addr Pointer to address structure. - * - * @retval ::NRF_SUCCESS Address successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, - * scanning or creating a connection. - */ -SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); - - -/**@brief Get local Bluetooth identity address. - * - * @note This will always return the identity address irrespective of the privacy settings, - * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @param[out] p_addr Pointer to address structure to be filled in. - * - * @retval ::NRF_SUCCESS Address successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); - - -/**@brief Set the active whitelist in the SoftDevice. - * - * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. - * The whitelist cannot be set if a BLE role is using the whitelist. - * - * @note If an address is resolved using the information in the device identity list, then the whitelist - * filter policy applies to the peer identity address and not the resolvable address sent on air. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @endmscs - * - * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. - * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. - * - * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. - * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when - * pp_wl_addrs is not NULL. - */ -SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); - - -/**@brief Set device identity list. - * - * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. - * The device identity list cannot be set if a BLE role is using the list. - * - * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. - * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. - * To fill in the list with the currently set device IRK for all peers, set to NULL. - * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. - * This code may be returned if the local IRK list also has an invalid entry. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can - * only return when pp_id_keys is not NULL. - */ -SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); - - -/**@brief Set privacy settings. - * - * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. - * - * @param[in] p_privacy_params Privacy settings. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. - * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning - * or creating a connection. - */ -SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); - - -/**@brief Get privacy settings. - * - * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. - * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. - * - * @param[in,out] p_privacy_params Privacy settings. - * - * @retval ::NRF_SUCCESS Privacy settings read. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - */ -SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); - - -/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. - * - * @note The format of the advertising data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertising data and scan response data. - * - * @note In order to update advertising data while advertising, new advertising buffers must be provided. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure - * a new advertising set. On success, a new handle is then returned through the pointer. - * Provide a pointer to an existing advertising handle to configure an existing advertising set. - * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. - * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, - * this parameter must be NULL. See @ref ble_gap_adv_params_t. - * - * @retval ::NRF_SUCCESS Advertising set successfully configured. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, - * see @ref sd_ble_gap_whitelist_set. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * - It is invalid to provide non-NULL advertising set parameters while advertising. - * - It is invalid to provide the same data buffers while advertising. To update - * advertising data, provide new advertising buffers. - * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to - * configure a new advertising handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification - * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an - * existing advertising handle instead. - * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - */ -SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @note Only one advertiser may be active at any time. - * - * @events - * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} - * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} - * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable - * advertising, this is ignored. - * - * @retval ::NRF_SUCCESS The BLE stack has started advertising. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. adv_handle is not configured or already advertising. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * @retval ::NRF_ERROR_RESOURCES Either: - * - adv_handle is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * - Not enough BLE role slots available. - Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. - * - p_adv_params is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle The advertising handle that should stop advertising. - * - * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. - * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); - - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CPU_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected - * - * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a @ref BLE_GAP_EVT_DISCONNECTED event. - * - * @events - * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CONN_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). - * - * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for - * possible roles. - * @param[in] handle The handle parameter is interpreted depending on role: - * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. - * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, - * will use the specified transmit power, and include it in the advertising packet headers if - * @ref ble_gap_adv_properties_t::include_tx_power set. - * - For all other roles handle is ignored. - * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). - * - * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +3dBm and +4dBm. - * @note The initiator will have the same transmit power as the scanner. - * @note When a connection is created it will inherit the transmit power from the initiator or - * advertiser leading to the connection. - * - * @retval ::NRF_SUCCESS Successfully changed the transmit power. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); - - -/**@brief Set GAP device name. - * - * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), - * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. - * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @retval ::NRF_SUCCESS GAP device name retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); - - -/**@brief Initiate the GAP Authentication procedure. - * - * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), - * otherwise in the peripheral role, an SMP Security Request will be sent. - * - * @events - * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} - * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} - * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} - * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} - * @event{@ref BLE_GAP_EVT_KEY_PRESSED} - * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} - * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} - * @event{@ref BLE_GAP_EVT_AUTH_STATUS} - * @event{@ref BLE_GAP_EVT_TIMEOUT} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. - * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. - * In the central role, this pointer may be NULL to reject a Security Request. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have - * already been provided during a previous call to @ref sd_ble_gap_authenticate. - * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure - * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application - * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. - * Note that the SoftDevice expects the application to provide memory for storing the - * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key - * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the - * @ref BLE_GAP_EVT_AUTH_STATUS event. - * - * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); - - -/**@brief Reply with an authentication key. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) - * or NULL when confirming LE Secure Connections Numeric Comparison. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. - * - * @retval ::NRF_SUCCESS Authentication key successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); - - -/**@brief Reply with an LE Secure connections DHKey. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dhkey LE Secure Connections DHKey. - * - * @retval ::NRF_SUCCESS DHKey successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); - - -/**@brief Notify the peer of a local keypress. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. - * - * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. - */ -SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); - - -/**@brief Generate a set of OOB data to send to a peer out of band. - * - * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, - * the one used during connection setup). The application may manually overwrite it with an updated value. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. - * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. - * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. - * - * @retval ::NRF_SUCCESS OOB data successfully generated. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); - -/**@brief Provide the OOB data sent/received out of band. - * - * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. - * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. - * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref sd_ble_gap_authenticate in the central role - * or @ref sd_ble_gap_sec_params_reply in the peripheral role. - * - * @retval ::NRF_SUCCESS OOB data accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); - - -/**@brief Initiate GAP Encryption procedure. - * - * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. - * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. - */ -SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); - - -/**@brief Reply with GAP security information. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @retval ::NRF_SUCCESS Successfully accepted security information. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Current connection security successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @events - * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is - * dependent on the settings of the threshold_dbm - * and skip_count input parameters.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. - * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. - * - * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); - - -/**@brief Stop reporting the received signal strength. - * - * @note An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * - * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); - - -/**@brief Get the received signal strength for the last connection event. - * - * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND - * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. - * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. - * - * @retval ::NRF_SUCCESS Successfully read the RSSI. - * @retval ::NRF_ERROR_NOT_FOUND No sample is available. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - */ -SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); - - -/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). - * - * @note A call to this function will require the application to keep the memory pointed by - * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped - * or when this function is called with another buffer. - * - * @note The scanner will automatically stop in the following cases: - * - @ref sd_ble_gap_scan_stop is called. - * - @ref sd_ble_gap_connect is called. - * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. - * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application - * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop - * to stop scanning. - * - * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will - * receive more reports from this advertising event. The following reports will include the old and new received data. - * The application can stop the scanner from receiving more packets from this advertising event by calling this function. - * This might be useful when receiving data from extended advertising events where @ref ble_gap_evt_adv_report_t::aux_pointer - * is large. - * - * @events - * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} - * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue - * scanning, this parameter must be NULL. - * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. - * The memory pointed to should be kept alive until the scanning is stopped. - * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. - * If the scanner receives advertising data larger than can be stored in the buffer, - * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status - * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. - * - * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: - * - Scanning is already ongoing and p_scan_params was not NULL - * - Scanning is not running and p_scan_params was NULL. - * - The scanner has timed out when this function is called to continue scanning. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. - * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); - - -/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). - * - * @note The buffer provided in @ref sd_ble_gap_scan_start is released. - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Not in the scanning state. - */ -SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); - - -/**@brief Create a connection (GAP Link Establishment). - * - * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. - * The scanning procedure will be stopped even if the function returns an error. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use - * whitelist, then p_peer_addr is ignored. - * @param[in] p_scan_params Pointer to scan parameters structure. - * @param[in] p_conn_params Pointer to desired connection parameters. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. - * - * @retval ::NRF_SUCCESS Successfully initiated connection procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * - Invalid parameter(s) in p_scan_params or p_conn_params. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an - * existing locally initiated connect procedure, which must complete before initiating again. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. - * @retval ::NRF_ERROR_RESOURCES Either: - * - Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. - * - The event_length parameter associated with conn_cfg_tag is too small to be able to - * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. - * Use @ref sd_ble_cfg_set to increase the event length. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - */ -SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); - - -/**@brief Cancel a connection establishment. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - */ -SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); - - -/**@brief Initiate or respond to a PHY Update Procedure - * - * @details This function is used to initiate or respond to a PHY Update Procedure. It will always - * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. - * If this function is used to initiate a PHY Update procedure and the only option - * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the - * currently active PHYs in the respective directions, the SoftDevice will generate a - * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the - * procedure in the Link Layer. - * - * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, - * then the stack will select PHYs based on the peer's PHY preferences and the local link - * configuration. The PHY Update procedure will for this case result in a PHY combination - * that respects the time constraints configured with @ref sd_ble_cfg_set and the current - * link layer data length. - * - * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. - * - * If the peer does not support the PHY Update Procedure, then the resulting - * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to - * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. - * - * If the PHY procedure was rejected by the peer due to a procedure collision, the status - * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or - * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. - * If the peer responds to the PHY Update procedure with invalid parameters, the status - * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. - * If the PHY procedure was rejected by the peer for a different reason, the status will - * contain the reason as specified by the peer. - * - * @events - * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} - * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} - * @endmscs - * - * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. - * @param[in] p_gap_phys Pointer to PHY structure. - * - * @retval ::NRF_SUCCESS Successfully requested a PHY Update. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported PHYs supplied to the call. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. - * - */ -SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); - - -/**@brief Initiate or respond to a Data Length Update Procedure. - * - * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of - * p_dl_params, the SoftDevice will choose the highest value supported in current - * configuration and connection parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update - * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let - * the SoftDevice automatically decide the value for that member. - * Set to NULL to use automatic values for all members. - * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not - * have enough resources or does not support the requested Data Length - * Update parameters. Ignored if NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect - * p_dl_limitation to see which parameter is not supported. - * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. - * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. - * Inspect p_dl_limitation to see where the limitation is. - * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the - * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. - */ -SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); - -/**@brief Start the Quality of Service (QoS) channel survey module. - * - * @details The channel survey module provides measurements of the energy levels on - * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT - * events will periodically report the measured energy levels for each channel. - * - * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, - * Radio Timeslot API events and Flash API events. - * - * @note The channel survey module will attempt to do measurements so that the average interval - * between measurements will be interval_us. However due to the channel survey module - * having the lowest priority of all roles and modules, this may not be possible. In that - * case fewer than expected channel survey reports may be given. - * - * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available - * must be set. This is done using @ref sd_ble_cfg_set. - * - * @param[in] interval_us Requested average interval for the measurements and reports. See - * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set - * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel - * survey role will be scheduled at every available opportunity. - * - * @retval ::NRF_SUCCESS The module is successfully started. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the - * allowed range. - * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. - * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. - * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using - * @ref sd_ble_cfg_set. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(uint32_t interval_us)); - -/**@brief Stop the Quality of Service (QoS) channel survey module. - * - * @retval ::NRF_SUCCESS The module is successfully stopped. - * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(void)); - - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatt.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatt.h deleted file mode 100644 index 98a7a150bf..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatt.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default ATT MTU, in bytes. */ -#define BLE_GATT_ATT_MTU_DEFAULT 23 - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/**@brief First Attribute Handle. */ -#define BLE_GATT_HANDLE_START 0x0001 - -/**@brief Last Attribute Handle. */ -#define BLE_GATT_HANDLE_END 0xFFFF - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. - */ -typedef struct -{ - uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. - The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - @mscs - @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - @endmscs - */ -} ble_gatt_conn_cfg_t; - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ - uint8_t read :1; /**< Reading the value permitted. */ - uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ - uint8_t write :1; /**< Writing the value with Write Request permitted. */ - uint8_t notify :1; /**< Notification of the value permitted. */ - uint8_t indicate :1; /**< Indications of the value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -} ble_gatt_char_ext_props_t; - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATT_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gattc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gattc.h deleted file mode 100644 index 7fb3920244..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gattc.h +++ /dev/null @@ -1,715 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ - SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -}; - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ - BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ - BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ - BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ - BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -/** @} */ - -/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats - * @{ */ -#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -/** @} */ - -/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults - * @{ */ -#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. - The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ -} ble_gattc_conn_cfg_t; - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t const *p_value; /**< Pointer to the value data. */ -} ble_gattc_write_params_t; - -/**@brief Attribute Information for 16-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -} ble_gattc_attr_info16_t; - -/**@brief Attribute Information for 128-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -} ble_gattc_attr_info128_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Attribute count. */ - uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ - union { - ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - } info; /**< Attribute information union. */ -} ble_gattc_evt_attr_info_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -typedef struct -{ - uint16_t server_rx_mtu; /**< Server RX MTU size. */ -} ble_gattc_evt_exchange_mtu_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of write without response transmissions completed. */ -} ble_gattc_evt_write_cmd_tx_complete_t; - -/**@brief GATTC event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ - ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. - * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @events - * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @events - * @event{@ref BLE_GATTC_EVT_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note Only one write with response procedure can be ongoing per connection at a time. - * If the application tries to write with response while another write with response procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. - * - * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. - * - * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} - * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @retval ::NRF_SUCCESS Successfully started the Write procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. - * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. - * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @mscs - * @mmsc{@ref BLE_GATTC_HVI_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/**@brief Discovers information about a range of attributes on a GATT server. - * - * @events - * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} - * @endevents - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range The range of handles to request information about. - * - * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); - -/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value, and - * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @events - * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] client_rx_mtu Client RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - used for this connection. - * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent request to the server. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); - -/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * - * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * @note If the buffer contains different event, behavior is undefined. - * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with - * the next Handle-Value pair in each iteration. If the function returns other than - * @ref NRF_SUCCESS, it will not be changed. - * - To start iteration, initialize the structure to zero. - * - To continue, pass the value from previous iteration. - * - * \code - * ble_gattc_handle_value_t iter; - * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); - * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) - * { - * app_handle = iter.handle; - * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); - * } - * \endcode - * - * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. - * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. - */ -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); - -/** @} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -{ - uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; - uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; - uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; - - if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) - { - p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; - p_iter->p_value = p_next + sizeof(uint16_t); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_NOT_FOUND; - } -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif -#endif /* BLE_GATTC_H__ */ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatts.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatts.h deleted file mode 100644 index e437b6e076..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_gatts.h +++ /dev/null @@ -1,845 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" -#include "ble_gap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ - SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ - SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ - SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -}; - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ - BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ - BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ - BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ -}; - -/**@brief GATTS Configuration IDs. - * - * IDs that uniquely identify a GATTS configuration. - */ -enum BLE_GATTS_CFGS -{ - BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ - BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - -/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags - * @{ */ -#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -/** @} */ - -/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values - * @{ - */ -#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size - * @{ - */ -#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ -#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ -/** @} */ - -/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults - * @{ - */ -#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. - The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ -} ble_gatts_conn_cfg_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -} ble_gatts_attr_t; - -/**@brief GATT Attribute Value. */ -typedef struct -{ - uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ - uint16_t offset; /**< Attribute value offset. */ - uint8_t *p_value; /**< Pointer to where value is stored or will be stored. - If value is stored in user memory, only the attribute length is updated when p_value == NULL. - Set to NULL when reading to obtain the complete length of the attribute value */ -} ble_gatts_value_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ - ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ - uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. - Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, - as the data to be written needs to be stored and later provided by the application. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ - } params; /**< Reply Parameters. */ -} ble_gatts_rw_authorize_reply_params_t; - -/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ -typedef struct -{ - uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ -} ble_gatts_cfg_service_changed_t; - -/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The specified Attribute Table size is too small. - * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. - * - The specified Attribute Table size is not a multiple of 4. - */ -typedef struct -{ - uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ -} ble_gatts_cfg_attr_tab_size_t; - -/**@brief Config structure for GATTS configurations. */ -typedef union -{ - ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ - ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ -} ble_gatts_cfg_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the received data. */ - uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gatts_evt_write_t; - -/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; /**< Request Parameters. */ -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; /**< Hint (currently unused). */ -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -typedef struct -{ - uint16_t client_rx_mtu; /**< Client RX MTU size. */ -} ble_gatts_evt_exchange_mtu_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of notification transmissions completed. */ -} ble_gatts_evt_hvn_tx_complete_t; - -/**@brief GATTS event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the Attribute Table. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the Attribute Table. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a service declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); - - -/**@brief Add an include declaration to the Attribute Table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). - * - * @note The included service must already be present in the Attribute Table prior to this call. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added an include declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, - * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a characteristic. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); - - -/**@brief Add a descriptor to the Attribute Table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a descriptor. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); - -/**@brief Set the value of a given attribute. - * - * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully set the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Get the value of a given attribute. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. - * The application may use this information to allocate a suitable buffer size. - * - * @note When retrieving system attribute values with this function, the connection handle - * may refer to an already disconnected connection. Refer to the documentation of - * @ref sd_ble_gatts_sys_attr_get for further information. - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, - * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. - * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). - * - * @note Only one indication procedure can be ongoing per connection at a time. - * If the application tries to indicate an attribute value while another indication procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. - * - * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. - * - * @note The application can keep track of the available queue element count for notifications by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} - * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_HVN_MSC} - * @mmsc{@ref BLE_GATTS_HVI_MSC} - * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data - * contains a non-NULL pointer the attribute value will be updated with the contents - * pointed by it before sending the notification or indication. If the attribute value - * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to - * contain the number of actual bytes written, else it will be set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. - * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute - * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @events - * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_SC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref - * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @retval ::NRF_ERROR_BUSY Procedure already in progress. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond - * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update - * is set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, - * handle supplied does not match requested handle, - * or invalid data to be written provided by the application. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply information about persistent system attributes to the stack, - * previously obtained using @ref sd_ble_gatts_sys_attr_get. - * This call is only allowed for active connections, and is usually - * made immediately after a connection is established with an known bonded device, - * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the system attributes - * obtained using @ref sd_ble_gatts_sys_attr_get. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved system attribute data for this device. - * - * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully set the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored persistently by the application - * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, - * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. - * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for - * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. - * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes - * may be written to at any time by the peer during a connection's lifetime. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. - * - * @mscs - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described - * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); - - -/**@brief Retrieve the first valid user attribute handle. - * - * @param[out] p_handle Pointer to an integer where the handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully retrieved the handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); - -/**@brief Retrieve the attribute UUID and/or metadata. - * - * @param[in] handle Attribute handle - * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. - * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. - * - * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. - * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. - */ -SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); - -/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. - * - * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and - * - The Server RX MTU value. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @mscs - * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] server_rx_mtu Server RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - * used for this connection. - * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent response to the client. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATTS_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_hci.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_hci.h deleted file mode 100644 index f0dde9a03a..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_hci.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -*/ -#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ -/* -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ - -/** @} */ - - -#ifdef __cplusplus -} -#endif -#endif // BLE_HCI_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_l2cap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_l2cap.h deleted file mode 100644 index eaeb4b7d28..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_l2cap.h +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology - * @{ - * @details - * - * L2CAP SDU - * - A data unit that the application can send/receive to/from a peer. - * - * L2CAP PDU - * - A data unit that is exchanged between local and remote L2CAP entities. - * It consists of L2CAP protocol control information and payload fields. - * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. - * - * L2CAP MTU - * - The maximum length of an L2CAP SDU. - * - * L2CAP MPS - * - The maximum length of an L2CAP PDU payload field. - * - * Credits - * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. - * @} */ - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ - SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ - SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ -}; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. - \n See @ref ble_l2cap_evt_ch_setup_request_t. */ - BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. - \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ - BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. - \n See @ref ble_l2cap_evt_ch_setup_t. */ - BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. - \n No additional event structure applies. */ - BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. - \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ - BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. - \n See @ref ble_l2cap_evt_ch_credit_t. */ - BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. - \n See @ref ble_l2cap_evt_ch_rx_t. */ - BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. - \n See @ref ble_l2cap_evt_ch_tx_t. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@brief Maximum number of L2CAP channels per connection. */ -#define BLE_L2CAP_CH_COUNT_MAX (64) - -/**@brief Minimum L2CAP MTU, in bytes. */ -#define BLE_L2CAP_MTU_MIN (23) - -/**@brief Minimum L2CAP MPS, in bytes. */ -#define BLE_L2CAP_MPS_MIN (23) - -/**@brief Invalid CID. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ -#define BLE_L2CAP_CREDITS_DEFAULT (1) - -/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources - * @{ */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ - /** @} */ - - /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes - * @{ */ -#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ -#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ -#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ -#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ -#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ -#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ -#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ -#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ -/** @} */ - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @note These parameters are set per connection, so all L2CAP channels created on this connection - * will have the same parameters. - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. - * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. - */ -typedef struct -{ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to receive on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to transmit on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per - L2CAP channel. The minimum value is one. */ - uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission - per L2CAP channel. The minimum value is one. */ - uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection - with this configuration. The default value is zero, the maximum - value is @ref BLE_L2CAP_CH_COUNT_MAX. - @note if this parameter is set to zero, all other parameters in - @ref ble_l2cap_conn_cfg_t are ignored. */ -} ble_l2cap_conn_cfg_t; - -/**@brief L2CAP channel RX parameters. */ -typedef struct -{ - uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to - receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be - able to receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. - - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ - ble_data_t sdu_buf; /**< SDU data buffer for reception. - - If @ref ble_data_t::p_data is non-NULL, initial credits are - issued to the peer. - - If @ref ble_data_t::p_data is NULL, no initial credits are - issued to the peer. */ -} ble_l2cap_ch_rx_params_t; - -/**@brief L2CAP channel setup parameters. */ -typedef struct -{ - ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting - setup of an L2CAP channel, ignored otherwise. */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. - Used when replying to a setup request of an L2CAP - channel, ignored otherwise. */ -} ble_l2cap_ch_setup_params_t; - -/**@brief L2CAP channel TX parameters. */ -typedef struct -{ - uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to - transmit on this L2CAP channel. */ - uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is - able to receive on this L2CAP channel. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able - to transmit on this L2CAP channel. This is effective tx_mps, - selected by the SoftDevice as - MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ - uint16_t credits; /**< Initial credits given by the peer. */ -} ble_l2cap_ch_tx_params_t; - -/**@brief L2CAP Channel Setup Request event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ -} ble_l2cap_evt_ch_setup_request_t; - -/**@brief L2CAP Channel Setup Refused event. */ -typedef struct -{ - uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ -} ble_l2cap_evt_ch_setup_refused_t; - -/**@brief L2CAP Channel Setup Completed event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ -} ble_l2cap_evt_ch_setup_t; - -/**@brief L2CAP Channel SDU Data Duffer Released event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice - returns SDU data buffers supplied by the application, which have - not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or - @ref BLE_L2CAP_EVT_CH_TX event. */ -} ble_l2cap_evt_ch_sdu_buf_released_t; - -/**@brief L2CAP Channel Credit received event. */ -typedef struct -{ - uint16_t credits; /**< Additional credits given by the peer. */ -} ble_l2cap_evt_ch_credit_t; - -/**@brief L2CAP Channel received SDU event. */ -typedef struct -{ - uint16_t sdu_len; /**< Total SDU length, in bytes. */ - ble_data_t sdu_buf; /**< SDU data buffer. - @note If there is not enough space in the buffer - (sdu_buf.len < sdu_len) then the rest of the SDU will be - silently discarded by the SoftDevice. */ -} ble_l2cap_evt_ch_rx_t; - -/**@brief L2CAP Channel transmitted SDU event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< SDU data buffer. */ -} ble_l2cap_evt_ch_tx_t; - -/**@brief L2CAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occured. */ - uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or - @ref BLE_L2CAP_CID_INVALID if not present. */ - union - { - ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ - ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ - ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ - ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ - ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ - ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ - ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_l2cap_evt_t; - -/** @} */ - -/**@addtogroup BLE_L2CAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set up an L2CAP channel. - * - * @details This function is used to: - * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. - * - Reply to a setup request of an L2CAP channel (if called in response to a - * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection - * Response packet to a peer. - * - * @note A call to this function will require the application to keep the SDU data buffer alive - * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or - * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} - * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: - * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP - * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST - * event when replying to a setup request of an L2CAP channel. - * - As output: local_cid for this channel. - * @param[in] p_params L2CAP channel parameters. - * - * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, - * see @ref ble_l2cap_conn_cfg_t::ch_count. - */ -SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); - -/**@brief Release an L2CAP channel. - * - * @details This sends a Disconnection Request packet to a peer. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * - * @retval ::NRF_SUCCESS Successfully queued request for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); - -/**@brief Receive an SDU on an L2CAP channel. - * - * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers - * for reception per L2CAP channel. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Buffer accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a - * @ref BLE_L2CAP_EVT_CH_RX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Transmit an SDU on an L2CAP channel. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for - * transmission per L2CAP channel. - * - * @note The application can keep track of the available credits for transmission by following - * the procedure below: - * - Store initial credits given by the peer in a variable. - * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Decrement the variable, which stores the currently available credits, by - * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns - * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Increment the variable, which stores the currently available credits, by additional - * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than - * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in - * @ref BLE_L2CAP_EVT_CH_SETUP event. - * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a - * @ref BLE_L2CAP_EVT_CH_TX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Advanced SDU reception flow control. - * - * @details Adjust the way the SoftDevice issues credits to the peer. - * This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set - * the value that will be used for newly created channels. - * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every - * time it starts using a new reception buffer. - * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will - * use if this function is not called. - * - If set to zero, the SoftDevice will stop issuing credits for new reception - * buffers the application provides or has provided. SDU reception that is - * currently ongoing will be allowed to complete. - * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be - * written by the SoftDevice with the number of credits that is or will be - * available to the peer. If the value written by the SoftDevice is 0 when - * credits parameter was set to 0, the peer will not be able to send more - * data until more credits are provided by calling this function again with - * credits > 0. This parameter is ignored when local_cid is set to - * @ref BLE_L2CAP_CID_INVALID. - * - * @note Application should take care when setting number of credits higher than default value. In - * this case the application must make sure that the SoftDevice always has reception buffers - * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have - * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic - * on the connection handle may be stalled until the SoftDevice again has an available - * reception buffer. This applies even if the application has used this call to set the - * credits back to default, or zero. - * - * @retval ::NRF_SUCCESS Flow control parameters accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_L2CAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_ranges.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_ranges.h deleted file mode 100644 index 0935bca071..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_ranges.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC, event and option number subranges - @{ - - @brief Definition of SVC, event and option number subranges for each API module. - - @note - SVCs, event and option numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC, event and option values are defined in each module's ble_.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ - -#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ - -#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ -#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ - -#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ -#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ - -#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ -#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ - - -#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ - -#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ - -#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ - -#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ - -#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ - -#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ -#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ - - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ - -#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ -#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ - -#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ - -#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ - -#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ - - -#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ - -#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ -#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ - -#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ -#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ - -#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ -#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ - -#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ -#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ - -#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ -#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ - -#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ -#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ - -#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ -#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ - - - - - -#ifdef __cplusplus -} -#endif -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_types.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_types.h deleted file mode 100644 index 88c93180c8..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/ble_types.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the BLE SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_TYPES_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/**@brief Data structure. */ -typedef struct -{ - uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ - uint16_t len; /**< Length of the data buffer, in bytes. */ -} ble_data_t; - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf52/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf52/nrf_mbr.h deleted file mode 100644 index cc5971c7a3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf52/nrf_mbr.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use PROTENSET to protect the flash that is not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_ble.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_ble.h deleted file mode 100644 index 9ebb41f538..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_ble.h +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the BLE SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_err.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ - SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ -}; - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ - BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -}; - -/**@brief BLE Connection Configuration IDs. - * - * IDs that uniquely identify a connection configuration. - */ -enum BLE_CONN_CFGS -{ - BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ - BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ - BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ - BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ - BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ -}; - -/**@brief BLE Common Configuration IDs. - * - * IDs that uniquely identify a common configuration. - */ -enum BLE_COMMON_CFGS -{ - BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ -}; - -/**@brief Common Option IDs. - * IDs that uniquely identify a common option. - */ -enum BLE_COMMON_OPTS -{ - BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ - BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVT_PTR_ALIGNMENT 4 - -/** @brief Leaves the maximum of the two arguments. -*/ -#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) - -/** @brief Maximum possible length for BLE Events. - * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. - * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. -*/ -#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ - offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -) - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts - * @{ - */ -#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ -#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ -/** @} */ - -/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. - * @{ - */ -#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ - -/** @} */ - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union - { - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; /**< Event parameter union. */ -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE__EVT series. */ - uint16_t evt_len; /**< Length in octets including this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - } evt; /**< Event union. */ -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/** - * @brief Configuration parameters for the PA and LNA. - */ -typedef struct -{ - uint8_t enable :1; /**< Enable toggling for this amplifier */ - uint8_t active_high :1; /**< Set the pin to be active high */ - uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -} ble_pa_lna_cfg_t; - -/** - * @brief PA & LNA GPIO toggle configuration - * - * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or - * a low noise amplifier. - * - * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided - * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences - * and must be avoided by the application. - */ -typedef struct -{ - ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ - ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ - - uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ - uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ - uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -} ble_common_opt_pa_lna_t; - -/** - * @brief Configuration of extended BLE connection events. - * - * When enabled the SoftDevice will dynamically extend the connection event when possible. - * - * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. - * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, - * and if there are no conflicts with other BLE roles requesting radio time. - * - * @note @ref sd_ble_opt_get is not supported for this option. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -} ble_common_opt_conn_evt_ext_t; - -/**@brief Option structure for common options. */ -typedef union -{ - ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ - ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -} ble_common_opt_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ - ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -} ble_opt_t; - -/**@brief BLE connection configuration type, wrapping the module specific configurations, set with - * @ref sd_ble_cfg_set. - * - * @note Connection configurations don't have to be set. - * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, - * the default connection configuration will be automatically added for the remaining connections. - * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in - * place of @ref ble_conn_cfg_t::conn_cfg_tag. - * - * @sa sd_ble_gap_adv_start() - * @sa sd_ble_gap_connect() - * - * @mscs - * @mmsc{@ref BLE_CONN_CFG} - * @endmscs - - */ -typedef struct -{ - uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the - @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls - to select this configuration when creating a connection. - Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ - union { - ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ - ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ - ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ - ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ - ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ - } params; /**< Connection configuration union. */ -} ble_conn_cfg_t; - -/** - * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. - */ -typedef struct -{ - uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. - Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is - @ref BLE_UUID_VS_COUNT_MAX. */ -} ble_common_cfg_vs_uuid_t; - -/**@brief Common BLE Configuration type, wrapping the common configurations. */ -typedef union -{ - ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ -} ble_common_cfg_t; - -/**@brief BLE Configuration type, wrapping the module specific configurations. */ -typedef union -{ - ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ - ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ - ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ - ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ -} ble_cfg_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the BLE stack - * - * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the - * application RAM region (APP_RAM_BASE). On return, this will - * contain the minimum start address of the application RAM region - * required by the SoftDevice for this configuration. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note The value of *p_app_ram_base when the app has done no custom configuration of the - * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can - * be found in the release notes. - * - * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located - * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between - * APP_RAM_BASE and the start of the call stack. - * - * @details This call initializes the BLE stack, no BLE related function other than @ref - * sd_ble_cfg_set can be called before this one. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not - * large enough to fit this configuration's memory requirement. Check *p_app_ram_base - * and set the start address of the application RAM region accordingly. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); - -/**@brief Add configurations for the BLE stack - * - * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref - * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. - * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. - * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). - * See @ref sd_ble_enable for details about APP_RAM_BASE. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note If a configuration is set more than once, the last one set is the one that takes effect on - * @ref sd_ble_enable. - * - * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default - * configuration. - * - * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref - * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref - * sd_ble_enable). - * - * @note Error codes for the configurations are described in the configuration structs. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The configuration has been added successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not - * large enough to fit this configuration's memory requirement. - */ -SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); - -/**@brief Get an event from the pending events queue. - * - * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. - * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. - * The buffer should be interpreted as a @ref ble_evt_t struct. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that - * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. - * The application is free to choose whether to call this function from thread mode (main context) or directly from the - * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher - * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) - * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so - * could potentially leave events in the internal queue without the application being aware of this fact. - * - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to - * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, - * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. - * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length - * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: - * - * \code - * uint16_t len; - * errcode = sd_ble_evt_get(NULL, &len); - * \endcode - * - * @mscs - * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} - * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); - - -/**@brief Add a Vendor Specific base UUID. - * - * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later - * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t - * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code - * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses - * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to - * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field - * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to - * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in - * p_uuid_type along with an @ref NRF_SUCCESS error code. - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @retval ::NRF_SUCCESS Successfully encoded into the buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[out] p_version Pointer to a ble_version_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Version information stored successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @endmscs - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ -#ifdef __cplusplus -} -#endif -#endif /* BLE_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error.h deleted file mode 100644 index 6badee98e5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_sdm.h deleted file mode 100644 index 530959b9d6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_sdm.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_soc.h deleted file mode 100644 index 1e784b8db3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_error_soc.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_nvic.h deleted file mode 100644 index f5c7e8e028..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_nvic.h +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_nvic_api SoftDevice NVIC API - * @{ - * - * @note In order to use this module, the following code has to be added to a .c file: - * \code - * nrf_nvic_state_t nrf_nvic_state = {0}; - * \endcode - * - * @note Definitions and declarations starting with __ (double underscore) in this header file are - * not intended for direct use by the application. - * - * @brief APIs for the accessing NVIC when using a SoftDevice. - * - */ - -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_NVIC_DEFINES Defines - * @{ */ - -/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions - * @{ */ - -#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ - -#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ -#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ - (1U << POWER_CLOCK_IRQn) \ - | (1U << RADIO_IRQn) \ - | (1U << RTC0_IRQn) \ - | (1U << TIMER0_IRQn) \ - | (1U << RNG_IRQn) \ - | (1U << ECB_IRQn) \ - | (1U << CCM_AAR_IRQn) \ - | (1U << TEMP_IRQn) \ - | (1U << __NRF_NVIC_NVMC_IRQn) \ - | (1U << (uint32_t)SWI5_IRQn) \ - )) - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ -#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) - -/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ -#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) - -/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ -#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) - -/**@} */ - -/**@} */ - -/**@addtogroup NRF_NVIC_VARIABLES Variables - * @{ */ - -/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -typedef struct -{ - uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ - uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -} nrf_nvic_state_t; - -/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an - * application source file. */ -extern nrf_nvic_state_t nrf_nvic_state; - -/**@} */ - -/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions - * @{ */ - -/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. - * - * @retval The value of PRIMASK prior to disabling the interrupts. - */ -__STATIC_INLINE int __sd_nvic_irq_disable(void); - -/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. - */ -__STATIC_INLINE void __sd_nvic_irq_enable(void); - -/**@brief Checks if IRQn is available to application - * @param[in] IRQn IRQ to check - * - * @retval 1 (true) if the IRQ to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); - -/**@brief Checks if priority is available to application - * @param[in] priority priority to check - * - * @retval 1 (true) if the priority to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); - -/**@} */ - -/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions - * @{ */ - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * @pre Priority is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); - -/**@brief Enter critical region. - * - * @post Application interrupts will be disabled. - * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each - * execution context - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - -/**@} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE int __sd_nvic_irq_disable(void) -{ - int pm = __get_PRIMASK(); - __disable_irq(); - return pm; -} - -__STATIC_INLINE void __sd_nvic_irq_enable(void) -{ - __enable_irq(); -} - -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -{ - if (IRQn < 32) - { - return ((1UL<= (1 << __NVIC_PRIO_BITS)) - { - return 0; - } - if( priority == 0 - || priority == 1 - || priority == 4 - ) - { - return 0; - } - return 1; -} - - -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); - } - else - { - NVIC_EnableIRQ(IRQn); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); - } - else - { - NVIC_DisableIRQ(IRQn); - } - - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (!__sd_nvic_is_app_accessible_priority(priority)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - NVIC_SetPriority(IRQn, (uint32_t)priority); - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - int was_masked = __sd_nvic_irq_disable(); - if (!nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__cr_flag = 1; - nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); - NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; - nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); - NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; - *p_is_nested_critical_region = 0; - } - else - { - *p_is_nested_critical_region = 1; - } - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) - { - int was_masked = __sd_nvic_irq_disable(); - NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; - NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; - nrf_nvic_state.__cr_flag = 0; - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - } - - return NRF_SUCCESS; -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif - -#endif // NRF_NVIC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sd_def.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sd_def.h deleted file mode 100644 index c9ab241872..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sd_def.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SD_DEF_H__ -#define NRF_SD_DEF_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SD_DEF_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sdm.h deleted file mode 100644 index 8c48d93678..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_sdm.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_sdm.h" -#include "nrf_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ -#ifdef NRFSOC_DOXYGEN -/// Declared in nrf_mbr.h -#define MBR_SIZE 0 -#warning test -#endif - -/** @brief The major version for the SoftDevice binary distributed with this header file. */ -#define SD_MAJOR_VERSION (6) - -/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -#define SD_MINOR_VERSION (0) - -/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -#define SD_BUGFIX_VERSION (0) - -/** @brief The full version number for the SoftDevice binary this header file was distributed - * with, as a decimal number in the form Mmmmbbb, where: - * - M is major version (one or more digits) - * - mmm is minor version (three digits) - * - bbb is bugfix version (three digits). */ -#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) - -/** @brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE 0x10 - -/** @brief SoftDevice unique string size in bytes. */ -#define SD_UNIQUE_STR_SIZE 20 - -/** @brief Invalid info field. Returned when an info field does not exist. */ -#define SDM_INFO_FIELD_INVALID (0) - -/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -the start of the SoftDevice (without MBR)*/ -#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) - -/** @brief Defines the absolute SoftDevice Information Structure location (address) when the - * SoftDevice is installed just above the MBR (the usual case). */ -#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) - -/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the - * SoftDevice base address. The size value is of type uint8_t. */ -#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) - -/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. - * The size value is of type uint32_t. */ -#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) - -/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value - * is of type uint16_t. */ -#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) - -/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID - * is of type uint32_t. */ -#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) - -/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in - * the same format as @ref SD_VERSION, stored as an uint32_t. */ -#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) - -/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. - * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. - */ -#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) - -/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value - * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is - * installed just above the MBR (the usual case). */ -#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base - * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above - * the MBR (the usual case). */ -#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual - * case). */ -#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the - * usual case). */ -#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges - * @{ */ -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -/**@} */ - -/**@defgroup NRF_FAULT_IDS Fault ID types - * @{ */ -#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ -#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, - in case of SoftDevice RAM access violation. In case of SoftDevice peripheral - register violation the info parameter will contain the sub-region number of - PREGION[0], on whose address range the disallowed write access caused the - memory access fault. */ -/**@} */ - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy - * @{ */ - -#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ -#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ -#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ -#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ -#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ -#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ -#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ -#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ -#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ -#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ -#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ - -/** @} */ - -/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources - * @{ */ - -#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ - -/** @} */ - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing LFCLK oscillator source. */ -typedef struct -{ - uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ - uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second - units (nRF52: 1-32). - @note To avoid excessive clock drift, 0.5 degrees Celsius is the - maximum temperature change allowed in one calibration timer - interval. The interval should be selected to ensure this. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ - uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration - intervals) the RC oscillator shall be calibrated if the temperature - hasn't changed. - 0: Always calibrate even if the temperature hasn't changed. - 1: Only calibrate if the temperature has changed (legacy - nRF51 only). - 2-33: Check the temperature and only calibrate if it has changed, - however calibration will take place every rc_temp_ctiv - intervals in any case. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. - - @note For nRF52, the application must ensure calibration at least once - every 8 seconds to ensure +/-500 ppm clock stability. The - recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is - rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at - least once every 8 seconds and for temperature changes of 0.5 - degrees Celsius every 4 seconds. See the Product Specification - for the nRF52 device being used for more information.*/ - uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing - windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ -} nrf_clock_lf_cfg_t; - -/**@brief Fault Handler type. - * - * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. - * - * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. - * @param[in] pc The program counter of the instruction that triggered the fault. - * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. - * - * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when - * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. - */ -typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available. - * - A portion of RAM will be unavailable (see relevant SDS documentation). - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). - * - Interrupts will not arrive from protected peripherals or interrupts. - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). - * - Chosen low frequency clock source will be running. - * - * @param p_clock_lf_cfg Low frequency clock source and accuracy. - If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 - In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. - * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); - - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_soc.h deleted file mode 100644 index 2c4d958750..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_soc.h +++ /dev/null @@ -1,964 +0,0 @@ -/* - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * - */ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ - -/**@brief Guaranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -/**@brief The maximum processing time to handle a timeslot extension. */ -#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) - -/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ -#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. - The default interrupt priority for this handler is set to 4 */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. - The default interrupt priority for this handler is set to 4 */ -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/**@} */ - -/**@addtogroup NRF_SOC_ENUMS Enumerations - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, - SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, - SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, - SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, - SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, - SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, - SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, - SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, - SD_FLASH_WRITE = SOC_SVC_BASE + 9, - SD_FLASH_PROTECT = SOC_SVC_BASE + 10, - SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, - SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, - SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, - SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, - SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, - SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, - SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, - SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, - SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, - SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, - SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, - SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, - SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, - SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, - SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, - SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, - SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, - SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, - SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, - SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, - SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, - SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, - SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, - SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, - SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, - SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, - SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, - SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, - SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, - SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, - SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Power modes. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Power failure thresholds */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ -}; - - - -/**@brief DC/DC converter modes. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ - NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -}; - -/**@brief Radio notification distances. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Radio notification types. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/**@brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current - timeslot. Maximum execution time for this action: - @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. - This action must be started at least - @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before - the end of the timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the - external crystal for the whole duration of the timeslot. This should be the - preferred option for events that use the radio or require high timing accuracy. - @note The SoftDevice will automatically turn on and off the external crystal, - at the beginning and end of the timeslot, respectively. The crystal may also - intentionally be left running after the timeslot, in cases where it is needed - by the SoftDevice shortly after the end of the timeslot. */ - NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. - The RC oscillator may be the clock source in part or for the whole duration of the timeslot. - The RC oscillator's accuracy must therefore be taken into consideration. - @note If the application will use the radio peripheral in timeslots with this configuration, - it must make sure that the crystal is running and stable before starting the radio. */ -}; - -/**@brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ -}; - -/**@brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/**@} */ - - -/**@addtogroup NRF_SOC_STRUCTURES Structures - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/**@brief Parameters for a normal radio timeslot request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/**@brief Radio timeslot request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ - } params; /**< Parameter union. */ -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; /**< Parameter union. */ -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio timeslot signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB parameter typedefs */ -typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ - -/**@brief AES ECB data structure */ -typedef struct -{ - soc_ecb_key_t key; /**< Encryption key. */ - soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ - soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -} nrf_ecb_hal_data_t; - -/**@brief AES ECB block. Used to provide multiple blocks in a single call - to @ref sd_ecb_blocks_encrypt.*/ -typedef struct -{ - soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ - soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ - soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ -} nrf_ecb_hal_data_block_t; - -/**@} */ - -/**@addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - - -/**@brief Sets the power failure comparator threshold value. - * - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); - - -/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. - * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. - * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); - -/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. - * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); - -/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); - -/**@brief Enable or disable the DC/DC regulator. - * - * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); - - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the interrupt - * is disabled. - * - * When the application waits for an application event by calling this function, an interrupt that - * is enabled will be taken immediately on pending since this function will wait in thread mode, - * then the execution will return in the application's main thread. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M - * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets - * pended, this function will return to the application's main thread. - * - * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ - * in order to sleep using this function. This is only necessary for disabled interrupts, as - * the interrupt handler will clear the pending flag automatically for enabled interrupts. - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - To ensure that the radio notification signal behaves in a consistent way, the radio - * notifications must be configured when there is no protocol stack or other SoftDevice - * activity in progress. It is recommended that the radio notification signal is - * configured directly after the SoftDevice has been enabled. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all - * running activities and retry. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Encrypts multiple data blocks provided as an array of data block structures. - * - * @details: Performs 128-bit AES encryption on multiple data blocks - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in] block_count Count of blocks in the p_data_blocks array. - * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of - * @ref nrf_ecb_hal_data_block_t structures. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50 us from call to return. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write -* -* Commands to write a buffer to flash -* -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the - * write has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is -* protected. -* -* -* @param[in] p_dst Pointer to start of flash location to be written. -* @param[in] p_src Pointer to buffer with data to be written. -* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one -* flash page. See the device's Product Specification for details. -* -* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); - - -/**@brief Flash Erase page -* -* Commands to erase a flash page -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -* erase has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is -* protected. -* -* -* @param[in] page_number Page number of the page to erase -* -* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - -/**@brief Flash Protection set - * - * Commands to set the flash protection configuration registers. - This sets the CONFIGx registers of the BPROT peripheral. - * - * @note Not all parameters are valid for all products. Some bits in each parameter may not be - * valid for your product. Please refer your Product Specification for more details. - * - * @note To read the values read them directly. They are only write-protected. - * - * @note It is possible to use @ref sd_protected_register_write instead of this function. - * - * @param[in] block_cfg0 Value to be written to the configuration register. - * @param[in] block_cfg1 Value to be written to the configuration register. - * @param[in] block_cfg2 Value to be written to the configuration register. - * @param[in] block_cfg3 Value to be written to the configuration register. - * - * @retval ::NRF_ERROR_NOT_SUPPORTED Non-zero value supplied to one or more of the unsupported parameters. - * @retval ::NRF_SUCCESS Values successfully written to configuration registers. - */ -SVCALL(SD_FLASH_PROTECT, uint32_t, sd_flash_protect(uint32_t block_cfg0, uint32_t block_cfg1, uint32_t block_cfg2, uint32_t block_cfg3)); - -/**@brief Opens a session for radio timeslot requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio timeslot requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - -/**@brief Requests a radio timeslot. - * - * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST - * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. - * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by - * p_request->distance_us and is given relative to the start of the previous timeslot. - * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this - * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); - -/**@brief Write register protected by the SoftDevice - * - * This function writes to a register that is write-protected by the SoftDevice. Please refer to your - * SoftDevice Specification for more details about which registers that are protected by SoftDevice. - * This function can write to the following protected peripheral: - * - BPROT - * - * @note Protected registers may be read directly. - * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in - * the register has not changed. See the Product Specification for more details about register - * properties. - * - * @param[in] p_register Pointer to register to be written. - * @param[in] value Value to be written to the register. - * - * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. - * @retval ::NRF_SUCCESS Value successfully written to register. - * - */ -SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); - -/**@} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SOC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_softdevice.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_softdevice.hex deleted file mode 100644 index be148e3077..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/hex/s132_nrf52_6.0.0_softdevice.hex +++ /dev/null @@ -1,9127 +0,0 @@ -:020000040000FA -:10100000E0120020D1430200192F000043430200E8 -:10101000192F0000192F0000192F000000000000F8 -:101020000000000000000000000000002944020051 -:10103000192F000000000000192F0000192F0000D8 -:101040009144020097440200192F0000192F00005C -:10105000192F0000192F0000192F0000192F000070 -:101060009D440200192F0000192F0000A344020024 -:10107000192F0000A9440200AF440200B544020049 -:10108000192F0000192F0000192F0000192F000040 -:10109000192F0000192F0000192F0000192F000030 -:1010A000192F0000BB440200192F0000192F000067 -:1010B000192F0000192F0000192F0000192F000010 -:1010C000C1440200192F0000192F0000192F000041 -:1010D000192F0000192F0000192F0000192F0000F0 -:1010E000192F0000192F0000192F0000192F0000E0 -:1010F000192F0000192F0000192F0000192F0000D0 -:10110000192F0000192F000000F002F823F04DF90C -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D123F042F9AFF2090EBAE80F0013F033 -:10113000010F18BFFB1A43F0010318479038020053 -:10114000B03802000A444FF0000C10F8013B13F0D5 -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A10470000752E0000D7 -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F00FFE01B4E9 -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000023F0B2B8D3 -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704008F05CB8BF -:1012600008F065B870B50C461149097829B1A0F1AC -:1012700060015E2908D3012013E0602804D06928AA -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C0000202845020010B504460021012032 -:1012C00000F03DF800210B2000F039F8042119202E -:1012D00000F035F804210D2000F031F804210E2033 -:1012E00000F02DF804210F2000F029F80421C84354 -:1012F00000F025F80621162000F021F8062115201F -:1013000000F01DF82046FFF79BFF002010BDA8212C -:1013100001807047FFF7A4BF11487047104870471D -:10132000104A10B514680F4B0F4A08331A60FFF7C4 -:1013300099FF0C48001D046010BD704770474907B5 -:10134000090E002806DA00F00F0000F1E02080F816 -:10135000141D704700F1E02080F800147047000071 -:1013600003F900421005024001000001FE4800217F -:1013700001604160018170472DE9F743044692B056 -:101380009146406813F00EF840B1606813F013F80E -:1013900020B9607800F00300022801D0012000E0AD -:1013A0000020F14E3072484612F0B8FF18B11020FC -:1013B00015B0BDE8F0834946012001F018FF002870 -:1013C000F6D101258DF842504FF4C050ADF84000E1 -:1013D000002210A9284606F047FC0028E8D18DF825 -:1013E00042504FF428504FF00008ADF840004746F7 -:1013F0001C216846CDF81C8022F07BFF9DF81C0064 -:1014000008AA20F00F00401C20F0F00010308DF8EA -:101410001C0020788DF81D0061789DF81E0061F396 -:10142000420040F001008DF81E009DF800000AA95E -:1014300040F002008DF800002089ADF83000ADF8D2 -:101440003270608907AFADF834000B97606810AC5C -:101450000E900A94684606F0FCF90028A8D1BDF861 -:10146000200030808DF8425042F60120ADF8400057 -:101470009DF81E0008AA20F00600801C20F0010044 -:101480008DF81E000220ADF83000ADF8340013A82E -:101490000E900AA9684606F0DCF9002888D1BDF84C -:1014A00020007080311D484600F033F9002887D1B4 -:1014B0008DF8425042F6A620ADF840001C21684647 -:1014C000CDF81C8022F015FF9DF81C00ADF83450BB -:1014D00020F00F00401C20F0F00010308DF81C00B0 -:1014E0009DF81D0008AA20F0FF008DF81D009DF852 -:1014F0001E000AA920F0060040F00100801C8DF8B3 -:101500001E009DF800008DF8445040F002008DF858 -:101510000000CDE90A4711A80E90ADF8305068469A -:1015200006F097F9002899D1BDF82000F08000203E -:101530003EE73EB504460820ADF80000204612F014 -:10154000EDFE08B110203EBD2146012001F04FFE06 -:101550000028F8D12088ADF804006088ADF80600B6 -:10156000A088ADF80800E088ADF80A007E4801AB1D -:101570006A468088002106F071FDBDF80010082938 -:10158000E1D003203EBD1FB5044600200290082094 -:10159000ADF80800CDF80CD0204612F0BFFE10B117 -:1015A000102004B010BD704802AA81884FF6FF7069 -:1015B00006F096FF0028F4D1BDF80810082901D0E4 -:1015C0000320EEE7BDF800102180BDF80210618015 -:1015D000BDF80410A180BDF80610E180E1E701B577 -:1015E00082B00220ADF800005F4802AB6A46408836 -:1015F000002106F033FDBDF80010022900D00320C1 -:101600000EBD1CB5002100910221ADF80010019023 -:1016100012F0AAFE08B110201CBD53486A4641884A -:101620004FF6FF7006F05CFFBDF800100229F3D002 -:1016300003201CBDFEB54C4C06461546207A0F46CD -:10164000C00705D0084612F069FE18B11020FEBD93 -:101650000F20FEBDF82D01D90C20FEBD304612F042 -:101660005DFE18BB208801A905F03CFE0028F4D1DE -:1016700030788DF80500208801A906F0CEFC0028FE -:10168000EBD100909DF800009DF8051040F002009D -:101690008DF80000090703D040F008008DF8000025 -:1016A0002088694606F056FC0028D6D1ADF80850CF -:1016B00020883B4602AA002106F0D0FCBDF80810A5 -:1016C000A942CAD00320FEBD7CB50546002000908B -:1016D00001900888ADF800000C462846019512F0EC -:1016E00061FE18B9204612F03FFE08B110207CBD03 -:1016F00015B1BDF8000050B11B486A4601884FF68D -:10170000FF7006F0EDFEBDF8001021807CBD0C20BE -:101710007CBD30B593B0044600200D4600901421E6 -:1017200001A822F0E6FD1C2108A822F0E2FD9DF8A8 -:101730000000CDF808D020F00F00401C20F0F00091 -:1017400010308DF800009DF8010020F0FF008DF8AA -:1017500001009DF8200040F002008DF820000120DB -:101760008DF8460002E000000C02002042F6042042 -:10177000ADF8440011A801902088ADF83C006088C5 -:10178000ADF83E00A088ADF84000E088ADF842001A -:101790009DF8020006AA20F00600801C20F001003F -:1017A0008DF802000820ADF80C00ADF810000FA86D -:1017B000059001A908A806F04CF8002803D1BDF84F -:1017C00018002880002013B030BD0000F0B5007B69 -:1017D000059F1E4614460D46012800D0FFDF0C2051 -:1017E00030803A203880002C08D0287A032806D090 -:1017F000287B012800D0FFDF17206081F0BDA88979 -:10180000FBE72DE9F04786B0144691F80C900E9A4C -:101810000D46B9F1010F0BD01021007B2E8A8846AE -:10182000052807D0062833D0FFDF06B0BDE8F087D3 -:101830000221F2E7E8890C2100EB400001EB4000B7 -:10184000188033201080002CEFD0E88960810027B9 -:101850001AE00096688808F1020301AA696900F09D -:1018600084FF06EB0800801C07EB470186B204EBFF -:101870004102BDF8040090810DF1060140460E3290 -:1018800010F018FE7F1CBFB26089B842E1D8CCE7E7 -:1018900034201080E889B9F1010F11D0122148439A -:1018A0000E301880002CC0D0E88960814846B9F11C -:1018B000010F00D00220207300270DF1040A1FE061 -:1018C0000621ECE70096688808F1020301AA69691D -:1018D00000F04BFF06EB0800801C86B2B9F1010F47 -:1018E00012D007EBC70004EB4000BDF80410C18123 -:1018F00010220AF10201103022F05AFC7F1CBFB204 -:101900006089B842DED890E707EB470104EB41025B -:10191000BDF80400D0810AF102014046103210F0F7 -:10192000C9FDEBE72DE9F0470E4688B090F80CC0F2 -:1019300096F80C80378AF5890C20109902F10C0476 -:101940004FF0000ABCF1030F08D0BCF1040F3ED0E9 -:10195000BCF1070F7DD0FFDF08B067E705EB850C12 -:1019600000EB4C00188031200880002AF4D0A8F148 -:10197000060000F0FF09558125E0182101A822F09A -:10198000B8FC00977088434601AA716900F0EDFE2B -:10199000BDF804002080BDF80600E080BDF8080016 -:1019A0002081A21C0DF10A01484610F083FDB9F117 -:1019B000000F00D018B184F804A0A4F802A007EB2F -:1019C000080087B20A346D1EADB2D6D2C4E705EB6B -:1019D000850C00EB4C00188032200880002ABBD018 -:1019E000A8F1050000F0FF09558137E000977088E5 -:1019F000434601AA716900F0B8FE9DF80600BDF8E3 -:101A00000410E1802179420860F3000162F3410192 -:101A1000820862F38201C20862F3C301020962F321 -:101A20000411420962F34511820962F386112171A2 -:101A3000C0096071BDF80700208122460DF109013F -:101A4000484610F037FD18B184F802A0A4F800A0B1 -:101A500000E007E007EB080087B20A346D1EADB264 -:101A6000C4D279E7A8F1020084B205FB08F000F1C6 -:101A70000E0CA3F800C035230B80002AA6D0558198 -:101A80009481009783B270880E32716900F06DFE08 -:101A900062E72DE9F84F1E460A9D0C4681462AB1A1 -:101AA000607A00F58070D080E089108199F80C0090 -:101AB0000C274FF000084FF00E0A0D2873D2DFE814 -:101AC00000F09E070E1C28303846556A7373730069 -:101AD000214648460095FFF779FEBDE8F88F207B48 -:101AE0009146082802D0032800D0FFDF378030203D -:101AF0000AE000BFA9F80A80EFE7207B914604289E -:101B000000D0FFDF378031202880B9F1000FF1D1FC -:101B1000E3E7207B9146042800D0FFDF37803220A6 -:101B2000F2E7207B9146022800D0FFDF3780332088 -:101B3000EAE7207B1746022800D0FFDF3420A6F812 -:101B400000A02880002FC8D0A7F80A80C5E7207B16 -:101B50001746042800D0FFDF3520A6F800A0288013 -:101B6000002FBAD04046A7F80A8012E0207B174623 -:101B7000052802D0062800D0FFDF10203080362054 -:101B80002880002FA9D0E0897881A7F80E80B9F8C5 -:101B90000E00B881A1E7207B9146072800D0FFDF27 -:101BA00037803720B0E72AE04FF0120018804FF05E -:101BB00038001700288090D0E0897881A7F80E803F -:101BC000A7F8108099F80C000A2805D00B2809D036 -:101BD0000C280DD0FFDF80E7207B0A2800D0FFDF34 -:101BE00001200AE0207B0B2800D0FFDF042004E066 -:101BF000207B0C2800D0FFDF052038736DE7FFDF66 -:101C00006BE770B50C46054601F025FC20B1007865 -:101C1000222804D2082070BD43F2020070BD0521C5 -:101C200028460EF0C5FE206008B1002070BD0320DC -:101C300070BD30B44880087820F00F00C01C20F040 -:101C4000F000903001F8080B1DCA81E81D0030BC7F -:101C500007F0E3BB2DE9FF4784B0002782460297D7 -:101C600007989046894612300AF014F9401D20F07A -:101C70000306079828B907A95046FFF7C2FF0028B6 -:101C800054D1B9F1000F05D00798017B19BB052588 -:101C900004681BE098F80000092803D00D2812D032 -:101CA000FFDF46E0079903254868B0B3497B4288C7 -:101CB0007143914239D98AB2B3B2011D0EF0EBFCE7 -:101CC0000446078002E0079C042508340CB12088F4 -:101CD00010B1032D29D02CE00798012112300AF011 -:101CE0000BF9ADF80C00024602AB2946504608F04D -:101CF000F0F9070001D1A01C029007983A46123073 -:101D0000C8F80400A8F802A003A94046029B0AF004 -:101D100000F9D8B10A2817D200E006E0DFE800F0A9 -:101D200007091414100B0D141412132014E60020CC -:101D300012E6112010E608200EE643F203000BE63F -:101D4000072009E60D2007E6032005E6BDF80C0094 -:101D50002346CDE900702A465046079900F015FD4C -:101D600057B9032D08D10798B3B2417B406871433E -:101D70008AB2011D0EF0A3FCB9F1000FD7D007996C -:101D800081F80C90D3E72DE9FE4F91461A881C4646 -:101D90008A468046FAB102AB494608F09AF9050036 -:101DA00019D04046A61C27880EF046FF324607266B -:101DB00029463B4600960EF054FB20882346CDE989 -:101DC00000504A465146404600F0DFFC002020808B -:101DD0000120BDE8FE8F0020FBE710B586B01C4651 -:101DE000AAB104238DF800301388ADF8083052886A -:101DF000ADF80A208A788DF80E200988ADF80C100D -:101E000000236A462146FFF725FF06B010BD1020CB -:101E1000FBE770B50D4605210EF0CAFD040000D1A8 -:101E2000FFDF294604F11200BDE870400AF04DB80A -:101E30002DE9F8430D468046002607F0EBFA0446EC -:101E40002878102878D2DFE800F0773B345331311E -:101E5000123131310831313131312879001FC0B2AE -:101E6000022801D0102810D114BBFFDF35E004B9DF -:101E7000FFDF052140460EF09BFD007B032806D0C6 -:101E800004280BD0072828D0FFDF072655E0287943 -:101E9000801FC0B2022820D050B1F6E72879401F39 -:101EA000C0B2022819D0102817D0EEE704B9FFDF1E -:101EB00013E004B9FFDF287901280ED1172137E09C -:101EC000052140460EF074FD070000D1FFDF07F149 -:101ED0001201404609F0D6FF2CB12A462146404661 -:101EE000FFF7A7FE29E01321404602F0A7FD24E0FA -:101EF00004B9FFDF052140460EF05AFD060000D16F -:101F0000FFDF694606F1120009F0C6FF060000D0A7 -:101F1000FFDFA988172901D2172200E00A46BDF881 -:101F20000000824202D9014602E005E01729C5D32C -:101F3000404600F03AFCD0E7FFDF3046BDE8F883CA -:101F4000401D20F0030219B102FB01F0001D00E06A -:101F500000201044704713B5009848B1002468462B -:101F60000EF043FB002C02D1F74A009911601CBD12 -:101F700001240020F4E72DE9F0470C461546242102 -:101F8000204622F0B6F905B9FFDFA87860732888EB -:101F9000DFF8B4A3401D20F00301AF788946DAF8DA -:101FA00000000EF040FB060000D1FFDF4FF00008FC -:101FB0002660A6F8008077B109FB07F1091D0AD059 -:101FC000DAF800000EF02FFB060000D1FFDF66609C -:101FD000C6F8008001E0C4F80480298804F11200EA -:101FE000BDE8F04709F040BF2DE9F047804601F118 -:101FF00012000D46814609F04DFF401DD24F20F0E2 -:1020000003026E7B1446296838680EF037FB3EB138 -:1020100004FB06F2121D03D0696838680EF02EFB2F -:1020200005200EF06DFC044605200EF071FC201A10 -:10203000012802D138680EF0EBFA49464046BDE867 -:10204000F04709F026BF70B5054605210EF0B0FC3B -:10205000040000D1FFDF04F112012846BDE8704002 -:1020600009F010BF2DE9F04F91B04FF0000BADF823 -:1020700034B0ADF804B047880C46054692460521B9 -:1020800038460EF095FC060000D1FFDF24B1A78092 -:10209000A4F806B0A4F808B0297809220B20B2EB06 -:1020A000111F7DD12A7A04F1100138274FF00C0856 -:1020B0004FF001090391102A73D2DFE802F072F2A7 -:1020C000F1F07F08D2888D9F3DDBF3EEB6B6307B12 -:1020D000022800D0FFDFA88908EBC001ADF804108A -:1020E0003021ADF83410002C25D06081B5F80E9069 -:1020F00000271DE004EBC708317C88F80E10F18939 -:10210000A8F80C10CDF800906888042304AA296967 -:1021100000F02BFBBDF81010A8F8101009F1040016 -:10212000BDF812107F1C1FFA80F9A8F81210BFB278 -:102130006089B842DED80DE1307B022800D0FFDF95 -:10214000E98908EBC100ADF804003020ADF8340097 -:10215000287B0A90001FC0B20F90002CEBD0618149 -:10216000B5F81090002725E0CDF8009068886969DF -:1021700003AA0A9B00F0F9FA0A9804EBC70848443E -:102180001FFA80F908F10C0204A90F9810F092F9D7 -:1021900018B188F80EB0A8F80CB0BDF80C1001E02A -:1021A000D4E0CFE0A8F81010BDF80E107F1CA8F8FE -:1021B0001210BFB26089B842D6D8CBE00DA800900B -:1021C00001AB224629463046FFF71BFBC2E0307BBD -:1021D000082805D0FFDF03E0307B082800D0FFDFB0 -:1021E000E8891030ADF804003620ADF83400002C3A -:1021F0003FD0A9896181F189A18127E0307B09283D -:1022000000D0FFDFA88900F10C01ADF804103721E0 -:10221000ADF83410002C2CD06081E8890090AB8997 -:10222000688804F10C02296956E0E88939211030E8 -:1022300080B2ADF80400ADF83410002C74D0A98938 -:102240006181287A0E280AD002212173E989E1816F -:10225000288A0090EB8968886969039A3CE001212B -:10226000F3E70DA8009001AB224629463046FFF760 -:1022700059FB6FE0307B0A2800D0FFDF1220ADF859 -:102280000400ADF834704CB3A9896181A4F810B092 -:10229000A4F80EB084F80C905CE020E002E031E09D -:1022A00039E042E0307B0B2800D0FFDF288AADF810 -:1022B00034701230ADF8040084B104212173A9896F -:1022C0006181E989E181298A2182688A00902B8ACB -:1022D000688804F11202696900F047FA3AE0307B3D -:1022E0000C2800D0FFDF1220ADF80400ADF83470E8 -:1022F0003CB305212173A4F80AB0A4F80EB0A4F8E9 -:1023000010B027E00DA8009001AB224629463046C8 -:10231000FFF75CFA1EE00DA8009001AB22462946AB -:102320003046FFF7B6FB15E034E03B21ADF8040082 -:10233000ADF8341074B3A4F80690A4F808B084F88B -:102340000AB007E0FFDF05E010000020297A01292C -:1023500017D0FFDFBDF80400AAF800006CB1BDF88B -:1023600034002080BDF804006080BDF834003928B6 -:1023700003D03C2801D086F80CB011B00020BDE895 -:10238000F08F3C21ADF80400ADF8341014B1697A37 -:10239000A172DFE7AAF80000EFE72DE9F8435688BD -:1023A0000F4680461546052130460EF001FB04001D -:1023B00000D1FFDF123400943B46414630466A6844 -:1023C00009F0DBFEBAE570B50D4605210EF0F0FA16 -:1023D000040000D1FFDF294604F11200BDE870407F -:1023E00009F065BD70B50D4605210EF0E1FA040057 -:1023F00000D1FFDF294604F11200BDE8704009F06A -:1024000083BD70B5054605210EF0D2FA040000D157 -:10241000FFDF04F1080321462846BDE8704004228E -:10242000B1E470B5054605210EF0C2FA040000D1F2 -:10243000FFDF214628462368BDE870400522A2E45C -:1024400070B5064605210EF0B3FA040000D1FFDF97 -:1024500004F1120009F01EFD401D20F0030511E0FB -:10246000011D00880322431821463046FFF78BFCEC -:1024700000280BD0607BABB2684382B26068011D5C -:102480000EF053F9606841880029E9D170BD70B53C -:102490000E46054606F0BEFF040000D1FFDF012016 -:1024A000207266726580207820F00F00C01C20F03A -:1024B000F00030302070BDE8704006F0AEBF2DE96E -:1024C000F0438BB00D461446814606A9FFF799FBF1 -:1024D000002814D14FF6FF7601274FF420588CB115 -:1024E00003208DF800001020ADF8100007A805901B -:1024F00007AA204604A90FF0FCFF78B107200BB013 -:10250000BDE8F0830820ADF808508DF80E708DF806 -:102510000000ADF80A60ADF80C800CE00698A178D8 -:1025200001742188C1818DF80E70ADF80850ADF8A6 -:102530000C80ADF80A606A4602214846069BFFF708 -:1025400089FBDCE708B501228DF8022042F6020281 -:10255000ADF800200A4603236946FFF73EFC08BD9C -:1025600008B501228DF8022042F60302ADF80020E2 -:102570000A4604236946FFF730FC08BD00B587B062 -:1025800079B102228DF800200A88ADF80820498828 -:10259000ADF80A1000236A460521FFF75BFB07B080 -:1025A00000BD1020FBE709B1072316E407207047A0 -:1025B00070B588B00D461446064606A9FFF721FB04 -:1025C00000280ED17CB10620ADF808508DF800002F -:1025D000ADF80A40069B6A460821DC813046FFF7C9 -:1025E00039FB08B070BD05208DF80000ADF808502B -:1025F000F0E700B587B059B107238DF80030ADF88A -:102600000820039100236A460921FFF723FBC6E750 -:102610001020C4E770B588B00C460646002506A910 -:10262000FFF7EFFA0028DCD106980121123009F0FB -:1026300063FC9CB12178062921D2DFE801F0200556 -:1026400005160318801E80B2C01EE28880B20AB14F -:10265000A3681BB1824203D90C20C2E71020C0E757 -:10266000042904D0A08850B901E00620B9E7012967 -:1026700013D0022905D004291CD005292AD007200F -:10268000AFE709208DF800006088ADF80800E08809 -:10269000ADF80A00A068039023E00A208DF800003E -:1026A0006088ADF80800E088ADF80A00A0680A2547 -:1026B000039016E00B208DF800006088ADF808004C -:1026C000A088ADF80A00E088ADF80C00A0680B25E2 -:1026D000049006E00C208DF8000060788DF808006A -:1026E0000C256A4629463046069BFFF7B3FA78E781 -:1026F00000B587B00D228DF80020ADF8081000233A -:102700006A461946FFF7A6FA49E700B587B071B1E6 -:1027100002228DF800200A88ADF808204988ADF81B -:102720000A1000236A460621FFF794FA37E71020C3 -:1027300035E770B586B0064601200D46ADF80810A5 -:102740008DF80000014600236A463046FFF782FA02 -:10275000040008D12946304605F09AFC0021304695 -:1027600005F0B4FC204606B070BDF8B51C46154611 -:102770000E46069F0EF04EFA2346FF1DBCB23146B0 -:102780002A4600940DF039FEF8BD30B41146DDE95B -:1027900002423CB1032903D0002330BC08F022BB25 -:1027A0000123FAE71A8030BC704770B50C46054625 -:1027B000FFF72FFB2146284605F079FC2846BDE8A7 -:1027C0007040012105F082BC4FF0E0224FF400413F -:1027D0000020C2F88011204908702049900208604A -:1027E000704730B51C4D04462878A04218BF002C15 -:1027F00002D0002818BFFFDF2878A04208BF30BDF4 -:102800002C701749154A0020ECB1164DDFF858C05E -:10281000131F012C0DD0022C1CBFFFDF30BD086040 -:1028200003200860CCF800504FF4000010601860DE -:1028300030BD086002200860CCF800504FF04070B6 -:102840001060186030BD086008604FF06070106064 -:1028500030BD00B5FFDF00BD1800002008F50140C5 -:1028600000F500408C02002014F5004070B50B20EC -:1028700000F0B5F9082000F0B2F900210B2000F0BB -:10288000C4F90021082000F0C0F9EC4C0125656076 -:10289000A5600020C4F84001C4F84401C4F8480110 -:1028A0000B2000F0A7F9082000F0A4F90B2000F09D -:1028B0008BF9256070BD10B50B2000F090F9082051 -:1028C00000F08DF9DD48012141608160DC490A6832 -:1028D000002AFCD10021C0F84011C0F84411C0F812 -:1028E00048110B2000F086F9BDE81040082000F0E8 -:1028F00081B910B50B2000F07DF9BDE8104008202B -:1029000000F078B900B530B1012806D0022806D011 -:10291000FFDF002000BDCB4800BDCB4800BDCA484A -:10292000001D00BD70B5C9494FF000400860C84D9A -:10293000C00BC5F80803C74800240460C5F840412F -:102940000820C43500F04BF9C5F83C41C24804707A -:1029500070BD08B5B94A002128B1012811D002285C -:102960001CD0FFDF08BD4FF48030C2F80803C2F866 -:102970004803B3483C300160C2F84011BDE808404C -:10298000D0E74FF40030C2F80803C2F84803AC485F -:1029900040300160C2F84411AB480CE04FF4802095 -:1029A000C2F80803C2F84803A54844300160C2F8E1 -:1029B0004811A548001D0068009008BD70B5164676 -:1029C0000D460446022800D9FFDF00229B48012360 -:1029D00004F110018B4000EB8401C1F8405526B191 -:1029E000C1F84021C0F8043303E0C0F80833C1F84F -:1029F0004021C0F8443370BD2DE9F0411C46154616 -:102A000030B1012834D0022839D0FFDFBDE8F08191 -:102A1000891E002221F07F411046FFF7CFFF012CD5 -:102A200024D000208C4E8A4F012470703C6189496B -:102A300000203C3908600220091D086085490420F7 -:102A40003039086083483D350560C7F800420820EA -:102A500000F0D0F82004C7F80403082000F0B4F810 -:102A60007A49E007091F08603470CFE70120D9E7F1 -:102A7000012B02D00022012005E00122FBE7012BFF -:102A800004D000220220BDE8F04197E70122F9E7D7 -:102A90006B480068704770B500F0C7F8674C054692 -:102AA000D4F840010026012809D1D4F80803C00356 -:102AB00005D54FF48030C4F80803C4F84061D4F859 -:102AC000440101280CD1D4F80803800308D54FF441 -:102AD0000030C4F80803C4F84461012010F0CDFCB4 -:102AE000D4F8480101280CD1D4F80803400308D5D4 -:102AF0004FF48020C4F80803C4F84861022010F0A5 -:102B0000BCFC5648056070BD70B500F08EF8524DA3 -:102B10000446287858B1FFF705FF687820B10020F7 -:102B200085F8010010F0A9FC4C48046070BD03203A -:102B3000F8E74FF0E0214FF40010C1F800027047B1 -:102B4000152000F057B8424901200861082000F024 -:102B500051B83F494FF47C10C1F8080300200246E9 -:102B600001EB8003C3F84025C3F84021401CC0B2EC -:102B70000628F5D37047410A43F609525143C0F382 -:102B8000080010FB02F000F5807001EB5020704748 -:102B900010B5430B48F2376463431B0C5C020C60B6 -:102BA0002F4C03FB04002F4B4CF2F72443435B0DE7 -:102BB00013FB04F404EB402000F580704012107009 -:102BC00008681844086010BD00F01F020121914000 -:102BD0004009800000F1E020C0F80011704700F0CB -:102BE0001F02012191404009800000F1E020C0F85F -:102BF0008011704700F01F020121914040098000C0 -:102C000000F1E020C0F8801270474907090E002843 -:102C100006DA00F00F0000F1E02080F8141D704784 -:102C200000F1E02080F8001470470C48001F006895 -:102C30000A4A0D49121D11607047000000B00040A3 -:102C400004B500404081004044B1004008F5014017 -:102C500000800040408500403800002014050240FC -:102C6000F7C2FFFF6F0C0100010000010A4810B518 -:102C70000468094909480831086010F092FC0648C8 -:102C8000001D046010BD0649002008604FF0E021DF -:102C90000220C1F8800270471005024001000001C7 -:102CA000FC1F004010B50D2000F06FF8C4B26FF0AB -:102CB000040000F06AF8C0B2844200D0FFDF3A4955 -:102CC0000120086010BD70B50D2000F048F8374CA9 -:102CD0000020C4F800010125C4F804530D2000F0C1 -:102CE00049F825604FF0E0216014C1F8000170BD83 -:102CF00010B50D2000F033F82C480121416000216F -:102D0000C0F80011BDE810400D2000F033B828488D -:102D100010B5046826492748083108602349D1F8CE -:102D20000001012804D0FFDF2148001D046010BD10 -:102D30001D48001D00680022C0B2C1F8002110F03B -:102D4000E7FFF1E710B51948D0F800110029FBD0D2 -:102D5000FFF7DDFFBDE810400D2000F00BB800F0DC -:102D60001F02012191404009800000F1E020C0F8DD -:102D70008011704700F01F0201219140400980003E -:102D800000F1E020C0F880127047002806DA00F059 -:102D90000F0000F1E02090F8140D03E000F1E020B6 -:102DA00090F800044009704704D5004000D000406E -:102DB000100502400100000110B5202000F082F84B -:102DC000202000F08AF84A49202081F8000449496F -:102DD00000060860091D48480860FEF79DFA45494D -:102DE000C83108604548D0F8041341F00101C0F82B -:102DF0000413D0F8041341F08071C0F804133C4967 -:102E000001201C39C1F8000110BD10B5202000F0D0 -:102E100059F8384800210160001D0160354A481EFC -:102E2000E83A1060354AC2F80803324BC8331960DB -:102E3000C2F80001C2F8600131490860BDE81040E5 -:102E4000202000F04AB82B492E48EC390860704722 -:102E500028492C48E8390860704726480160001D61 -:102E6000521E0260704723490120E8390860BFF311 -:102E70004F8F704770B51F4A8069E83A2149116049 -:102E80001E49D1F8006100231F4D1D4A5C1E1EB172 -:102E9000A84206D300210FE0D1F8606186B1A842B4 -:102EA00009D2C1F80031C1F860311460BDE870404A -:102EB000202000F012B81168BDE8704021F040BA3F -:102EC000FFDF70BD00F01F0201219140400980002A -:102ED00000F1E020C0F88011704700F01F020121CE -:102EE00091404009800000F1E020C0F88012704756 -:102EF00020E000E000060240C41400200000024070 -:102F00000004024001000001006002000F4A126844 -:102F10000D498A420CD118470C4A12680A4B9A4252 -:102F200006D101B510F06EFFFFF78DFFBDE801403F -:102F3000074909680958084706480749054A064BE2 -:102F40007047000000000000BEBAFECAB0000020BA -:102F500004000020E0120020E012002070B50C46B2 -:102F6000054609F0A7FA21462846BDE870400AF058 -:102F70008CBB10B511F0B0FBFFF726FC11F04CFA3A -:102F8000BDE8104011F0FEBA0120810708607047CB -:102F9000012081074860704712480068C00700D0D0 -:102FA000012070470F48001F0068C00700D00120B3 -:102FB00070470C4808300068C00700D001207047F7 -:102FC000084810300068704706490C310A68D2037F -:102FD00006D5096801F00301814201D10120704743 -:102FE000002070470C0400407047704770477047DE -:102FF000704770477047704770470004050600002F -:103000002CFFFFFFDBE5B15100600200A800FFFFCD -:1030100084000000808D5B0016425791AD5F58BC64 -:103020008E702F5A0FAA100DBCD52BFD30B5FC4D5C -:103030000446062CA9780ED2DFE804F0030E0E0E2B -:103040000509FFDF08E0022906D0FFDF04E00329BD -:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA -:103060001038EF4D07280CD2DFE800F0040C060CF6 -:103070000C0C0C00FFDF05E0287E112802D0FFDFDA -:1030800000E0FFDF2C7630BD2DE9F0410FF09CFB16 -:10309000044610F038FD201AC5B206200DF030FCB1 -:1030A000044606200DF034FC211ADD4C207E122847 -:1030B00018D000200F1807200DF022FC064607202C -:1030C0000DF026FC301A3918207E13280CD0002071 -:1030D0000144A078042809D000200844281AC0B26E -:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 -:1030F000CB4810B590F825004108C94800F12600DA -:1031000005D00BF0B6FABDE8104005F0AFBF0BF0EC -:1031100089FAF8E730B50446A1F120000D460A28E7 -:103120004AD2DFE800F005070C1C2328353A3F445B -:10313000FFDF42E0207820283FD1FFDF3DE0B848A4 -:103140008178052939D0007E122836D020782428AD -:1031500033D0252831D023282FD0FFDF2DE0207851 -:1031600022282AD0232828D8FFDF26E0207822280A -:1031700023D0FFDF21E0207822281ED024281CD075 -:1031800026281AD0272818D0292816D0FFDF14E0C7 -:103190002078252811D0FFDF0FE0207825280CD0DB -:1031A000FFDF0AE02078252807D0FFDF05E0207840 -:1031B000282802D0FFDF00E0FFDF257030BD10B50A -:1031C000012803D0022805D0FFDF10BDBDE8104064 -:1031D00003202BE79248007E122800D0FFDF002159 -:1031E000052011F04FF8BDE81040112036E71FB55B -:1031F00004466A46002001F01FFEB4B1BDF802206B -:103200004FF6FF700621824201D1ADF80210BDF8E1 -:103210000420824201D1ADF80410BDF808108142AB -:1032200003D14FF44860ADF8080068460BF089FF01 -:1032300005F01CFF04B010BD70B514460D460646DF -:1032400011F06CF858B90DB1A54201D90C2070BD30 -:10325000002408E056F8240011F060F808B11020AE -:1032600070BD641CE4B2AC42F4D3002070BD2DE903 -:10327000F04105461F4690460E460024006811F0B6 -:103280009AF808B110202BE728680028A88802D0F7 -:10329000B84202D84FE00028F5D0092020E728687E -:1032A000025DB2B1611C475C152F2DD03BDC3AD2D8 -:1032B000DFE807F03912222228282A2A3131393949 -:1032C00039393939393939392200025D32BB641C48 -:1032D000A4B2A142F9D833E0022ADED1A21C805C5C -:1032E00088F80000072801D2400701D40A20F7E639 -:1032F000307840F0010015E0D043C00707E0012A14 -:1033000007D010E00620EBE61007A0F1805000285F -:10331000F5D01846E4E63078820701D50B20DFE6C9 -:1033200040F0020030702868005D084484B2A8882C -:10333000A04202D2B1E74FF4485381B2A142AED8C5 -:103340000020CDE610B5027843F202235408012292 -:10335000022C12D003DC3CB1012C16D106E0032C68 -:1033600010D07F2C11D112E0002011E080790324CD -:10337000B4EB901F09D10A700BE08079B2EB901F7B -:1033800003D1F8E780798009F5D0184610BDFF20F9 -:103390000870002010BD224991F82E2042B191F80A -:1033A0002F10022909D0032909D043F202207047C7 -:1033B00001461B48253001F092BD032100E00121A8 -:1033C00001700020704738B50C460546694601F08B -:1033D00086FD00280DD19DF80010207861F347008C -:1033E000207055F8010FC4F80100A888A4F8050062 -:1033F000002038BD38B51378B0B1022814D0FF28AA -:103400001BD008A46D46246800944C7905EB9414F5 -:10341000247864F34703137003280AD010E00000F7 -:10342000D80100200302FF0123F0FE0313700228DD -:10343000F2D1D8B240F0010005E043F0FE00107078 -:10344000107820F0010010700868C2F80100888828 -:10345000A2F8050038BD02210DF0AABA38B50C4615 -:103460000978222901D2082038BDADF800008DF876 -:10347000022068460BF044F905F0F8FD050003D181 -:1034800021212046FFF746FE284638BD1CB5002006 -:103490008DF80000CDF80100ADF80500FE4890F869 -:1034A0002E00022801D0012000E000208DF8070046 -:1034B00068460BF056FB002800D0FFDF1CBD002241 -:1034C0000A80437892B263F345120A8043785B081E -:1034D00063F386120A8000780C282BD2DFE800F014 -:1034E0002A06090E1116191C1F220C2742F0110082 -:1034F00009E042F01D0008800020704742F01100F2 -:1035000012E042F0100040F00200F4E742F0100038 -:10351000F1E742F00100EEE742F0010004E042F082 -:103520000200E8E742F0020040F00400E3E742F066 -:103530000400E0E7072070472DE9FF478AB0002527 -:10354000BDF82C6082461C4690468DF81C507007D2 -:1035500003D5606810F0E2FE68B9CF4F4FF0010963 -:1035600097F82E0058B197F82F00022807D160680D -:1035700010F021FF18B110200EB0BDE8F087300721 -:1035800002D5A089802816D8700705D4B8F1000F9D -:1035900002D097F8240070B1E07DC0F300108DF8E0 -:1035A0001B00617D072041B1012906D00229E3D02B -:1035B0000429E1D12CE00720DEE749468DF8179079 -:1035C000F00609D4A27D072032B1012A04D0022AD4 -:1035D00005D0042AD0D11BE08DF8191002E002209A -:1035E0008DF819008DF815806068B0B107A9FFF754 -:1035F000A9FE0028C0D19DF81C00FF280AD06068F1 -:1036000050F8011FCDF80F108088ADF8130008E0C6 -:103610000620B1E743F20220AEE7CDF80F50ADF837 -:103620001350E07B0028F3D1207C0028F0D1607C8F -:103630000028EDD1A07C0028EAD1E07CC006E7D1CB -:103640008DF800A0BDF82C00ADF80200A068019034 -:10365000A068029004F10F0001F035FC8DF80C0019 -:103660000DF10D00FFF797FE00B1FFDF9DF81C0084 -:103670008DF80E008DF816508DF81850E07D08A9D1 -:1036800000F00F008DF81A0068460BF036FF05F0C9 -:10369000EDFC71E7F0B59DB000228DF868208DF843 -:1036A00058208DF8602005468DF86C2012921392F8 -:1036B0001492159219B10FC912AC84E80F00764C20 -:1036C000A078052801D004280CD11298616888429E -:1036D00000D120B91498E168884203D110B10820C4 -:1036E0001DB0F0BD1F26334618AA1AA912A8FFF76D -:1036F000BEFD0028F4D133461BAA16A914A8FFF773 -:10370000B6FD0028ECD19DF85800C00701D00A2072 -:10371000E6E7A08A410708D4A17D31B19DF8601089 -:10372000890702D043F20120DAE79DF86010C9074B -:1037300009D0400707D4208818B144F2506188426C -:1037400001D90720CCE78DF8005003268DF80160E1 -:1037500001278DF80270BDF84C208DF8032001A8D8 -:10376000129920F025FD68460BF028FF05F07EFC3D -:103770000028B5D18DF824508DF825608DF826707D -:10378000BDF854208DF827200AA8149920F010FDC8 -:1037900009A80BF060FF05F069FC0028A0D112AD6C -:1037A000241D95E80F0084E80F00002098E770B50D -:1037B00086B00D46040005D010F0FDFD20B11020AC -:1037C00006B070BD0820FBE72078C107A98802D0A9 -:1037D000FF2902D303E01F2901D20920F0E7800767 -:1037E00061D4FFF751FC38B12078C0F3C101012941 -:1037F00004D0032902D005E01320E1E7264991F81F -:10380000241041B1C0074FF000054FF0010604D06D -:103810008DF80F6003E00720D2E78DF80F5068465F -:10382000FFF7B9FD00B1FFDF2078C0F3C1008DF8CC -:1038300001008DF80250607808B98DF80260607858 -:10384000C00705D09DF8020040F001008DF802008D -:103850006078800705D59DF8020040F002008DF8E1 -:1038600002006078400705D59DF8020040F0040092 -:103870008DF802002078C0F380008DF80300608886 -:10388000ADF80600A088ADF80A00207A58B9607A31 -:1038900048B9A07A38B901E0D8010020E07A10B91F -:1038A000207BC00601D006208AE704F1080001F061 -:1038B0000AFB8DF80E0068460BF087F905F0D6FB81 -:1038C00000288BD18DF810608DF81150ADF8125092 -:1038D000ADF8145004A80BF0FDF905F0C7FB002863 -:1038E0008BD1E08864280AD248B1012001F001FBA5 -:1038F000002891D12078C00705D0152004E064216C -:10390000B0FBF1F0F2E71320FFF7A8FB002057E728 -:103910002DE9FF470220FF4E8DF804000027708E2E -:10392000ADF80600B84643F202094CE001A80CF0DD -:10393000A6FF050006D0708EA8B3A6F83280ADF8B9 -:1039400006803EE0039CA07F01072DD504F12400F2 -:103950000090A28EBDF80800214604F1360301F064 -:1039600054FC050005D04D452AD0112D3CD0FFDF79 -:103970003AE0A07F20F00801E07F420862F3C7111F -:10398000A177810861F30000E07794F8210000F04E -:103990001F0084F820002078282826D129212046DD -:1039A000FFF7B8FB21E014E040070AD5BDF8080096 -:1039B00004F10E0101F0ABFA05000DD04D4510D118 -:1039C00000257F1CFFB202200CF09AFF401CB84279 -:1039D000ACD8052D11D008E0A07F20F00400A0771E -:1039E00003E0112D00D0FFDF0025BDF80600708632 -:1039F000052D04D0284604B0BFE5A6F8328000208B -:103A0000F9E770B50646FFF726FD054605F002FD0D -:103A1000040000D1FFDF6680207820F00F00801CBA -:103A200020F0F000203020700620207295F83E0033 -:103A30006072BDE8704005F0F0BC2DE9F04786B03B -:103A4000040000D1FFDF2078B24D20F00F00801C71 -:103A500020F0F0007030207060680178491F1B2949 -:103A600033D2DFE801F0FE32323255FD320EFDFD79 -:103A700042FC32323278FCFCFB323232FCFCFAF986 -:103A8000FC00C6883046FFF7E6FC0546304607F0E6 -:103A9000A7F8E0B16068007A85F83E002121284649 -:103AA000FFF738FB3046FEF7CEFA304603F016FE3D -:103AB0003146012010F0E6FBA87F20F01000A87727 -:103AC000FFF726FF002800D0FFDF06B055E520787D -:103AD00020F0F000203020700620207266806068A0 -:103AE000007A607205F099FCD8E7C5882846FFF790 -:103AF000B2FC00B9FFDF60680079012800D0FFDF69 -:103B00006068017A06B02846BDE8F04707F044BC7B -:103B1000C6883046FFF79FFC050000D1FFDF05F0A7 -:103B20007CFC606831460089288160684089688132 -:103B300060688089A881012010F0A4FB0020A8758E -:103B4000A87F00F003000228BFD1FFF7E1FE0028A4 -:103B5000BBD0FFDFB9E70079022811D000B1FFDF49 -:103B600005F05BFC6668B6F806A0307A361D0128C1 -:103B70000CD0687E814605F0E5F9070009D107E021 -:103B800006B00220BDE8F047FFF719BBE878F1E77F -:103B9000FFDF0022022150460CF001FF040000D19B -:103BA000FFDF22212046FFF7B5FA3079012800D047 -:103BB0000220A17F804668F30101A177308B20812C -:103BC000708B6081B08BA08184F822908DF8088082 -:103BD000B8680090F86801906A46032150460CF0DE -:103BE000DEFE00B9FFDFB888ADF81000B8788DF8B8 -:103BF000120004AA052150460CF0D1FE00B9FFDFE7 -:103C0000B888ADF80C00F8788DF80E0003AA0421EE -:103C100050460CF0C4FE00B9FFDF062106F1120089 -:103C200001F093F938B37079800700D5FFDF71791F -:103C3000E07D61F34700E075D6F80600A061708969 -:103C4000A083062106F10C0001F07FF9E8B195F898 -:103C500025004108607805E032E02AE047E03FE0D7 -:103C600021E035E061F347006070D5F82600C4F824 -:103C70000200688D12E0E07D20F0FE00801CE075FF -:103C8000D6F81200A061F08ADAE7607820F0FE0032 -:103C9000801C6070F068C4F80200308AE080404602 -:103CA000FFF78DFA11E706B02046BDE8F04701F0B6 -:103CB00035BD05F0B2FB15F8300F40F0020005E00D -:103CC00005F0ABFB15F8300F40F004002870FCE65F -:103CD000287E132809D01528E4D11620FFF7BEF955 -:103CE00006B0BDE8F04705F098BB1420F6E7A978C8 -:103CF000052909D00429D5D105F08FFB022006B093 -:103D0000BDE8F047FFF792B900790028CAD0E878FB -:103D100002E00000D801002001F0BCF805F07DFBB6 -:103D20000320ECE72DE9F05F054600784FF000082E -:103D30000009DFF820A891460C46464601287AD0B3 -:103D400001274FF0020C4FF6FF73022874D00728AA -:103D50000BD00A2871D0FFDFA9F8006014B1A4F8D5 -:103D6000008066800020BDE8F09F696804F10800CB -:103D70000A78172A70D010DC4FF0000B142A31D0CB -:103D800006DC052A6DD0092A0FD0102A7ED11FE04B -:103D9000152A7CD0162AF9D1F0E01B3A052A75D2F3 -:103DA000DFE802F009C5FDDAFC00C8884FF0120810 -:103DB0001026214675E14FF01C080A26D4B38888E6 -:103DC000A0806868807920726868C0796072C3E7F3 -:103DD0004FF01B0814266CB303202072686880889B -:103DE000A080B9E70A793C2AB6D00D1D4FF0100823 -:103DF0002C26FCB16988A180298B6182298B2182C4 -:103E0000698BA182A98BE1826B790246A91D1846B4 -:103E1000FFF7F0FA2879012810D084F80FC0FF20AE -:103E20002076C4F81CB0C4F820B0C4F824B0C4F89C -:103E300028B091E712E013E13BE135E1E7730AF1C5 -:103E4000040084F818B090E80E00DAF81000C4E915 -:103E50000930C4E907127FE7A8E002E0A9F8006092 -:103E600080E72C264FF01D08002CF7D00546A380D4 -:103E7000887B2A880F1D60F300022A80887B400817 -:103E800060F341022A80887B800801E0E6E0ADE033 -:103E900060F382022A80887BB91CC00860F3C302E9 -:103EA0002A80B87A0011401C60F3041202F07F00EF -:103EB00028807878AA1CFFF79DFA387D05F1090261 -:103EC00007F11501FFF796FA387B01F04DF82874D9 -:103ED000787B01F049F86874F87EA874787AE87401 -:103EE00097F83B002875B87B6875A5F816B0DAF826 -:103EF0001C00A861397ABAF82000884201D2014634 -:103F000010E0B87AC0F3411002280BD0012809D084 -:103F1000288820F060002880A1840A4607F11C014F -:103F2000A86998E0288820F060004030F3E7112667 -:103F30004FF02008002C91D0A380686804F10A0299 -:103F4000007920726868007B607269688B1D48790F -:103F50001946FFF74FFAFFE60A264FF02108002C1A -:103F6000E9D08888A0806868807920726868C07904 -:103F700060729AF8301021F004018BE00B264FF0AC -:103F80002208002CD7D0C888A080686800792072E9 -:103F90006868007A00F0E8FF607201E052E039E002 -:103FA0006868407A00F0E0FFA072D5E61C264FF06A -:103FB0002608002CBFD0A3806868407960726868CA -:103FC000007AA0720AF1040090E80E00DAF81000FE -:103FD000C4E90530C4E90312686800793C2803D0BD -:103FE00043287DD0FFDFB7E62772B5E610264FF0F5 -:103FF0002408002C9FD08888A08068688079208160 -:104000006868807A608168680089A08168688089B2 -:10401000E081A1E610264FF02308002C8BD0888881 -:10402000A0806868C08820816868008960816868AD -:104030004089A08168688089E0819AF8301021F079 -:10404000020127E030264FF02508002C88D0A380FD -:1040500069682822496820F0ABF87DE64A4677E097 -:10406000287A012803D0022817D0FFDF74E6102633 -:104070004FF01F08002C85D06888A080A889208177 -:10408000E8896081288AA081688AE0819AF83010E6 -:1040900021F001018AF830105EE64FF01208102678 -:1040A000688800F03FFF57E62846BDE8F05F01F062 -:1040B000BFBC287A07284DD2DFE800F04C38384AD8 -:1040C0004A4A040009264FF01108002C92D06F884C -:1040D0003846FFF7C0F990F822A0A780687A00E080 -:1040E0002DE02072042138460CF074FC052138467E -:1040F0000CF070FC002138460CF06CFC01213846B5 -:104100000CF068FC032138460CF064FC02213846B0 -:104110000CF060FC062138460CF05CFC07213846A8 -:104120000CF058FC504600F0B5FE15E614264FF092 -:104130001B08002C8AD0A380287A012802D084F89A -:1041400008C009E62772DAE90710C4E9031003E69C -:104150002146A9E7FFDFFFE570B5FE4D287E122856 -:1041600001D0082070BD0AF0C3FF04F07FFF0400F7 -:1041700002D1687E00F08EFE0021052010F082F84A -:10418000204670BD1CB5F348007E132801D20820DC -:104190001CBD00208DF8000068460AF09BFD04F06D -:1041A00065FF0028F4D10021052010F06BF81120E4 -:1041B000FEF754FF00201CBD70B5012805D005286E -:1041C00025D0062800D0FFDF70BD8DB22846FFF74E -:1041D00042F9040000D1FFDF20782128F4D005F057 -:1041E00019F968B1017821F00F01891C21F0F00163 -:1041F000103101700221017245800020A07528E075 -:1042000021462846BDE870401322FFF727B9D14860 -:10421000047EA4F1120005281FD2DFE800F0060397 -:1042200003030300FFF7AEFF01E0FFF795FF00284F -:10423000CAD105F0EFF80028C6D0017821F00F01AF -:10424000891C21F0F00120310170132C07D00221CC -:104250000172BDE8704005F0E0B8FFDF70BD0121DC -:10426000F6E72DE9F04116460C00804600D1FFDF4D -:10427000307820F00F00801C20F0F00010303070FB -:104280002078012804D0022818D0FFDFBDE8F08193 -:104290004046FFF7E0F8050000D1FFDF0320A875D6 -:1042A00005F0BBF894E80F00083686E80F00A9482F -:1042B00010F8301F41F001010170E7E74046FFF7B9 -:1042C000CAF8050000D1FFDFA1884FF6FF70002774 -:1042D000814202D1E288824203D0814201D1E0884A -:1042E00040B105F09AF894E80F00083686E80F0010 -:1042F000AF75CBE7A87D0128C8D1782300224146BD -:104300000FF016FF0220A875C0E738B505460C4629 -:10431000084610F003F818BB203D062D4AD2DFE80E -:1043200005F0031B373C4230002106200FF080FFD0 -:1043300008B1112038BDA01C0AF0AFFF04F096FEB2 -:10434000050038D100220823114606200FF0F0FEA8 -:10435000062830D0FFDF2EE0606810F023F808B1A7 -:10436000102038BD618820886A460BF05FFB04F09E -:104370007DFE05001FD16068E8B1BDF80010018026 -:1043800019E0A07800F0010120880BF085FB0EE019 -:10439000206801F0FBFD05460DE0207800F00100EB -:1043A0000AF033F903E0618820880BF0C4FA04F0C6 -:1043B0005DFEF0E70725284638BD70B505460C467A -:1043C00008460FF0D1FF08B1102070BD202D07D096 -:1043D000212D0DD0222D0BD0252D09D0072070BD09 -:1043E0002088A11C0AF006FABDE8704004F03EBE29 -:1043F000062070BD57482530704708B53421554810 -:104400001FF077FF0120FEF711FE1120FEF726FEB8 -:1044100050496846263104F093FF4E489DF800202D -:1044200010F8251F62F3470121F0010101700021FE -:1044300041724FF46171A0F8071002218172FEF7FA -:1044400057FE00B1FFDFFCF791FF01F032F908BD24 -:1044500010B50C46402120461FF029FFA07F20F018 -:104460000300A077202020700020A07584F823008E -:1044700010BD70472DE9FC4107460FF04FFF10B10A -:104480001020BDE8FC81334E06F12501D6F8250049 -:104490000090B6F82950ADF8045096F82B408DF8EE -:1044A00006403846FEF78FFF0028EAD1FEF720FECF -:1044B0000028E6D0009946F8251FB580B471E0E7E2 -:1044C00010B504460FF050FF08B1102010BD214870 -:1044D0002049224690F8250026314008FEF78AFF41 -:1044E000002010BDFEB50D4604004FF0000712D0AD -:1044F0000822FEF7A1FE002812D1002609E000BF25 -:1045000054F826006946FEF71DFF002808D1761CE6 -:10451000F6B2AE42F4D309F07CFF10B143F20320AF -:10452000FEBD0C4E86F8247024B300271EE000BFA9 -:1045300054F8270002A9FEF705FF00B1FFDF9DF840 -:1045400008008DF8000054F8270050F8011FCDF83E -:10455000011001E0D80100208088ADF80500684610 -:1045600009F0A1FF00B1FFDF7F1CFFB2AF42DFD334 -:1045700086F824500020FEBD2DE9F0478AB015468C -:10458000894604001ED00F4608222946FEF754FE35 -:10459000002810D1002613E054F826006946103098 -:1045A00000F09DFC002806D147B157F826000FF017 -:1045B000B5FE18B110200AB0BDE8F087761CF6B23F -:1045C000AE42E9D30026A5F101081BE006F1010A7D -:1045D0000AF0FF0712E000BF54F82600017C4A08E9 -:1045E00054F827100B7CB2EB530F05D10622113083 -:1045F00011311FF0B1FD58B17F1CFFB2AF42EBD3B8 -:104600000AF0FF064645E1DB4E4624B1012003E0F7 -:1046100043F20520CFE7002009F076FF10B909F03A -:1046200087FF10B143F20420C5E75CB300270DF10A -:10463000170825E054F827006946103000F04FFCB9 -:1046400000B1FFDF54F82700102250F8111FCDF8F9 -:1046500001108088ADF8050054F827100DF107000F -:104660001FF0A6FD96B156F82710102240461FF005 -:104670009FFD684609F0F0FE00B1FFDF7F1CFFB22E -:10468000AF42D7D3FEF702FF002094E7404601F087 -:1046900071FCEEE730B585B004460FF03FFE18B967 -:1046A00060680FF088FE10B1102005B030BD608842 -:1046B0004AF2B811884206D82078FB4D28B101286B -:1046C00006D0022804D00720EFE7FEF711FD18E01E -:1046D0006078022804D0032802D043F20220E4E7E5 -:1046E00085F82F00C1B200200090ADF80400022927 -:1046F0002CD0032927D0FFDF684609F0BAFF04F069 -:10470000B5FC0028D1D1606801F027FC207858B1B1 -:1047100001208DF800000DF1010001F02BFC68462E -:104720000BF018FA00B1FFDF207885F82E00FEF7B5 -:10473000ADFE608860B1A88580B209F0DDFE00B1F1 -:10474000FFDF0020B1E78DF80500D5E74020FAE74C -:104750004FF46170EFE710B504460FF005FE20B985 -:10476000606838B10FF01EFE08B1102010BD6068FF -:1047700001F000FCCC4830F82C1F6180C1786170DA -:1047800080782070002010BD2DE9F843144689463A -:1047900006460FF0E9FDA0B948460FF00CFE80B9BF -:1047A00020460FF008FE60B9BF4DA878012800D15F -:1047B0003CB13178FF2906D049B143F20400BDE88D -:1047C000F8831020FBE7012801D00420F7E74FF021 -:1047D0000008A4B3052811D004280FD0694620464C -:1047E000FEF76DFE0028EAD1207D48B1012809D0EE -:1047F000022809D0032809D00720E0E70820DEE7D7 -:10480000424604E0012202E0022200E003222346A5 -:10481000174600200099FEF78FFE0028CFD1A0890F -:104820002880A07BE875BDF80000A882AF75BDF8B0 -:104830000000000701D5A08988B1A08928804946D9 -:104840000020FEF727FF0028B9D1A87805280BD053 -:10485000042809D0287DC00703D0032002E080206F -:10486000ECE70220FEF7E2FB86F800800020A6E7D6 -:104870007CB58D4C05460E46A078022803D003284F -:1048800001D008207CBD15B143F204007CBD072097 -:104890000CF03EF810B9A078032806D0FEF7F4FB20 -:1048A00028B1A078032804D009E012207CBD132091 -:1048B0007CBD304600F0CDFA0028F9D1E670012029 -:1048C0008DF800008DF801008DF802502088ADF8B9 -:1048D0000400E07D8DF8060068460AF0EAFF04F067 -:1048E000C5FB0028E4D1A078032805D05FF00400C0 -:1048F000FEF79CFB00207CBDE07800F0BAFA0520B2 -:10490000F6E71CB510B143F204001CBD664CA0785C -:10491000042803D0052801D008201CBD00208DF8F4 -:10492000000001218DF801108DF8020068460AF0A0 -:10493000C0FF04F09BFB0028EFD1A078052805D02C -:104940005FF00200FEF772FB00201CBDE07800F073 -:10495000A1FA0320F6E72DE9FC4180460E46032527 -:1049600008460FF028FD002866D14046FEF773FD8B -:10497000040004D02078222804D2082081E543F2E4 -:1049800002007EE5A07F00F003073EB1012F0CD0AE -:1049900000203146FEF72BFC0500EFD1012F06D099 -:1049A000022F1AD0FFDF28466BE50120F1E7A07D3A -:1049B0003146022801D011B107E0112061E56846B7 -:1049C000FCF7E1FD0028D9D16946404606F0A7FC76 -:1049D0000500E8D10120A075E5E7A07D032804D1FA -:1049E000314890F83000C00701D02EB30EE026B158 -:1049F000A07F40071ED4002100E00121404606F0C0 -:104A0000AEFC0500CFD1A075002ECCD0314640467B -:104A100000F07DFA05461128C5D1A07F4107C2D418 -:104A2000316844F80E1F7168616040F00400207422 -:104A30000025B8E71125B6E7102022E570B50C4631 -:104A40000546FEF708FD010005D022462846BDE8D0 -:104A50007040FEF703BD43F2020070BD10B501289F -:104A600007D1114B9B78012B00D011B143F2040008 -:104A700010BD09F084FDBDE8104004F0F7BA012331 -:104A800000F012BA00231A46194600F00DBA70B5AC -:104A900006460C4608460FF041FC18B920680FF096 -:104AA00063FC18B1102070BDD8010020F74D2A7E9C -:104AB000112A04D0132A00D33EB10820F3E721467F -:104AC0003046FEF774FE60B1EDE70920132A0DD0E1 -:104AD000142A0BD0A188FF29E5D31520FEF7BEFAD2 -:104AE0000020D4E90012C5E90712DCE7A1881F29DC -:104AF000D9D31320F2E72DE9F047DFF8908307467A -:104B000090B098F818009A4615460C46132803D31F -:104B1000FFF738FB002822D120460FF0FFFBA0BB97 -:104B200028460FF0FBFB80BB20784FF00101C00747 -:104B30004FF0000602D08DF83A1001E08DF83A608F -:104B40002078C0F3C1008DF800006278072042B1E0 -:104B5000012A06D0022A02D0042A00D1062010B071 -:104B60002AE58DF809106088ADF80A00A088ADF834 -:104B7000100020788946C0F3C10001281FD0032807 -:104B80001DD038460FF0CAFB08B11020E7E738788F -:104B9000400808D0012809D0022807D0032805D0F2 -:104BA00043F20220DBE78DF8026001E08DF802900D -:104BB00057F8010FCDF80300B888ADF807000DF1E4 -:104BC0000100FEF7E8FB08B10320C8E72888ADF82C -:104BD00016006888ADF81C00A888ADF82200E888A7 -:104BE000ADF82800ADF82E60ADF8346068460AF0E4 -:104BF000BDF8E8B998F818004546112801D00820FA -:104C0000ADE706200BF084FE38B12078C0F3C10078 -:104C1000012804D0032802D004E012209FE795F871 -:104C2000240028B1FEF730FA022803D2132096E7B9 -:104C3000072094E7504600F00CF900288FD185F842 -:104C400019A068460AF051FA04F010FA002886D13B -:104C5000687E00F00EF9E08864280AD248B101208D -:104C600000F047F9040091D11220FEF7F7F9204631 -:104C700075E76421B0FBF1F0F2E770B50646154622 -:104C80000C4608460FF070FB18B928460FF06CFB75 -:104C900008B1102007E72A46214630460AF0A9FE4F -:104CA00004F0E4F90028F5D121787F29F2D105201C -:104CB000F9E67CB505460C4608460FF02FFB08B117 -:104CC00010207CBD2846FEF7C6FB20B100782228C4 -:104CD00004D208207CBD43F202007CBD6B4890F8F2 -:104CE0003000400701D511207CBD2178C80802D1D1 -:104CF0006078C20801D007207CBD890801D18008F6 -:104D000001D006207CBDADF8005020788DF802005F -:104D100060788DF803000220ADF80400684609F0C1 -:104D200042FF04F0A3F97CBD70B586B014460D4671 -:104D30000646FEF790FB28B10078222805D208200D -:104D400006B0B0E643F20200FAE728460FF033FB64 -:104D500020B944B120460FF025FB08B11020EFE741 -:104D600000202060A080494890F83000800701D5DD -:104D70001120E5E703A9304609F0BDFD18B100BFD9 -:104D800004F074F9DCE7ADF80060BDF81400ADF88C -:104D90000200BDF81600ADF80400BDF81000BDF823 -:104DA0001210ADF80600ADF808107DB1298809B1E0 -:104DB000ADF80610698809B1ADF80210A98809B1EB -:104DC000ADF80810E98809B1ADF80410DCB1BDF800 -:104DD0000610814201D9081A2080BDF80210BDF8E2 -:104DE0001400814201D9081A6080BDF80800BDF89E -:104DF0000410BDF816200144BDF812001044814291 -:104E000001D9081AA080684609F0AAFEB8E71CB5C7 -:104E10001F490968CDE90010684609F0AAFF04F0AF -:104E200025F91CBD1CB5002000900190684609F0D2 -:104E3000A0FF04F01BF91CBD108008885080488832 -:104E40009080C88810818888D0800020508190810F -:104E5000704710B5044604F075F830B1407830B1B1 -:104E6000204604F07EFB002010BD052010BD12205E -:104E700010BD10B504F066F8040000D1FFDF6078C3 -:104E800000B9FFDF6078401E607010BDD8010020BF -:104E90009C46020010B504F055F8040000D1FFDF75 -:104EA0006078401C6070F0E71CB5ADF800008DF82C -:104EB00002308DF803108DF8042068460AF05EFD7C -:104EC00004F0D4F81CBD0CB52DA2D2E90012CDE936 -:104ED00000120079694601EB501000780CBD027891 -:104EE000520804D0012A02D043F202207047FEF794 -:104EF00029BA10B548B183000022114605200FF0F1 -:104F000017F9052801D00320BFE70020BDE71FB532 -:104F10006A46FFF791FF68460AF04CF904F0A6F8DC -:104F200004B0B2E770B50C0006460DD0FEF793FA58 -:104F3000050000D1FFDFA6802889208128896081B3 -:104F40006889A081A889E081ADE510B500231A46E3 -:104F500003E0845C2343521CD2B28A42F9D30BB1E2 -:104F6000002092E7012090E700B530B1012803D07E -:104F7000022801D0FFDF002000BDFF2000BD00009F -:104F8000070605040302010010B504460FF0C6F938 -:104F900008B1102010BD2078C0F30210042807D8F3 -:104FA0006078072804D3A178102901D8814201D262 -:104FB000072010BDE078410706D421794A0703D4C1 -:104FC000000701D4080701D5062010BD002010BD40 -:104FD00010B513785C08837F64F3C7138377137865 -:104FE0009C08C37F64F30003C3771078C309487833 -:104FF00063F34100487013781C090B7864F347137E -:105000000B701378DB0863F3000048705078487128 -:1050100010BD10B5C4780B7864F300030B70C4782E -:10502000640864F341030B70C478A40864F382033A -:105030000B70C478E40864F3C3030B700379117830 -:1050400063F30001117003795B0863F34101117090 -:1050500003799B0863F3820111700079C00860F343 -:10506000C301117010BD70B514460D46064604F01C -:10507000D1F980B10178182221F00F01891C21F0AB -:10508000F001A03100F8081B21461FF0D6F8BDE85A -:10509000704004F0C2B929463046BDE87040132282 -:1050A000FEF7DCB92DE9F047064608A8894690E8E6 -:1050B00030041F469046142128461FF01AF900219B -:1050C000CAF80010B8F1000F03D0B9F1000F03D1F6 -:1050D00014E03878C00711D020680FF045F9C0BB44 -:1050E000B8F1000F07D12068123028602068143012 -:1050F00068602068A8602168CAF8001038788007C6 -:1051000024D560680FF04EF918BBB9F1000F21D01B -:10511000FFF770F90168C6F868118188A6F86C116C -:10512000807986F86E0101F002FDF94FEF60626848 -:1051300062B196F8680106F2691140081032FEF774 -:1051400059F91022394660681FF032F80020BDE896 -:10515000F08706E0606820B1E8606068C6F8640126 -:10516000F4E71020F3E730B5054608780C4620F048 -:105170000F00401C20F0F001103121700020607001 -:1051800095F8230030B104280FD0052811D0062847 -:1051900014D0FFDF20780121B1EB101F04D295F865 -:1051A000200000F01F00607030BD21F0F0002030C2 -:1051B00002E021F0F00030302070EBE721F0F00049 -:1051C0004030F9E7F0B591B0022715460C46064687 -:1051D0003A46ADF80870092103AB04F07AFF049059 -:1051E000002810D004208DF804008DF80170E03400 -:1051F000099605948DF818500AA968460DF0CAF86A -:1052000000B1FFDF012011B0F0BD10B588B00C4631 -:105210000A99ADF80000C3B11868CDF802005868CB -:10522000CDF80600ADF80A20102203A81EF0C0FF3A -:1052300068460AF062F803F019FF002803D1A17F45 -:1052400041F01001A17708B010BD0020CDF8020098 -:10525000E6E72DE9F84F0646808A0D4680B2824681 -:10526000FEF7F9F804463078DFF8A48200274FF003 -:105270000509A8F120080F2870D2DFE800F06FF2CE -:105280003708387D8CC8F1F0EFF35FF3F300A07FAF -:1052900000F00300022809D05FF0000080F0010157 -:1052A00050460BF085FB050003D101E00120F5E736 -:1052B000FFDF98F85C10C90702D0D8F860000BE057 -:1052C000032105F11D000EF004FDD5F81D009149E4 -:1052D000B0FBF1F201FB1200C5F81D0070686867B1 -:1052E000B068A8672078252800D0FFDFCAE0A07F3B -:1052F00000F00300022809D05FF0000080F00101F7 -:1053000050460BF055FB060003D101E00120F5E704 -:10531000FFDF3078810702D52178252904D040F0BD -:1053200001003070BDE8F88F02202870307F2871AE -:1053300006F11D002D36C5E90206F3E7A07F00F057 -:105340000300022808D0002080F0010150460BF035 -:105350002FFB040004D102E00120F5E7A7E1FFDF05 -:105360002078C10604D5072028703D346C60D9E749 -:1053700040F008002070D5E7E07F000700D5FFDF90 -:10538000307CB28800F0010301B05046BDE8F04F18 -:10539000092105F027BD04B9FFDF716821B1102292 -:1053A00004F124001EF004FF28212046FDF7B2FE80 -:1053B000A07F00F0030002280ED104F12400002396 -:1053C00000901A4621465046FFF71FFF112807D0CC -:1053D00029212046FDF79EFE307A84F82000A1E7BF -:1053E000A07F000700D5FFDF14F81E0F40F0080073 -:1053F0002070E782A761E761C109607861F341002D -:10540000014660F382016170307AE0708AE7A07F24 -:1054100000F00300022809D05FF0000080F00101D5 -:1054200050460BF0C5FA040003D101E00120F5E776 -:10543000FFDF022104F185000EF04BFC04202870F0 -:1054400004F5B4706860B4F88500288230481038DC -:105450007C346C61C5E9028064E703E024E15BE031 -:105460002DE015E0A07F00F00300022807D0002007 -:1054700080F0010150460BF09BFA18B901E00120C1 -:10548000F6E7FFDF324621465046BDE8F84FEAE531 -:1054900004B9FFDF20782128A1D93079012803D170 -:1054A000E07F40F00800E077324621465046FFF7A3 -:1054B000DAFD2046BDE8F84F2321FDF72BBE3279F7 -:1054C000AA8005F108030921504604F002FEE860B5 -:1054D00010B185F8009025E7A07F00F003000228B6 -:1054E00008D0002080F0010150460BF061FA040062 -:1054F00003D101E00120F5E7FFDF04F1620102239F -:105500001022081F0BF0DBF807703179417009E7B2 -:105510003802002040420F00A07F00F00300022864 -:1055200008D0002080F0010150460BF041FA050040 -:1055300003D101E00120F5E7FFDF95F8840000F0DA -:10554000030001287AD1A07F00F00307E07F10F06C -:10555000010602D0022F04D133E095F8A000C00765 -:105560002BD0D5F8601121B395F88320087C62F325 -:1055700087000874A17FCA09D5F8601162F3410061 -:105580000874D5F8601166F300000874AEB1D5F860 -:105590006001102204F1240188351EF009FE287EE6 -:1055A00040F001002876287820F0010005F88809ED -:1055B00000E016B1022F04D02DE095F88800C00756 -:1055C00027D0D5F85C1121B395F88320087C62F3CD -:1055D00087000874A17FCA09D5F85C1162F3410005 -:1055E0000874D5F85C1166F3000008748EB1D5F824 -:1055F0005C01102204F1240188351EF0D9FD2878C1 -:1056000040F0010005F8180B287820F0010005F89B -:10561000A009022F44D0002000EB400005EBC000A1 -:1056200090F88800800709D595F87C00D5F86421AA -:10563000400805F17D011032FDF7DCFE8DF8009089 -:1056400095F884006A4600F003008DF8010095F893 -:1056500088108DF8021095F8A0008DF803002146FF -:10566000504601F04DFA2078252805D0212807D092 -:10567000FFDF2078222803D922212046FDF74AFDAA -:10568000A07F00F0030002280CD0002080F0010170 -:1056900050460BF09FF900283FF44FAEFFDF41E684 -:1056A0000120B9E70120F1E7706847703AE6FFDFB3 -:1056B00038E670B5FE4C002584F85C5025660CF089 -:1056C00036FE04F11001204603F060FE84F83050ED -:1056D00070BD70B50D46FDF7BEFE040000D1FFDFC2 -:1056E0004FF4B87128461EF004FE04F1240028612E -:1056F000A07F00F00300022808D0012105F1E0009E -:105700000CF016FE002800D0FFDF70BD0221F5E787 -:105710000A46014602F1E0000CF02ABE70B50546CB -:10572000406886B001780A2906D00D2933D00E29A9 -:105730002FD0FFDF06B070BD86883046FDF78BFEA8 -:10574000040000D1FFDF20782128F3D028281BD1C6 -:10575000686802210E3001F0C8F9A8B16868082114 -:10576000801D01F0C2F978B104F1240130460AF03D -:10577000A2F803F07BFC00B1FFDF06B02046BDE8D5 -:1057800070402921FDF7C6BC06B0BDE8704003F0AB -:1057900044BE012101726868C6883046FDF75BFE91 -:1057A000040000D1FFDFA07F00F00301022902D135 -:1057B00020F01000A077207821280AD06868017AAC -:1057C00009B1007980B1A07F00F00300022862D007 -:1057D000FFDFA07F00F003000228ABD1FEF798F8AE -:1057E0000028A7D0FFDFA5E703F017FEA17F08067A -:1057F0002BD5E07FC00705D094F8200000F01F00F3 -:10580000102820D05FF0050084F823002078292894 -:105810001DD02428DDD1314604200EF033FD222195 -:105820002046FDF777FCA07F00F00300022830D06F -:105830005FF0000080F0010130460BF0CBF800284B -:10584000C7D0FFDFC5E70620DEE70420DCE701F074 -:105850000300022808D0002080F0010130460BF040 -:10586000A7F8050003D101E00120F5E7FFDF2521BE -:105870002046FDF74FFC03208DF80000694605F136 -:10588000E0000CF06CFD0228A3D00028A1D0FFDFBF -:105890009FE70120CEE703F0C0FD9AE72DE9F04332 -:1058A00087B09946164688460746FDF7D4FD0400A2 -:1058B0004BD02078222848D3232846D0E07F000709 -:1058C00043D4A07F00F00300022809D05FF000005D -:1058D00080F0010138460BF06BF8050002D00CE0B7 -:1058E0000120F5E7A07F00F00300022805D0012188 -:1058F000002238460BF053F805466946284601F069 -:1059000026F9009800B9FFDF45B10098E035056140 -:105910002078222806D0242804D007E0009900200F -:10592000086103E025212046FDF7F4FB00980121E2 -:1059300041704762868001A9C0E902890CF02AFD06 -:10594000022802D0002800D0FFDF07B0BDE8F083B6 -:1059500070B586B00546FDF77EFD017822291ED977 -:10596000807F00F00300022808D0002080F00101B1 -:1059700028460BF01DF804002FD101E00120F5E7C7 -:10598000FFDF2AE0B4F85E0004F1620630440178DB -:10599000427829B121462846FFF714FCB0B9C9E680 -:1059A000ADF804200921284602AB04F092FB0390D5 -:1059B0000028F4D005208DF80000694604F1E000CD -:1059C0000CF0CDFC022801D000B1FFDF0223102231 -:1059D000314604F15E000AF0A8FEB4F86000002829 -:1059E000D0D1A7E610B586B00446FDF734FD0178A6 -:1059F00022291BD9807F00F00300022808D0002054 -:105A000080F0010120460AF0D3FF040003D101E039 -:105A10000120F5E7FFDF06208DF80000694604F15C -:105A2000E0000CF09CFC002800D0FFDF06B010BDA9 -:105A30002DE9F05F05460C460027007890460109E5 -:105A40003E4604F1080BBA4602297DD0072902D050 -:105A50000A2909D146E0686801780A2905D00D298C -:105A600030D00E292ED0FFDFBCE114271C26002CDD -:105A70006BD08088A080FDF7EEFC5FEA000900D1C2 -:105A8000FFDF99F817005A46400809F11801FDF7A1 -:105A9000B1FC6868C0892082696851F8060FC4F8B3 -:105AA00012004868C4F81600A07E20F0060001E04D -:105AB0001802002040F00100A07699F81E0040F086 -:105AC00020014DE01A270A26002CD1D0C088A080E2 -:105AD000FDF7C1FC050000D1FFDF59462846FFF75E -:105AE00042FB7FE10CB1A88BA080287A0B287DD0E7 -:105AF00006DC01287BD0022808D0032804D135E039 -:105B00000D2875D00E2874D0FFDF6BE11E27092603 -:105B1000002CADD0A088FDF79EFC5FEA000900D103 -:105B2000FFDF287B00F003000128207A1BD020F043 -:105B300001002072297B890861F341002072297BD2 -:105B4000C90861F3820001E041E1F2E02072297BA3 -:105B5000090961F3C300207299F81E0040F040016A -:105B600089F81E103EE140F00100E2E713270D2600 -:105B7000002CAAD0A088FDF76EFC8146807F00F043 -:105B80000300022808D0002080F00101A0880AF05C -:105B90000FFF050003D101E00120F5E7FFDF99F8D1 -:105BA0001E0000F00302022A50D0686F817801F0D5 -:105BB00003010129217A4BD021F001012172837860 -:105BC0009B0863F3410121728378DB0863F3820150 -:105BD000217283781B0963F3C3012172037863F395 -:105BE00006112172437863F3C71103E061E0A9E075 -:105BF00090E0A1E0217284F809A0C178A172022A84 -:105C000029D00279E17A62F30001E1720279520847 -:105C100062F34101E1720279920862F38201E1725A -:105C20000279D20862F3C301E1724279217B62F307 -:105C3000000121734279520862F3410121734279D4 -:105C4000920862F382012173407928E0A86FADE7E2 -:105C500041F00101B2E74279E17A62F30001E172B9 -:105C60004279520862F34101E1724279920862F38B -:105C70008201E1724279D20862F3C301E1720279D2 -:105C8000217B62F3000121730279520862F3410122 -:105C900021730279920862F3820121730079C008AE -:105CA00060F3C301217399F80000232831D926211C -:105CB00040E018271026E4B3A088FDF7CCFB83460C -:105CC000807F00F00300022809D0002080F001014D -:105CD000A0880AF06DFE5FEA000903D101E001200F -:105CE000F4E7FFDFE868A06099F8000040F00401E5 -:105CF00089F8001099F80100800708D50120207369 -:105D00009BF8000023286DD92721584651E084F8DC -:105D10000CA067E015270F265CB1A088FDF79BFB60 -:105D2000814606225946E86808F059F90120A07317 -:105D3000A2E041E048463CE016270926E4B3287B70 -:105D400020724FE0287B19270E26ACB3C4F808A0B8 -:105D5000A4F80CA0012807D0022805D0032805D0FC -:105D6000042803D0FFDF0DE0207207E0697B0428E0 -:105D700001F00F0141F0800121721ED0607A20F005 -:105D800003006072A088FDF766FB054600782128B5 -:105D900028D0232800D0FFDFA87F00F003000228CE -:105DA00013D0002080F00101A0880AF013FE222108 -:105DB0002846FDF7AFF915E004E0607A20F0030013 -:105DC000401CDEE7A8F8006011E00120EAE70CB112 -:105DD0006888A080287A03282ED004280AD00528B5 -:105DE00050D0FFDFA8F800600CB12780668000204B -:105DF000BDE8F09F15270F26002CE3D0A088FDF703 -:105E00002AFB807F00F00300022809D05FF0000029 -:105E100080F00101A0880AF0CBFD050003D101E06C -:105E20000120F5E7FFDFD5F81D000622594608F0EE -:105E3000D6F884F80EA0D5E717270926002CC1D084 -:105E4000A088FDF708FB8146807F00F00300022850 -:105E500008D0002080F00101A0880AF0A9FD05000B -:105E600003D101E00120F5E7FFDF6878800701D565 -:105E7000022000E00120207299F800002328B1D907 -:105E8000272157E719270E26002C9BD0A088FDF765 -:105E9000E2FA5FEA000900D1FFDFC4F808A0A4F825 -:105EA0000CA084F808A0A07A40F00300A07299F832 -:105EB0001E10C90961F38200A07299F81F2099F899 -:105EC0001E1012EAD11F05D099F8201001F01F0111 -:105ED00010292BD020F00800A07299F81F10607ACA -:105EE00061F3C3006072697A01F003010129A2D154 -:105EF00040F00400607299F81E0000F003000228D0 -:105F0000E87A16D0217B60F300012173AA7A607BC6 -:105F100062F300006073EA7A520862F34101217370 -:105F2000A97A490861F3410060735BE740F008001B -:105F3000D2E7617B60F300016173AA7A207B62F390 -:105F400000002073EA7A520862F341016173A97A72 -:105F5000490861F34100207344E710B5FE4C30B1AD -:105F60000146102204F120001EF022F9012084F8DD -:105F7000300010BD10B5044600F0D9FDF6492046AA -:105F80001022BDE8104020311EF012B970B5F24D5C -:105F900006004FF0000413D00EF0C0F908B1102431 -:105FA0000CE00621304608F001F8411C05D02866B7 -:105FB0005FF0010085F85C0000E00724204670BD1A -:105FC0000020F7E7007810F00F0204D0012A05D076 -:105FD000022A0CD110E0000909D10AE000090128C9 -:105FE00007D0022805D0032803D0042801D00720B9 -:105FF00070470870002070470620704705282AD295 -:10600000DFE800F003070F171F00087820F0FF00FB -:106010001EE0087820F00F00401C20F0F000103047 -:1060200016E0087820F00F00401C20F0F00020302F -:106030000EE0087820F00F00401C20F0F000303017 -:1060400006E0087820F00F00401C20F0F0004030FF -:10605000087000207047072070472DE9F041804606 -:1060600088B00D46002708460EF0A5F9A8B94046AD -:10607000FDF7F1F9040003D02078222815D104E0BF -:1060800043F2020008B0BDE8F08145B9A07F4106A7 -:1060900003D500F00300022801D01020F2E7A07F12 -:1060A000C10601D4010702D50DB10820EAE7E17F5E -:1060B000090701D50D20E5E700F00300022805D10E -:1060C00025B12846FEF760FF0700DBD1A07F00F076 -:1060D0000300022808D0002080F0010140460AF0A9 -:1060E00067FC060002D00FE00120F5E7A07F00F07A -:1060F000030002280ED0002080F00101002240465B -:106100000AF04DFC060007D0A07F00F00300022833 -:1061100004D009E00120EFE70420B3E725B12A46C7 -:1061200031462046FEF754FF6946304600F00FFD29 -:10613000009800B9FFDF0099022006F1E0024870E4 -:10614000C1F824804A6100220A81A27F02F0030282 -:10615000022A1CD001200871287800F00102087E74 -:1061600062F3010008762A78520862F3820008760A -:106170002A78920862F3C30008762A78D20862F37C -:106180000410087624212046FCF7C4FF33E035B321 -:106190000871301D88613078400908777078C0F345 -:1061A00040004877287800F00102887F62F3010000 -:1061B0008877A27FD20962F382008877E27F62F358 -:1061C000C3008877727862F304108877A878C8775C -:1061D00001F1210228462031FEF71BFF03E00320D6 -:1061E00008710520087625212046FCF793FFA07F43 -:1061F00020F04000A07701A900980CF0CBF802280D -:1062000001D000B1FFDF38463CE72DE9FF4F534A8C -:106210000D4699B09A4607CA0BAB002783E80700E2 -:106220001998FDF718F9060006D03078262806D010 -:1062300008201DB0BDE8F08F43F20200F9E7B07FFF -:1062400000F00309B9F1020F03D00020284302D067 -:1062500006E00120FAE71B98FEF796FE0028E8D139 -:10626000B07F00F00300022801D11B9979BB0228FE -:1062700008D0002080F0010119980AF099FB040071 -:1062800003D101E00120F5E7FFDF852D28D007DCF1 -:10629000F5B1812D1ED0822D1ED0832D08D11DE099 -:1062A000862D1FD0882D1FD0892D1FD08A2D1FD05D -:1062B0000F2020710F281DD003F0ACF8E0B10120B1 -:1062C0008DF84000201D11902079B8B167E111E0F0 -:1062D0000020EEE70120ECE70220EAE70320E8E7F0 -:1062E0000520E6E70620E4E70820E2E70920E0E7EA -:1062F0000A20DEE707209CE711209AE7B9F1020F98 -:1063000003D0A56F03D1A06F02E0656FFAE7606F5D -:10631000804632D04FF0010000904FF00200019013 -:10632000214630461B9AFEF753FE1B98007800F07A -:106330000101A87861F30100A870B17FC90961F378 -:106340008200A870F17F61F3C300A870617861F3E7 -:106350000410A870207803E018020020A446020070 -:10636000400928706078C0F3400068701B988078FE -:10637000E87000206871287103E00220009001207D -:106380000190A87898F80210C0F3C000C1F3C001D2 -:1063900008405FEA000B2CD050460DF0BFFF90BBC9 -:1063A000DAF80C000DF0BAFF68BBDAF81C000DF04B -:1063B000B5FF40BBDAF80C00A060DAF81C00E06022 -:1063C00098F80100617800F0010041EA4000607037 -:1063D00098F80210C0B2C1F30011891E0840607025 -:1063E00000202077019906F1170002290CD0012125 -:1063F0000BE098F80110607801F00101FD2242EAFB -:1064000041010840E3E732E0002104EB81014861EB -:106410000099701C022901D0012100E0002104EB49 -:1064200081014861A87800F00300012858D198F84C -:10643000020000F00300012852D1B9F1020F04D08C -:106440002A1D691D1B98FEF7E4FD297998F80400C0 -:1064500001408DF83810687998F8052010408DF8C3 -:106460003C0001433CD050460DF058FF08B11020CD -:10647000DFE60AF110010491B9F1020F18D00846C5 -:106480005FF0000104F18C03CDE9000304F5AE7266 -:1064900002920EAB5A462046FEF704FE0028E7D1D2 -:1064A000B9F1020F08D0504608D14FF0010107E0C2 -:1064B00050464FF00101E5E70498F5E74FF0000181 -:1064C00004F1A403CDE9000304F5B072029281F057 -:1064D00001010FAB5A462046FEF7E4FD0028C7D164 -:1064E0006078800734D4A87898F80210C0F3800050 -:1064F000C1F3800108432BD0297898F800000BAA3B -:10650000B9F1020F06D032F811204300DA4002F050 -:1065100003070AE032F810204B00DA4012F00307BC -:1065200005D0012F0BD0022F0BD0032F07D0BBF1CA -:10653000000F0DD0012906D0042904D008E002275D -:10654000F5E70127F3E7012801D0042800D104274B -:10655000B07F40F08000B077F17F6BF30001F177FE -:10656000607881074FF003000CD5A071BBF1000FDC -:1065700015D100BF8DF85C0017AA3146199800F0BC -:10658000BFFA0CE00221022F18D0012F18D0042FDF -:1065900022D00020A071B07F20F08000B0772521AC -:1065A0003046FCF7B7FD10A904F1E0000BF0D7FE70 -:1065B00010B1022800D0FFDF00203AE6A171D9E730 -:1065C000A1710D2104F120001DF093FE207840F010 -:1065D000020020700420CDE70120A071DFE72DE943 -:1065E000F04387B09046894604460025FCF733FF08 -:1065F000060006D03078272806D0082007B0BDE86E -:10660000F08343F20200F9E7B07F00F003000228B4 -:1066100008D0002080F0010120460AF0C9F90400EA -:1066200003D101E00120F5E7FFDFA7795FEA090068 -:1066300005D0012821D0B9F1020F26D110E0B8F120 -:10664000000F22D1012F05D0022F05D0032F05D036 -:10665000FFDF2DE00C252BE0012529E0022527E0B6 -:1066600040460DF05BFEB0B9032F0ED1102241461B -:1066700004F11D001DF09CFD1AE0012F02D0022F35 -:1066800003D104E0B8F1000F12D00720B6E740466E -:106690000DF044FE08B11020B0E7102104F11D00F8 -:1066A0001DF005FE0621404607F080FCC4F81D00E1 -:1066B0002078252140F0020020703046FCF72AFDAA -:1066C0002078C10713D020F00100207002208DF83F -:1066D000000004F11D0002908DF804506946C3309B -:1066E0000BF03DFE022803D010B1FFDF00E025775C -:1066F000002083E730B587B00D460446FCF7ABFEBB -:10670000A0B1807F00F00300022812D05FF00000EB -:1067100080F0010120460AF04BF904000ED0284613 -:106720000DF0FCFD38B1102007B030BD43F202007F -:10673000FAE70120ECE72078400701D40820F3E7CE -:10674000294604F13D00202205461DF031FD207848 -:1067500040F01000207001070FD520F008002070D5 -:1067600007208DF80000694604F1E00001950BF068 -:10677000F6FD022801D000B1FFDF0020D4E770B59C -:106780000D460646FCF767FE18B10178272921D18E -:1067900002E043F2020070BD807F00F00300022897 -:1067A00008D0002080F0010130460AF001F9040011 -:1067B00003D101E00120F5E7FFDFA079022809D12C -:1067C0006078C00706D02A4621463046FEF7FAFC1C -:1067D00010B10FE0082070BDB4F860000E280BD295 -:1067E00004F1620102231022081F09F068FF012151 -:1067F00001704570002070BD112070BD70B5064657 -:1068000014460D4608460DF089FD18B920460DF0D6 -:10681000ABFD08B1102070BDA6F57F40FF380ED04B -:106820003046FCF718FE38B1417822464B08811CEF -:106830001846FCF7DFFD07E043F2020070BD20467A -:10684000FDF73EFE0028F9D11021E01D0DF041FAC0 -:10685000E21D294604F1170000F089F9002070BDFF -:106860002DE9F04104468AB01546884600270846BF -:106870000DF0A1FD18B928460DF09DFD18B11020AE -:106880000AB0BDE8F0812046FCF7E5FD060003D024 -:10689000307827281BD102E043F20200F0E7B07FF6 -:1068A00000F00300022809D05FF0000080F0010131 -:1068B00020460AF07DF8040003D101E00120F5E74D -:1068C000FFDF2078400702D56078800701D40820D8 -:1068D000D6E7B07F00F00300022803D0A06F03D1F9 -:1068E000A16F02E0606FFAE7616F407800B19DB17F -:1068F000487810B1B8F1000F0ED0ADB1EA1D06A86E -:10690000E16800F034F9102206A905F117001DF026 -:1069100023FC18B1042707E00720B1E71022E91D86 -:1069200004F12D001DF044FCB8F1000F06D0102238 -:1069300008F1070104F11D001DF03AFC2078252123 -:1069400040F0020020703046FCF7E4FB2078C107DD -:1069500015D020F00100207002208DF8000004F115 -:106960001D000290103003908DF804706946B3301A -:106970000BF0F5FC022803D010B1FFDF00E0277711 -:1069800000207DE7F8B515460E460746FCF763FD87 -:10699000040004D02078222804D00820F8BD43F257 -:1069A0000200F8BDA07F00F00300022802D043F2ED -:1069B0000500F8BD30460DF0B1FC18B928460DF0C1 -:1069C000ADFC08B11020F8BD00953288B31C2146FB -:1069D0003846FEF71AFC112815D00028F3D1297C7F -:1069E0004A08A17F62F3C711A177297CE27F61F396 -:1069F0000002E277297C890884F82010A17F21F029 -:106A00004001A177F8BDA17F0907FBD4D6F80200A9 -:106A1000C4F83600D6F80600C4F83A003088A086DC -:106A20001022294604F124001DF0C2FB287C4108F5 -:106A3000E07F61F34100E077297C61F38200E07739 -:106A4000287C800884F82100A07F40F00800A0770F -:106A50000020D3E770B50D4606460BB1072070BD88 -:106A6000FCF7F9FC040007D02078222802D3A07F8D -:106A7000800604D4082070BD43F2020070BDADB1A1 -:106A80002946304608F017FF02F0F0FA297C4A0840 -:106A9000A17F62F3C711A177297CE27F61F3000235 -:106AA000E277297C890884F8201004E0304608F059 -:106AB0002AFF02F0DBFAA17F21F02001A17770BD4F -:106AC00070B50D46FCF7C7FC040005D028460DF054 -:106AD0004BFC20B1102070BD43F2020070BD29466E -:106AE0002046FEF740FB002070BD04E010F8012BAB -:106AF0000AB100207047491E89B2F7D201207047C1 -:106B000070B51546064602F085FC040000D1FFDF93 -:106B1000207820F00F00801C20F0F0002030207042 -:106B200066802868A060BDE8704002F076BC10B5B1 -:106B3000134C94F83000002808D104F12001A1F191 -:106B400010000BF04EFC012084F8300010BD10B195 -:106B500090F8B9202AB10A4890F8350018B1002001 -:106B600003E0B83001E0064834300860704708B5EB -:106B70000023009313460A460AF015F908BD0000E9 -:106B80001802002018B18178012938D101E01020C5 -:106B90007047018842F60112881A914231D018DC00 -:106BA00042F60102A1EB020091422AD00CDC41B373 -:106BB000B1F5C05F25D06FF4C050081821D0A0F502 -:106BC0007060FF381BD11CE001281AD002280AD1BE -:106BD00017E0B0F5807F14D008DC012811D002281E -:106BE0000FD003280DD0FF2809D10AE0B0F5817F2E -:106BF00007D0A0F58070033803D0012801D0002011 -:106C000070470F2070470A281ED007DC18D2DFE833 -:106C100000F0191B1F1F171F231D1F21102815D03F -:106C200008DC0B2812D00C2810D00D2816D00F2805 -:106C300006D10DE011280BD084280BD087280FD067 -:106C400003207047002070470520704707207047D9 -:106C50000F20704704207047062070470C207047B3 -:106C600043F20200704738B50C46050041D0694632 -:106C7000FFF7A8F9002819D19DF80010607861F39A -:106C8000020060706946681CFFF79CF900280DD16E -:106C90009DF80010607861F3C5006070A978C1F3B9 -:106CA0004101012903D0022905D0072038BD2178F0 -:106CB00021F0200102E0217841F0200121704107FC -:106CC00004D0A978C90861F386106070607810F06C -:106CD000380F07D0A978090961F3C710607010F068 -:106CE000380F02D16078400603D5207840F040008C -:106CF0002070002038BD70B504460020088015467D -:106D00006068FFF7B0FF002816D12089A18988426A -:106D100011D860688078C0070AD0B1F5007F0AD822 -:106D200040F20120B1FBF0F200FB1210288007E0D6 -:106D3000B1F5FF7F01D90C2070BD01F2012129803E -:106D4000002070BD10B50478137864F3000313704D -:106D50000478640864F3410313700478A40864F3AE -:106D6000820313700478E40864F3C3031370047897 -:106D7000240964F3041313700478640964F345135D -:106D800013700078800960F38613137031B10878AE -:106D9000C10701D1800701D5012000E0002060F388 -:106DA000C713137010BD4278530702D002F00703D7 -:106DB00006E012F0380F02D0C2F3C20300E0012354 -:106DC0004A7863F302024A70407810F0380F02D01C -:106DD000C0F3C20005E0430702D000F0070000E066 -:106DE000012060F3C5024A7070472DE9F04F95B05D -:106DF0000D00824612D0122128461DF058FA4FF697 -:106E0000FF7B05AA0121584606F01BFF00242646F9 -:106E100037464FF420586FF4205972E0102015B017 -:106E2000BDE8F08F9DF81E0001280AD1BDF81C10A6 -:106E300041450BD011EB09000AD001280CD00228E3 -:106E40000CD0042C0ED0052C0FD10DE0012400E055 -:106E50000224BDF81A6008E0032406E00424BDF80B -:106E60001A7002E0052400E00624BDF81A1051450E -:106E700047D12C74BEB34FF0000810AA4FF0070A98 -:106E8000CDE90282CDE900A80DF13C091023CDF82F -:106E9000109042463146584606F086FF08BBBDF8C2 -:106EA0003C002A46C0B210A90BF004FBC8B9AE8161 -:106EB000CFB1CDE900A80DF1080C0AAE40468CE830 -:106EC0004102132300223946584606F06DFF40B9AF -:106ED000BDF83C00F11CC01EC0B22A1D0BF0EAFA3E -:106EE00010B103209BE70AE0BDF82900E881062CD9 -:106EF00005D19DF81E00A872BDF81C002881002055 -:106F00008DE705A806F0A9FE00288BD0FFF77BFED1 -:106F100085E72DE9F0471C46DDE90978DDF820908A -:106F200015460E00824600D1FFDF0CB1208818B153 -:106F3000D5B11120BDE8F087022D01D0012100E07C -:106F4000002106F1140005F06BFDA8F800000246D0 -:106F50003B462946504603F0BCF8C9F8000008B982 -:106F6000A41C3C600020E5E71320E3E7F0B41446DE -:106F7000DDE904528DB1002314B1022C09D101E0E6 -:106F8000012306E00D7CEE0703D025F00105012367 -:106F90000D742146F0BC03F025BF1A80F0BC704789 -:106FA0002DE9FE4F91461A881C468A468046FAB162 -:106FB00002AB494603F08DF8050019D04046A61CE7 -:106FC000278809F039FE3246072629463B460096B7 -:106FD00009F047FA20882346CDE900504A46514639 -:106FE0004046FFF7C3FF002020800120BDE8FE8F50 -:106FF0000020FBE72DE9F04786B09146DDE90E461B -:107000000F46824603AA05A904A8109D8DE8070033 -:107010009846324621465046FFF77BFF049909B156 -:10702000012200E000222A70002818D1F94A03AB9F -:107030001060059A009104F11400CDE901204A4640 -:107040003946504606F0A3F8A8B1092811D2DFE866 -:1070500000F005080510100A0C0C0E00002006B008 -:1070600068E71120FBE70720F9E70820F7E70D2084 -:10707000F5E70320F3E7BDF80C100498CDE9000113 -:107080004346324621465046FFF770FFE6E72DE9BA -:10709000F04389B00D46DDE9108781461C4616464F -:1070A000142103A81DF025F9012002218DF81010EC -:1070B0008DF80C008DF81170ADF8146064B1A278F1 -:1070C000D20709D08DF81600E088ADF81A00A08824 -:1070D000ADF81800A068079008A80095CDE9011048 -:1070E000424603A948466B68FFF784FF09B0BDE834 -:1070F000F083F0B58BB0002406460694079407276A -:10710000089405A80994019400970294CDE90340DE -:107110000D4610232246304606F046FE78B90AA8EE -:1071200006A9019400970294CDE90310BDF814302C -:1071300000222946304606F00DFC002801D0FFF75A -:1071400062FD0BB0F0BD06F0ADBA2DE9FC410C4676 -:107150008046002602F05EF9054620780D287DD293 -:10716000DFE800F0BC0713B325BD49496383AF9541 -:107170009B00A848006820B1417841F0100141709F -:10718000ADE0404602F076F9A9E00421404609F05E -:107190000FFC070000D1FFDF07F11401404605F0A6 -:1071A000D3FBA5BB13214046FDF748FC97E0042123 -:1071B000404609F0FDFB070000D1FFDFE088ADF895 -:1071C00000000020B8819DF80000010704D5C0062A -:1071D00002D5A088B88105E09DF8010040067ED563 -:1071E000A088F88105B9FFDF22462946404601F014 -:1071F00063FC022673E0E188ADF800109DF80110F1 -:1072000009060FD5072803D006280AD00AE024E093 -:107210000421404609F0CCFB060000D1FFDFA08826 -:10722000F0810226CDB9FFDF17E00421404609F0C6 -:10723000BFFB070000D1FFDF07F1140006F069FA79 -:1072400090F0010F02D1E079000648D5387C022683 -:1072500040F00200387405B9FFDF00E03EE022464E -:107260002946404601F028FC39E00421404609F057 -:107270009FFB017C002D01F00206C1F3400161710A -:10728000017C21F002010174E7D1FFDFE5E702266E -:107290000121404602F020F921E00421404609F096 -:1072A00087FB0546606800902089ADF80400012244 -:1072B0006946404602F031F9287C20F0020028742B -:1072C0000DE0002DC9D1FFDFC7E7022600214046AF -:1072D000FBF788F8002DC0D1FFDFBEE7FFDF3046A7 -:1072E000BDE8FC813EB50C0009D001466B4601AA01 -:1072F000002006F0DBFD20B1FFF785FC3EBD10202D -:107300003EBD00202080A0709DF8050002A900F07D -:107310000700FEF773FE50B99DF8080020709DF835 -:10732000050002A9C0F3C200FEF768FE08B1032001 -:107330003EBD9DF8080060709DF80500C109A07869 -:1073400061F30410A0709DF80510890961F3C30072 -:10735000A0709DF80410890601D5022100E00121EA -:1073600061F342009DF8001061F30000A07000205E -:107370003EBD70B5144606460D4651EA040005D0E0 -:1073800075B108460DF00EF878B901E0072070BD20 -:107390002946304606F0EBFD10B1BDE8704032E4FE -:1073A00054B120460CF0FEFF08B1102070BD2146FC -:1073B0003046BDE8704095E7002070BD2DE9FC5FC8 -:1073C0000C4690460546002701780822007A3E4682 -:1073D000B2EB111F7ED104F10A0100910A31821E25 -:1073E0004FF0020A04F1080B0191092A73D2DFE879 -:1073F00002F0ECDF05F427277AA9CD006888042184 -:1074000009F0D6FA060000D1FFDFB08920B152277B -:107410000726C2E07C02002051271026002C7DD0D8 -:107420006888A0800120A071A88900220099FFF738 -:10743000A0FF002873D1A8892081288AE081D1E0AB -:10744000B5F81290072824D1E87B000621D55127F2 -:1074500009F1140086B2002CE1D0A889002200991D -:10746000FFF787FF00285AD16888A08084F806A01B -:10747000A88920810120A073288A2082A4F8129074 -:10748000A88A009068884B46A969019A01F0F1FA30 -:10749000A8E0502709F1120086B2002C3ED0A8893E -:1074A00000225946FFF765FF002838D16888A08080 -:1074B000A889E080287A072813D002202073288A20 -:1074C000E081E87BC0096073A4F81090A88A00905E -:1074D000688801E083E080E04B4604F11202A9696C -:1074E000D4E70120EAE7B5F81290512709F114001A -:1074F00086B2002C66D06888042109F059FA8346C8 -:107500006888A080A88900220099FFF732FF002830 -:107510006ED184F806A0A889208101E052E067E0DE -:107520000420A073288A2082A4F81290A88A0090D0 -:1075300068884B46A969019A01F09BFAA989ABF8C2 -:107540000E104FE06888FBF786FF07466888042125 -:1075500009F02EFA064607B9FFDF06B9FFDF687BA0 -:10756000C00702D05127142601E0502712264CB341 -:107570006888A080502F06D084F806A0287B594642 -:1075800001F087FA2EE0287BA11DF9E7FE49A889C2 -:107590004989814205D1542706269CB16888A0807C -:1075A00020E053270BE06888A080A889E08019E0DC -:1075B0006888042109F0FCF900B9FFDF5527082687 -:1075C000002CF0D1A8F8006011E056270726002C07 -:1075D000F8D06888A080002013E0FFDF02E00128D7 -:1075E00008D0FFDFA8F800600CB12780668000207B -:1075F000BDE8FC9F57270726002CE3D06888A080B1 -:10760000687AA071EEE7401D20F0030009B1414304 -:10761000091D01EB4000704713B5DB4A00201071D3 -:10762000009848B10024684608F0DFFF002C02D122 -:10763000D64A009911601CBD01240020F4E770B502 -:107640000D46064686B014465C2128461CF051FEC5 -:1076500004B9FFDFA0786874A2782188284601F079 -:1076600042FA0020A881E881228805F11401304601 -:1076700005F04FF96A460121304606F0E2FA19E0BA -:107680009DF80300000715D5BDF806103046FFF73A -:1076900030FD9DF80300BDF8061040F010008DF895 -:1076A0000300BDF80300ADF81400FF233046059A2F -:1076B00006F028FC684606F0D0FA0028E0D006B0B4 -:1076C00070BD10B50C4601F1140005F059F90146E2 -:1076D000627C2046BDE8104001F03ABA70B505461C -:1076E000042109F065F9040000D1FFDF04F1140161 -:1076F0000C46284605F028F921462846BDE870408A -:1077000005F029B970B58AB00C460646FBF7A3FE12 -:10771000050014D02878222827D30CB1A08890B176 -:1077200001208DF80C0003208DF8100000208DF84A -:10773000110054B1A088ADF81800206807E043F2AA -:1077400002000AB070BD0920FBE7ADF818000590F3 -:107750000421304609F02CF9040000D1FFDF04F1C8 -:10776000140005F024F9000701D40820E9E701F02E -:1077700051FE60B108A802210094CDE9011095F8EE -:10778000232003A930466368FFF734FCD9E71120B2 -:10779000D7E72DE9F04FB2F802A0834689B015462D -:1077A00089465046FBF757FE07460421504609F02C -:1077B000FFF80026044605964FF002080696ADF83D -:1077C0001C6007B9FFDF04B9FFDF4146504603F0F4 -:1077D00070FE50B907AA06A905A88DE80700424621 -:1077E000214650466368FFF794FB674807AB066085 -:1077F000DDE9051204F11400CDF80090CDE9032075 -:10780000CDE9013197F82320594650466B6805F0C1 -:1078100017F906000AD0022E04D0032E14D0042E2D -:1078200000D0FFDF09B03046BDE8F08FBDF81C0086 -:107830000028F7D00599CDE9001042462146504670 -:107840006368FFF793FBEDE7687840F00800687025 -:10785000E8E72DE9F04F9BB004464FF000084A4896 -:10786000ADF85480ADF83080ADF85080A0F80880B5 -:10787000ADF81480ADF81880ADF82080ADF81C800C -:10788000007916460D464746012808D0022806D042 -:10789000032804D0042802D008201BB0C4E72046E7 -:1078A0000CF03CFDD0BB28460CF038FDB0BB606846 -:1078B0000CF081FD90BB606848B1608921898842E5 -:1078C00002D8B1F5007F01D90C20E6E780460BAA6B -:1078D00006A92846FFF70FFA0028DED168688078ED -:1078E000C0F34100022808D19DF8190010F0380FAC -:1078F00003D028690CF056FD80B905A92069FFF76F -:10790000B2F90028C9D1206950B1607880079DF88C -:10791000150000F0380002D5D0B301E011E0B8BB8B -:107920009DF8140080060ED59DF8150010F0380F54 -:1079300003D060680CF036FD18B960680CF03BFDB0 -:1079400008B11020A9E707A96069FFF78CF90028A2 -:10795000A3D1606940B19DF81D0000F00701012925 -:107960003FD110F0380F3CD008A9A069FFF77BF990 -:10797000002892D19DF81C00800632D49DF820008A -:1079800080062ED4A06904E07C02002014000020B0 -:1079900027E040B19DF8210000F00701012920D126 -:1079A00010F0380F1DD0E06818B10078C8B11C285D -:1079B00017D20EAA611C2046FFF7C4F90120B94670 -:1079C00060F30F27BA4607468DF84E0042F60300D3 -:1079D000ADF84C000DF13B0217A928680AF089FDAB -:1079E00008B1072059E79DF85C0016A9CDF8009072 -:1079F000C01CCDE9019100F0FF0B00230BF2012226 -:107A0000514613A806F060F8F0BBBDF85800099085 -:107A1000FE482A8929690092CDE901106B89BDF8D9 -:107A20002C202868069906F04FF801007ED12078B6 -:107A30004FF0020AC10601D480062BD5ADF80C9098 -:107A4000606950B907A906A8FFF7ADF99DF81D00B8 -:107A500020F00700401C8DF81D009DF81C008DF8DB -:107A60004E7040F0C8008DF81C0042F60210ADF8D0 -:107A70004C000CA903AACDF800A0CDE901210023F8 -:107A800040F2032213A800E01EE0079906F01CF85C -:107A900001004BD1DD484D4608385B460089ADF802 -:107AA00039000EA8CDE90290CDF80490CDF81090E1 -:107AB0004FF007090022CDF80090BDF858104FF69E -:107AC000FF7005F047FF10B1FFF79DF8E5E69DF860 -:107AD0003800000625D52946012060F30F218DF8D6 -:107AE0004E704FF42450ADF84C00ADF81050627851 -:107AF0009DF81000002362F300008DF810006278FA -:107B0000CDF800A0520862F341008DF8100004AADD -:107B1000CDE9012540F2032213A805F0D5FF0100AD -:107B200004D1606888B32069A8B900E086E005A99F -:107B300006A8FFF738F96078800706D49DF815008D -:107B400020F038008DF8150005E09DF8140040F095 -:107B500040008DF814008DF84E7042F60110ADF81B -:107B60004C00208940F20121B0FBF1F201FB12022E -:107B7000606814ABCDF80080CDE90103002313A8A1 -:107B8000059905F0A1FF010058D12078C00729D040 -:107B9000ADF80C50A06950B908A906A8FFF703F981 -:107BA0009DF8210020F00700401C8DF821009DF871 -:107BB00020008DF84E7040F040008DF8200042F615 -:107BC0000310ADF84C0015A903AACDF800A0CDE92B -:107BD0000121002340F2032213A8089905F074FF45 -:107BE00001002BD1E06868B32946012060F30F2122 -:107BF0008DF84E7042F60410ADF84C00E06800239A -:107C000002788DF8602040788DF86100E06818AA4D -:107C10004088ADF86200E06800798DF86400E068A3 -:107C2000C088ADF86500CDF80090CDE901254FF48E -:107C3000027213A805F048FF010003D0099800F074 -:107C4000B3FF2AE6714803210838017156B1008953 -:107C50003080BDF850007080BDF83000B080BDF8B5 -:107C60005400F080002018E670B501258AB0164651 -:107C70000B46012802D0022816D104E08DF80E50E0 -:107C80004FF4205003E08DF80E5042F60100ADF89D -:107C90000C005BB10024601C60F30F2404AA08A947 -:107CA00018460AF026FC18B107204AE5102048E5DE -:107CB00004A99DF820205548CDE90021801E02909E -:107CC0000023214603A802F2012205F0FDFE10B1B7 -:107CD000FEF799FF35E54D4808380EB1C18831806F -:107CE000057100202DE5F0B593B0074601268DF80B -:107CF0003E6041F60100ADF83C0012AA0FA93046E3 -:107D0000FFF7B2FF002848D1404C0025083CE7B3FC -:107D10001C2102A81CF0EDFA9DF808008DF83E60C9 -:107D200040F020008DF8080042F60520ADF83C0038 -:107D30000E959DF83A00119520F00600801C8DF8F4 -:107D40003A009DF838006A4620F0FF008DF83800B0 -:107D50009DF8390009A920F0FF008DF839000420B2 -:107D6000ADF82C00ADF830000EA80A9011A80D90C7 -:107D70000FA80990ADF82E5002A8FFF76AFD002861 -:107D80000BD1BDF80000608100E008E0BDF8040000 -:107D9000A081401CE0812571002013B0F0BD6581F9 -:107DA000A581BDF84800F4E72DE9F74F1749A0B0C9 -:107DB0000024083917940A79A146012A04D0022A1E -:107DC00002D0082023B02FE5CA88824201D00620C5 -:107DD000F8E721988A46824201D10720F2E7012084 -:107DE0002146ADF848004FF6FF7860F30F21ADF85B -:107DF0004A808DF86E0042F6020B06918DF87240B3 -:107E0000ADF86CB0ADF870401CA901E08402002010 -:107E10001391ADF8508012A805F043FF00252E46BF -:107E20002F460DAB072212A9404605F03DFF78B161 -:107E30000A285DD195B38EB3ADF86450ADF8666095 -:107E40009DF85E008DF8144019AC012864D06BE0F9 -:107E50009DF83A001FB3012859D1BDF83810594593 -:107E60001FD118A809A901940294CDE90310072095 -:107E70000090BDF8361010230022404605F094FF14 -:107E8000B0BBBDF86000042801D006284AD1BDF877 -:107E90002410219881423AD10F2093E73AE001283B -:107EA00035D1BDF83800B0F5205F03D042F60101AE -:107EB00088422CD1BAF80600BDF83610884201D1AC -:107EC000012700E0002705B19EB1219881421ED113 -:107ED00018A809AA01940294CDE903200720009074 -:107EE0000D4610230022404605F05EFF00B902E077 -:107EF0002DE04E460BE0BDF86000022801D01028AE -:107F000010D1C0B217AA09A90AF0D4FA50B9BDF825 -:107F1000369086E7052055E705A917A8221D0AF027 -:107F2000E8FA08B103204DE79DF814000023001D76 -:107F3000C2B28DF8142022980092CDE901401BA80E -:107F4000069905F0C1FD10B902228AF80420FEF757 -:107F50005AFE37E710B50B46401E88B084B205AA1A -:107F600000211846FEF7EEFE00200DF1080C06AACF -:107F700005A901908CE8070007200090012300224A -:107F800021464FF6FF7005F0E5FC0446BDF81800E9 -:107F9000012800D0FFDF2046FEF735FE08B010BDF7 -:107FA000F0B5FF4F044687B038790E46032804D059 -:107FB000042802D0082007B0F0BD04AA03A9204677 -:107FC000FEF799FE0500F6D160688078C0F34100A5 -:107FD00002280AD19DF80D0010F0380F05D0206955 -:107FE0000CF0E0F908B11020E5E7208905AA216925 -:107FF0008DE807006389BDF810202068039905F01B -:1080000063FD10B1FEF7FFFDD5E716B1BDF8140012 -:108010003080042038712846CDE7F8B50C000646BC -:108020000BD001464FF6FF7500236A46284605F03F -:108030003DFF20B1FEF7E7FDF8BD1020F8BD694611 -:108040002046FEF710FE0028F8D1A078314600F057 -:1080500001032846009A05F055FFEBE730B587B0DD -:10806000144600220DF1080C05AD01928CE82C009D -:10807000072200920A46014623884FF6FF7005F05A -:1080800069FCBDF814102180FEF7BDFD07B030BDBE -:1080900070B50D46042108F08BFC040000D1FFDF11 -:1080A000294604F11400BDE8704004F079BC70B5B5 -:1080B0000D46042108F07CFC040000D1FFDF2946B6 -:1080C00004F11400BDE8704004F08DBC70B50D469D -:1080D000042108F06DFC040000D1FFDF294604F103 -:1080E0001400BDE8704004F0A5BC70B5054604213D -:1080F00008F05EFC040000D1FFDF2146284623681B -:10810000BDE870400122FEF74BBF70B50646042162 -:1081100008F04EFC040000D1FFDF04F1140004F06D -:108120002FFC401D20F0030511E0011D00880022F6 -:10813000431821463046FEF733FF00280BD0607C01 -:10814000ABB2684382B2A068011D08F0EEFAA068E5 -:1081500041880029E9D170BD70B50546042108F0B9 -:1081600027FC040000D1FFDF214628466368BDE8F4 -:1081700070400222FEF714BF70B50E46054601F0AE -:1081800049F9040000D1FFDF01202072667265808A -:10819000207820F00F00001D20F0F000403020700B -:1081A000BDE8704001F039B910B50446012900D08E -:1081B000FFDF2046BDE810400121FAF713B92DE991 -:1081C000F04F97B04FF0000A0C008346ADF814A0B2 -:1081D000D04619D0E06830B1A068A8B10188ADF8E8 -:1081E0001410A0F800A05846FBF735F9070043F239 -:1081F000020961D0387822285CD30421584608F05F -:10820000D7FB050005D103E0102017B0BDE8F08FC3 -:10821000FFDF05F1140004F0B3FB401D20F003065E -:10822000A078012803D0022801D00720EDE721889B -:1082300007AA584605F005FD30BB07A805F00DFD5F -:1082400010BB07A805F009FD48B99DF826000128D4 -:1082500005D1BDF82400A0F52451023902D04FF415 -:108260005050D2E7E068B0B1CDE902A007200090FD -:1082700005AACDF804A00492A2882188BDF8143084 -:10828000584605F067FB10B1FEF7BDFCBDE7A168DD -:10829000BDF8140008809DF81F00C00602D543F207 -:1082A0000140B2E70B9838B1A1780078012905D0D8 -:1082B00080071AD40820A8E74846A6E7C007F9D0E7 -:1082C00002208DF83C00A8684FF00009A0B1697C3D -:1082D0004288714391420FD98AB2B3B2011D08F0AE -:1082E000DAF98046A0F800A006E003208DF83C00F3 -:1082F000D5F800804FF001099DF8200010F0380FEC -:1083000000D1FFDF9DF820002649C0F3C2000844D9 -:1083100097F8231010F8010C884201D90F2074E758 -:108320002088ADF8400014A90095CDE9019143469D -:1083300007220FA95846FEF75DFE002891D19DF84F -:10834000500050B9A078012807D1687CB3B27043BF -:1083500082B2A868011D08F0B2F9002055E770B597 -:10836000064615460C460846FEF70CFC002805D1CB -:108370002A4621463046BDE8704075E470BD13E5DD -:1083800070B51E4614460D000ED06CB1616859B12F -:1083900060B10349C988814208D0072070BD000040 -:1083A0007C020020FA2F00001020F7E72068FEF77B -:1083B000E9FB0028F2D1324621462846BDE870404C -:1083C000FFF747BA70B515460C0006D038B1FE4924 -:1083D0000989814203D00720E0E71020DEE720680A -:1083E000FEF7D0FB0028D9D129462046BDE87040D1 -:1083F000D6E570B5064686B00D46144610460BF01D -:10840000B3FFD0BB60680BF0D6FFB0BBA6F57F40D2 -:10841000FF3803D03046FBF71EF880B12846694686 -:10842000FEF7E3FC00280CD19DF810100F2008295E -:108430003CD2DFE801F008060606060A0A0843F205 -:10844000020006B0AAE70320FBE79DF8021001290D -:1084500008D1BDF80010B1F5C05FF2D06FF4C05282 -:10846000D142EED09DF8061001290DD1BDF80410BF -:10847000A1F52851062907D200E028E0DFE801F045 -:10848000030304030303DCE79DF80A1001290ED15E -:10849000BDF80810B1F5245FD3D0A1F524510239FD -:1084A000CFD00129CDD0022901D1CAE7FFDF606812 -:1084B00078B9002305AA2946304605F0F7FC10B12B -:1084C000FEF7A1FBBDE79DF81400800601D4102043 -:1084D000B7E76188224628466368FFF7BFFDB0E72B -:1084E0002DE9F043814687B08846144610460BF0CC -:1084F0003BFF18B1102007B0BDE8F083002306AAA7 -:108500004146484605F0D2FC18B100BFFEF77BFBA0 -:10851000F1E79DF81800C00602D543F20140EAE7F2 -:108520000025072705A8019500970295CDE903507E -:1085300062884FF6FF734146484605F035FC060059 -:1085400013D160680BF010FF60B960680195CDE948 -:10855000025000970495238862884146484605F0FA -:1085600023FC0646BDF8140020803046CEE739B122 -:10857000954B0A889B899A4202D843F203007047C0 -:108580001DE610B586B0904C0423ADF81430638915 -:1085900043B1A4898C4201D2914205D943F2030030 -:1085A00006B010BD0620FBE7ADF8101000210091C9 -:1085B0000191ADF8003002218DF8021005A9029159 -:1085C00004A90391ADF812206946FFF7F8FDE7E72B -:1085D0002DE9FC4781460E4608460BF09FFE88BBFE -:1085E0004846FAF738FF5FEA00080AD098F800001A -:1085F000222829D30421484608F0DAF9070005D1DA -:1086000003E043F20200BDE8FC87FFDF07F114003E -:1086100004F0CDF905463078012803D0022804D0B3 -:108620000720F0E7A8070FD502E015F01C0F0BD0CC -:10863000B079341DC00709D0E08838B1A0680BF0CC -:108640006DFE18B11020DEE70820DCE732782088C4 -:10865000002628B3A0F201130721112B18D20CD247 -:10866000DFE803F00B090D0B1D0B121D100B0B1D8A -:108670001D1D1D0B1D00022A11D10846C3E7012A4A -:10868000FBD00CE02A0700E0EA06002AF5DA06E053 -:10869000A0F5C0721F2A02D97D3A022AEDD8C6B2CF -:1086A00000F0B8FE50B198F82300CDE90006FA8931 -:1086B000234639464846FEF7EAFCA4E71120A2E724 -:1086C0002DE9F04F8BB01F4615460C468346002619 -:1086D000FAF7C1FE28B10078222805D208200BB095 -:1086E00094E543F20200FAE7B80801D00720F6E764 -:1086F000032F00D100274FF6FF79CCB1022D73D3A1 -:1087000020460BF058FE30B904EB0508A8F1010033 -:108710000BF051FE08B11020E1E7AD1EAAB22146D0 -:10872000484605F06DFC38F8021C88425CD1ADB2B9 -:108730002549B80702D58889401C00E001201FFAAE -:1087400080F8F80701D08F8900E04F4605AA41461E -:10875000584605F076FA4FF0070A4FF00009ACB31F -:10876000204608E0408810283ED8361D304486B2A6 -:10877000AE4239D2A01902884245F3D354E000BF7B -:108780009DF8170002074FD584B304EB0608361D89 -:10879000B8F80230B6B2102B26D89A19AA4223D8BC -:1087A000B8F8002091421FD1C00620D5CDE900A91C -:1087B0000DF1080C0AAAA11948468CE80700B8F880 -:1087C00000100022584603E07C0200202CE00BE061 -:1087D00005F0C0F810B1FEF716FA80E7B8F802000D -:1087E000BDF82810884202D00B2078E704E0B8F8E2 -:1087F0000200304486B206E0C00604D55846FEF7B3 -:1088000078FC002888D19DF81700BDF81A1020F0D8 -:1088100010008DF81700BDF81700ADF80000FF2319 -:108820005846009A05F06EFB05A805F016FA18B92F -:10883000BDF81A10B942A3D90421584608F0B8F877 -:10884000040000D1FFDFA2895AB1CDE900A94D464D -:10885000002321465846FEF71AFC0028BDD1A58109 -:108860003DE700203BE72DE9FF4F8BB01E46170088 -:108870000D464FF0000412D0B00802D007200FB010 -:10888000C4E4032E00D100265DB108460BF08AFD3A -:1088900028B93888691E08440BF084FD08B11020FF -:1088A000EDE7C74AB00701D5D18900E00121F00703 -:1088B0004FF6FF7802D0D089401E00E0404686B2D5 -:1088C00006AA0B9805F0BDF94FF000094FF0070B11 -:1088D0000DF1140A39E000BF9DF81B00000734D5E4 -:1088E000CDF80490CDF800B0CDF80890CDE9039A0A -:1088F000434600220B9805F057FA60BB05B3BDF85C -:1089000014103A8821442819091D8A4230D3BDF831 -:108910001E2020F8022BBDF8142020F8022BCDE9F0 -:1089200000B9CDE90290CDF810A0BDF81E10BDF839 -:10893000143000220B9805F037FA08B103209EE7A7 -:10894000BDF814002044001D84B206A805F085F986 -:1089500020B10A2806D0FEF756F990E7BDF81E10A0 -:10896000B142B9D934B17DB13888A11C884203D253 -:108970000C2084E7052082E722462946404605F080 -:108980003FFB014628190180A41C3C80002076E7AB -:1089900010B504460BF0E8FC08B1102010BD884863 -:1089A000C0892080002010BDF0B58BB00D46064672 -:1089B000142103A81BF09DFC01208DF80C008DF8FC -:1089C000100000208DF81100ADF814503046FAF771 -:1089D00042FD48B10078222812D30421304607F026 -:1089E000E7FF040005D103E043F202000BB0F0BD45 -:1089F000FFDF04F11400074603F0D9FF800601D41D -:108A00000820F3E7207C022140F00100207409A82F -:108A10000094CDE90110072203A930466368FEF7F0 -:108A2000E9FA20B1217C21F001012174DEE7294619 -:108A30003046F9F7C8FC08A9384603F0A7FF00B193 -:108A4000FFDFBDF82040172C01D2172000E02046A0 -:108A5000A84201D92C4602E0172C00D21724214647 -:108A60003046FFF724FB21463046F9F7D2F90020C3 -:108A7000BCE7F8B51C4615460E46069F08F0CAF836 -:108A80002346FF1DBCB231462A46009407F0B5FCD0 -:108A9000F8BD70B50C4605460E2120461BF007FCBC -:108AA000002020802DB1012D01D0FFDF76E40620CB -:108AB00000E00520A07171E410B5488008781346E5 -:108AC00020F00F00001D20F0F00080300C460870F0 -:108AD0001422194604F108001BF0AFFB00F09DFCC6 -:108AE0003748046010BD2DE9F047DFF8D890491DE4 -:108AF000064621F0030117460C46D9F8000007F09E -:108B000092FD050000D1FFDF4FF000083560A5F8A9 -:108B100000802146D9F8000007F085FD050000D14E -:108B2000FFDF7560A5F800807FB104FB07F1091D28 -:108B30000BD0D9F8000007F076FD040000D1FFDF6C -:108B4000B460C4F80080BDE8F087C6F80880FAE792 -:108B50002DE9F0411746491D21F00302194D064643 -:108B600001681446286807F089FD22467168286864 -:108B700007F084FD3FB104FB07F2121D03D0B1687A -:108B8000286807F07BFD042007F0BAFE04460420A5 -:108B900007F0BEFE201A012804D12868BDE8F04184 -:108BA00007F036BDBDE8F08110B50C4605F015F8AC -:108BB00000B1FFDF2046BDE81040FEF724B80000FA -:108BC0007C0200201400002038B50C468288817B8E -:108BD00019B14189914200D90A462280C188121DEB -:108BE00090B26A4606F092FFBDF80000032800D359 -:108BF0000320C1B2208800F0A3FF38BD38B50C4671 -:108C00008288817B19B10189914200D90A4622806C -:108C1000C188121D90B26A4606F078FFBDF80000C8 -:108C2000022800D30220C1B2208800F089FF401C36 -:108C3000C0B238BD2DE9FE4F0C46FD4981464022A9 -:108C4000D1E90201CDE9010109F1030020F003019E -:108C5000C91C21F0030100916846114607F0C5FCCC -:108C6000F44E002C02D1F44A00999160009901441D -:108C70000091357F05F1010504D1E8B209F0C0FB90 -:108C800000B1FFDF009800EB0510C01C20F00301CD -:108C900000915CB9707AB27A1044C2B200200870B8 -:108CA000308C80B204F021FE00B1FFDF0098316A01 -:108CB000084400902146684600F00DFF0098C01C53 -:108CC00020F003000090B37AF27A717A04B10020A8 -:108CD00007F081FD0099084400902146684600F0A5 -:108CE0003AFF00273D46B24696F801800CE0284640 -:108CF00000F0D4FE064681788088F9F721F9717872 -:108D00006D1C00FB0177EDB24545F0D10098C01C09 -:108D100020F00300009004B100203946F9F71BF958 -:108D200000990027084400903D469AF801800CE025 -:108D3000284600F0B3FE0646C1788088FEF763FC43 -:108D400071786D1C00FB0177EDB24545F0D10098BC -:108D5000C01C20F00300009004B100203946FEF74B -:108D60005BFC00994FF000080844009045469AF8D3 -:108D700001700EE0284600F091FE0646807B30B17F -:108D800006F1080001F0DDFE727800FB02886D1C20 -:108D9000EDB2BD42EED10098C01C20F0030000905F -:108DA00004B10020414601F0D0FE00990844009033 -:108DB0002146684600F049FE0098C01D20F00702D9 -:108DC00000922CBB9D490020FAF747F8FBF715FBF2 -:108DD000984801AA00211030F8F7CEFA00B1FFDF61 -:108DE0009AF81D00FEF77FFF00B1FFDF91484FF4B6 -:108DF000F67144301BF07DFA8E480421443080F82F -:108E0000E91180F8EA11062180F8EB1103210171C4 -:108E10000099A1EB0900BDE8FE8F70B5854C0646B0 -:108E20004434207804EB4015E078083590B9A01957 -:108E300090F8E80100280ED0A0780F2800D3FFDFBB -:108E4000202128461BF055FA687866F30200687006 -:108E50000120E070284670BD2DE9F04105460C4622 -:108E600000270078052190463E46B1EB101F00D048 -:108E7000FFDF287A50B101280ED0FFDFA8F800608C -:108E80000CB1278066800020BDE8F081012709260B -:108E900074B16888A08008E00227142644B168886D -:108EA000A0802869E060A88A2082287B2072E5E7FC -:108EB000A8F80060E7E710B55F4C6068C11D21F0BD -:108EC0000701814200D0FFDF5A48012100220170D2 -:108ED00042700172417203238372C1720273027481 -:108EE000052202831F224283417455A242610A2255 -:108EF000027741774FF4B06101626168416010BD53 -:108F000030B54D4C1568636810339D4202D2042081 -:108F1000136030BD474B5D785A6802EB0512107044 -:108F200051700320D080172090800120D070907065 -:108F3000002090735878401C587060681030606052 -:108F4000002030BD70B506463A480024457807E059 -:108F5000204600F0A3FD0178B14204D0641CE4B2C5 -:108F6000AC42F5D1002070BDF7B5074608780C4635 -:108F700010B3FFF7E7FF0546A7F12006202F06D024 -:108F8000052E19D2DFE806F00F2B2B151A0000F082 -:108F900090FD0DB1697800E00021401AA17880B2FF -:108FA0000844FF2808D8A07830B1A088022824D22D -:108FB00002E06088172820D20720FEBD207AE0B1A9 -:108FC00061881729F8D3A1881729F5D3A179002939 -:108FD000F2D0E1790029EFD0402804D9ECE7242F22 -:108FE0000BD1207A48B161884FF6FB70814202D8DC -:108FF000A188814201D90420FEBD65B9207802AA6A -:109000000121FFF77DFF0028F6D12078FFF79AFFB6 -:10901000050000D1FFDF052E25D2DFE806F003189A -:109020001B151E00A0786870A088E8801CE0000076 -:10903000B0460200980300201C0000200000002021 -:109040006E524635780000006088A8800CE0A07859 -:10905000A87009E0A078E87006E054F8020FA86054 -:109060006068E86000E0FFDF0020FEBD1A2835D010 -:109070000DDC132832D2DFE800F01B31203131271C -:109080002723252D313129313131312F0F0030285F -:1090900002D003DC1E2821D1072070473A38092866 -:1090A0001CD2DFE800F0151B0F1B1B1B1B1B07004E -:1090B0000020704743F20400704743F202007047FB -:1090C000042070470D2070470F207047082070471C -:1090D0001120704713207047062070470320704707 -:1090E00010B5007800F0010006F001FDBDE8104069 -:1090F000BCE70EB5017801F001018DF80010417850 -:1091000001F001018DF801100178C1F340018DF8E3 -:1091100002104178C1F340018DF8031001788908ED -:109120008DF80410417889088DF8051081788DF844 -:109130000610C1788DF8071000798DF80800684690 -:1091400005F0ACFAFFF792FF0EBD2DE9F84FDFF8FE -:10915000F883FE4C00261FE0012000F03FFD0120B7 -:10916000FFF75BFE054640214746D8F8080007F0A8 -:109170005AFA686000B9FFDF686805F03EF8A8B1E8 -:109180002846FAF75AFC284600F02EFD20B9402266 -:109190006968B86807F072FA94F9E9010428DBDA23 -:1091A000022007F0ADFB07460025A6E040226968D3 -:1091B000D8F8080007F062FAF2E7B8F80210404663 -:1091C000491C89B2A8F80210B94201D3002141809C -:1091D0000221B8F8020007F0EBFB002865D0B8F8D0 -:1091E0000200694606F0F1FBFFF740FF00B1FFDF28 -:1091F0009DF8000078B1B8F8020007F01DFD5FEAA5 -:10920000000900D1FFDF484606F08BFF18B1B8F81F -:10921000020002F03DF9B8F8020007F0FBFC5FEA3B -:10922000000900D1FFDF484606F073FFE8BB0321C9 -:10923000B8F8020007F0BCFB5FEA000B48D1FFDF83 -:1092400046E000BFDBF8100010B10078FF2849D0DD -:10925000022000F0C3FC0220FFF7DFFD82464846F3 -:1092600007F063F8CAF8040000B9FFDFDAF8040079 -:1092700007F02BF9002100900170B8F80210504659 -:10928000AAF8021001F00AFE484607F020F900B9DA -:10929000FFDF504600F0A8FC18B99AF8010000075B -:1092A00004D50099CBF8101012E024E0DBF8100090 -:1092B00038B10178491C11F0FF01017008D1FFDFBE -:1092C00006E000221146484600F0BDFB00B9FFDF72 -:1092D00094F9EA01022805DBB8F8020001F0A3FDC9 -:1092E0000028AFD194F9E901042804DB484607F0CF -:1092F00052F900B101266D1CEDB2BD4204D294F9C1 -:10930000EA010228BFF659AF002E7FF423AFBDE873 -:10931000F84F032000F062BC10B58B4CE060086889 -:109320002061AFF2D91002F012FD607010BD8748C5 -:1093300000214438017084480170854941607047BC -:1093400070B505464FF080500C46D0F8A410491C6B -:1093500005D1D0F8A810C9430904090C0BD050F866 -:10936000A01F01F001012970416821608068A08080 -:10937000287830B970BD062120460AF0AAFC0120E9 -:109380002870607940F0C000607170BD70B54FF01A -:1093900080540D46D4F88010491C0BD1D4F88410A9 -:1093A000491C07D1D4F88810491C03D1D4F88C107B -:1093B000491C0CD0D4F880100160D4F884104160AE -:1093C000D4F888108160D4F88C10C16002E01021BC -:1093D0000AF07FFCD4F89000401C0BD1D4F8940024 -:1093E000401C07D1D4F89800401C03D1D4F89C004D -:1093F000401C09D054F8900F286060686860A0682D -:10940000A860E068E86070BD2846BDE870401021A3 -:109410000AF05FBC4D480079FFE470B54B4CE07832 -:1094200030B3207804EB4010407A00F0070020446D -:1094300090F9E801002800DCFFDF2078002504EB2C -:109440004010407A00F00700011991F8E801401E31 -:1094500081F8E8012078401CC0B220700F2800D1AC -:109460002570A078401CA0700AF096FBE57070BDD6 -:10947000FFDF70BD3EB50546032107F099FA0446AB -:10948000284607F0C7FB054604B9FFDF206918B17D -:109490000078FF2800D1FFDF01AA6946284600F0C6 -:1094A000D2FA60B9FFDF0AE0002202A9284600F0E4 -:1094B000CAFA00B9FFDF9DF8080000B1FFDF9DF890 -:1094C0000000411E8DF80010EED2206901998842FB -:1094D00001D1002020613EBD70B50546A0F57F405A -:1094E0000C46FF3800D1FFDF012C01D0FFDF70BD3B -:1094F000FFF790FF040000D1FFDF207820F00F007D -:10950000401D20F0F0005030207065800020207257 -:1095100001202073BDE870407FE72DE9F041164639 -:109520000D460746FFF776FF040000D1FFDF2078E5 -:1095300020F00F00401D20F0F000503020706780B8 -:1095400001202072286805E01C000020DC030020B8 -:10955000C81400202061A888A0822673BDE8F041CD -:109560005BE77FB5FFF7EEFC040000D1FFDF02A947 -:109570002046FFF729FB054603A92046FFF73EFBDF -:109580008DF800508DF80100BDF80800001DADF801 -:109590000200BDF80C00001DADF80400E088ADF835 -:1095A0000600684606F08CFA002800D0FFDF7FBD79 -:1095B0002DE9F047DFF8FC930546002799F80000F5 -:1095C00010B10820BDE8F08728460AF0CDFE08B1AA -:1095D0001020F7E7F84C207808B9FFF76CFCA07A68 -:1095E000617A0844C6B200F064FAB04207D2301A79 -:1095F000C1B22A460020FFF783FC0700E2D1D9F868 -:1096000004004E46C01C20F00300C9F8040000F01E -:1096100040FB716800EB010801214046FFF70AFB9F -:10962000064629684044884202D8B6F5803F15D3E3 -:1096300028600020FFF786FC05000DD005F113001F -:10964000D9F8041020F003004E46884200D0FFDF16 -:109650006078401E607075600420B3E700214046CA -:10966000FFF7E8FA0446A64200D0FFDF04EB08014A -:10967000C9F8041029604FF6FF71A9F80210012102 -:1096800089F8001038469DE72DE9F0410446C948A5 -:1096900017460E46007810B10820BDE8F081084654 -:1096A0000AF03CFE08B11020F7E7C34D287808B94E -:1096B000FFF701FC601E1E2807D8012C22D130784C -:1096C000FE281FD828770020E7E7A4F120001F28F4 -:1096D00005D8E0B23A463146BDE8F04144E4A4F191 -:1096E00040001F2805D831462046BDE8F04100F073 -:1096F000A3BAA4F1A0001F2804D80020A02C03D0F6 -:10970000A12C06D00720C8E7317801F00101697764 -:10971000C3E731680922F82901D38B0701D010462D -:10972000BBE76B7C03F00303012B04D16B8BD733B6 -:109730009CB28C42F3D82962AFE72DE9F04781460D -:109740000E4608460AF010FE48B948460AF02AFEBE -:1097500028B909F1030020F00301494501D0102088 -:1097600030E795484FF0000A4430817869B141787C -:10977000804600EB411408343788324600212046E9 -:1097800000F040FA050004D027E0A6F800A005206C -:1097900018E7B9F1000F24D03088B84201D90C2560 -:1097A0001FE0607800F00705284600F017FA08EB84 -:1097B0000507324697F8E8014946401C87F8E8015A -:1097C000204607F5F47700F01DFA05463878401E6C -:1097D0003870032000F002FA2DB10C2D01D0A6F84C -:1097E00000A02846EEE66078724E00F007010129DD -:1097F00023D002290CD0032933D0FFDF98F80110C1 -:109800004046491CC9B288F801100F2934D035E010 -:10981000616821B1000702D46088FFF72BFE98F839 -:10982000EA014746012802D1707802F0AFFA97F9B1 -:10983000EA010428E2DBFFDFE0E7616819B14022BA -:10984000B06806F01BFF98F8E9014746032802D1EB -:10985000707802F09BFA97F9E9010428CEDBFFDF6C -:10986000CCE7C00602D56088FFF704FE98F9EB014B -:109870000628C3DBFFDFC1E780F801A08178491E1D -:109880008170617801F0070101EB080090F8E811A0 -:10989000491C80F8E811A4E770B50D4604460AF0AB -:1098A0003DFD18B928460AF05FFD08B1102070BDD3 -:1098B00029462046BDE8704008F0D9BD70B5044681 -:1098C00015460E4608460AF029FD18B928460AF042 -:1098D0004BFD08B1102070BD022C03D0102C01D01C -:1098E000092070BD2A463146204608F0E3FD0028D5 -:1098F000F7D0052070BD70B514460D4606460AF037 -:109900000DFD38B928460AF02FFD18B920460AF097 -:1099100049FD08B1102070BD22462946304608F0A6 -:10992000E8FD0028F7D0072070BD3EB504460AF0D8 -:109930001BFD08B110203EBD684604F00FFEFFF786 -:1099400095FB0028F7D19DF806002070BDF80800AF -:109950006080BDF80A00A08000203EBD70B50546BD -:109960000C4608460AF01EFD20B93CB120680AF0FA -:10997000FBFC08B1102070BDA08828B12146284604 -:10998000BDE87040FDF7BEBE092070BD70B504464D -:109990000D4608460AF0C2FC30B9601E1E2818D8D1 -:1099A00028460AF0BBFC08B1102070BD022C05D976 -:1099B000072070BD1C0000209803002004B9FFDFC1 -:1099C000F94800EB840050F8041C2846BDE87040BC -:1099D0000847A4F120001F2805D829462046BDE8E5 -:1099E0007040FAF792BCF02CE2D1A8680AF096FC1D -:1099F0000028D9D1284606F0CBF8BDE87040FFF723 -:109A000035BB70B504460D4608460AF0ADFC30B9CA -:109A1000601E1E280DD828460AF080FC08B11020D0 -:109A2000C7E7012C01D0022C01D10620C1E7072095 -:109A3000BFE7A4F120001F28F9D829462046BDE839 -:109A40007040FAF7BABC06F033BB38B50446D748C5 -:109A5000007B00F00105D9B9F9F78BFA0DB1226846 -:109A600000E00022D2484178C06804F06EFBD04884 -:109A70001030C0788DF8000010B1012802D004E049 -:109A8000012000E000208DF80000684604F0DFFDB2 -:109A9000002D02D020682830206038BD30B5C34D7D -:109AA00004466878A04200D8FFDF686800EB041025 -:109AB00030BD70B5BD4800252C46467807E02046ED -:109AC000FFF7ECFF4078641C2844C5B2E4B2B4420E -:109AD000F5D128466DE72DE9F0410C46064600F029 -:109AE00006F907463068C01C20F00302326014BB40 -:109AF000AE483B46082124300AF0EAFA002409E087 -:109B0000082C10D2DFE804F0060408080A04040652 -:109B1000A84804E0A84802E0A84800E0A8480AF0E5 -:109B2000F7FA054600E0FFDFA54200D0FFDF641C26 -:109B3000E4B2082CE4D3306800EB07103060ACE5E9 -:109B4000021D5143452900D245210844C01CB0FBE9 -:109B5000F2F0C0B270472DE9FC5F064693484FF023 -:109B600000088B464746444690F8019022E0204684 -:109B7000FFF794FF050000D1FFDF6878694638449D -:109B8000C7B22846FFF720F8824601A92846FFF70A -:109B900035F80346BDF804005246001D81B2BDF8F9 -:109BA0000000001D80B206F081FF6A78641C00FB93 -:109BB0000288E4B24C45DAD13068C01C20F00300C2 -:109BC0003060BBF1000F00D000204246394606F05D -:109BD0007BFF316808443060BDE8FC9F7349443125 -:109BE00008710020C870704770494431CA782AB1A2 -:109BF0000A7801EB42110831814201D001207047FF -:109C0000002070472DE9F04106460078154600F027 -:109C10000F0400201080601E0F46052800D3FFDFD0 -:109C200061482A46103000EB8400394650F8043C65 -:109C30003046BDE8F041184770B50C46402802D0C8 -:109C4000412806D120E0A07861780D18E1788142A2 -:109C500001D90720ADE62078012801D91320A8E614 -:109C6000FF2D08D808F0B0FD064609F04CFF301A69 -:109C7000801EA84201DA12209BE64C4821688160D0 -:109C800021790173002094E6BDE87040084600F099 -:109C90005EB82DE9F0470027DFF810A13E463D46AB -:109CA000B9463C469AF801800AE02046FFF7F6FEE6 -:109CB0004178807B0E4410FB0155641CE4B27F1C8C -:109CC0004445F2D109EB8700C6EBC60100EB8100E9 -:109CD0009AF8092000EB850101EBC2019AF80A20ED -:109CE0009AF80B0001EBC20101EB80006AE42DE958 -:109CF000F047DFF8B8900026344699F8090099F843 -:109D00000A2099F801700244D5B299F80B2010444A -:109D100000F0FF0808E02046FFF7C0FE817B407896 -:109D200011FB0066641CE4B2BC42F4D199F809004E -:109D300099F80A10284428444044401C01B10121EC -:109D400008448419FF2C00D9FFDFE0B23AE438B5AB -:109D50000446407800F00300012803D002280BD00D -:109D6000072038BD606858B10AF025FBD0B960689B -:109D70000AF018FB20B915E060680AF0CFFA88B93C -:109D800069462046FCF71EF90028EAD1607800F009 -:109D90000300022816D19DF8000098B160680AF00F -:109DA00001FB78B1102038BDB046020098030020B6 -:109DB0001C000020B941000017AC00005D2F00001E -:109DC000F32101006189F8290DD8208988420AD839 -:109DD000607800F003020A48012A06D1D731026AEE -:109DE00089B28A4201D20920DDE794E80E0000F131 -:109DF000100585E80E000AB9002101830020D2E792 -:109E0000980300202DE9F04107461446884608468D -:109E100001F01CFD064608EB88001C22796802EB65 -:109E2000C0000D18688C58B14146384601F016FD47 -:109E3000014678680078C200082305F120000CE094 -:109E4000E88CA8B14146384601F00FFD014678681C -:109E500008234078C20005F1240006F066FC38B102 -:109E6000062121726681D0E90010C4E9031009E0DF -:109E7000287809280BD00520207266816868E06088 -:109E8000002028702046BDE8F04101F0D5BC072035 -:109E900020726681F4E72DE9F04116460D4607462B -:109EA000406801EB85011C2202EBC10144182046E9 -:109EB00001F0FDFC40B10021708865F30F2160F3D3 -:109EC0001F4107200AF0DEF909202070324629469A -:109ED0003846BDE8F04195E72DE9F0410E460746CA -:109EE00000241C21F07816E004EB8403726801EB77 -:109EF000C303D25C6AB1FFF78DFA050000D1FFDF22 -:109F00006F802A4621463046FFF7C5FF0120BDE895 -:109F1000F081641CE4B2A042E6D80020F7E770B5F7 -:109F2000064600241C21C0780AE000BF04EB84032D -:109F3000726801EBC303D5182A782AB1641CE4B215 -:109F4000A042F3D8402070BD282128461AF0AFF96E -:109F5000706880892881204670BD70B50346002056 -:109F60001C25DC780DE000BF00EB80065A6805EB8D -:109F7000C6063244167816B1128A8A4204D0401CB2 -:109F8000C0B28442F0D8402070BDF0B50446002035 -:109F90001C26E5780EE000BF00EB8007636806EB47 -:109FA000C7073B441F788F4202D15B78934204D0AD -:109FB000401CC0B28542EFD84020F0BD0078032895 -:109FC00001D000207047012070470078022801D09E -:109FD00000207047012070470078072801D000203A -:109FE0007047012070472DE9F041064688461078F9 -:109FF000F1781546884200D3FFDF2C781C27641CBB -:10A00000F078E4B2A04201D8201AC4B204EB840173 -:10A01000706807EBC1010844017821B141468847C7 -:10A0200008B12C7073E72878A042E8D1402028704E -:10A030006DE770B514460B880122A240134207D188 -:10A0400013430B8001230A22011D06F038FB047024 -:10A0500070BD2DE9FF4F81B00878DDE90E7B9A468F -:10A0600091460E4640072CD4019806F0E5FD040009 -:10A0700000D1FFDF07F1040820461FFA88F105F040 -:10A0800024FF050000D1FFDF204629466A4606F07E -:10A090006EF90098A0F80370A0F805A0284606F015 -:10A0A00014FA017869F306016BF3C71101702046B9 -:10A0B0001FFA88F105F04CFF00B9FFDF019803F0AB -:10A0C000B9FF06EB0900017F491C017705B0BDE827 -:10A0D000F08F2DE9F84F0E469A4691460746032128 -:10A0E00006F066FC0446008DDFF8B485002518B143 -:10A0F00098F80000B0421ED1384606F09DFD0700DA -:10A1000000D1FFDF09F10401384689B205F0DDFE18 -:10A11000050010D0384629466A4606F028F900980E -:10A1200000210A460180817004F054F80098C01D97 -:10A13000CAF8000021E098F80000B04216D104F1FE -:10A14000260734F8341F012000FA06F911EA090F36 -:10A1500000D0FFDF2088012340EA090020800A2286 -:10A16000391D384606F0C6FA067006E0324604F19C -:10A17000340104F12600FFF75CFF0A2188F8001083 -:10A180002846BDE8F88FFEB514460D46064602ABDC -:10A190000C220621FFF79DFF002826D0029968783F -:10A1A00012220A70801C487008224A80A8702088F9 -:10A1B00088806088C880A0880881E0884881002461 -:10A1C0000C20CDE900040523062229463046FFF77E -:10A1D00040FF2146002266F31F41F023104609F09C -:10A1E000A7FF6878801C68700120FEBDFEB514468C -:10A1F0000D460622064602AB1146FFF76AFF00280D -:10A2000012D0029B132000211870A87858700220E9 -:10A2100058809C800620CDE900010246052329468E -:10A220003046FFF716FF0120FEBD2DE9FE430C4628 -:10A23000804644E002AB0E2207214046FFF749FF6B -:10A24000002841D060681C2267788678BF1C06EB26 -:10A25000860102EBC1014518029814210170477074 -:10A260000A214180698A0181E98A4181A988818026 -:10A27000A9898181304601F0E9FA02990523072274 -:10A28000C8806F700420287000250E20CDE90005DD -:10A2900021464046FFF7DDFE294666F30F2168F3AD -:10A2A0001F41F0230022072009F042FF6078FD499A -:10A2B000801C607062682046921CFFF794FE606804 -:10A2C00080784028B6D10120BDE8FE83FEB50D465A -:10A2D000064638E002AB0E2207213046FFF7F9FEB2 -:10A2E000002835D068681C23C17801EB810203EB9C -:10A2F000C2028418029815220270627842700A2203 -:10A300004280A2894281A2888281084601F09EFA99 -:10A31000014602988180618AC180E18A0181A0881A -:10A32000B8B10020207000210E20CDE900010523E6 -:10A33000072229463046FFF78CFE6A68DA4928462C -:10A34000D21CFFF750FE6868C0784028C2D10120B7 -:10A35000FEBD0620E6E72DE9FE430C46814644E0BB -:10A36000204601F08EFAD0B302AB082207214846FE -:10A37000FFF7AFFE0028A7D060681C226578067939 -:10A38000AD1C06EB860102EBC10147180298B7F835 -:10A39000108006210170457004214180304601F093 -:10A3A00055FA0146029805230722C180A0F80480CF -:10A3B0007D70082038700025CDE90005214648460B -:10A3C000FFF747FE294666F30F2169F31F41F0238B -:10A3D0000022072009F0ACFE6078801C6070626883 -:10A3E000B2492046121DFFF7FEFD60680179402941 -:10A3F000B6D1012068E72DE9F34F83B00E4680E027 -:10A40000304601F03EFA002875D071681C2091F8A2 -:10A41000068008EB880200EBC2000C18414630466B -:10A4200001F023FA0146A078C30070684078C200AA -:10A4300004F1240006F095F907468088E18B401A64 -:10A4400080B2002581B3AA46218B814200D80846FC -:10A450008146024602AB07210398FFF73AFE01004E -:10A4600028D0BAF1000F03D0029AB88802251080D4 -:10A470008B46E28B3968A9EB05001FFA80FA0A4483 -:10A480000398009206F0D8FBED1D009A59465346FA -:10A49000009505F0E6FFE08B504480B2E083B98878 -:10A4A000884209D1012508E0FFE7801C4FF0010A2E -:10A4B00080B2C9E7002009E60025CDE90095238A8E -:10A4C000072231460398FFF7C4FDE089401EE08172 -:10A4D0008DB1A078401CA0707068F178427811FBB3 -:10A4E00002F1CAB2816901230E3006F0E8F880F863 -:10A4F00000800020E08372686D493046921DFFF7AE -:10A5000072FD7068817940297FF47AAF0120DDE522 -:10A5100070B5064648680D4614468179402910D129 -:10A5200004EB84011C2202EBC101084401F0E0F9B4 -:10A53000002806D06868294684713046BDE870401E -:10A5400059E770BDFEB50C460746002645E020469B -:10A5500001F097F9D8B360681C22417901EB8101C1 -:10A5600002EBC1014518688900B9FFDF02AB082280 -:10A5700007213846FFF7ADFD002833D002996078F7 -:10A5800016220A70801C4870042048806068407958 -:10A5900001F05CF901460298052307228180698950 -:10A5A000C1800820CDE9000621463846FFF751FD5D -:10A5B0006078801C6070A88969890844B0F5803F84 -:10A5C00000D3FFDFA88969890844A8816E81626889 -:10A5D00038492046521DFFF706FD60684179402941 -:10A5E000B5D10120FEBD30B5438C458BC3F3C70404 -:10A5F000002345B1838B641EED1AC38A6D1E1D4472 -:10A6000095FBF3F3E4B22CB1008918B1A04200D855 -:10A61000204603444FF6FF70834200D30346138065 -:10A620000C7030BD2DE9FC41074616460D464868C2 -:10A6300002EB86011C2202EBC10144186A4601A903 -:10A640002046FFF7D0FFA089618901448AB2BDF896 -:10A650000010914212D0081A00D50020608168686D -:10A66000407940280AD1204601F038F9002805D069 -:10A670006868294646713846FFF764FFBDE8FC81EB -:10A680002DE9FE4F8946804615465088032106F085 -:10A690008FF98346B8F8020040280DD240200CE024 -:10A6A00030000020BD9F0000CB9F0000D99F00001C -:10A6B000F1B80000DDB80000403880B282460146A3 -:10A6C000584601F0DEF800287ED00AEB8A001C22F2 -:10A6D000DBF8041002EBC0000C18204601F0E7F88C -:10A6E000002877D1B8F80000E18A88423CD8A189D7 -:10A6F000D1B348456ED100265146584601F0AEF818 -:10A70000218C0F18608B48B9B9F1020F62D3B8F8E9 -:10A7100004006083618A884226D80226A9EB0600DD -:10A720001FFA80F9B888A28B801A002814DD4946E8 -:10A73000814500DA084683B2688869680291396801 -:10A740000A44CDE9003206F065FADDE90121F61D83 -:10A75000009B009605F051FEA18B01EB090080B231 -:10A76000A083618B884207D9688803B05246594656 -:10A77000BDE8F04F01F0D9B81FD14FF009002872A1 -:10A78000B8F802006881D7E90001C5E90401608BCF -:10A79000A881284601F050F85146584601F05EF86D -:10A7A0000146DBF8040008230078C20004F1200011 -:10A7B00005F0BBFF0020A0836083A0890AF0FF02A0 -:10A7C000401EA081688800E004E003B05946BDE85F -:10A7D000F04F27E7BDE8FE8F2DE9F041064615460C -:10A7E0000F461C46184609F099FD18B9206809F073 -:10A7F000BBFD08B1102015E47168688C0978B0EBD6 -:10A80000C10F01D313200DE43946304601F026F87C -:10A810000146706808230078C20005F1200005F0A9 -:10A820004EFFD4E90012C0E900120020E3E710B5A2 -:10A830000446032106F0BCF80146007800F003004E -:10A84000022805D02046BDE8104001F114029AE428 -:10A850008A8A2046BDE81040C8E470B5044603214A -:10A8600006F0A6F8054601462046FFF774FD0028CD -:10A8700016D029462046FFF765FE002810D029464D -:10A880002046FFF723FD00280AD029462046FFF77F -:10A89000CCFC002804D029462046BDE87040AAE53B -:10A8A00070BD2DE9F0410C4680461EE0E17842780B -:10A8B00011FB02F1CAB2816901230E3005F035FFA8 -:10A8C000077860681C22C179491EC17107EB8701B6 -:10A8D000606802EBC10146183946204600F0D1FFFE -:10A8E00018B1304600F0DCFF20B16068C179002962 -:10A8F000DCD180E7FEF78EFD050000D1FFDF0A20E6 -:10A900002872384600F0A2FF68813946204600F0E0 -:10A91000ACFF0146606808234078C20006F12400BD -:10A9200005F003FFD0E90010C5E90310A5F8028087 -:10A93000284600F081FFB07800B9FFDFB078401EF4 -:10A94000B07058E770B50C460546032106F030F8A4 -:10A9500001464068C2792244C2712846BDE8704071 -:10A960009FE72DE9FE4F8246507814460F464FF080 -:10A97000000800284FD0012807D0022822D0FFDF8E -:10A980002068B8606068F86024E702AB0E220821F6 -:10A990005046FFF79EFB0028F2D0029815210523B0 -:10A9A0000170217841700A214180C0F80480C0F80C -:10A9B0000880A0F80C80628882810E20CDE9000812 -:10A9C000082221E0A678304600F040FF054606EB5D -:10A9D00086012C22786802EBC1010822465A02AB9C -:10A9E00011465046FFF775FB0028C9D00298072191 -:10A9F0000170217841700421418008218580C68042 -:10AA0000CDE9001805230A4639465046FFF721FBD9 -:10AA100087F80880DEE6A678022516B1022E13D04C -:10AA2000FFDF2A1D914602AB08215046FFF751FB7C -:10AA30000028A5D002980121022E017021784170D2 -:10AA40004580868002D005E00625EAE7A188C1801E -:10AA5000E1880181CDE90098052308223946504656 -:10AA6000D4E710B50446032105F0A2FF014600F12A -:10AA700008022046BDE8104073E72DE9F05F0C4660 -:10AA800001281DD0957992F80480567905EB85014F -:10AA90001F2202EBC10121F0030B08EB060111FBA1 -:10AAA00005F14FF6FF7202EAC10909F1030115FB36 -:10AAB0000611F94F21F0031A40B101283DD124E0DD -:10AAC0006168E57891F800804E78DFE7594678684C -:10AAD00005F0A9FD606000B9FFDF5946606819F014 -:10AAE00008FCE5705146786805F09DFD6168486195 -:10AAF00000B9FFDF6068426902EB090181616068AB -:10AB000080F800806068467017E0606852464169CE -:10AB1000786805F0B3FD5A466168786805F0AEFDC7 -:10AB2000032005F0EDFE0446032005F0F1FE201A97 -:10AB3000012802D1786805F06BFD0BEB0A00BDE837 -:10AB4000F09F02460021022097E773B5D24D0A20FC -:10AB50002870009848B100244FEA0D0005F045FD2B -:10AB6000002C01D1009969607CBD01240020F5E72B -:10AB700070B50C4615463821204619F0BAFB01265F -:10AB800066700A2104F11C0019F0B3FB05B9FFDF60 -:10AB9000297A207861F301002070A879002817D065 -:10ABA0002A4621460020FFF768FF61684020887030 -:10ABB0006168C8706168087161684871616888710E -:10ABC0006168288808816168688848816068868132 -:10ABD00070BDC878002802D0002201204DE77047E0 -:10ABE00070B50546002165F31F41002009F04AFBBE -:10ABF0000321284605F0DCFE040000D1FFDF2146DA -:10AC00002846FFF769F9002804D0207840F01000AA -:10AC10002070012070BD2DE9FF4180460E460F0CCB -:10AC2000FEF7F8FB050007D06F800321384605F0DA -:10AC3000BFFE040008D106E004B03846BDE8F0418C -:10AC40001321F9F7FBBEFFDF5FEA080005D0B8F17A -:10AC5000070F18D0FFDFBDE8FF8120782A4620F0DB -:10AC6000080020700020ADF8020002208DF80000DE -:10AC70004FF6FF70ADF80400ADF80600694638469F -:10AC8000F9F7EFFAE7E7C6F3072101EB81021C238E -:10AC9000606803EBC202805C042803D008280AD055 -:10ACA000FFDFD8E7012000904FF440432A462046BA -:10ACB00000F004FECFE704B02A462046BDE8F0418C -:10ACC000FFF7E9B82DE9F05F0027B0F80A90904649 -:10ACD0000C4605463E46B9F1400F01D2402001E046 -:10ACE000A9F140001FFA80FA287AC01E08286BD20A -:10ACF000DFE800F00D04192058363C477227102673 -:10AD0000002C6CD0D5E90301C4E902015CE0702796 -:10AD10001226002C63D00A2205F10C0104F1080070 -:10AD200019F08BFA50E071270C26002C57D0E868F8 -:10AD3000A06049E0742710269CB3D5E90301C4E95B -:10AD400002016888032105F033FE8346FEF762FBAB -:10AD500002466888508051465846FFF753F833E062 -:10AD600075270A26ECB1A88920812DE076271426C4 -:10AD7000BCB105F10C0004F1080307C883E8070023 -:10AD800022E07727102664B1D5E90301C4E9020166 -:10AD90006888032105F00CFE01466888FFF781FDF5 -:10ADA00012E01CE073270826CCB16888032105F067 -:10ADB000FFFD01460078C00606D56888FFF78CF8CD -:10ADC00010B96888F8F71DFEA8F800602CB127803C -:10ADD000A4F8069066806888A0800020AFE6A8F8F6 -:10ADE0000060FAE72DE9FC410C461E4617468046F6 -:10ADF000032105F0DDFD05460A2C0AD2DFE804F048 -:10AE000005050505050509090907042303E00623CF -:10AE100001E0FFDF0023CDE90076224629464046C7 -:10AE2000FFF717F92AE438B50546A0F57F40FF384B -:10AE300030D0284605F0EEFE040000D1FFDF2046AA -:10AE400005F073FA002815D001466A46204605F041 -:10AE50008EFA00980321B0F80540284605F0A8FDB9 -:10AE60000546052C03D0402C05D2402404E0007A8E -:10AE700080B1002038BD403CA4B2214600F001FD65 -:10AE800040B1686804EB84013E2202EBC101405AE4 -:10AE90000028EFD0012038BD300000202DE9F04F10 -:10AEA000044689B0408805F0B5FE050000D1FFDFFB -:10AEB00006AA2846616800F0BDFC069D001F81B20D -:10AEC00035F8032F6B888A4205D1042B0AD0052B55 -:10AED0001DD0062B15D022462846FFF7D1FB09B01E -:10AEE000BDE8F08F16462D1D224629463046F7F75D -:10AEF00054FA0828F3D1224629463046FCF749FC8B -:10AF0000EDE76088291D6368FAF7C8FCE7E7174694 -:10AF10006088032105F04CFD4FF000088DF8048097 -:10AF20000646ADF80680042FD9D36A79002AD6D018 -:10AF300028794FF6FF794FF01C0A13282CD008DC33 -:10AF4000012878D0062847D0072875D0122874D158 -:10AF500006E0142872D0152871D016286DD1ACE106 -:10AF60000C2F6AD1307800F00301022965D140F03E -:10AF7000080030706879B07001208DF804002889CD -:10AF8000ADF808006889ADF80A00A889ADF80C0092 -:10AF9000E889ADF80E0019E0B07890429FD1307882 -:10AFA00001079CD5062F9AD120F0080030706088E8 -:10AFB000414660F31F41002009F064F902208DF83A -:10AFC0000400ADF808902889ADF80A006088224690 -:10AFD00001A9F9F746F982E7082F80D12F89B5F842 -:10AFE0000A90402F01D2402001E0A7F1400080B23A -:10AFF00080460146304600F044FC08B3716808EB17 -:10B0000088002C2202EBC000095A4945E3D1FE48D2 -:10B0100007AAD0E90210CDE9071068798DF81C0065 -:10B0200008F0FF058DF81E5060883146FFF799FC47 -:10B030002246294639E0B6E014E03CE039E0E6E09B -:10B04000F148D0E90010CDE907106879ADF820701B -:10B050008DF81C00ADF82290608807AA3146FFF7F2 -:10B0600080FC3CE7082FB6D16889B5F808804028F5 -:10B0700001D2402000E0403887B23946304600F027 -:10B0800000FC0028A7D007EB870271680AEBC2001A -:10B090000844028A42459ED1017808299BD1407814 -:10B0A0006979884297D1F9B222463046FEF7F3FE1D -:10B0B00015E70E2F07D0CDF81C80CDF820806879D9 -:10B0C0008DF81C00C8E76989EF898B46B5F80C90AC -:10B0D0003046FEF742FFABF14001402901D3092081 -:10B0E0004AE0B9F1170F01D3172F01D20B2043E02B -:10B0F00040280ED000EB800271680AEBC2000844C1 -:10B100000178012903D1407869798842A9D00A20C1 -:10B1100032E03046FEF703FF014640282BD001EB1A -:10B12000810372680AEBC30002EB0008012288F871 -:10B1300000206A7988F8012070682A894089B8421D -:10B1400000D938462D8A03232372A282E781208208 -:10B15000A4F80C906582084600F078FB6081A8F89E -:10B160001490A8F81870A8F80E50A8F810B020464F -:10B1700000F062FBB3E6042005212172A4F80A80E6 -:10B18000E08101212173A049D1E90421CDE9072102 -:10B1900069798DF81C10ADF81E00608807AA314649 -:10B1A000FFF7DFFBE3E7062FE4D3B078904215D139 -:10B1B0003078010712D520F00800307060884146D1 -:10B1C00060F31F41002009F05DF802208DF80400B3 -:10B1D0002889ADF80800ADF80A90F7E6042130465A -:10B1E000FEF7D3FE05464028C4D00220830300901A -:10B1F00022462946304600F061FB4146608865F3EF -:10B200000F2160F31F41072009F03CF867E60E2F7D -:10B21000B0D104213046FEF7B8FE81464028A9D0BF -:10B220004146608869F30F2160F31F41072009F050 -:10B2300029F8288A0790E88900907068AF894089CA -:10B24000B84200D938468346B5F80A802889059067 -:10B25000484600F0FBFA6081079840B10220079B46 -:10B26000009022464946304600F028FB37E6B8F108 -:10B27000170F1ED3172F1CD3042020720098608252 -:10B28000E781A4F810B0A4F80C8009EB890271687A -:10B290000AEBC2000D1800990598A5F81480A5F8CE -:10B2A00018B0E9812882204600F0C6FA06202870EE -:10B2B00015E601200B230090D3E7082FA6D129899A -:10B2C0003046FEF74AFE074640289FD007EB87022C -:10B2D00071680AEBC2000844804600F0E8FA0028D2 -:10B2E00094D16D89B8F80E002844B0F5803F05D39D -:10B2F00060883A46314600F018FBF0E5002D85D015 -:10B30000A8F80E0060883A463146FFF701F9082098 -:10B310002072384600F09AFA6081A58127E770B55F -:10B320000D460646032105F043FB040004D02078B7 -:10B33000000704D5112070BD43F2020070BD2A46FB -:10B3400021463046FEF71FFF18B92868606168681B -:10B35000A061207840F008002070002070BD70B51A -:10B360000D460646032105F023FB040004D0207897 -:10B37000000704D4082070BD43F2020070BD2A46C5 -:10B3800021463046FEF732FF00B9A582207820F032 -:10B3900008002070002070BD2DE9F04F0E4691B0DE -:10B3A0008046032105F004FB0446404605F044FCBA -:10B3B00007460020079008900990ADF830000A90E9 -:10B3C00002900390049004B9FFDF0DF1080917BB48 -:10B3D000FFDF20E038460BA9002204F069FE9DF84B -:10B3E0002C0000F07F050A2D00D3FFDF6019017FDC -:10B3F000491E01779DF82C0000060CD52A460CA9A1 -:10B4000007A8FEF716FE01E0D846020019F805105D -:10B41000491C09F80510761EF6B2DBD204F134009F -:10B42000FA4D04F1260BDFF8E8A304F12A07069091 -:10B4300010E05846069900F06AFA064628700A2875 -:10B4400000D3FFDF5AF8261040468847E08CC05DE5 -:10B45000B04202D0208D0028EBD10A202870EC4D9C -:10B460004E4628350EE00CA907A800F050FA044615 -:10B47000375D55F8240000B9FFDF55F82420394620 -:10B4800040469047BDF81E000028ECD111B027E5DA -:10B4900010B5032105F08CFA040000D1FFDF0A216A -:10B4A00004F11C0018F025FF207840F00400207003 -:10B4B00010BD10B50C46032105F07AFA2044007F38 -:10B4C000002800D0012010BD2DE9F84F894615460F -:10B4D0008246032105F06CFA070004D0284608F0E4 -:10B4E0001DFF40B903E043F20200BDE8F88F484673 -:10B4F00008F03AFF08B11020F7E7786828B16988AA -:10B500000089814201D90920EFE7B9F800001C2425 -:10B5100018B1402809D2402008E03846FEF7FFFC69 -:10B520008046402819D11320DFE7403880B280469A -:10B530000146384600F0A5F948B108EB8800796863 -:10B5400004EBC000085C012803D00820CDE70520EB -:10B55000CBE7FDF75FFF06000BD008EB88007968AA -:10B5600004EBC0000C18B9F8000020B1E88910B154 -:10B5700013E01120B9E72888172802D36888172814 -:10B5800001D20720B1E7686838B12B1D2246414639 -:10B590003846FFF721F90028A7D104F10C026946CB -:10B5A0002046FFF720F8288860826888E082B9F892 -:10B5B000000030B102202070E889A080E889A0B1A5 -:10B5C0002BE003202070A889A0807868817840292A -:10B5D00005D180F8028039465046FEF726FE4046E7 -:10B5E00000F034F9A9F8000021E07868218B408947 -:10B5F000884200D908462083A6F802A004203072B1 -:10B60000B9F800007081E0897082F181208B30826E -:10B61000A08AB081304600F00FF97868C1784029DF -:10B6200005D180F8038039465046FEF74FFE0020D2 -:10B630005BE770B50D460646032105F0B9F9040035 -:10B6400003D0402D04D2402503E043F2020070BD38 -:10B65000403DADB2294600F014F958B105EB850123 -:10B660001C22606802EBC101084400F020F918B107 -:10B67000082070BD052070BD2A462146304600F0E6 -:10B6800054F9002070BD2DE9F0410D461646804664 -:10B69000032105F08DF90446402D01D2402500E03C -:10B6A000403DADB28CB1294600F0EBF880B105EB1E -:10B6B00085011C22606802EBC1014718384600F082 -:10B6C000F6F838B10820BDE8F08143F20200FAE74D -:10B6D0000520F8E733463A4629462046FFF77CF82E -:10B6E0000028F0D1EAB221464046FEF79BFF002039 -:10B6F000E9E72DE9F0410D4616468046032105F0A5 -:10B7000057F90446402D01D2402500E0403DAFB23C -:10B7100024B1304608F002FE38B902E043F20200DC -:10B72000D1E7306808F0FAFD08B11020CBE73946C0 -:10B73000204600F0A6F860B107EB87011C22606884 -:10B7400002EBC1014518284600F0B1F818B10820F5 -:10B75000B9E70520B7E7B088A98A884201D90C204B -:10B76000B1E76168E88C4978B0EBC10F01D31320D1 -:10B77000A9E73946204600F078F8014660680823BA -:10B780004078C20005F1240004F099FFD6E90012C8 -:10B79000C0E90012FAB221464046FEF7B9FE002089 -:10B7A00091E72DE9F0470D461F469046814603215B -:10B7B00005F0FEF80446402D01D2402001E0A5F13D -:10B7C000400086B23CB14DB1384608F0EBFD50B1B7 -:10B7D0001020BDE8F08743F20200FAE76068C8B1C4 -:10B7E000A0F80C8024E03146204600F04AF888B1E9 -:10B7F00006EB86011C22606802EBC1014518284651 -:10B8000000F055F840B10820E3E7000030000020C8 -:10B81000F04602000520DCE7A5F80880F2B22146D8 -:10B820004846FEF7FFFE1FB1A889698908443880A1 -:10B830000020CEE704F09BBD017821F00F01491CE8 -:10B8400021F0F00110310170FDF7E7BD10B504469D -:10B85000402800D9FFDF4034A0B210BD40684269E3 -:10B860000078484302EBC0007047C2784068037814 -:10B8700012FB03F24378406901FB032100EBC10096 -:10B880007047C2788A4209D9406801EB81011C22C5 -:10B8900002EBC101405C08B10120704700207047F5 -:10B8A0000078062801D901207047002070470078F1 -:10B8B000062801D00120704700207047F0B401EB4A -:10B8C00081061C27446807EBC6063444049D052600 -:10B8D0002670E3802571F0BCFEF794BA10B541895B -:10B8E00011B1FFF7DDFF08B1002010BD012010BD30 -:10B8F00010B5C18C8278B1EBC20F04D9C18911B1E6 -:10B90000FFF7CEFF08B1002010BD012010BD10B51B -:10B910000C4601230A22011D04F007FF007821884C -:10B92000012282409143218010BDF0B402EB8205D8 -:10B930001C264C6806EBC505072363554B681C792C -:10B94000402C03D11A71F0BCFEF705BDF0BC704766 -:10B9500010B5EFF3108000F0010472B6EE484178A4 -:10B96000491C41704078012801D1F7F70DFB002CEC -:10B9700000D162B610BD70B5E74CE07848B901253A -:10B98000E570FFF7E5FFF7F707FB20B1002008F0AF -:10B990000AF9002070BD4FF080406571C0F8045373 -:10B9A000F7E770B5EFF3108000F0010572B6DA4CDE -:10B9B000607800B9FFDF6078401E6070607808B979 -:10B9C000F7F7E6FA002D00D162B670BDD24810B587 -:10B9D000C17821B100214171C170FFF7E2FF002061 -:10B9E00010BD10B50446F7F7D7FACB49C97808401F -:10B9F00000D001202060002010BD2DE9F05FDFF8AD -:10BA000018934278817889F80620002589F8071074 -:10BA1000064689F8085000782F4620B101280FD03B -:10BA200002280FD0FFDFF7F7C4FA98B1F7F7C8FA8A -:10BA3000A8420FD12846F7F7C7FA0028FAD047E006 -:10BA40000125F0E7FFF784FFF7F7A6FA0028FBD0FF -:10BA50000225E8E701208407E060C4F80471AF49DB -:10BA60000D600107D1F84412AC4AC1F342312432CF -:10BA70001160AA49343108604FF0020BC4F804B3D6 -:10BA8000A060DFF89CA2DAF80010C94341F300116E -:10BA900001F10108DAF8001041F01001CAF80010B5 -:10BAA00000E020BFD4F804010028FAD02846F7F7B8 -:10BAB0008BFA0028FAD0B8F1000F05D1DAF800109F -:10BAC00021F01001CAF80010C4F808B3C4F80471DA -:10BAD00099F807004C4670B1307860B9F7F75CFA16 -:10BAE000064608F0BDF96FF0004116B1C4E9031035 -:10BAF00001E0C4E9030115B12771BDE8F09F012001 -:10BB00002071BDE8F05F00F0ABB870B5050000D162 -:10BB1000FFDF4FF080424FF0FF30C2F808030021F2 -:10BB2000C2F80011C2F80411C2F80C11C2F81011C9 -:10BB3000794C6170F7F736FA10B10120E07060704F -:10BB40002846BDE8704058E72DE9F05F7548D0F809 -:10BB500000B0744A7449083211608406D4F80801B0 -:10BB600008B1012600E00026D4F8000110B14FF022 -:10BB7000010801E04FF00008D4F8040108B10127E2 -:10BB800000E00027D4F80C0100B101208246D4F86F -:10BB9000100108B1012100E00021894646EA0801B0 -:10BBA00027EA010020EA0A0030EA090000D0FFDF9E -:10BBB000002526B1C4F80851012007F0F4FF564EC5 -:10BBC000B8F1000F10D0C4F80051707918B1757138 -:10BBD000002007F0E8FF307830B10120534935707C -:10BBE000B07002220A6020610FB1C4F80451BAF1AA -:10BBF000000F0BD0C4F80C51B07800B9FFDF4B48F0 -:10BC00000560B57001206061FFF7CBFEB9F1000F50 -:10BC100005D0C4F81051307908B100F045F8414919 -:10BC2000091DC1F800B068E770B53B4DE87808B968 -:10BC3000F7F7AEF901208407A061A87858B100BFDA -:10BC4000D4F80C0120B90020F7F7BEF90028F7D18D -:10BC50000020C4F80C014FF0FF30C4F8080370BD99 -:10BC60002DE9F0411926B407C4F808630125A56140 -:10BC70000020C4F80001C4F80C01C4F81001F7F763 -:10BC80008BF9254F28B12949BD7002200860256134 -:10BC900000E03D70FFF75CFE2049B8792031086074 -:10BCA000C4F80463BDE8F0812DE9F0411A4C4FF06F -:10BCB00080470125E079F0B1012803D0217A401EA8 -:10BCC000814218DAF7F768F9064608F0C9F8E17911 -:10BCD000012902D9217A491C21720EB1216900E0A3 -:10BCE000E168411A022902DA11F1020F0EDC0EB1ED -:10BCF000206100E0E060FFF72BFEF7F74DF938B167 -:10BD00000A49022008603D61A57002E07D61C9E733 -:10BD1000257000202072C5E73C0000201805004077 -:10BD200010ED00E01005024001000001340C00405D -:10BD30004FF0E0214FF00070C1F88001C1F880029F -:10BD4000384B802283F80024C1F80001704700B509 -:10BD500002460420344903E001EBC0031B792BB1F8 -:10BD6000401EC0B2F8D2FFDFFF2000BD41F83020F6 -:10BD700001EBC00100224A718A7101220A7100BDE3 -:10BD8000294A002102EBC0000171704710B504463A -:10BD9000042800D3FFDF244800EBC40420790128E5 -:10BDA00000D0FFDF6079A179401CC0B2814200D091 -:10BDB00060714FF0E0214FF00070C1F8000210BD3B -:10BDC0002DE9F041194805681849194808310860FB -:10BDD0001448042690F80004134F4009154C042819 -:10BDE00018D0FFDF16E0217807EBC1000279012AA5 -:10BDF00008D1427983799A4204D04279827157F806 -:10BE0000310080472078401CC0B22070042801D344 -:10BE100000202070761EF6B2E5D20448001D0560B1 -:10BE2000BDE8F08119E000E0C805002010050240DF -:10BE30000100000150000020F8B51D46DDE906476D -:10BE40000E000AD004F0F8FE2346FF1DBCB23146B6 -:10BE50002A46009404F005FBF8BDD0192246194685 -:10BE600018F0A6F92046F8BD70B50D46044610211D -:10BE700018F01DFA258117206081A07B40F00A0090 -:10BE8000A07370BD4FF6FF720A800146022008F0D1 -:10BE9000F9B9704700897047827BD30701D19207B7 -:10BEA00003D4808908800020704705207047827B7A -:10BEB000920700D58181704701460020098841F62C -:10BEC000FE52114200D00120704700B50346807B2E -:10BED000C00701D0052000BD59811846FFF7ECFFCF -:10BEE000C00703D0987B40F004009873987B40F023 -:10BEF00001009873002000BD827B520700D509B174 -:10BF00004089704717207047827B61F3C3028273B8 -:10BF100070472DE9FC5F0E460446017896460120E5 -:10BF200000FA01F14DF6FF5201EA020962684FF68C -:10BF3000FF7B1188594502D10920BDE8FC9FB9F16A -:10BF4000000F05D041F6FE55294201D00120F4E74B -:10BF500041EA090111801D0014D04FF0000C85F852 -:10BF600000C023780521032267464FF0020A0E2BFA -:10BF700074D2DFE803F0F809252F4762697447900F -:10BF800092B3D0D70420D8E7616820898B7B9B07C8 -:10BF90007DD5172848D30B89834245D38989172932 -:10BFA00001D3814240D185F800A0A5F8010032807C -:10BFB000616888816068817B21F002018173C5E03E -:10BFC000042028702089A5F801006089A5F80300E5 -:10BFD0003180BBE0208A3188C01D1FFA80F84145BE -:10BFE00022D3062028702089A5F801006089A5F8D1 -:10BFF0000300A089A5F805000721208ACDE90001EA -:10C0000063693EE0082B10D0082028702089A5F82D -:10C0100001006089A5F8030031806A1D694604F1BA -:10C020000C0006F066FA10B15FE01020EDE73088F2 -:10C030009DF800100844308088E00A20287020898C -:10C04000A5F80100328045E00C2028702089A5F871 -:10C0500001006089A5F8030031803BE083E021897D -:10C06000338800EB41021FFA82F843453DD3B8F113 -:10C07000050F3AD30E222A700BEA4101CDE90010D8 -:10C08000E36860882A467146FFF7D6FE00E04DE07F -:10C09000A6F800805AE04020287060893188C01CD2 -:10C0A0001FFA80F8414520D32878714620F03F00E0 -:10C0B000123028702089A5F801006089CDE90002BE -:10C0C00060882A46E368FFF7B7FEA6F80080287864 -:10C0D00040063BD461682089888037E0A089328897 -:10C0E000401D1FFA80F8424501D204273EE0162089 -:10C0F00028702089A5F801006089A5F80300A089AF -:10C10000CDE9000160882A4671462369FFF794FE55 -:10C11000A6F80080DEE718202870207A6870A6F85C -:10C1200000A013E061680A88920401D405271DE08D -:10C13000C9882289914201D0062717E01E21297063 -:10C1400030806068018821F400510180B9F1000F4E -:10C150000CD0618878230022022007F0E9FF616893 -:10C160002078887007E0A6F800C00327606801887F -:10C1700021EA090101803846DFE62DE9FF4F85B04D -:10C180001746129C0D001E461CD03078C10703D004 -:10C1900000F03F00192801D9012100E000212046CC -:10C1A000FFF7AAFEA8420DD32088A0F57F41FF39F2 -:10C1B00008D03078410601D4000605D5082009B022 -:10C1C000BDE8F08F0720FAE700208DF800008DF819 -:10C1D000010030786B1E00F03F0C0121A81E4FF0CB -:10C1E000050A4FF002094FF0030B9AB2BCF1200F81 -:10C1F00075D2DFE80CF08B10745E7468748C749CDC -:10C2000074B674BB74C974D574E2747474F274F047 -:10C2100074EF74EE748B052D78D18DF80090A078B2 -:10C220008DF804007088ADF8060030798DF80100B3 -:10C23000707800F03F000C2829D00ADCA0F1020041 -:10C24000092863D2DFE800F0126215621A621D62EB -:10C250002000122824D004DC0E281BD01028DBD1AB -:10C260001BE016281FD01828D6D11FE020788007A1 -:10C2700001E020784007002848DAEFE02078000746 -:10C28000F9E72078C006F6E720788006F3E7207803 -:10C290004006F0E720780006EDE72088C005EAE7D1 -:10C2A00020884005E7E720880005E4E72088C004EF -:10C2B000E1E72078800729D5032D27D18DF800B03C -:10C2C000B6F8010082E0217849071FD5062D1DD35D -:10C2D00081B27078012803D0022817D102E0CAE0A9 -:10C2E000022000E0102004228DF8002072788DF8E2 -:10C2F0000420801CB1FBF0F2ADF8062092B242435C -:10C300008A4203D10397ADF80890A7E07AE020783D -:10C31000000777D598B282088DF800A0ADF8042008 -:10C32000B0EB820F6ED10297ADF8061096E021783F -:10C33000C90667D5022D65D381B206208DF80000AD -:10C34000707802285ED300BFB1FBF0F28DF80400D4 -:10C35000ADF8062092B242438A4253D1ADF808901C -:10C360007BE0207880064DD5072003E0207840064A -:10C370007FD508208DF80000A088ADF80400ADF846 -:10C380000620ADF8081068E02078000671D5092075 -:10C39000ADF804208DF80000ADF8061002975DE0BE -:10C3A0002188C90565D5022D63D381B20A208DF895 -:10C3B0000000707804285CD3C6E72088400558D573 -:10C3C000012D56D10B208DF80000A088ADF8040097 -:10C3D00044E021E026E016E0FFE72088000548D58C -:10C3E000052D46D30C208DF80000A088ADF8040080 -:10C3F000B6F803006D1FADF80850ADF80600ADF8B3 -:10C400000AA02AE035E02088C00432D5012D30D1C1 -:10C410000D208DF8000021E02088800429D4B6F892 -:10C420000100E080A07B000723D5032D21D33078C5 -:10C4300000F03F001B2818D00F208DF80000208846 -:10C4400040F40050A4F80000B6F80100ADF8040074 -:10C45000ED1EADF80650ADF808B003976946059893 -:10C46000F5F7E6FC050008D016E00E208DF8000078 -:10C47000EAE7072510E008250EE0307800F03F00DD -:10C480001B2809D01D2807D00220059907F0FAFEC5 -:10C49000208800F400502080A07B400708D520466B -:10C4A000FFF70AFDC00703D1A07B20F00400A073B2 -:10C4B000284684E61FB5022806D101208DF8000029 -:10C4C00088B26946F5F7B4FC1FBD0000F8B51D46FB -:10C4D000DDE906470E000AD004F0AEFB2346FF1D3F -:10C4E000BCB231462A46009403F0BBFFF8BDD01918 -:10C4F0002246194617F05CFE2046F8BD2DE9FF4F95 -:10C500008DB09B46DDE91B57DDF87CA00C46082B5F -:10C5100005D0E06901F002F950B11020D2E028887E -:10C52000092140F0100028808AF80010022617E048 -:10C53000E16901208871E2694FF420519180E1693D -:10C540008872E06942F601010181E069002181738E -:10C550002888112140F0200028808AF80010042645 -:10C5600038780A900A2038704FF0020904F1180058 -:10C570004D460C9001F095FBB04681E0BBF1100FE9 -:10C580000ED1022D0CD0A9EB0800801C80B2022134 -:10C59000CDE9001005AB52461E990D98FFF796FFA6 -:10C5A000BDF816101A98814203D9F74800790F9008 -:10C5B00004E003D10A9808B138702FE04FF002016F -:10C5C000CDE900190DF1160352461E990D98FFF79B -:10C5D0007DFF1D980088401B801B83B2C6F1FF00C1 -:10C5E000984200D203461E990BA8D9B15FF0000211 -:10C5F000DDF878C0CDE9032009EB060189B2CDE969 -:10C6000001C10F980090BDF8161000220D9801F09E -:10C61000CBFB387070B1C0B2832807D0BDF81600CC -:10C6200020833AE00AEB09018A19E1E7022011B000 -:10C63000BDE8F08FBDF82C00811901F0FF08022D34 -:10C640000DD09AF80120424506D1BDF82010814254 -:10C6500007D0B8F1FF0F04D09AF801801FE08AF8E4 -:10C660000180C94800680178052902D1BDF816107B -:10C67000818009EB08001FFA80F905EB080085B2FC -:10C68000DDE90C1005AB0F9A01F00EFB28B91D98DF -:10C690000088411B4145BFF671AF022D13D0BBF19D -:10C6A000100F0CD1A9EB0800801C81B20220CDE94B -:10C6B000000105AB52461E990D98FFF707FF1D9824 -:10C6C0000580002038700020B1E72DE9F8439C4632 -:10C6D000089E13460027B26B9AB3491F8CB2F18FA4 -:10C6E000A1F57F45FF3D05D05518AD882944891D2A -:10C6F0008DB200E000252919B6F83C80083141458B -:10C7000020D82A44BCF8011022F8021BBCF8031000 -:10C7100022F8021B984622F8024B914604F07AFA5E -:10C720004FF00C0C41464A462346CDF800C003F0BA -:10C7300064FEF587B16B00202944A41D21440880C4 -:10C7400003E001E0092700E083273846BDE8F883CD -:10C7500010B50B88848F9C420CD9846BE018048838 -:10C7600044B1848824F40044A41D23440B80106049 -:10C77000002010BD0A2010BD2DE9F0478AB0002529 -:10C78000904689468246ADF8185007274BE0059839 -:10C7900006888088000446D4A8F8006007A80195A0 -:10C7A00000970295CDE903504FF400730022314603 -:10C7B000504601F0F9FA04003CD1BDF81800ADF87C -:10C7C0002000059804888188B44216D10A0414D444 -:10C7D00001950295039521F400410097049541F4D9 -:10C7E000804342882146504601F0B4F804000BD142 -:10C7F0000598818841F40041818005AA08A948462E -:10C80000FFF7A6FF0400DCD000970598029501957C -:10C81000039504950188BDF81C300022504601F0B4 -:10C8200099F80A2C06D105AA06A94846FFF790FFF9 -:10C830000400ACD0ADF8185004E00598818821F4CC -:10C840000041818005AA06A94846FFF781FF00281C -:10C85000F3D00A2C03D020460AB0BDE8F0870020B0 -:10C86000FAE710B50C46896B86B051B10C218DF8F2 -:10C870000010A18FADF80810A16B01916946FAF77D -:10C8800064FC00204FF6FF71A063E187A08706B02B -:10C8900010BD2DE9F0410D460746896B0020069E2C -:10C8A0001446002911D0012B0FD1324629463846B3 -:10C8B000FFF762FF002808D1002C06D03246294637 -:10C8C0003846BDE8F04100F038BFBDE8F0812DE901 -:10C8D000FC411446DDE9087C0E46DDE90A15521DCF -:10C8E000BCF800E092B2964502D20720BDE8FC8178 -:10C8F000ACF8002017222A70A5F80160A5F80330D3 -:10C900000522CDE900423B462A46FFF7DFFD002025 -:10C91000ECE770B50C4615464821204617F0E9FCB7 -:10C9200004F1080044F81C0F00204FF6FF71E0618D -:10C9300061842084A5841720E08494F82A0040F0C4 -:10C940000A0084F82A0070BD4FF6FF720A80014683 -:10C95000032007F097BC30B585B00C460546FFF7BD -:10C9600080FFA18E284629B101218DF8001069466B -:10C97000FAF7EBFB0020E0622063606305B030BD96 -:10C98000B0F84000704700005400002090F84620A6 -:10C99000920703D4408808800020F3E70620F1E7DF -:10C9A00090F846209207EDD5A0F84410EAE701463A -:10C9B000002009880A0700D5012011F0F00F01D0EE -:10C9C00040F00200CA0501D540F004008A0501D5F7 -:10C9D00040F008004A0501D540F010000905D1D506 -:10C9E00040F02000CEE700B5034690F84600C007AF -:10C9F00001D0062000BDA3F842101846FFF7D7FF6C -:10CA000010F03E0F05D093F8460040F0040083F884 -:10CA1000460013F8460F40F001001870002000BDDA -:10CA200090F84620520700D511B1B0F84200A9E7AE -:10CA30001720A7E710F8462F61F3C3020270A1E7A1 -:10CA40002DE9FF4F9BB00E00DDE92B34DDE929789D -:10CA5000289D24D02878C10703D000F03F00192872 -:10CA600001D9012100E000212046FFF7D9FFB042A3 -:10CA700015D32878410600F03F010CD41E290CD0B4 -:10CA8000218811F47F6F0AD13A8842B1A1F57F4223 -:10CA9000FF3A04D001E0122901D1000602D504209A -:10CAA0001FB0C5E5F9491D984FF0000A08718DF8CF -:10CAB00018A08DF83CA00FAA0A60ADF81CA0ADF834 -:10CAC00050A02978994601F03F02701F5B1C04F1C9 -:10CAD000180C4FF0060E4FF0040BCDF858C01F2A6B -:10CAE0007ED2DFE802F07D7D107D267DAC7DF47D79 -:10CAF000F37DF27DF17DF47DF07D7D7DEF7DEE7D3A -:10CB00007D7D7D7DED0094F84610B5F80100890724 -:10CB100001D5032E02D08DF818B022E34FF4006146 -:10CB2000ADF85010608003218DF83C10ADF8400046 -:10CB3000D8E2052EEFD1B5F801002083ADF81C0036 -:10CB4000B5F80310618308B1884201D901207FE163 -:10CB50000020A07220814FF6FF702084169801F00B -:10CB6000A0F8052089F800000220029083460AAB55 -:10CB70001D9A16991B9801F097F890BB9DF82E000E -:10CB8000012804D0022089F80100102003E00120D0 -:10CB900089F8010002200590002203A90BA805F0E6 -:10CBA000A8FCE8BB9DF80C00059981423DD13A886C -:10CBB000801CA2EB0B01814237DB02990220CDE9F8 -:10CBC00000010DF12A034A4641461B98FFF77EFCFF -:10CBD00002980BF1020B801C80B217AA03A901E096 -:10CBE000A0E228E002900BA805F083FC02999DF8D2 -:10CBF0000C00CDE9000117AB4A4641461B98FFF7F0 -:10CC000065FC9DF80C100AAB0BEB01001FFA80FBD2 -:10CC100002981D9A084480B2029016991B9800E071 -:10CC200003E001F041F80028B6D0BBF1020F02D0BA -:10CC3000A7F800B053E20A208DF818004FE2002157 -:10CC40000391072EFFF467AFB5F801002083ADF81C -:10CC50001C00B5F80320628300283FF477AF9042B0 -:10CC60003FF674AF0120A072B5F8050020810020C6 -:10CC7000A073E06900F052FD78B9E1690120887184 -:10CC8000E2694FF420519180E1698872E06942F6CF -:10CC900001010181E06900218173F01F20841E9849 -:10CCA000606207206084169800F0FBFF072089F877 -:10CCB00000000120049002900020ADF82A0028E036 -:10CCC0001DE2A3E13AE1EAE016E2AEE086E049E0E7 -:10CCD0000298012814D0E0698079012803D1BDF8B9 -:10CCE0002800ADF80E00049803ABCDE900B04A4629 -:10CCF00041461B98FFF7EAFB0498001D80B20490A0 -:10CD0000BDF82A00ADF80C00ADF80E00059880B211 -:10CD100002900AAB1D9A16991B9800F0C5FF28B91E -:10CD200002983988001D05908142D1D202980128CD -:10CD300081D0E0698079012805D0BDF82810A1F5DF -:10CD40007F40FF3803D1BDF82800ADF80E000498ED -:10CD500003ABCDE900B04A4641461B98FFF7B6FB4E -:10CD60000298BBE1072E02D0152E7FF4D4AEB5F8A1 -:10CD700001102183ADF81C10B5F80320628300294F -:10CD80003FF4E4AE91423FF6E1AE0121A1724FF0D3 -:10CD9000000BA4F808B084F80EB0052E07D0C0B27E -:10CDA000691DE26905F086FB00287FF444AF4FF669 -:10CDB000FF70208401A906AA14A8CDF800B081E86C -:10CDC00085032878214600F03F031D9A1B98FFF742 -:10CDD00095FB8246208BADF81C0080E10120032EDC -:10CDE000C3D14021ADF85010B5F801102183ADF842 -:10CDF0001C100AAAB8F1000F00D00023CDE90203ED -:10CE000004921D98CDF80480009038880022401EBE -:10CE100083B21B9800F0C8FF8DF8180090BB0B2060 -:10CE200089F80000BDF8280037E04FF0010C052E0E -:10CE30009BD18020ADF85000B5F801102183B5F8E2 -:10CE400003002084ADF81C10B0F5007F03D9072043 -:10CE50008DF8180085E140F47C4222840CA8B8F1DA -:10CE6000000F00D00023CDE90330CDE9018C1D98DF -:10CE700000903888401E83B21B9800F095FF8DF813 -:10CE8000180028B18328A8D10220BDE0540000205A -:10CE90000D2189F80010BDF83000401C1EE1032E62 -:10CEA00004D248067FF537AE002017E1B5F801102F -:10CEB000ADF81C102878400602D58DF83CE002E061 -:10CEC00007208DF83C004FF000080320CDE9020850 -:10CED0001E9BCDF810801D980193A6F1030B0090C6 -:10CEE0001FFA8BF342461B9800F034FD8DF81800B2 -:10CEF0008DF83C80297849060DD52088C00506D5D7 -:10CF0000208BBDF81C10884201D1C4F82480404613 -:10CF10008DF81880E2E0832801D14FF0020A4FF427 -:10CF20008070ADF85000BDF81C002083A4F820B03C -:10CF30001E986062032060841321CCE0052EFFF46C -:10CF4000EAADB5F80110ADF81C10A28F62B3A2F5DE -:10CF50007F43FE3B28D008228DF83C204FF0000B89 -:10CF60000523CDE9023BDDF878C0CDF810B01D9A5D -:10CF700080B2CDF804C040F400430092B5F803201D -:10CF80001B9800F0E7FC8DF83CB04FF400718DF871 -:10CF90001800ADF85010832810D0F8B1A18FA1F57A -:10CFA0007F40FE3807D0DCE00B228DF83C204FF6A6 -:10CFB000FE72A287D2E7A4F83CB0D2E000942B46E0 -:10CFC00031461E9A1B98FFF780FB8DF8180008B1B8 -:10CFD00083284BD1BDF81C00208355E700942B46D5 -:10CFE00031461E9A1B98FFF770FB8DF81800E8BBBE -:10CFF000E18FA06B0844811D8DE8820343888288FD -:10D0000001881B98FFF763FC824668E095F8018071 -:10D01000022E70D15FEA080002D0B8F1010F6AD188 -:10D0200009208DF83C0007A800908DF84080434609 -:10D03000002221461B98FFF72CFC8DF842004FF090 -:10D04000000B8DF843B050B9B8F1010F12D0B8F110 -:10D05000000F04D1A18FA1F57F40FF380AD0A08F27 -:10D0600040B18DF83CB04FF4806000E037E0ADF89F -:10D0700050000DE00FA91B98FAF767F882468DF86B -:10D080003CB04FF48060ADF85000BAF1020F06D00A -:10D09000FC480068C07928B18DF8180027E0A4F892 -:10D0A000188044E0BAF1000F03D081208DF81800F9 -:10D0B0003DE007A800904346012221461B98FFF758 -:10D0C000E8FB8DF8180021461B98FFF7CAFB9DF876 -:10D0D000180020B9192189F80010012038809DF826 -:10D0E0003C0020B10FA91B98FAF72FF88246BAF13D -:10D0F000000F33D01BE018E08DF818E031E0207805 -:10D10000000712D5012E10D10A208DF83C00E088CE -:10D11000ADF8400003201B9907F0B4F80820ADF8E3 -:10D120005000C1E648067FF5F6AC4FF0040A2088AF -:10D13000BDF8501008432080BDF8500080050BD585 -:10D14000A18FA1F57F40FE3806D11E98E062289895 -:10D150002063A6864FF0030A5046A1E49DF818000C -:10D1600078B1012089F80000297889F80110BDF80C -:10D170001C10A9F802109DF8181089F80410052059 -:10D1800038802088BDF8501088432080E4E72DE9DE -:10D19000FF4F8846087895B0012181404FF2090081 -:10D1A000249C0140ADF820102088DDF88890A0F57F -:10D1B0007F424FF0000AFF3A06D039B1000705D58B -:10D1C000012019B0BDE8F08F0820FAE7239E4FF048 -:10D1D000000B0EA886F800B018995D460988ADF8D6 -:10D1E0003410A8498DF81CB0179A0A718DF838B020 -:10D1F000086098F8000001283BD0022809D00328D5 -:10D200006FD1307820F03F001D303070B8F8040046 -:10D21000E08098F800100320022904D1317821F031 -:10D220003F011B31317094F84610090759D505AB01 -:10D23000B9F1000F13D0002102AA82E80B000720E9 -:10D24000CDE90009BDF83400B8F80410C01E83B25F -:10D250000022159800F0A8FD0028D1D101E0F11CB2 -:10D26000EAE7B8F80400A6F80100BDF81400C01CF5 -:10D2700004E198F805108DF81C1098F804000128B6 -:10D2800006D04FF4007A02282CD00328B8D16CE1E4 -:10D290002188B8F8080011F40061ADF8201020D002 -:10D2A00017281CD3B4F84010814218D3B4F84410A6 -:10D2B000172901D3814212D1317821F03F01C91CD5 -:10D2C0003170A6F801000321ADF83410A4F8440031 -:10D2D00094F8460020F0020084F8460065E1052538 -:10D2E0007EE177E1208808F1080700F4FE60ADF8E0 -:10D2F000200010F0F00F1BD010F0C00F03D03888C2 -:10D30000228B9042EBD199B9B878C00710D0B96898 -:10D310000720CDE902B1CDF804B00090CDF810B0EF -:10D32000FB88BA883988159800F014FB0028D6D1FC -:10D330002398BDF82010401C80294ED006DC10290F -:10D340000DD020290BD0402987D124E0B1F5807F72 -:10D350006ED051457ED0B1F5806F97D1DEE0C80622 -:10D3600001D5082000E0102082460DA907AA05205B -:10D37000CDE902218DF83800ADF83CB0CDE9049636 -:10D3800008A93888CDE9000153460722214615989F -:10D39000FFF7B4F8A8E09DF81C2001214FF00A0A1D -:10D3A000002A9BD105ABB9F1000F00D00020CDE9D8 -:10D3B00002100720CDE90009BDF834000493401E97 -:10D3C00083B2218B0022159800F0EEFC8DF81C0032 -:10D3D0000B203070BDF8140020E09DF81C200121C6 -:10D3E0004FF00C0A002A22D113ABB9F1000F00D084 -:10D3F0000020CDE902100720CDE900090493BDF813 -:10D400003400228C401E83B2218B159800F0CCFC96 -:10D410008DF81C000D203070BDF84C00401CADF89C -:10D42000340005208DF83800208BADF83C00BCE0BE -:10D430003888218B88427FF452AF9DF81C004FF052 -:10D44000120A00281CD1606AA8B1B878C0073FF45E -:10D4500046AF00E018E0BA680720CDE902B2CDF887 -:10D4600004B00090CDF810B0FB88BA88159800F091 -:10D4700071FA8DF81C00132030700120ADF83400D3 -:10D4800093E00000540000203988208B8142D2D1E3 -:10D490009DF81C004FF0160A0028A06B08D0E0B3DE -:10D4A0004FF6FF7000215F46ADF808B0019027E00D -:10D4B00068B1B978C907BED1E18F0DAB0844821DB0 -:10D4C00003968DE80C0243888288018809E0B878C9 -:10D4D000C007BCD0BA680DAB03968DE80C02BB88C0 -:10D4E000FA881598FFF7F3F905005ED0072D72D082 -:10D4F00076E0019005AA02A92046FFF729F9014626 -:10D50000E28FBDF80800824201D00029F1D0E08FFF -:10D51000A16B084407800198E08746E09DF81C0055 -:10D520004FF0180A40B1208BC8B1388820832146BB -:10D530001598FFF796F938E004F118000090237E63 -:10D54000012221461598FFF7A4F98DF81C00002848 -:10D55000EDD1192030700120ADF83400E7E7052542 -:10D5600021461598FFF77DF93AE0208800F4007015 -:10D57000ADF8200050452DD1A08FA0F57F41FE3998 -:10D5800001D006252CE0D8F808004FF0160A48B163 -:10D59000A063B8F80C10A1874FF6FF71E187A0F8DF -:10D5A00000B002E04FF6FF70A087BDF8200030F415 -:10D5B0007F611AD0782300220320159906F0B8FD68 -:10D5C00098F8000020712088BDF8201008432080C2 -:10D5D0000EE000E007252088BDF820108843208059 -:10D5E000208810F47F6F1CD03AE02188814321808D -:10D5F0009DF8380020B10EA91598F9F7A6FD05464B -:10D600009DF81C000028EBD086F801A001203070A6 -:10D61000208B70809DF81C0030710520ADF834001F -:10D62000DEE7A18EE1B118980DAB0088ADF83400AB -:10D630002398CDE90304CDE90139206B0090E36A1A -:10D64000179A1598FFF7FCF9054601208DF8380068 -:10D650000EA91598F9F779FD00B10546A4F834B084 -:10D6600094F8460040070AD52046FFF7A0F910F0CD -:10D670003E0F04D114F8460F20F0040020701898D3 -:10D68000BDF83410018028469BE500B585B003281D -:10D6900006D102208DF8000088B26946F9F755FDE1 -:10D6A00005B000BD10B5384C0B782268012B02D0B4 -:10D6B000022B2AD111E013780BB1052B01D10423E1 -:10D6C000137023688A889A802268CB88D380226866 -:10D6D0000B891381498951810DE08B8893802268E1 -:10D6E000CB88D38022680B8913814B8953818B8926 -:10D6F0009381096911612168F9F727FD22680021EA -:10D700000228117003D0002800D0812010BD832092 -:10D7100010BD806B002800D001207047817801295E -:10D7200009D10088B0F5205F03D042F6010188429C -:10D7300001D10020704707207047F0B587B0002462 -:10D7400015460E460746ADF8144010E006980188CD -:10D750002980811DCDE902410721019404940091A3 -:10D76000838842880188384600F0F4F830B906AA68 -:10D7700005A93046FEF7ECFF0028E7D00A2800D1C3 -:10D78000002007B0F0BD00005400002010B58B78D9 -:10D7900083B102789A4205D10B885BB102E08B79A4 -:10D7A000091D4BB18B789A42F9D1B0F801300C8841 -:10D7B000A342F4D1002010BD812010BD072826D03F -:10D7C00012B1012A27D103E0497801F0070102E0F4 -:10D7D0004978C1F3C20105291DD2DFE801F0031821 -:10D7E000080C12000AB10320704702207047042879 -:10D7F0000DD250B10DE0052809D2801E022808D3B1 -:10D8000003E0062803D0032803D00520704700203A -:10D8100070470F20704781207047C0B282060BD43A -:10D82000000607D5FE48807A4143C01D01EBD000B9 -:10D8300080B27047084670470020704770B5138863 -:10D840000B800B781C0625D5F54CA47A844204D8AD -:10D8500043F010000870002070BD956800F00706C6 -:10D8600005EBD0052D78F54065F304130B701378A4 -:10D87000D17803F0030341EA032140F20123B1FB15 -:10D88000F3F503FB15119268E41D00FB012000EB8A -:10D89000D40070BD906870BD37B51446BDF8041053 -:10D8A00011809DF804100A061ED5C1F30013DC494F -:10D8B000A568897A814208D8FE2811D1C91DC908F6 -:10D8C0005A42284616F0EBFC0AE005EBD00100F0C6 -:10D8D0000702012508789540A84393401843087033 -:10D8E000207820F0100020703EBD2DE9F041074661 -:10D8F000C81C0E4620F00300B04202D08620BDE8CE -:10D90000F081C74D002034462E60AF802881AA7276 -:10D91000E8801AE0E988491CE980810614D4E1789E -:10D9200000F0030041EA002040F20121B0FBF1F2D7 -:10D9300001FB12012068FFF770FF2989084480B2BB -:10D940002881381A3044A0600C3420784107E1D493 -:10D950000020D4E72DE9FF4F89B01646DDE9168A8D -:10D960000F46994623F44045084600F00DFB04009D -:10D970000FD0099802F0E2FF0290207800060AD545 -:10D98000A748817A0298814205D887200DB0BDE86A -:10D99000F08F0120FAE7224601A90298FFF74EFF17 -:10D9A000834600208DF80C004046B8F1070F1AD0CE -:10D9B00001222146FFF702FF0028E7D12078400628 -:10D9C00011D502208DF80C00ADF81070BDF80400E0 -:10D9D000ADF81200ADF814601898ADF81650CDF8F7 -:10D9E0001CA0ADF818005FEA094004D500252E46BA -:10D9F000A84601270CE02178E07801F0030140EA15 -:10DA0000012040F20121B0FBF1F2804601FB1287B8 -:10DA10005FEA494009D5B84507D1A178207901F0DE -:10DA2000030140EA0120B04201D3BE4201D90720E0 -:10DA3000ACE7A8191FFA80F9B94501D90D20A5E76F -:10DA40009DF80C0028B103A90998F9F77CFB002880 -:10DA50009CD1B84507D1A0784FEA192161F30100A4 -:10DA6000A07084F804901A9800B10580199850EAC3 -:10DA70000A0027D0199830B10BEB06002A461999F5 -:10DA800016F096FB0EE00BEB06085746189E099819 -:10DA900003F0C0F82B46F61DB5B239464246009554 -:10DAA00002F0ABFC224601A90298FFF7C7FE9DF8E1 -:10DAB0000400224620F010008DF80400DDE901107A -:10DAC000FFF7EAFE002061E72DE9FF4FDFF85091F4 -:10DAD00082461746B9F80610D9F8000001EB41015B -:10DAE00000EB810440F20120B2FBF0F185B000FBB5 -:10DAF00011764D46DDF84C8031460698FFF78DFED5 -:10DB000029682A898B46611A0C3101441144AB887B -:10DB100089B28B4202D8842009B038E70699CDB289 -:10DB2000290603D5A90601D50620F5E7B9F806C0F0 -:10DB30000CF1010C1FFA8CFCA9F806C0149909B16C -:10DB4000A1F800C0A90602D5C4F8088007E0104477 -:10DB500080B2A9F80800191A01EB0B00A060224658 -:10DB6000FE200699FFF798FEE77026712078390AA3 -:10DB700061F30100320AA17840F0040062F3010170 -:10DB8000A17020709AF802006071BAF80000E0807D -:10DB900000262673280602D599F80A7000E00127AE -:10DBA000A80601D54FF000084D4600244FF00709A4 -:10DBB0000FE0CDE902680196CDF800900496E9885F -:10DBC0002046129B089AFFF7C5FE0028A4D1641CCA -:10DBD000E4B2BC42EDD300209EE72DE9F047804639 -:10DBE00000F0D2F9070005D0002644460C4D40F263 -:10DBF000012919E00120BDE8F087204600F0C4F9B2 -:10DC00000278C17802F0030241EA0222B2FBF9F382 -:10DC100009FB13210068FFF700FE304486B201E0E3 -:10DC2000E8050020641CA4B2E988601E8142E4DC9F -:10DC3000A8F10100E8802889801B28810020387025 -:10DC4000D9E710B5144631B1491E218002F076FEA5 -:10DC5000A070002010BD012010BD10B5D2490446AF -:10DC60000088CA88904201D30A2010BD096800EBE1 -:10DC7000400001EB80025079A072D0882081917819 -:10DC8000107901F0030140EA0120A081A078E11C95 -:10DC9000FFF7D4FD20612088401C2080E080002018 -:10DCA00010BD0121018270472DE9FF4F85B04FF66D -:10DCB000FF788246A3F8008048681F460D468078AA -:10DCC0008DF8060048680088ADF8040000208DF843 -:10DCD0000A00088A0C88A04200D304462C8241E046 -:10DCE000288A401C2882701D6968FFF74FFDB8BB69 -:10DCF0003988414501D1601E38806888A04236D3FA -:10DD0000B178307901F0030140EA012901A9701DC1 -:10DD1000FFF73CFD20BB298941452CD0002231462C -:10DD20000798FFF74BFDD8B92989494518D1E9680B -:10DD30000391B5F80AC0D6F808B05046CDF800C037 -:10DD400002F068FFDDF800C05A460CF1070C1FFA1C -:10DD50008CFC4B460399CDF800C002F018FB50B183 -:10DD6000641CA4B2204600F00FF90600B8D1641E6E -:10DD70002C820A20D0E67C807079B871F088B88057 -:10DD80003178F07801F0030140EA01207881A7F8AA -:10DD90000C90504602F0D2FD324607F10801FFF721 -:10DDA0004DFD38610020B7E62DE9FF4F87B0814671 -:10DDB0001C469246DDF860B0DDF85480089800F00B -:10DDC000E3F805000CD0484602F0B8FD29780906B2 -:10DDD00008D57549897A814204D887200BB0D6E5E9 -:10DDE0000120FBE7CAF309062A4601A9FFF726FD31 -:10DDF0000746149807281CD000222946FFF7DEFCAE -:10DE00000028EBD12878400613D501208DF80800B2 -:10DE10000898ADF80C00BDF80400ADF80E00ADF8A0 -:10DE20001060ADF8124002A94846F9F78CF90028B5 -:10DE3000D4D12978E87801F0030140EA0121AA78D9 -:10DE4000287902F0030240EA0220564507D0B1F5D6 -:10DE5000007F04D9611E814201DD0B20BEE78642AE -:10DE600001D90720BAE7801B85B2A54200D9254613 -:10DE7000BBF1000F01D0ABF80050179818B1B919D9 -:10DE80002A4616F095F9B8F1000F0DD03E444846E9 -:10DE90004446169F02F0D0FE2146FF1DBCB232461A -:10DEA0002B46009402F0DDFA002097E72DE9F041BF -:10DEB00007461D461646084600F066F804000BD0DB -:10DEC000384602F03BFD2178090607D53649897AA4 -:10DED000814203D8872012E5012010E52246314611 -:10DEE000FFF7ACFC65B12178E07801F0030140EA6E -:10DEF0000120B0F5007F01D8012000E0002028704B -:10DF00000020FCE42DE9F04107461D461646084670 -:10DF100000F03AF804000BD0384602F00FFD2178EB -:10DF2000090607D52049897A814203D88720E6E48B -:10DF30000120E4E422463146FFF7AEFCFF2D14D069 -:10DF40002178E07801F0030240EA022040F2012249 -:10DF5000B0FBF2F302FB130015B900F2012080B20E -:10DF6000E070000A60F3010121700020C7E410B5E1 -:10DF70000C4600F009F828B1C18821804079A070D2 -:10DF8000002010BD012010BD0749CA88824209D374 -:10DF900040B1096800EB40006FF00B0202EB80001B -:10DFA0000844704700207047E805002070B503461C -:10DFB000002002466FF02F050EE09C5CA4F13006B5 -:10DFC0000A2E02D34FF0FF3070BD00EB800005EB4E -:10DFD0004000521C2044D2B28A42EED370BD30B50C -:10DFE0000A240AE0B0FBF4F304FB13008D18303070 -:10DFF00005F8010C521E1846D2B2002AF2D130BDEB -:10E0000030B500234FF6FF7510E0040A44EA002003 -:10E0100084B2C85C6040C0F30314604005EA003479 -:10E020004440E0B25B1C84EA40109BB29342ECD3C4 -:10E0300030BD000010B582B0694601F0D1FD002866 -:10E0400018BFFFDF9DF80000002448B1019890F848 -:10E05000DD0028B1019880F8DD4001980AF0AFF9A1 -:10E06000F8488068A0F8D24002B010BD2DE9F04712 -:10E0700004460D46062002F043FC0646072002F047 -:10E080003FFC304400F0FF08002718EB050618BFDE -:10E090004FF000091DD02088401C80B22080B04283 -:10E0A00028BFA4F800902588454501D3B54209D37F -:10E0B0000621284602F07CFC20B90721284602F000 -:10E0C00077FC10B10020BDE8F087781CC7B2BE42D3 -:10E0D000E1D84FF6FF7020801220BDE8F08770B5C0 -:10E0E00082B007F073FB0DF0AFF9D74C4FF6FF7617 -:10E0F00000256683A683D5A12570D1E90001CDE96D -:10E10000000165706946A01C16F008FAA11C601C8D -:10E1100014F04CF825721B2060814FF4A471A1818A -:10E12000E08121820321A1740422E274A082E082B2 -:10E13000A4F13E00218305704680C6480570A4F115 -:10E1400010000570468002B070BDF8B5BD4D174691 -:10E150000E466860297007F0B3FA4FF6FF70ADF80D -:10E16000000000216846FFF781FFA0B90621BDF835 -:10E17000000002F02FFC04460721BDF8000002F069 -:10E1800029FC002C1CBF0028FFDF00216846FFF798 -:10E190006DFF0028EAD0FFF7A2FF287812F07CF884 -:10E1A0000FF0A0FC2978686813F013FF28780CF0B2 -:10E1B000ABFB30460AF00FF807F020FC29786868BE -:10E1C0000BF048FA3946287814F0ADFDBDE8F84068 -:10E1D0000DF03AB910B50124002A1CBF002010BD73 -:10E1E000002908BF022105D0012918BF002401D051 -:10E1F000204610BD0EF088FEFAE72DE9F04F8BB0F7 -:10E20000040008BFFFDF02218F4E06F11C00FFF75C -:10E210002DFF002818BFFFDFB6F81CA0062002F073 -:10E220006FFB0546072002F06BFB284400F0FF0857 -:10E2300008F1010000F0FF094FF0000BB78B4745D4 -:10E2400025D120460FF022F8002840F0CE8030780B -:10E25000002800F0CE8084F801B014202070C4F8AB -:10E2600004B0C4F808B0C4F80CB0C4F810B0C4F8D6 -:10E2700014B0C4F818B0C4F81CB00220C4F820B020 -:10E28000207186F800B00BB00120BDE8F08F4F453B -:10E2900020D1204607F04CFB00287DD007F02AFF54 -:10E2A000002859D02078172856D12079002853D03B -:10E2B000E088072102F07CFB050008BFFFDF28880B -:10E2C00007F017FAE088072102F084FB002818BF46 -:10E2D000FFDF8AE004A9384601F082FC00285BD108 -:10E2E0009DF8100048B107F07EFBB84254D021469B -:10E2F00038460BF0B8F880B377E00FF05AF8B84220 -:10E3000077D02146384613F085FD00286DD1059859 -:10E3100000F1580590F8D00018B9E87E08B1012046 -:10E3200000E00020079095F8370000281CBF95F802 -:10E33000380010F0020F1CD084F801B001202070CA -:10E3400084F804B0E78095F839002072688F608106 -:10E35000A88FA08185F837B047E0FFE7059800F166 -:10E36000580590F80C010028DBD1E87E0028D8D0B1 -:10E37000D5E7384602F060FC0290002808BFFFDFB6 -:10E38000029801F06FFE50B184F801B00F212170A6 -:10E39000E7802081012000E02BE0207125E0384655 -:10E3A00002F038FC0290002808BFFFDF079800B396 -:10E3B000029801F0AEFEE0B19DF8100038B9059862 -:10E3C000D0F8F8004188B94208BF80F800B038465C -:10E3D00007F08FF984F801B00C20207084F804B0A5 -:10E3E000E780287F207285F81BB00BB00120BDE8C4 -:10E3F000F08F022106F11C00FFF738FE18B9B08B30 -:10E4000050457FF41BAF0BB02046BDE8F04F14F031 -:10E41000D0BC10B512F08AFC042803D012F086FCA0 -:10E42000052802D10FF078FD28B90AF0A9F920B12A -:10E4300007F08AFC08B10C2010BD0DF051F8002047 -:10E4400010BD00005C00002032060020FFFFFFFF2F -:10E450001F0000006800002010B504460078002866 -:10E460001EBF0128122010BD12F060FC042806D047 -:10E4700012F05CFC052802D00AF082F928B10DF0F8 -:10E480007EF900281CBF0C2010BD2078002816BF84 -:10E4900002280020012004F11703E21D611CBDE8E1 -:10E4A00010400DF075B810B50446007800281EBF66 -:10E4B0000128122010BD12F039FC042803D012F0FC -:10E4C00035FC052802D10FF027FD28B90AF058F9CC -:10E4D00020B107F039FC08B10C2010BD20780028CD -:10E4E00016BF022800200120611C0CF0BFFF00288D -:10E4F00014BF0020072010BD10B50DF043F900280F -:10E5000014BF0020302010BD10B5044612F00EFCE0 -:10E51000042806D012F00AFC052802D00AF030F9CF -:10E5200008B10C2010BD20460DF026F9002010BDCA -:10E5300010B512F0FBFB042806D012F0F7FB0528FB -:10E5400002D00AF01DF928B10DF019F900281CBFFE -:10E550000C2010BD0DF075F8002010BDFF2181705A -:10E560004FF6FF718180FE4949680A7882718A8876 -:10E57000028149884181012141700020704710B516 -:10E58000002482B012F1080F16D00CDC12F1280F13 -:10E5900018BF12F1140F0FD012F1100F18BF12F1A3 -:10E5A0000C0F09D00EE012F1040F18BF002A03D09F -:10E5B000032A18BF042A05D1012807D0022809D050 -:10E5C00003280BD0122402B0204610BD104607F0DD -:10E5D0008CFDF8E710460FF03AFAF4E708461446C7 -:10E5E000694601F0FDFA002818BF0224EBD19DF81E -:10E5F0000000019880F857400024E4E710B5134666 -:10E6000001220DF0A6FF002010BD10B5044612F047 -:10E610008DFB052804BF0C2010BD204611F02AFEFA -:10E62000002010BD10B5044612F080FB042806D06F -:10E6300012F07CFB052802D00AF0A2F808B10C20E9 -:10E6400010BD2146002007F0C2F8002010BD10B513 -:10E65000044611F0B9FE50B10AF085F838B12078BF -:10E6600009F0DDFD20780FF090FC002010BD0C209B -:10E6700010BD10B5044612F059FB042806D012F064 -:10E6800055FB052802D00AF07BF808B10C2010BD1C -:10E690002146012007F09BF8002010BD38B5044644 -:10E6A0004FF6FF70ADF80000A079E179884213D0F1 -:10E6B00021791F299CBF61791F290DD8002211469D -:10E6C00014F030FF40B90022E079114614F02AFF1F -:10E6D00010B9207A072801D9122038BD0AF050F865 -:10E6E00060B912F023FB48B900216846FFF7BEFC71 -:10E6F00020B1204606F031F8002038BD0C2038BD8E -:10E7000070B504468078002582B01A2825D00EDC2A -:10E71000162844D2DFE800F04343434343214343F8 -:10E7200043434343434343434343432121212A2853 -:10E7300035D00BDCA0F11E000C2830D2DFE800F051 -:10E740002F2F2F2F2F2F2F2F2F2F2F0D3A38042819 -:10E7500025D2DFE800F0240224022088B0F5706F93 -:10E760001DD20126694601F03BFA00281EBF022097 -:10E7700002B070BD9DF80000002801980BBF00F1A9 -:10E78000F40100F5B87100F1F50300F271130246CF -:10E7900012D192F8D00092F8732052B903E002B07F -:10E7A0004FF0120070BD002818BF042801D008786F -:10E7B00068B102B00C2070BD92F80C0192F8732081 -:10E7C000002AF6D1002818BF0428F0D1F1E70E7016 -:10E7D000A07818709DF8000048B1019890F8DD000D -:10E7E00028B1019880F8DD50019809F0E8FD02B0E9 -:10E7F000002070BDF0B583B00C46694601F0F0F919 -:10E8000028B1204615F074FE03B00220F0BD019837 -:10E81000002700F1580500F1080600BF85F8407098 -:10E820003146204615F07AFE95F840000028F5D1D3 -:10E8300003B0F0BD2DE9F0410D4604460189808802 -:10E8400000230DF0BCFF696A814228BFBDE8F0815A -:10E85000401A401C4108A0884FF0000C401A80B2BA -:10E86000A08022896FF00E07511A8AB2228195F892 -:10E870005460618816F00C0F6FF00D0328D0B0F5CE -:10E88000747F38BF604606D35038C61700EB9660D9 -:10E8900003EBA01080B2814238BF0846608095F833 -:10E8A0005510E08811F00C0F1BD0B2F5747F09D31E -:10E8B000A2F15001CA1701EB926103EBA11100BF55 -:10E8C0001FFA81FC604528BF6046E080BDE8F0810A -:10E8D000022E1ABF03EBD00080B207EB9000DAD112 -:10E8E000D8E702291ABF03EBD2011FFA81FC07EB1C -:10E8F0009201E7D1E4E7F0B587B00C46054604A9DC -:10E9000001F06EF900281CBF07B0F0BD9DF81000A3 -:10E91000002814BF002201220599B1F84A30FB2BD0 -:10E9200028BFFB23B1F84CC0BCF1FB0F28BF4FF050 -:10E93000FB0C0C4FD7E90006BF68009001960297C8 -:10E94000ADF80230ADF806C06846FFF773FF65808A -:10E95000BDF80400E080BDF80800608104E000001C -:10E960005C00002040470200BDF80200A080BDF816 -:10E970000600208107B00020F0BD2DE9F04F89B0DE -:10E9800004460088694601F02BF95FEA00081CBFC5 -:10E9900009B0BDE8F08FB4F806C02289ACF11B01C4 -:10E9A0001220E12924BF09B0BDE8F08FB2F5A47FA1 -:10E9B0003CBF09B0BDE8F08F44F29025AA4284BF65 -:10E9C00009B0BDE8F08F00276388A188A3F11B067A -:10E9D000E12E24BF09B0BDE8F08FB1F5A47F2EBFB2 -:10E9E0008D4209B0BDE8F08F1120BCF1FB0F99BF3B -:10E9F00040F64806B24209B0BDE8F08FFB2B92BF4B -:10EA0000B14209B0BDE8F08F208806A901F0E8F80E -:10EA1000002818BFFFDF35D19DF8180000280CBF73 -:10EA2000012200220799B1F84A00FB2828BFFB20E9 -:10EA3000B1F84C30FB2B28BFFB23DFF858B7DBF8CD -:10EA400000C0DBF804A0DBF808B0CDF808C0CDF8B2 -:10EA50000CA0CDF810B0ADF80A00ADF80E3002A849 -:10EA6000FFF7E8FEBDF80C0060F31F45BDF810008D -:10EA700060F31F49BDF80A0060F30F05BDF80E00F2 -:10EA800060F30F0962881FFA89F1092091423CBFA7 -:10EA900009B0BDE8F08FA9B2E28891423CBF09B04D -:10EAA000BDE8F08F4FEA1941A288238901EB154197 -:10EAB0001A4491423CBF09B0BDE8F08F9DF80000B8 -:10EAC0004FF001090028019808D000F5CD7580F8B5 -:10EAD0009B91019890F8DE0148B307E000F582753C -:10EAE00080F80591019890F8280110B14FF03A088C -:10EAF00018E0E08868806088E8802089A880A08885 -:10EB00002881012228460199FFF794FEA888B04287 -:10EB100028BF40F64800A8802889B0421DD228812D -:10EB200085F800906F7009B04046BDE8F08FE0882E -:10EB300068806088E8802089A880A08828810022D9 -:10EB400028460199FFF776FEA888B04228BF40F614 -:10EB50004800A8802889B042E1D340F64800DEE7AB -:10EB60000BE710B5044612F0E1F8042806D012F0C5 -:10EB7000DDF8052802D009F003FE28B10CF0FFFDF6 -:10EB800000281CBF0C2010BD2078002816BF0228CA -:10EB900000200120E279611C0CF075FF002814BFF1 -:10EBA0000020022010BD817831F0070207BFC27833 -:10EBB00032F007031220704711F0040F0EBF12F05D -:10EBC000040F1120704701F023B810B504460178F6 -:10EBD000122084B0012918BF002904D002291EBFC9 -:10EBE000032904B010BD6178002918BF012904D0A1 -:10EBF00002291EBF032904B010BDE17B21B9A17811 -:10EC000001291CBF04B010BDA17831F005021CBF62 -:10EC100004B010BD11F0050F04BF04B010BD11F019 -:10EC2000040F1EBF112004B010BDE178E388628993 -:10EC300000291EBF012904B010BD042B2EBF042AD9 -:10EC400004B010BDA17B002904BF04B010BD07298A -:10EC500084BF04B010BD12F069F8042837D012F058 -:10EC600065F8052833D0A0788DF80800A0788DF8D5 -:10EC7000000060788DF8040020788DF80300A07BF8 -:10EC80008DF80500E07B002818BF01208DF80600F4 -:10EC9000A07810F0010F10D0E078012808BF022002 -:10ECA00003D000280CBF012000208DF80100E0886F -:10ECB000ADF80A006089ADF80C0002A811F091FBD4 -:10ECC000002804BF68460FF065F904B010BD04B019 -:10ECD0000C2010BD10B5044602781220012A0FD076 -:10ECE000002A18BF10BD012A26D012F01FF80528EF -:10ECF00004D011F0F6F9002808BF10BD0C2010BD9B -:10ED00006178002918BF012906D0022918BF10BD5B -:10ED1000A188002908BF10BD6388002B1CBFA188F3 -:10ED20000029E0D003EB83035B0001EB8101B3EB2F -:10ED3000012F28BF10BDD6E70FF01DF8002804BF33 -:10ED4000122010BD0FF02CF800200FF0D3F800288F -:10ED500018BF10BD60780FF0B1F8002818BF10BDC3 -:10ED6000A1886088BDE8104011F064BB002100F06C -:10ED7000B1BF017811F0010F02D0406813F0ECBF71 -:10ED800013F0B9BF2DE9F04F8FB00D460246AFF634 -:10ED90004411D1E90001CDE90B011146284600F0EC -:10EDA00099FF00281CBF0FB0BDE8F08F11F0BEFF27 -:10EDB00004280CD011F0BAFF052808D0F64F387897 -:10EDC00028B90EF0F6FAA0F57F41FF3903D00FB055 -:10EDD0000C20BDE8F08FF1480890F1480990F14807 -:10EDE0000A9008AA06210DA801F0B0FD040002BF98 -:10EDF00009200FB0BDE8F08F03210DF052F9B98A58 -:10EE0000A4F84A10FA8AA4F84C20F87C0090BB7C45 -:10EE1000208801F088FE002818BFFFDF208806F058 -:10EE200067FC268804F10E094FF0000B4FF00A0A28 -:10EE30000421484604F04DFF48460DF001FB062032 -:10EE400001F05EFD80461CE005A9062001F039FDB9 -:10EE500005A801F014FD5FEA000B10D1BDF8180001 -:10EE6000B04206D00798042249460E3015F074F9D6 -:10EE700070B105A801F003FD5FEA000BEED0A8F128 -:10EE80000108B8F1000F07DDBBF1000FDCD007E08F -:10EE900048460DF0DEFAF2E7BBF1000F08BFFFDFD6 -:10EEA000D9F800000CF07AFFBAF1010A01D000286D -:10EEB000BED0BDA004F1120600680190032101A894 -:10EEC00004F0DEFE002001A90A5C3254401CC0B2EE -:10EED0000328F9D3A88B6080688CA080288DE080FF -:10EEE000687A10F0010F18BF01217CD0388B0A46D8 -:10EEF00011F009FB0146A062204611F030FB4FF0F3 -:10EF0000000884F85E8084F85F80A878002816BF27 -:10EF10000228002001206076D5F80300C4F81A000A -:10EF2000B5F80700E0830BA904F1080015F0F6FA24 -:10EF30004FF0010984F80091B4F84C0004F5827692 -:10EF40004A46FB2828BFFB207989814238BF084602 -:10EF500094F855104FF4747A11F00C0F1CBF0AEBA3 -:10EF600080111FFA81FC72D0B989614538BF8C4687 -:10EF7000B4F84A10FB2928BFFB21FB898B4238BF1C -:10EF8000194694F854B01BF00C0F1CBF0AEB811308 -:10EF90009BB265D03F8A9F4238BF3B461B2918BFB2 -:10EFA000B3F5A47F65D0F080A6F808C07180B38067 -:10EFB00021463046FFF73EFCB08840F648018842C3 -:10EFC00028BF40F64800B0803089884228BF40F60C -:10EFD0004800308186F800908DF800800121684655 -:10EFE00004F04EFE00E02BE09DF8000000F0070169 -:10EFF000C0F3C1021144C0F3401008448DF8000072 -:10F00000401D207609283CBF08302076002120468C -:10F010000DF047F868780EF0B9FEA9782878EA1C58 -:10F020000EF087FE002808BF122650D00EF0B8FE62 -:10F03000A9782878EA1C0EF01BFF06001FD046E0D6 -:10F0400010F0020F14BF022100214FE7FFE7022951 -:10F0500007BF81003C31C10070311FFA81FC83E79A -:10F06000BBF1020F07BF8B003C33CB0070339BB268 -:10F0700090E71B2818BFBCF5A47F94D1ACE7012012 -:10F080000EF04CFE060022D1214603200EF028FF90 -:10F0900006001CD1687A8DF8000010F0010F05D031 -:10F0A0006889ADF80200288AADF80400684611F0BE -:10F0B00098F9064695F83A00002818BF01200EF08E -:10F0C00033FE26B9204611F026F9060009D0208823 -:10F0D00006F00FFB2088062101F07CFC002818BFF9 -:10F0E000FFDF30460FB0BDE8F08F0146002049E653 -:10F0F00038B5294C207870B911F018FE052805D0D4 -:10F100000EF057F9A0F57F41FF3904D0684611F0A1 -:10F11000CCF910B113E00C2038BD0098008806F03F -:10F12000E8FA00980621008801F054FC002818BF76 -:10F13000FFDF012020701D480078FCF727FE00202B -:10F1400038BD70B4B0F802C08188C3880289448990 -:10F150008089ACF1060640F67B45AE423CBF8E1F6F -:10F16000AE4214D28C4598BFB3F5FA7F3EBFA2F1F0 -:10F170000A0C0F4D15EB0C0509D25B1C5943B1EB82 -:10F18000820F04DA84429EBF002070BC704730209A -:10F1900070BC70474047020032060020F405002092 -:10F1A0006800002022060020112233005C000020AD -:10F1B00089F3FFFF2DE9F047B0F802C004468188CB -:10F1C000C388028947898689ACF1060940F67B48E5 -:10F1D00030200025C1453ABFA1F10609C145BDE86F -:10F1E000F0878C4598BFB3F5FA7F3DBFA2F10A0CBA -:10F1F000DFF8B48418EB0C08BDE8F0875B1C5943BA -:10F20000B1EB820FA8BFBDE8F087B74288BFBDE869 -:10F21000F0872088062101F0CBFB68B190F8D01070 -:10F2200090F8732042B9002918BF042904D0D0F8FF -:10F23000F8100A781AB106E00220BDE8F087D0F88D -:10F240004421127812B13A20BDE8F08705228A7174 -:10F25000D0F8F8100D81D0F8F820A1885181D0F8AD -:10F26000F820E1889181D0F8F8202189D181D0F867 -:10F27000F8100A894B899A429EBF8A79082A9A42D5 -:10F2800024BF1220BDE8F08722884A80D0F8F80019 -:10F29000022101700020BDE8F087F0B583B005467B -:10F2A0000DF0F2F8002802BF122003B0F0BD0026D6 -:10F2B000FE4F012429467C70B81C15F02FF97E7092 -:10F2C0006946062001F0FDFA002818BFFFDF6846F6 -:10F2D00001F0D5FA002808BFBDF804500AD1029801 -:10F2E00080F80041684601F0CAFA18B9BDF8040078 -:10F2F000A842F4D103B00020F0BD10B50446008848 -:10F30000062101F055FB68B190F8D01090F87320F9 -:10F3100042B9002918BF042904D0D0F8F8100A789F -:10F3200012B105E0022010BDD0F8442112780AB1D4 -:10F330003A2010BD90F8962012F0010F04BF0C2067 -:10F3400010BDD4F80220D4F806304A608B60D0F8A3 -:10F35000F81062898A81D0F8F810E268C1F80E20AE -:10F360002269C1F812206269C1F81620A269C1F8A9 -:10F370001A20D0F8F82003211170D0F8F800218865 -:10F380004180002010BDF8B515460E46044609F030 -:10F39000F7F900281CBF0C20F8BD20781223EF28B5 -:10F3A00073D86088ADF8000010F0100F4FF0000126 -:10F3B0000CD010F0010F00F002021BD0B2B110F01F -:10F3C000080F08BF10F0040F1ED01AE010F0080F4D -:10F3D0007ED110F0200F18BF10F0030F78D110F07D -:10F3E000010F18BF10F0020F72D10DE010F0040FE2 -:10F3F0000AD106E02AB110F0080F08BF10F0040F80 -:10F4000002D010F00F0F63D1608810F0080F09D1FF -:10F41000D4E901C2624528BFBCF1200F58D3B2F134 -:10F42000807F55D2227B002A52D0072A50D894F8E8 -:10F430000DC0BCF1000F18BFBCF1010F05D0BCF12D -:10F44000020F18BFBCF1030F42D110F0040F05D119 -:10F45000BCF1020F18BFBCF1030F07D1A27B002A39 -:10F4600018BF012A34D110F0040F08D1627D002AA0 -:10F4700018BF012A03D0022A18BF032A28D1E27D2F -:10F4800010F0100F02D0012A10D021E0012A18BF7D -:10F49000032A1DD110F0100F08D1627E012A1CBF73 -:10F4A000022A032A14D1A27E0F2A11D8E27E002A52 -:10F4B00018BF012A0CD1E27D1123032A08D010F0D5 -:10F4C000100F04BF627E032A02D010F0400F01D05B -:10F4D0001846F8BD3170A17555B9FF208DF80000B0 -:10F4E0006946002006F0EDFD6946002006F0D4FDD7 -:10F4F0002046BDE8F84006F004BD002243E72DE9B0 -:10F50000F0470446C0780F46122510B106F063FD9F -:10F5100050B1607804280AD094F8038094F80090E1 -:10F520006678B8F1FB0F12D92846BDE8F08709F0DC -:10F5300027F90028F8D006F0A6FD0028F4D106F03F -:10F540009AFA002804BFE0780028EDD1E4E71FB163 -:10F55000B8F11F0F23D9E7E706F08DFA28B1B8F10B -:10F560001F0F98BF032E07D0DEE7032E18BF042E0F -:10F5700002D0B8F1000FD7D009F002F9002818BF67 -:10F58000032E04D0042E1CBF0C20BDE8F087484693 -:10F5900006F069FA002804BF4220BDE8F087E07851 -:10F5A00061781F2898BF03291CBF1120BDE8F08790 -:10F5B000211D06F086FD0020BDE8F08700219EE7B2 -:10F5C0002DE9F0470446C0788846122710B106F0AE -:10F5D00098FD38B16578042D04D0E67894F8009051 -:10F5E000FB2E02D93846BDE8F087B8F1000F02D0F3 -:10F5F0001F2E21D9F6E706F03EFA20B11F2E98BF44 -:10F60000032D06D0EEE7032D18BF042D01D0002EE8 -:10F61000E8D009F0B5F8002818BF032D04D0042D58 -:10F620001CBF0C20BDE8F087484606F01CFA0028F5 -:10F6300004BF4220BDE8F087E07861781F2898BFBA -:10F6400003291CBF1120BDE8F087211D06F024FD11 -:10F650000020BDE8F0870021B2E72DE9F041044623 -:10F660004078422582B0012808D8A07806F0FBF93E -:10F6700020B120781225012804D0A0B102B028467C -:10F68000BDE8F08106F04BFD20B1A0880028F5D040 -:10F690008028F3D806F050FD90B160780028EDD0B6 -:10F6A0002078012810D003E089F3FFFF3206002004 -:10F6B00007F0EAFE044608F0DBFC002800F0EA80D0 -:10F6C00002B00C20BDE8F08106F046FB38B906F028 -:10F6D0001FFD002802BF122002B0BDE8F08109F032 -:10F6E0004FF80028ECD106F07EF9A0F57F41FF39F4 -:10F6F000E6D106F050FBA08842F2107100FB01F643 -:10F70000A079314606F078FC06F0F4FC18B300222C -:10F71000072101A801F01AF9040002BF092002B074 -:10F72000BDE8F081F6480321846020460CF072FBAE -:10F73000204607F0EBF8F34DA88AA4F84A00E88ABF -:10F74000A4F84C0006F097F968B1288B012108F065 -:10F7500013FEA0620FE03146002008F063FD002890 -:10F7600018BFFFDFA1E006F0E9FC2A8B0146104636 -:10F7700008F002FEA06201460022204607F087FE44 -:10F7800006F079F9002808BF06F0D8FCE87C009064 -:10F79000AB7CEA8AA98A208801F0C5F9002818BF45 -:10F7A000FFDF208805F0A4FF3146204608F03AFD2F -:10F7B000002818BFFFDF2146B4F84C00002204F5F2 -:10F7C000CD76FB2828BFFB206B89834238BF1846C3 -:10F7D00091F855304FF4747413F00C0F1CBF04EB08 -:10F7E00080131FFA83FC38D0AF89674528BF67466E -:10F7F000B1F84A30FB2B28BFFB23B5F80EC09C455F -:10F8000038BF634691F854C01CF00C0F1CBF04EBCA -:10F81000831C1FFA8CF829D02C8A444528BF444603 -:10F820001B2B18BFB4F5A47F2ED0F08037817380D6 -:10F83000B4803046FEF7FEFFB08840F648018842AB -:10F8400028BF40F64800B0803089884228BF40F683 -:10F85000480030810120307027E0022B07BF830071 -:10F860003C33C30070331FFA83FCBDE7BCF1020FC9 -:10F8700007BF4FEA830C0CF13C0C4FEAC30C0CF1B0 -:10F88000700C1FFA8CF8C7E71B2818BFB7F5A47FC8 -:10F89000CBD10AE04CB1208805F02BFF208807214E -:10F8A00001F098F8002818BFFFDF002002B0BDE883 -:10F8B000F0810021D1E610B50C46072101F078F85F -:10F8C000002804BF022010BD90F8731109B10C206C -:10F8D00010BD90F86510142912BF152990F8C011B9 -:10F8E0000029F4D12168C0F874116168C0F878115A -:10F8F000A168C0F87C11E168C0F88011012180F88E -:10F900007311002010BD10B5072101F051F8002837 -:10F9100004BF022010BD90F8731109B10C2010BD76 -:10F9200090F86510142918BF1529F7D1022180F825 -:10F930007311002010BDF0B50E464BF68032122137 -:10F9400083B0964217D8B6B1694600F049F900284D -:10F950001CBF03B0F0BD019800F15807841C258836 -:10F960003246294638460CF00FFA2088A842F6D1D4 -:10F9700003B00020F0BD03B00846F0BD10B582B062 -:10F9800004460088694600F02BF900281CBF02B02D -:10F9900010BD0198A37800F1580190F82C209A42EC -:10F9A00002BF0C2002B010BD7F220A728A720022B0 -:10F9B000CA72E17880F82D10217980F82E10A17894 -:10F9C00080F82C1002B0104610BD10B582B00C4665 -:10F9D000694600F005F900281CBF02B010BD01986F -:10F9E00090F87300002818BF0120207002B000209A -:10F9F00010BD30B583B00D461446694600F0F0F8EE -:10FA000000281CBF03B030BD019890F82C000128DD -:10FA10001EBF0C2003B030BD019890F86010297013 -:10FA200090F86100207003B0002030BD70B50D4625 -:10FA30001646072100F0BCFF002804BF022070BD5D -:10FA400083884FF0010CC28841880CEB430C65455C -:10FA50001AD342F2107C02FB0CF240F6C41C01FBEC -:10FA60000CF1B2FBF1F1491E8CB2B4F5FA7F88BFFC -:10FA70004FF4FA74A54238BF2C46621C591CB2FBE5 -:10FA8000F1F25143491E8BB290F8AC11002908BF26 -:10FA900003843380002070BD10B50C46072100F0B0 -:10FAA00087FF002804BF022010BD80F8DF40002C33 -:10FAB0001EBF90F8DD10002908F081FC002010BD69 -:10FAC000017800291CBF417800290ED041881B29EC -:10FAD00021BF81881B29C188022906D30A490268EF -:10FAE00040680A654865002070471220704710B5CD -:10FAF000044610F005FD204608F009FC002010BD6A -:10FB00005C00002032060020F40500202DE9F041C1 -:10FB100016460F46044601221146384610F0F3FC03 -:10FB200005460121384608F027FC854228BF2846B3 -:10FB30000123E100503189B2E631884206D901F152 -:10FB40009602401AB0FBF2F0401C83B233800020D2 -:10FB5000BDE8F08110B5044611F0E8F8042806D09D -:10FB600011F0E4F8052802D008F00AFE08B10C20D4 -:10FB700010BD601C0BF05DFF207800F0010006F066 -:10FB800005F9207800F001000EF005F9002010BD05 -:10FB900010B50446072000F0A5FE00281CBF0C206D -:10FBA00010BD207810F0010F11D0002260781146AE -:10FBB00013F0B8FC00281CBF122010BDA0680AF08A -:10FBC00048FA607861680AF04DFA002010BD002004 -:10FBD0000AF03FFA002108460AF044FA002010BD5E -:10FBE00070B50C460546062100F0E2FE606010B1DB -:10FBF0000020207070BD0721284600F0D9FE60600B -:10FC0000002804BF022070BD01202070002070BDBC -:10FC100010B582B0044600886946FFF7E1FF020094 -:10FC20001CBF02B010BDA088002818BF012804D056 -:10FC300002281EBF122002B010BDA178002908BF03 -:10FC40000321E078002808BF03204FF0000C9DF846 -:10FC500000400123002C019C06D084F8A531019CB2 -:10FC600094F8F241ECB124E084F80F31019C94F84F -:10FC700034413CB9019C94F80E411CB9019C94F8A4 -:10FC80007D400CB13A2208E0019C84F80E31019BC2 -:10FC900083F81011019981F81101019880F80FC1C2 -:10FCA00015E0019C94F8A4411CB9019C94F87D4096 -:10FCB0000CB13A2208E0019C84F8A431019B83F83E -:10FCC000A611019981F8A701019880F8A5C102B099 -:10FCD000104610BD427A12F0070F10D032F0070321 -:10FCE0000DD112F0040F01D011207047012A18BF66 -:10FCF000022AF9D190F83A301BB9012A01D012201A -:10FD000070472DE9F0074FF0000C12F0010F40F69C -:10FD1000774740F67B4337D069B14489B0F810C0CB -:10FD2000261F43F6FD75AE423CBFACF10406AE4261 -:10FD300026D2644524D3C68AB0F81CC0448C058DF5 -:10FD4000B0F82E90B0F83480A6F1060A9A453CBF70 -:10FD5000ACF1060A9A4513D2664598BFB4F5FA7F0E -:10FD60003CBFA5F10A06BE420AD2641C04FB0CFC8F -:10FD7000BCEB850F04DAC14598BF4FF0010C03D9E5 -:10FD8000BDE8F0073020704712F0020F22D000EBE0 -:10FD90004C02D68AB2F81CC0558C148DB2F82E8055 -:10FDA000928EA6F106094B4584BFACF106094B457E -:10FDB000E6D9664598BFB5F5FA7F3CBFA4F10A03C2 -:10FDC000BB42DDD26B1C03FB0CF3B3EB840FD7DA21 -:10FDD0009045D5D802782AB1012A13D0BDE8F007A2 -:10FDE000122070470029817808D0002918BF012906 -:10FDF00008D0022918BF032904D0EFE7002918BF53 -:10FE00000129EBD14078002818BF012803D002282F -:10FE100018BF0328E2D1BDE8F007002070470000BA -:10FE200030B5058825F4004421448CB24FF40041DC -:10FE300094420AD2121B92B21B339A4201D2A943B6 -:10FE400007E005F40041214303E0A21A92B2A9435E -:10FE50001143018030BD0844083050434A31084402 -:10FE600080B2704770B51D4616460B4604462946BB -:10FE70003046049AFFF7EFFF0646B34200D2FFDF99 -:10FE80002821204614F035FA4FF6FF70A082283E54 -:10FE9000B0B265776080B0F5004F00D9FFDF6188B0 -:10FEA00005F13C00814200D2FFDF60880835401B2D -:10FEB000343880B220801B2800D21B2020800020F4 -:10FEC000A07770BD8161886170472DE9F05F0D46B4 -:10FED000C188044600F12809008921F4004620F475 -:10FEE000004800F062FB10B10020BDE8F09F4FF029 -:10FEF000000A4FF0010BB0450CD9617FA8EB06005A -:10FF0000401A0838854219DC09EB060000210580FB -:10FF100041801AE06088617F801B471A083F0DD43A -:10FF20001B2F00DAFFDFBD4201DC294600E0B9B239 -:10FF3000681A0204120C04D0424502DD84F817A0AE -:10FF4000D2E709EB06000180428084F817B0CCE7C5 -:10FF500070B5044600F12802C088E37D20F400401B -:10FF60002BB110440288438813448B4201D20020F5 -:10FF700070BD00258A4202D30180458008E0891ABD -:10FF80000904090C418003D0A01D00F01EFB08E00D -:10FF9000637F00880833184481B26288A01DFFF790 -:10FFA0003FFFE575012070BD70B5034600F12804E0 -:10FFB000C588808820F400462644A84202D100204B -:10FFC000188270BD98893588A84206D3401B758871 -:10FFD0002D1A2044ADB2C01E05E02C1AA5B25C7FDC -:10FFE00020443044401D0C88AC4200D90D809C89CF -:10FFF00024B1002414700988198270BD0124F9E726 -:020000040001F9 -:1000000070B5044600F12801808820F400404518AE -:10001000208A002825D0A189084480B2A08129889F -:100020006A881144814200D2FFDF2888698800264F -:100030000844A189884212D1A069807F287169880B -:1000400019B1201D00F0C1FA08E0637F2888083349 -:10005000184481B26288201DFFF7E2FEA681268245 -:10006000012070BD2DE9F0414189878800260446B2 -:1000700000F12805B94218D004F10A0821F4004023 -:100080002844418819B1404600F09FFA08E0637F98 -:1000900000880833184481B262884046FFF7C0FEEA -:1000A000761C6189B6B2B942E8D13046BDE8F0812C -:1000B0002DE9F04104460B4627892830A68827F40D -:1000C0000041B4F80A8001440D46B74201D1002036 -:1000D000ECE70AB1481D106023B1627F691D184624 -:1000E00014F066F82E88698804F1080021B18A1995 -:1000F00096B200F06AFA06E0637F628808339919C5 -:1001000089B2FFF78DFE474501D1208960813046D5 -:10011000CCE78188C088814201D10120704700204E -:10012000704701898088814201D1012070470020F9 -:10013000704770B58588C38800F1280425F4004213 -:1001400023F4004114449D421AD08389058A5E1924 -:1001500025886388EC18A64214D313B18B4211D3BF -:100160000EE0437F08325C192244408892B2801A24 -:1001700080B22333984201D211B103E08A4201D107 -:10018000002070BD012070BD2DE9F0478846C18870 -:100190000446008921F4004604F1280720F40045B4 -:1001A00007EB060900F001FA002178BBB54204D93B -:1001B000627FA81B801A002503E06088627F801B95 -:1001C000801A083823D4E28962B1B9F80020B9F85E -:1001D00002303BB1E81A2177404518DBE08938440A -:1001E000801A09E0801A217740450ADB607FE189A7 -:1001F0000830304439440844C01EA4F81280BDE8D9 -:10020000F087454503DB01202077E7E7FFE76182C0 -:100210000020F4E72DE9F74F044600F12805C088D7 -:10022000884620F4004A608A05EB0A0608B140457A -:1002300002D20020BDE8FE8FE08978B13788B6F899 -:10024000029007EB0901884200D0FFDF207F4FF0CA -:10025000000B50EA090106D088B33BE00027A07FDD -:10026000B9463071F2E7E18959B1607F294408301D -:1002700050440844B4F81F1020F8031D94F82110CE -:100280008170E28907EB080002EB0801E181308010 -:10029000A6F802B002985F4650B1637F30880833F9 -:1002A000184481B26288A01DFFF7BAFDE78121E002 -:1002B000607FE18908305044294408442DE0FFE77D -:1002C000E089B4F81F102844C01B20F8031D94F8DF -:1002D0002110817009EB0800E28981B202EB08006D -:1002E000E081378071800298A0B1A01D00F06DF907 -:1002F000A4F80EB0A07F401CA077A07D08B1E088D4 -:10030000A08284F816B000BFA4F812B084F817B029 -:1003100001208FE7E0892844C01B30F8031DA4F8B2 -:100320001F10807884F82100EEE710B5818800F175 -:10033000280321F400442344848AC288A14212D0B5 -:10034000914210D0818971B9826972B11046FFF76C -:10035000E8FE50B91089283220F400401044197981 -:100360000079884201D1002010BD184610BD00F16F -:100370002803407F08300844C01E1060088808B970 -:10038000DB1E136008884988084480B270472DE955 -:10039000F04100F12806407F1C4608309046431883 -:1003A00008884D88069ADB1EA0B1C01C80B290421E -:1003B00014D9801AA04200DB204687B298183A462A -:1003C000414613F0C9FE002816D1E01B84B2B844A0 -:1003D000002005E0ED1CADB2F61EE8E7101A80B271 -:1003E0000119A94206D8304422464146BDE8F041F1 -:1003F00013F0B2BE4FF0FF3058E62DE9F04100F1A6 -:100400002804407F1E46083090464318002508887F -:100410004F88069ADB1E90B1C01C80B2904212D960 -:10042000801AB04200DB304685B299182A46404611 -:1004300013F0BEFE701B86B2A844002005E0FF1C2E -:10044000BFB2E41EEAE7101A80B28119B94206D899 -:1004500021183246404613F0ABFEA81985B2284653 -:1004600024E62DE9F04100F12804407F1E460830C3 -:1004700090464318002508884F88069ADB1E90B1E5 -:10048000C01C80B2904212D9801AB04200DB3046C4 -:1004900085B298182A46414613F08AFE701B86B230 -:1004A000A844002005E0FF1CBFB2E41EEAE7101AD2 -:1004B00080B28119B94206D820443246414613F031 -:1004C00077FEA81985B22846F0E5401D704710B5A3 -:1004D000044600F12801C288808820F400431944B2 -:1004E000904206D0A28922B9228A12B9A28A9042E9 -:1004F00001D1002010BD0888498831B1201D00F0CD -:1005000064F800202082012010BD637F62880833D8 -:10051000184481B2201DFFF783FCF2E70021C1815E -:1005200001774182C1758175704703881380C28944 -:1005300042B1C28822F4004300F128021A440A6042 -:10054000C08970470020704710B50446808AA0F526 -:100550007F41FF3900D0FFDFE088A082E08900B151 -:100560000120A07510BD4FF6FF71818200218175B9 -:10057000704710B50446808AA0F57F41FF3900D14D -:10058000FFDFA07D28B9A088A18A884201D1002080 -:1005900010BD012010BD8188828A914201D1807DE9 -:1005A00008B1002070470120704720F4004221F478 -:1005B00000439A4207D100F4004001F40041884210 -:1005C00001D0012070470020704730B504460088F4 -:1005D0000D4620F40040A84200D2FFDF21884FF4EE -:1005E000004088432843208030BD70B50C0005468C -:1005F00009D0082C00D2FFDF1DB1A1B2286800F09D -:1006000044F8201D70BD0DB100202860002070BD91 -:100610000021026803E093881268194489B2002A15 -:10062000F9D100F032B870B500260D46044608290D -:1006300000D2FFDF206808B91EE0044620688188E8 -:10064000A94202D001680029F7D181880646A94253 -:1006500001D100680DE005F1080293B20022994231 -:1006600009D32844491B0260818021680968216000 -:100670000160206000E00026304670BD00230B6062 -:100680008A8002680A600160704700234360021D8F -:10069000018102607047F0B50F4601884088154619 -:1006A0000C181E46AC4200D3641B3044A84200D94B -:1006B000FFDFA019A84200D9FFDF3819F0BD2DE9EE -:1006C000F041884606460188408815460C181F46AA -:1006D000AC4200D3641B3844A84200D9FFDFE019C4 -:1006E000A84200D9FFDF70883844708008EB04000E -:1006F000BDE8F0812DE9F041054600881E46174609 -:10070000841B8846BC4200D33C442C80688830441B -:10071000B84200D9FFDFA019B84200D9FFDF6888CE -:100720003044688008EB0400E2E72DE9F0410688D8 -:100730001D460446701980B2174688462080B8428C -:1007400001D3C01B20806088A84200D2FFDF70194F -:10075000B84200D9FFDF6088401B608008EB0600CC -:10076000C6E730B50D460188CC18944200D3A41AD0 -:100770004088984200D8FFDF281930BD2DE9F041AC -:10078000C84D04469046A8780E46A04200D8FFDF28 -:1007900005EB8607B86A50F8240000B1FFDFB8689F -:1007A000002816D0304600F044F90146B868FFF73B -:1007B0003AFF05000CD0B86A082E40F8245000D348 -:1007C000FFDFB9484246294650F826302046984770 -:1007D0002846BDE8F0812DE9F8431E468C19914664 -:1007E0000F460546FF2C00D9FFDFB14500D9FFDFDA -:1007F000E4B200954DB300208046E81C20F00300D1 -:10080000A84200D0FFDF4946DFF89892684689F891 -:10081000001089F8017089F8024089F8034089F8CE -:10082000044089F8054089F8066089F80770414658 -:1008300000F008F9002142460F464B460098C01CC4 -:1008400020F00300009012B10EE00120D4E703EB8A -:100850008106B062002005E0D6F828C04CF8207070 -:10086000401CC0B2A042F7D30098491C00EB8400A2 -:10087000C9B200900829E1D3401BBDE8F88310B548 -:10088000044603F071FD08B1102010BD2078854AA0 -:10089000618802EB800092780EE0836A53F8213081 -:1008A00043B14A1C6280A180806A50F82100A06098 -:1008B000002010BD491C89B28A42EED86180052013 -:1008C00010BD70B505460C46084603F04DFD08B155 -:1008D000102070BD082D01D3072070BD25700020A9 -:1008E000608070BD0EB56946FFF7EBFF00B1FFDF1A -:1008F0006846FFF7C4FF08B100200EBD01200EBD01 -:1009000010B50446082800D3FFDF6648005D10BD1F -:100910003EB5054600246946FFF7D3FF18B1FFDF57 -:1009200001E0641CE4B26846FFF7A9FF0028F8D094 -:100930002846FFF7E5FF001BC0B23EBD5949897844 -:10094000814201D9C0B27047FF2070472DE9F041C4 -:10095000544B062903D007291CD19D7900E00025BE -:1009600000244FF6FF7603EB810713F801C00AE07D -:100970006319D7F828E09BB25EF823E0BEF1000FC0 -:1009800004D0641CA4B2A445F2D8334603801846B0 -:10099000B34201D100201CE7BDE8F041EEE6A0F52E -:1009A0007F43FF3B01D0082901D300207047E5E6D3 -:1009B000A0F57F42FF3A0BD0082909D2394A937833 -:1009C000834205D902EB8101896A51F82000704702 -:1009D000002070472DE9F04104460D46A4F57F4103 -:1009E00043F20200FF3902D0082D01D30720F0E6C0 -:1009F0002C494FF000088A78A242F8D901EB85060D -:100A0000B26A52F82470002FF1D0274839462030BE -:100A100050F8252020469047B16A284641F82480A6 -:100A200000F007F802463946B068FFF727FE0020BD -:100A3000CFE61D49403131F810004FF6FC71C01C63 -:100A4000084070472DE9F843164E884605460024B5 -:100A50002868C01C20F0030028602046FFF7E9FF4B -:100A6000315D4843B8F1000F01D0002200E02A6850 -:100A70000146009232B100274FEA0D00FFF7B5FDA5 -:100A80001FB106E001270020F8E706EB8401009A79 -:100A90008A602968641C0844E4B22860082CD7D313 -:100AA000EBE60000500600204C47020070B50E46F1 -:100AB0001D46114600F0D4F804462946304600F0A1 -:100AC000D8F82044001D70BD2DE9F04190460D4638 -:100AD00004004FF0000610D00027E01C20F00300B7 -:100AE000A04200D0FFDFDDB141460020FFF77DFDD1 -:100AF0000C3000EB850617B112E00127EDE7614FDE -:100B000004F10C00A9003C602572606000EB8500D8 -:100B10002060606813F0EDFB41463868FFF765FD23 -:100B20003046BDE8F0812DE9FF4F564C804681B03C -:100B300020689A46934600B9FFDF2068027A424552 -:100B400003D9416851F8280020B143F2020005B0F2 -:100B5000BDE8F08F5146029800F082F886B2584600 -:100B60000E9900F086F885B27019001D87B22068D2 -:100B7000A14639460068FFF756FD04001FD0678084 -:100B800025802946201D0E9D07465A4601230095C3 -:100B9000FFF768F92088314638440123029ACDF8DE -:100BA00000A0FFF75FF92088C1193846FFF78AF9DE -:100BB000D9F800004168002041F82840C7E7042028 -:100BC000C5E770B52F4C0546206800B9FFDF2068E7 -:100BD000017AA9420ED9426852F8251051B100237A -:100BE00042F825304A880068FFF748FD2168002058 -:100BF0000A7A08E043F2020070BD4B6853F82030D7 -:100C000033B9401CC0B28242F7D80868FFF700FD34 -:100C1000002070BD70B51B4E05460024306800B939 -:100C2000FFDF3068017AA94204D9406850F82500F6 -:100C300000B1041D204670BD70B5124E054600245B -:100C4000306800B9FFDF3068017AA94206D94068F0 -:100C500050F8251011B131F8040B4418204670BD2E -:100C600010B50A460121FFF7F6F8C01C20F003007A -:100C700010BD10B50A460121FFF7EDF8C01C20F0A9 -:100C8000030010BD7000002070B50446C2F11005CD -:100C9000281913F08DFA15F0FF0108D0491EC9B2CA -:100CA000802060542046BDE8704013F000BB70BD4A -:100CB00030B505E05B1EDBB2CC5CD55C6C40C45447 -:100CC000002BF7D130BD10B5002409E00B78521E7F -:100CD00044EA430300F8013B11F8013BD2B2DC09BE -:100CE000002AF3D110BD2DE9F04389B01E46DDE99D -:100CF000107990460D00044622D002460846F94974 -:100D0000FDF77CFC102221463846FFF7DCFFE07B34 -:100D1000000606D5F34A3946102310320846FFF77D -:100D2000C7FF102239464846FFF7CDFFF87B000683 -:100D300006D5EC4A4946102310320846FFF7B8FFA3 -:100D40001021204613F0B3FA0DE0103EB6B208EBC6 -:100D50000601102322466846FFF7AAFF22462846CE -:100D60006946FDF74BFC102EEFD818D0F2B2414681 -:100D70006846FFF789FF10234A46694604A8FFF733 -:100D800097FF1023224604A96846FFF791FF2246E9 -:100D900028466946FDF732FC09B0BDE8F083102310 -:100DA0003A464146EAE770B59CB01E4605461346F2 -:100DB00020980C468DF80800202219460DF10900F4 -:100DC00013F0F6F9202221460DF1290013F0F0F975 -:100DD00017A913A8CDE90001412302AA31462846EC -:100DE000FFF781FF1CB070BD2DE9FF4F9FB014AE1F -:100DF000DDE92D5410AFBB49CDE900762023203129 -:100E00001AA8FFF770FF4FF000088DF808804FF028 -:100E100001098DF8099054F8010FCDF80A00A08857 -:100E2000ADF80E0014F8010C1022C0F340008DF84C -:100E3000100055F8010FCDF81100A888ADF8150085 -:100E400015F8010C2C99C0F340008DF8170006A886 -:100E5000824613F0ADF90AA883461022229913F0B6 -:100E6000A7F9A0483523083802AA40688DF83C80CD -:100E7000CDE900760E901AA91F98FFF734FF8DF880 -:100E800008808DF809902068CDF80A00A088ADF898 -:100E90000E0014F8010C1022C0F340008DF8100071 -:100EA0002868CDF81100A888ADF8150015F8010CD8 -:100EB0002C99C0F340008DF81700504613F078F9D4 -:100EC00058461022229913F073F9864835230838C2 -:100ED00002AA40688DF83C90CDE900760E901AA9E0 -:100EE0002098FFF700FF23B0BDE8F08FF0B59BB06E -:100EF0000C460546DDE922101E461746DDE9203284 -:100F0000D0F801C0CDF808C0B0F805C0ADF80CC0ED -:100F10000078C0F340008DF80E00D1F80100CDF844 -:100F20000F00B1F80500ADF8130008781946C0F3BA -:100F300040008DF815001088ADF8160090788DF8F7 -:100F400018000DF11900102213F032F90DF12900EB -:100F50001022314613F02CF90DF1390010223946D8 -:100F600013F026F917A913A8CDE90001412302AA1D -:100F700021462846FFF7B7FE1BB0F0BDF0B5A3B081 -:100F800017460D4604461E46102202A8289913F063 -:100F90000FF906A82022394613F00AF90EA82022DC -:100FA000294613F005F91EA91AA8CDE9000150231E -:100FB00002AA314616A8FFF796FE1698206023B0C5 -:100FC000F0BDF0B589B00446DDE90E070D4639786D -:100FD000109EC1F340018DF8001031789446C1F3A2 -:100FE00040018DF801101968CDF802109988ADF80C -:100FF000061099798DF808100168CDF809108188DC -:10100000ADF80D1080798DF80F0010236A46614607 -:1010100004A8FFF74DFE2246284604A9FDF7EEFA84 -:10102000D6F801000090B6F80500ADF80400D7F836 -:101030000100CDF80600B7F80500ADF80A00002061 -:10104000039010236A46214604A8FFF731FE22468A -:10105000284604A9FDF7D2FA09B0F0BD1FB51C68F7 -:1010600000945B68019313680293526803920246EE -:1010700008466946FDF7C2FA1FBD10B588B00446A0 -:10108000106804905068059000200690079008466C -:101090006A4604A9FDF7B2FABDF80000208008B046 -:1010A00010BD1FB51288ADF800201A88ADF80220D7 -:1010B0000022019202920392024608466946FDF719 -:1010C0009DFA1FBD7FB5074B14460546083B9A1C89 -:1010D0006846FFF7E6FF224669462846FFF7CDFF40 -:1010E0007FBD0000A447020070B5044600780E469C -:1010F000012813D0052802D0092813D10EE0A068DA -:1011000061690578042003F0BDF8052D0AD0782325 -:1011100000220420616903F00BF803E004206169F8 -:1011200003F0B0F831462046BDE8704001F086B8C3 -:1011300010B500F12D02C3799478411D64F00304C9 -:101140002340C371DB070DD04B79547923404B7199 -:101150000B79127913400B718278C9788A4200D9D1 -:10116000817010BD00224A710A71F5E741780129AA -:1011700000D00C21017070472DE9F04F93B04FF073 -:10118000000B0C690D468DF820B0097801260C2063 -:1011900017464FF00D084FF0110A4FF008091B29B0 -:1011A00075D2DFE811F01B00C30206031E035D03C6 -:1011B0007003A203B703F803190461049304A004A5 -:1011C000EC042A05340552055D05EE0531063406AA -:1011D00063067F06F9061D07E606EB0614B12078C4 -:1011E0001D282AD0D5F808805FEA08004FD00120DA -:1011F0008DF82000686A02220D908DF824200A20C4 -:101200008DF82500A8690A90A8880028EED098F8E3 -:10121000001091B10F2910D27ED2DFE801F07D13CA -:1012200049DEFEFDFCFBFAF938089CF8F7000228BD -:101230002DD124B120780C2801D00026EFE38DF8C1 -:101240002020CBE10420696A03F01CF8A888072855 -:10125000EED1204600F0EDFF022809D0204600F034 -:10126000E8FF032807D9204600F0E3FF072802D251 -:101270000120207004E0002CB8D020780128D7D1BC -:1012800098F80400C11F0A2902D30A2061E0C4E1D2 -:10129000A070D8F80010E162B8F80410218698F820 -:1012A000060084F83200012028700320207044E0FA -:1012B0000728BDD1002C99D020780D28B8D198F8F6 -:1012C000031094F82F20C1F3C000C2F3C0021042F3 -:1012D00001D0062000E00720890707D198F8051003 -:1012E0000142D2D198F806100142CED194F83120B3 -:1012F00098F8051020EA02021142C6D194F8322073 -:1013000098F8061090430142BFD198F80400C11F1D -:101310000A29BAD2617D00E006E281427ED8D8F87F -:1013200000106160B8F80410218198F80600A072DE -:10133000012028700E20207003208DF82000686A9C -:101340000D9004F12D000990601D0A900F300B9054 -:1013500022E12875FDE3412891D1204600F069FF84 -:10136000042802D1E078C00704D1204600F061FFD4 -:101370000F2884D1A88CD5F80C8080B24FF0400B98 -:10138000E669FFF747FC324641465B464E46CDF8DC -:101390000090FFF732F80B208DF82000686A0D905E -:1013A000E0690990002108A8FFF79EFE2078042834 -:1013B00006D0A07D58B1012809D003280AD049E3FE -:1013C00005202070032028708DF82060CDE184F87E -:1013D00000A032E712202070E9E11128BCD120469C -:1013E00000F027FF042802D1E078C00719D020467A -:1013F00000F01FFF062805D1E078C00711D1A07DBD -:1014000002280ED0204600F014FF08E0CAE081E078 -:101410006FE14EE121E101E1E7E017E0ADE11128E4 -:101420009AD1102208F1010104F13C0012F0C0FE33 -:10143000607801287ED012202070E078C00760D04C -:10144000A07D0028C8D00128C6D05AE0112890D12C -:10145000204600F0EEFE082804D0204600F0E9FE09 -:10146000132886D104F16C00102208F10101064610 -:1014700012F09EFE207808280DD014202070E1780C -:10148000C8070DD0A07D02280AD06278022A04D0B5 -:101490000328A1D035E00920F0E708B1012837D1B1 -:1014A000C80713D0A07D02281DD000200090D4E9E9 -:1014B000062133460EA8FFF776FC10220EA904F190 -:1014C0003C0012F049FEC8B1042042E7D4E90912F9 -:1014D000201D8DE8070004F12C0332460EA8616B35 -:1014E000FFF76FFDE9E7606BC1F34401491E006837 -:1014F000C84000F0010040F08000D7E720780928BC -:1015000006D185F800908DF8209033E32870ECE345 -:101510000920FBE711289AD1204600F08AFE0A280C -:1015200002D1E078C00704D1204600F082FE1528E1 -:101530008DD100E08DE104F13C00102208F10101A1 -:10154000064612F035FE20780A2816D016202070A4 -:10155000D4E90932606B611D8DE80F0004F15C0372 -:1015600004F16C0247310EA8FFF7C0FC10220EA94F -:10157000304612F0F1FD18B1F5E20B20207071E257 -:101580002046FFF7D5FDA078216A0A18C0F11001A6 -:10159000104612F08CFE23E3394608A8FFF7A4FD9D -:1015A00006463BE20228B6D1204600F042FE04285F -:1015B00004D3204600F03DFE082809D3204600F061 -:1015C00038FE0E2829D3204600F033FE122824D2FC -:1015D000A07D02289FD10E208DF82000686A0D9012 -:1015E00098F801008DF82400F0E3022893D12046FA -:1015F00000F01FFE002810D0204600F01AFE01283F -:10160000F9D0204600F015FE0C28F4D004208DF807 -:10161000240098F801008DF825005EE21128FCD125 -:10162000002CFAD020781728F7D16178606A022957 -:1016300011D0002101EB4101182606EBC101102257 -:10164000405808F1010112F0B3FD0420696A00F06E -:10165000E3FD2670F1E50121ECE70B28DDD1002C3C -:10166000DBD020781828D8D16078616A02281CD095 -:101670005FF0000000EB4002102000EBC2000958B0 -:10168000B8F8010008806078616A02280FD0002055 -:1016900000EB4002142000EBC2000958404650F80D -:1016A000032F0A604068486039E00120E2E701202A -:1016B000EEE71128B1D1002CAFD020781928ACD199 -:1016C0006178606A022912D05FF0000101EB4101EC -:1016D0001C2202EBC1011022405808F1010112F056 -:1016E00067FD0420696A00F097FD1A20B6E0012129 -:1016F000ECE7082891D1002C8FD020781A288CD1C3 -:10170000606A98F80120017862F347010170616A0C -:10171000D8F8022041F8012FB8F80600888004208C -:10172000696A00F079FD8EE2072012E63878012818 -:1017300094D1182204F11400796812F07EFDE0794A -:10174000C10894F82F0001EAD001E07861F30000AD -:10175000E070217D002974D12178032909D0C007C8 -:1017600025D0032028708DF82090686A0D904120C4 -:1017700004E3607DA178884201D90620E9E50226CC -:101780002671E179204621F0E001E171617A21F0D2 -:10179000F0016172A17A21F0F001A172FFF7C8FC9B -:1017A0002E708DF82090686A0D900720E6E20420E4 -:1017B000ACE6387805289DD18DF82000686A0D9038 -:1017C000B8680A900720ADF824000A988DF830B068 -:1017D0006168016021898180A17A81710420207073 -:1017E000F4E23978052985D18DF82010696A0D91C8 -:1017F000391D09AE0EC986E80E004121ADF824104E -:101800008DF830B01070A88CD7F80C8080B24026CC -:10181000A769FFF711FA41463A463346C846CDF864 -:101820000090FEF71EFE002108A8FFF75DFCE0789F -:1018300020F03E00801CE0702078052802D00F20A8 -:101840000CE049E1A07D20B1012802D0032802D09C -:1018500002E10720BFE584F80080EEE42070ECE4AC -:10186000102104F15C0002F034FA606BB0BBA07D83 -:1018700018B1012801D00520FDE006202870F748A6 -:101880006063A063BEE23878022894D1387908B149 -:101890002875B3E3A07D022802D0032805D022E0FA -:1018A000B8680028F5D060631CE06078012806D095 -:1018B000A07994F82E10012805D0E84806E0A17917 -:1018C00094F82E00F7E7B8680028E2D06063E0786B -:1018D000C00701D0012902D0E04803E003E0F86826 -:1018E0000028D6D0A063062010E68DF82090696A03 -:1018F0000D91E1784846C90709D06178022903D1E2 -:10190000A17D29B1012903D0A17D032900D00720A1 -:10191000287031E138780528BBD1207807281ED0FF -:1019200084F800A005208DF82000686A0D90B86842 -:101930000A90ADF824A08DF830B003210170E17851 -:10194000CA070FD0A27D022A1AD000210091D4E943 -:10195000061204F15C03401CFFF725FA67E384F8E4 -:101960000090DFE7D4E90923211D8DE80E0004F182 -:101970002C0304F15C02401C616BFFF722FB56E371 -:10198000626BC1F34401491E1268CA4002F00101B2 -:1019900041F08001DAE738780528BDD18DF82000C4 -:1019A000686A0D90B8680A90ADF824A08DF830B040 -:1019B000042100F8011B102204F15C0112F0F8FB75 -:1019C000002108A8FFF790FB2078092801D01320F8 -:1019D00044E70A2020709BE5E078C10742D0A17D52 -:1019E000012902D0022927D038E0617808A801290E -:1019F00016D004F16C010091D4E9061204F15C03E5 -:101A0000001DFFF7BBFA0A20287003268DF82080FE -:101A1000686A0D90002108A8FFF766FBDDE2C3E2CB -:101A200004F15C010091D4E9062104F16C03001D6E -:101A3000FFF7A4FA0026E9E7C0F3440114290DD208 -:101A40004FF0006101EBB0104FEAB060E0706078D9 -:101A5000012801D01020BEE40620FFE660780128AE -:101A60003FF4B7AC0A2051E5E178C90708D0A17D61 -:101A7000012903D10B20287004202FE028702DE0CD -:101A80000E2028706078616B012817D004F15C0388 -:101A900004F16C020EA8FFF7E1FA2046FFF748FBBD -:101AA000A0780EAEC0F11001304412F000FC062008 -:101AB0008DF82000686A09960D909AE004F16C0395 -:101AC00004F15C020EA8FFF7C9FAE9E739780229A8 -:101AD00003D139790029D1D029758FE28DF8200002 -:101AE000686A0D9058E538780728F6D1D4E90921BD -:101AF0006078012808D004F16C00CDE90002029161 -:101B000005D104F16C0304E004F15C00F5E704F195 -:101B10005C0304F14C007A680646216AFFF764F919 -:101B20006078012821D1A078216A0A18C0F110013B -:101B3000104612F0BCFBD4E90923606B04F12D01BF -:101B40008DE80F0004F15C0304F16C0231460EA82D -:101B500000E055E2FFF7CAF910220EA904F13C009B -:101B600012F0FAFA08B10B20AFE485F8008000BF4C -:101B70008DF82090686A0D908DF824A00CE53878D7 -:101B80000528AAD18DF82000686A0D90B8680A90DF -:101B9000ADF824A08DF830B080F80080617801297C -:101BA0001AD0D4E9093204F12D01A66B03920096F4 -:101BB000CDE9011304F16C0304F15C0204F14C0162 -:101BC000401CFFF793F9002108A8FFF78DFA607811 -:101BD000012805D0152041E6D4E90923611DE4E779 -:101BE0000E20287006208DF82000686ACDF824B0F9 -:101BF0000D90A0788DF82800CEE438780328C0D165 -:101C0000E079C00770D00F202870072066E7387889 -:101C100004286BD11422391D04F1140012F00DFBBD -:101C2000616A208CA1F80900616AA078C871E17925 -:101C3000626A01F003011172616A627A0A73616A71 -:101C4000A07A81F82400162060E485F800A08DF8C1 -:101C50002090696A50460D9190E00000A447020070 -:101C60003878052842D1B868A8616178606A02298D -:101C700001D0012100E0002101EB4101142606EB17 -:101C8000C1014058082102F024F86178606A0229F5 -:101C900001D0012100E0002101EB410106EBC1016F -:101CA000425802A8E169FFF70DFA6078626A0228DB -:101CB00001D0012000E0002000EB4001102000EBEB -:101CC000C1000223105802A90932FEF7F1FF626A2F -:101CD000FD4B0EA80932A169FFF7E3F96178606A4C -:101CE000022904D0012103E042E18BE0BDE00021A4 -:101CF00001EB4101182606EBC101A27840580EA95C -:101D000012F056FA6178606A022901D0012100E0E0 -:101D1000002101EB410106EBC1014058A1780844C4 -:101D2000C1F1100112F0C3FA05208DF82000686A95 -:101D30000D90A8690A90ADF824A08DF830B0062166 -:101D400001706278616A022A01D0012200E000225B -:101D500002EB420206EBC202401C8958102212F02C -:101D600027FA002108A8FFF7BFF91220C5F818B01C -:101D700028708DF82090686A0D900B208DF8240053 -:101D80000AE43878052870D18DF82000686A0D9033 -:101D9000B8680A900B20ADF824000A98072101705A -:101DA0006178626A022901D0012100E0002101EB83 -:101DB0004103102101EBC30151580988A0F801101B -:101DC0006178626A022902D0012101E02FE100213D -:101DD00001EB4103142101EBC30151580A6840F89B -:101DE000032F4968416059E01920287001208DF8BF -:101DF000300077E6162028708DF830B0002108A852 -:101E0000FFF772F9032617E114202870B0E638783E -:101E100005282AD18DF82000686A0D90B8680A90CC -:101E2000ADF824A08DF830B080F800906278616A37 -:101E30004E46022A01D0012200E0002202EB4202BB -:101E40001C2303EBC202401C8958102212F0B0F987 -:101E5000002108A8FFF748F9152028708DF82060A8 -:101E6000686A0D908DF824603CE680E0387805289B -:101E70007DD18DF82000686A0D90B8680A90ADF8A1 -:101E800024900921017061690978490841706169EC -:101E900051F8012FC0F802208988C18020781C28C1 -:101EA000A8D1A1E7E078C00702D04FF0060C01E00E -:101EB0004FF0070C607802280AD04FF0000000BFF6 -:101EC00000EB040101F1090105D04FF0010004E02D -:101ED0004FF00100F4E74FF000000B78204413EAC4 -:101EE0000C030B7010F8092F02EA0C02027004D1E7 -:101EF0004FF01B0C84F800C0D2B394F801C0BCF1C1 -:101F0000010F00D09BB990F800C0E0465FEACC7C9E -:101F100004D028F001060670102606E05FEA887CEF -:101F200005D528F00206067013262E70032694F8B5 -:101F300001C0BCF1020F00D092B991F800C05FEA75 -:101F4000CC7804D02CF001060E70172106E05FEA71 -:101F50008C7805D52CF002060E7019212170002610 -:101F60000078D0BBCAB3C3BB1C20207035E012E0A0 -:101F700002E03878062841D11A2019E42078012897 -:101F80003CD00C283AD02046FFF7F0F809208DF815 -:101F90002000686A0D9031E03878052805D00620C9 -:101FA000387003261820287046E005218DF820108F -:101FB000686A0D90B8680A900220ADF824000120EC -:101FC0008DF830000A980170297D4170394608A8C3 -:101FD000FFF78AF8064618202870012E0ED02BE055 -:101FE00001208DF82000686A0D9003208DF82400F0 -:101FF000287D8DF8250085F814B012E0287D80B189 -:102000001D202070172028708DF82090686A0D9090 -:1020100002208DF82400394608A8FFF765F8064627 -:102020000AE00CB1FE2020709DF8200020B10021B4 -:1020300008A8FFF759F810E413B03046BDE8F08F58 -:102040002DE9F04387B00C464E6900218DF804104D -:1020500001202578034602274FF007094FF0050CB1 -:1020600085B1012D53D0022D39D1FE2030708DF86D -:102070000030606A059003208DF80400207E8DF802 -:10208000050063E02179012925D002292DD00329FB -:1020900028D0042923D1B17D022920D131780D1F08 -:1020A000042D04D30A3D032D01D31D2917D1218905 -:1020B000022914D38DF80470237020899DF8041030 -:1020C00088421BD2082001E09C4702008DF80000E6 -:1020D000606A059057E070780128EBD0052007B0C2 -:1020E000BDE8F0831D203070E4E771780229F5D156 -:1020F00031780C29F3D18DF80490DDE7083402F82B -:1021000004CB94E80B0082E80B000320E7E7157886 -:10211000052DE4D18DF800C0656A05959568029596 -:102120008DF8101094F80480B8F1010F13D0B8F1B5 -:10213000020F2DD0B8F1030F1CD0B8F1040FCED18F -:10214000ADF804700E202870207E6870002168466B -:10215000FEF7CAFF0CE0ADF804700B202870207E5B -:10216000002100F01F0068706846FEF7BDFF377061 -:102170000020B4E7ADF804708DF8103085F800C089 -:10218000207E6870277011466846FEF7ADFFA6E70F -:10219000ADF804902B70207F6870607F00F0010024 -:1021A000A870A07F00F01F00E870E27F2A71C007CE -:1021B0001CD094F8200000F00700687194F821000A -:1021C00000F00700A87100216846FEF78DFF28681F -:1021D000F062A8883086A87986F83200A069407835 -:1021E00070752879B0700D203070C1E7A9716971E0 -:1021F000E9E700B587B004280CD101208DF8000074 -:102200008DF80400002005918DF805000146684610 -:10221000FEF76AFF07B000BD70B50C46054602F038 -:1022200031F821462846BDE870407823002201F0AD -:102230007FBF08B1007870470C20704770B50C0064 -:1022400005784FF000010CD021702146F3F701F81A -:1022500069482178405D884201D1032070BD022089 -:1022600070BDF2F7F6FF002070BD0279012A05D09B -:1022700000220A704B78012B02D003E00420704743 -:102280000A758A6102799300521C0271C1500320C1 -:102290007047F0B587B00F4605460124287905EB55 -:1022A000800050F8046C7078411E02290AD252490D -:1022B0003A46083901EB8000314650F8043C284684 -:1022C000984704460CB1012C11D12879401E10F01A -:1022D000FF00287101D00324E0E70A208DF80000F8 -:1022E000706A0590002101966846FFF7A7FF032C4E -:1022F000D4D007B02046F0BD70B515460A46044656 -:1023000029461046FFF7C5FF064674B12078FE281F -:102310000BD1207C30B100202870294604F10C003C -:10232000FFF7B7FF2046FEF721FF304670BD70472C -:1023300070B50E4604467C2111F0DBFF0225012E0C -:1023400003D0022E04D0052070BD0120607000E093 -:1023500065702046FEF70AFFA575002070BD28B104 -:10236000027C1AB10A4600F10C01C5E70120704752 -:1023700010B5044686B0042001F084FF2078FE28C2 -:1023800006D000208DF8000069462046FFF7E7FFE1 -:1023900006B010BD7CB50E4600218DF804104178C2 -:1023A000012903D0022903D0002405E0046900E0DC -:1023B00044690CB1217C89B16D4601462846FFF77E -:1023C00054FF032809D1324629462046FFF794FFDF -:1023D0009DF80410002900D004207CBD04F10C05F8 -:1023E000EBE730B40C460146034A204630BC034BB1 -:1023F0000C3AFEF756BE0000E04702009C47020080 -:1024000070B50D46040011D085B12101284611F0A8 -:102410004EFF10224E49284611F0CAFE4C480121B9 -:102420000838018044804560002070BD012070BDE7 -:1024300070B5474E00240546083E10E07068AA7B40 -:1024400000EB0410817B914208D1C17BEA7B914271 -:1024500004D10C22294611F07FFE30B1641C308873 -:102460008442EBDB4FF0FF3070BD204670BD70B58D -:102470000D46060006D02DB1FFF7DAFF002803DB7A -:10248000401C14E0102070BD314C083C208862884C -:10249000411C914201D9042070BD6168102201EBFA -:1024A0000010314611F084FE2088401C20802870E6 -:1024B000002070BD70B514460D0018D0BCB10021CD -:1024C000A170022802D0102811D105E0288870B12F -:1024D0000121A170108008E02846FFF7A9FF00281D -:1024E00005DB401CA070A8892080002070BD012061 -:1024F00070BD70B5054614460E000BD0002030703C -:10250000A878012808D005D91149A1F108010A8845 -:1025100090420AD9012070BD24B128782070288803 -:10252000000A5070022008700FE064B14968102260 -:1025300001EB00112046103911F03AFE2878207383 -:102540002888000A607310203070002070BD0000E1 -:102550007C0000202DE9F04190460C4607460025FE -:10256000FE48072F00EB881607D2DFE807F00707C1 -:10257000070704040400012500E0FFDF06F81470DB -:10258000002D13D0F548803000EB880191F827002A -:10259000202803D006EB4000447001E081F826407B -:1025A00006EB44022020507081F82740BDE8F081FE -:1025B000F0B51F4614460E460546202A00D1FFDF1F -:1025C000E649E648803100EB871C0CEB440001EB48 -:1025D0008702202E07D00CEB460140784B784870DC -:1025E000184620210AE092F82530407882F825002C -:1025F000F6E701460CEB410005704078A142F8D1A6 -:1026000092F82740202C03D00CEB4404637001E0C7 -:1026100082F826300CEB41042023637082F82710E7 -:10262000F0BD30B50D46CE4B44190022181A72EB9E -:10263000020100D2FFDFCB48854200DDFFDFC94841 -:102640004042854200DAFFDFC548401C844207DA79 -:10265000002C01DB204630BDC148401C201830BD95 -:10266000BF48C043FAE710B504460168407ABE4A45 -:1026700052F82020114450B10220084420F07F403D -:10268000F0F779FA94F90810BDE81040C9E7042082 -:10269000F3E72DE9F047B14E803696F82D50DFF87C -:1026A000BC9206EB850090F8264034E009EB8517D4 -:1026B0004FF0070817F81400012806D004282ED080 -:1026C00005282ED0062800D0FFDF01F0E3F80146F0 -:1026D00007EB4400427806EB850080F8262090F84E -:1026E0002720A24202D1202280F82720084601F0AC -:1026F000DCF82A4621460120FFF72CFF9B48414683 -:1027000000EB041002682046904796F82D5006EB27 -:10271000850090F82640202CC8D1BDE8F087022023 -:1027200000E003208046D0E710B58C4C2021803497 -:1027300084F8251084F8261084F82710002084F8E7 -:10274000280084F82D0084F82E10411EA16044F862 -:10275000100B2074607420736073A0738449E07759 -:1027600020750870487000217C4A103C02F8110066 -:10277000491CC9B22029F9D30120F0F7EAF800205A -:10278000F0F7E7F8012084F82200F9F7D1FA794848 -:10279000F9F7DDFA764CA41E20707748F9F7D7FADE -:1027A0006070BDE81040F0F761B810B5F0F783F83D -:1027B0006F4CA41E2078F9F7E3FA6078F9F7E0FA95 -:1027C000BDE8104001F09EB8202070472DE9F34F7E -:1027D000624E0025803606EB810A89B09AF8250002 -:1027E000202822D0691E02916049009501EB00105B -:1027F0008146D0E90112C0680391CDE90420B08B75 -:10280000ADF81C00B07F8DF81E009DF81500C8B112 -:102810000227554951F820400399E219114421F04B -:102820007F41019184B102210FE00120F0F791F87E -:102830000020F0F78EF8F0F75CF801F063F886F806 -:102840002F50A0E00427E4E700218DF8181002289B -:1028500001D0012820D10398391901440998081A98 -:102860009DF81C1020F07F4001B1022133318142DC -:102870000BD203208DF815000398C4F13201401AE1 -:1028800020F07F40322403900CE096F8240018B921 -:10289000F0F782FB00284CD0322C03D214B101F0A7 -:1028A00025F801E001F02EF8314A107818B393466C -:1028B0005278039B121B00219DF81840984601286E -:1028C0001AD0032818D000208DF81E00002A04DD3D -:1028D000981A039001208DF818009DF81C0000B193 -:1028E00002210398254A20F07F40039003AB09980A -:1028F00001F014F810B110E00120E5E79DF81D008B -:1029000018B99BF80000032812D08DF81C50CDF8A0 -:102910000C808DF818408DF81E509DF8180058B1A5 -:1029200003980123C11900221846F0F765F806E064 -:1029300000200BB0BDE8F08F0120F0F70AF899F9FC -:102940000C20012300200199F0F756F8012086F8A9 -:102950002F008AF828502022694611E098080020AC -:10296000FF7F841E0020A107F04702009806002088 -:102970008E000020DF3F010093260100FFFF3F0093 -:10298000F94811F05AFC0120D3E72DE9F05FDFF898 -:10299000D883064608EB860090F82550202D1FD0DE -:1029A000A8F180002C4600EB8617A0F50079DFF82F -:1029B000BCB305E0A24607EB4A004478202C0AD0BD -:1029C000F0F766F809EB04135A4601211B1D00F0CD -:1029D000A5FF0028EED0AC4202D0334652461EE09E -:1029E000E34808B1AFF30080F0F752F898F82F20D1 -:1029F0006AB1D8F80C20411C891A0902CA1701EBE8 -:102A000012610912002902DD0020BDE8F09F314665 -:102A1000FFF7DCFE08B10120F7E733462A46202104 -:102A20000420FFF7C5FDEFE72DE9F041CE4C256905 -:102A3000F0F72EF8401B0002C11700EB11600012E6 -:102A400000D4FFDF94F8220000B1FFDF012784F8F3 -:102A5000227094F82E00202800D1FFDF94F82E6019 -:102A6000202084F82E00002584F82F5084F8205070 -:102A700084F82150BF4825600078022833D003280D -:102A800031D000202077A068401C05D04FF0FF30E7 -:102A9000A0600120EFF75DFF0020EFF75AFFF0F78D -:102AA00058F8F0F750F8EFF724FF10F0D7FDB248D0 -:102AB000056005604FF0E0214FF40040B846C1F8D2 -:102AC0008002F0F7E0F894F82D703846FFF75DFFCC -:102AD0000028FAD0A448803800EB871010F81600C0 -:102AE000022802D006E00120CCE73A463146062013 -:102AF000FFF730FD84F8238004EB870090F8260070 -:102B0000202804D09B48801E4078F9F73FF9207FA9 -:102B1000002803D0F0F70DF82577657746E50146E4 -:102B2000914810B590F82D200024803800EB8210D9 -:102B300010F814302BB1641CE4B2202CF8D3202000 -:102B400010BD8E4800EB0410016021460120FFF704 -:102B500001FD204610BD10B5012801D0032800D189 -:102B600071B3814A92F82D307F4C0022803C04EBF7 -:102B7000831300BF13F812400CB1082010BD521C83 -:102B8000D2B2202AF6D37B4A48B1022807D00729BF -:102B900016D2DFE801F01506080A0C0E100000211D -:102BA0000AE01B2108E03A2106E0582104E07721E1 -:102BB00002E0962100E0B52151701070002010BD98 -:102BC000072010BD6B4810B54078EFF7D4FF80B2F6 -:102BD00010BD10B5202811D2634991F82D30A1F114 -:102BE000800202EB831414F810303BB191F82D30C1 -:102BF00002EB831212F81020012A01D0002010BD30 -:102C000091F82D2001460020FFF7A4FC012010BD03 -:102C100010B5EFF73DFFBDE81040EFF7ACBF2DE971 -:102C2000F0410E46504F01782025803F0C4607EBBF -:102C3000831303E0254603EB45046478944202D0F5 -:102C4000202CF7D108E0202C06D0A14206D103EBBE -:102C500041014978017007E00020A7E403EB44003C -:102C600003EB450140784870454F7EB127B1002104 -:102C700040F2DA30AFF300803078A04206D127B1BD -:102C8000002140F2DD30AFF30080357027B1002124 -:102C900040F2E230AFF30080012087E410B54268D3 -:102CA0000B689A1A1202D41702EB1462121216D48D -:102CB000497A91B1427A82B9324A006852F82110B9 -:102CC000126819441044001D891C081A0002C1171B -:102CD00000EB11600012322801DB012010BD002042 -:102CE00010BD2DE9F04781461F48244E00EB8100BE -:102CF000984690F825402020107006F50070154683 -:102D000000EB81170BE000BF06EB04104946001DE5 -:102D1000FFF7C4FF28B107EB44002C704478202C47 -:102D2000F2D1297888F8001013E000BF06EB0415F3 -:102D3000291D4846FFF7B2FF68B988F80040A97B13 -:102D400099F80A00814201D80020E6E407EB44002C -:102D50004478202CEAD10120DFE42DE9FC410E4625 -:102D600007460024054D18E018090020FFFF3F002A -:102D7000000000008E00002000F5004098060020B2 -:102D800000000000F04702009DF8000005EB001075 -:102D90008168384600F0D6FD01246B4601AA314611 -:102DA0003846FFF79EFF0028EED02046BDE8FC81A4 -:102DB00070B50446FF480125A54300EB841100EBE4 -:102DC0008510402211F0F4F9FB4E26B1002140F2AB -:102DD0005C40AFF30080F748803000EB850100EBEA -:102DE0008400D0F82500C1F8250026B100214FF459 -:102DF0008C60AFF30080284670BD2DE9FC4184460D -:102E0000EC481546089C00EB85170E4617F8140091 -:102E1000012803D0022801D00020C7E70B46E74A6B -:102E20000121604600F07AFDA8B101AB6A4629464F -:102E30003046FFF756FF70B1DE489DF804209DF83C -:102E40000010803000EB85068A4208D02B46052012 -:102E5000FFF7AEFB0BE02A462146042014E02029B0 -:102E600003D007EB4100407801E096F8250007EB1E -:102E7000440148709DF80000202809D007EB40006D -:102E800044702A4621460320FFF764FB01208DE7AA -:102E900006F8254F0120F070F3E7C94901EB001057 -:102EA000001DFFF7E0BB7CB51D46134604460E46E9 -:102EB00000F1080221461846EFF76AFE94F908006F -:102EC0000F2804DD1F3820722068401C206096B156 -:102ED0000220BC4951F82610461820686946801B1C -:102EE00020F07F40206094F908002844C01C1F286F -:102EF00003DA012009E00420EBE701AAEFF748FE1E -:102F00009DF8040010B10098401C009000992068C2 -:102F100031440844C01C20F07F4060607CBD2DE936 -:102F2000FE430C46064609786079907220799846EF -:102F30001546507241B19F48803090F82E102029DC -:102F40000AD00069401D0BE0D4E90223217903B0C7 -:102F50002846BDE8F043A6E79B484178701D084429 -:102F600020F07F47217900222846A368FFF79BFFC6 -:102F70003946284600F0E6FCD4E902322179684659 -:102F8000FFF791FF41462846019CFFF7E6FE2B46DE -:102F900022460021304600F0C1FC002803D1314612 -:102FA000284600F0CFFCBDE8FE832DE9FE4F8146A8 -:102FB00000F084FC30B1002799F8000020B1002017 -:102FC000BDE8FE8F0127F7E77A4D7B4C4FF0000AF2 -:102FD000803524B1002140F2D340AFF3008095F852 -:102FE0002D8085F823A0002624B100214FF49B609A -:102FF000AFF300801FB94046FFF7DAFE804624B1E8 -:1030000000214FF49C60AFF30080EFF741FD434691 -:103010006A464946FFF783FF24B1002140F2E640AB -:10302000AFF3008095F82E0020280CD02969009875 -:10303000401A0002C21700EB1260001203D5684666 -:1030400000F080FC012624B100214FF49E60AFF314 -:10305000008095F823000028BBD124B1002140F264 -:10306000F640AFF30080EFF713FD6B46534A0021A3 -:1030700000F054FC0028A3D027B941466846FFF76A -:103080006CFE064326B16846FFF7EDFAC9F8080062 -:1030900024B1002140F20950AFF3008001208FE7F6 -:1030A0002DE9FF5F8A46814600F008FC414C8034E0 -:1030B00010B39AF80000002710B1012800D0FFDFFC -:1030C0003D4D25B1002140F27F50AFF3008001203B -:1030D000A84600905FEA080604D0002140F287501D -:1030E000AFF30080009800F0E0FB94F82D50002032 -:1030F00084F8230067B119E094F82E0001272028F6 -:1031000000D1FFDF9AF800000028D9D0FFDFD7E711 -:103110002846FFF74DFE054626B1002140F29150AA -:10312000AFF3008094F823000028D3D126B100210A -:1031300040F29B50AFF30080EFF7AAFC83462B468A -:1031400001AA5146FFF7EBFE5FEA060804D0002112 -:1031500040F2A250AFF300803B462A4601A95846F0 -:10316000CDF80090FFF749FE064604EB850090F885 -:1031700028B0B8F1000F04D0002140F2A950AFF3FD -:10318000008000F087FB0090B8F1000F04D0002110 -:1031900040F2AF50AFF3008094F82300002899D19B -:1031A000B8F1000F04D0002140F2B750AFF3008017 -:1031B00003490BE09808002000000000FFFF3F00DB -:1031C00098060020F04702008E00002001EB091055 -:1031D0000DF1040C00F104009CE80E0080E80E00E4 -:1031E0004EB35FEA080604D0002140F2C450AFF3AA -:1031F00000803BEA070012D094F82E0020280ED160 -:1032000026B1002140F2C950AFF300802846FFF7F5 -:10321000BCFB20B99AF80000D8B3012849D0B8F116 -:10322000000F04D0002140F2E650AFF300802846A2 -:1032300000F029FB01265FEA080504D0002140F2D6 -:10324000EF50AFF30080009800F02FFB25B1002174 -:1032500040F2F350AFF300808EB194F82D0004EBF0 -:10326000800090F82600202809D025B1002140F2E6 -:10327000FA50AFF30080F9484078F8F787FD25B1A0 -:10328000002140F2FF50AFF3008004B03046BDE8AB -:10329000F09FFFE7B8F1000F04D0002140F2D150B9 -:1032A000AFF3008094F82D2049460420FFF752F92F -:1032B000C0E7002E3FF40EAF002140F2DC50AFF328 -:1032C000008007E72DE9F84FE54D814695F82D0080 -:1032D0004FF00008E34C4FF0010B474624B10021AA -:1032E00040F20D60AFF30080584600F0DEFA85F83A -:1032F000237024B1002140F21260AFF3008095F8F2 -:103300002D00FFF755FD064695F8230028B1002C47 -:10331000E4D000214FF4C3604BE024B1002140F21F -:103320001C60AFF30080CE48803800EB861111F8A6 -:103330001900032856D1334605EB830A4A469AF80A -:103340002500904201D1012000E0002000900AF108 -:1033500025000021FFF763FC01460098014203D0DD -:1033600001228AF82820AF77E1B324B1002140F28E -:103370002160AFF30080324649460120FFF7EAF8AA -:103380009AF828A024B1002140F22C60AFF300800D -:1033900000F080FA834624B1002140F23160AFF39F -:1033A000008095F8230038B1002C97D0002140F21E -:1033B0003560AFF3008091E7BAF1000F07D095F8C0 -:1033C0002E00202803D13046FFF7DFFAE0B124B108 -:1033D000002140F24960AFF30080304600F053FA1C -:1033E0004FF0010824B1002140F25260AFF3008099 -:1033F000584600F05AFA24B1002140F25660AFF36B -:1034000000804046BDE8F88F002CF1D0002140F24A -:103410004460AFF30080E6E70020EFF773BA0120C5 -:10342000EFF770BA8D48007870472DE9F0418C4C69 -:1034300094F82E0020281FD194F82D6004EB860705 -:1034400097F82550202D00D1FFDF8549803901EB09 -:10345000861000EB4500407807F8250F0120F87032 -:1034600084F82300294684F82E5032460220223464 -:10347000FFF770F8002020700FE42DE9F0417A4E3C -:10348000774C012538B1012821D0022879D00328B2 -:103490007DD0FFDFF0E700F029FAFFF7C6FF207EBE -:1034A00000B1FFDF84F821500020EFF752FAA16845 -:1034B000481C04D0012300221846EFF79DFA14F8A7 -:1034C0002E0F217806EB01110A68012154E0FFF765 -:1034D000ACFF0120EFF73DFA94F8210050B1A0684D -:1034E000401C07D014F82E0F217806EB01110A6852 -:1034F000062141E0207EDFF86481002708F1020800 -:10350000012803D002281ED0FFDFB5E7A777EFF729 -:1035100010FB98F80000032801D165772577607DBE -:10352000524951F8200094F8201051B948B161680F -:103530000123091A00221846EFF75EFA02202076CE -:103540009AE7277698E784F8205000F0CFF9A07F1B -:1035500050B198F8010061680123091A0022184649 -:10356000EFF74AFA257600E0277614F82E0F217837 -:1035700006EB01110A680021BDE8F041104700E0A8 -:1035800005E036480078BDE8F041F8F7FFBBFFF7EB -:103590004CFF14F82E0F217806EB01110A68052163 -:1035A000EAE710B52E4C94F82E00202800D1FFDF5A -:1035B00014F82E0F21782C4A02EB01110A68BDE89D -:1035C0001040042110477CB5254C054694F82E0088 -:1035D000202800D1FFDFA068401C00D0FFDF94F856 -:1035E0002E00214901AA01EB0010694690F90C0058 -:1035F0002844EFF7CDFA9DF904000F2801DD0120E2 -:1036000000E00020009908446168084420F07F41F0 -:10361000A16094F82100002807D002B00123BDE882 -:10362000704000221846EFF7E7B97CBD30B5104A6C -:103630000B1A541CB3EB940F1ED3451AB5EB940F21 -:103640001AD3934203D9101A43185B1C14E0954215 -:1036500010D9511A0844401C43420DE08C00002050 -:10366000180900200000000098060020F047020022 -:10367000FF7F841EFFDF0023184630BD0123002298 -:1036800001460220EFF7B8B90220EFF762B9EFF771 -:10369000FFB92DE9FC47B14C054694F82E002028CF -:1036A00000D1FFDF642D58D3AD4A0021521B71EBCE -:1036B000010052D394F82E20A0462046DFF8A492B1 -:1036C00090F82D7009EB0214D8F8000001AA2844E4 -:1036D0006946EFF75DFA9DF90400002802DD0098C5 -:1036E000401C0090A068009962684618B21A22F047 -:1036F0007F42B2F5800F30D208EB8702444692F841 -:103700002520202A0AD009EB02125268101A000262 -:10371000C21700EB1260001288421EDBA068401C3A -:1037200010D0EFF7B5F9A168081A0002C11700EB35 -:1037300011600012022810DD0120EFF70AF94FF0A6 -:10374000FF30A06020682844206026F07F40206180 -:10375000012084F82300BDE8FC870020FBE72DE969 -:10376000F0477E4C074694F82D00A4F1800606EB46 -:10377000801010F8170000B9FFDF94F82D50A04614 -:10378000794C24B1002140F66500AFF3008040F68B -:10379000710940F67A0A06EB851600BF16F8170085 -:1037A000012818D0042810D005280ED006280CD0E7 -:1037B0001CB100214846AFF3008020BF002CEDD0A3 -:1037C00000215046AFF30080E8E72A463946012041 -:1037D000FEF7C0FEF2E74FF0010A4FF00009454640 -:1037E00024B1002140F68100AFF30080504600F084 -:1037F0005CF885F8239024B1002140F68600AFF3F1 -:10380000008095F82D00FFF7D3FA064695F82300BF -:1038100028B1002CE4D0002140F68C001FE024B138 -:1038200000214FF40960AFF3008005EB860000F142 -:10383000270133463A462630FFF7F1F924B100213B -:1038400040F69400AFF3008000F024F8824695F82B -:10385000230038B1002CC3D0002140F69A00AFF30A -:103860000080BDE785F82D60012085F823005046D3 -:1038700000F01BF8002C04D0002140F6A700AFF3A5 -:103880000080BDE8F087354981F82D00012081F8DE -:103890002300704710B5354808B1AFF30080EFF34F -:1038A000108000F0010072B610BD10B5002804D1E0 -:1038B0002F4808B1AFF3008062B610BD2D480068F4 -:1038C000C005C00D10D0103840B2002806DA00F054 -:1038D0000F0000F1E02090F8140D03E000F1E0206B -:1038E00090F80004400970470820704710B51B4C41 -:1038F00094F82400002804D1F8F72AF8012084F86D -:10390000240010BD10B5154C94F82400002804D0F4 -:10391000F8F747F8002084F8240010BD10B51C68A3 -:103920005B68241A181A24F07F4420F07F40A142DB -:1039300006D8B4F5800F03D2904201D8012010BD03 -:10394000002010BDD0E90032D21A21F07F4311448B -:1039500021F07F41C0E900317047000018090020C4 -:10396000FF1FA107980600200000000000000000D3 -:103970000000000004ED00E02DE9F041044680075E -:103980004FF000054FF001060CD560480560066059 -:103990000FF0C6FC20B15E48016841F4806101600F -:1039A00024F00204E0044FF0FF3705D55948466083 -:1039B000C0F8087324F48054600003D556480560AD -:1039C00024F08044E0050FD55448C0F80052C0F8F8 -:1039D000087353490D60091D0D60514A04210C32D2 -:1039E0001160066124F48074A00409D54D48466036 -:1039F000C0F80052C0F808734B48056024F4005426 -:103A0000C4F38030C4F3C031884200D0FFDF14F427 -:103A1000404F14D045484660C0F80873444886605B -:103A2000C0F80052C0F8087342490D600A1D1660C4 -:103A30008660C0F808730D60166024F440442005C9 -:103A40000AD53D4846608660C0F80873C0F84873E0 -:103A50003A48056024F400640FF0DAFD3848044267 -:103A600000D0FFDFBDE8F08170B5202500221346AD -:103A700020FA02F1C90719D051B201F01F06012442 -:103A8000B4404E09B60006F1E026C6F88041C6F8FB -:103A90008042002906DA01F00F0101F1E02181F8EE -:103AA000143D03E001F1E02181F80034521CAA42E8 -:103AB000DED370BD70B5234C0D462060FFF75CFF70 -:103AC0002068FFF7D1FF2846F8F71FF80FF0FAF942 -:103AD00000F0AFF80FF09CFD0FF0E7FCF8F728F9C5 -:103AE000BDE870400FF09CBA10B5164C2068FFF787 -:103AF00043FF2068FFF7B8FF0FF08AFDF8F794F84E -:103B00000020206010BD0A2070470000FC1F00400C -:103B10003C17004000C0004004E501400080004028 -:103B20000485004000D0004004D5004000E0004083 -:103B300000F0004000F5004000B0004008B5004033 -:103B4000FEFF0FFD9000002070B526490A680AB3F9 -:103B50000022154601244B685B1C4B60092B00D3E7 -:103B60004D600E7904FA06F30E681E420FD0EFF393 -:103B7000108212F0010272B600D001220C689C4340 -:103B80000C6002B962B649680160002070BD521C29 -:103B9000092AE0D3052070BD4FF0E0214FF48000EA -:103BA000C1F800027047EFF3108111F0010F72B6F7 -:103BB0004FF0010202FA00F20A48036842EA0302E7 -:103BC000026000D162B6E7E706480021016041606B -:103BD00070470121814003480068084000D001205F -:103BE00070470000940000202DE9F04115460E4674 -:103BF0000446002700F0E7F8A84215D3002341202F -:103C00000FE000BF94F84220A25CF25494F84210F6 -:103C1000491CB1FBF0F200FB12115B1C84F842104E -:103C2000DBB2AB42EED3012700F0D9F83846BDE84D -:103C3000F081704910B5802081F800046E490020A1 -:103C400081F8420081F84100433181F8420081F857 -:103C50004100433181F8420081F8410067480FF08C -:103C60006DFB6648401C0FF069FBEFF71BF8BDE8E1 -:103C7000104000F0B4B8402070475F4800F0A3B88F -:103C80000A4601465C48AFE7402070475A48433037 -:103C900000F099B80A46014657484330A4E740214E -:103CA00001700020704710B504465348863000F07C -:103CB0008AF82070002010BD0A4601464E4810B513 -:103CC0008630FFF791FF08B1002010BD42F20700D7 -:103CD00010BD70B50C460546412900D9FFDF4848A4 -:103CE0000068103840B200F050F8C6B20D2000F065 -:103CF0004CF8C0B2864203D2FFDF01E0EFF722F8B2 -:103D0000224629463C48FFF76FFF0028F6D070BDD9 -:103D10002DE9F041394F002506463F1D57F8254053 -:103D2000204600F041F810B36D1CEDB2032DF5D321 -:103D30003148433000F038F8002825D02E4800F0F4 -:103D400033F8002820D02C48863000F02DF80028C9 -:103D50001AD0EEF7CDFF29480FF0F8FAB0F5005F62 -:103D600000D0FFDFBDE8F04124480FF005BB94F818 -:103D700041004121265414F8410F401CB0FBF1F2E0 -:103D800001FB12002070D3E751E7002806DA00F0AB -:103D90000F0000F1E02090F8140D03E000F1E020A6 -:103DA00090F800044009704710F8411F4122491C57 -:103DB000B1FBF2F302FB13114078814201D10120E3 -:103DC00070470020704710F8411F4078814201D3AE -:103DD000081A02E0C0F141000844C0B2704710B5B3 -:103DE00006480FF0B3FA002803D1BDE81040EEF703 -:103DF0006ABF10BD0DE000E0480900209C000020D3 -:103E000004ED00E070B5154D2878401CC4B2687808 -:103E1000844202D0EFF727F82C7070BD2DE9F041F5 -:103E20000E4C4FF0E02600BFEFF712F820BF40BF66 -:103E300020BF677820786070D6F80052EDF76EFAF0 -:103E4000854305D1D6F8040210B92078B842EBD0EA -:103E5000EEF7F9FF0020BDE8F0810000AC00002083 -:103E60002DE9F041012528034FF0E0210026C1F89B -:103E700080011E4CC4F800610C2000F02CF81C4896 -:103E800001680268C94341F3001142F01002026068 -:103E9000C4F804532560491C00E020BFD4F8002179 -:103EA000002AFAD019B9016821F010010160114807 -:103EB00007686560C4F80853C4F800610C2000F07E -:103EC0000AF83846BDE8F08110B50446FFF7C8FF90 -:103ED0002060002010BD00F01F0201219140400928 -:103EE000800000F1E020C0F88012704700C0004060 -:103EF00010ED00E008C500402DE9F047FF4C0646F4 -:103F0000FF21A06800EB061211702178FF2910D064 -:103F10004FF0080909EB011109EB06174158C05988 -:103F200000F0F4F9002807DDA168207801EB061104 -:103F300008702670BDE8F08794F8008045460DE0D3 -:103F4000A06809EB05114158C05900F0DFF90028BD -:103F500006DCA068A84600EB08100578FF2DEFD11D -:103F6000A06800EB061100EB08100D700670E1E789 -:103F7000F0B5E24B0446002001259A680C269B7898 -:103F80000CE000BF05EB0017D75DA74204D106EB9C -:103F90000017D7598F4204D0401CC0B28342F1D8D9 -:103FA000FF20F0BD70B5FFF772FBD44C08252278D6 -:103FB000A16805EB0212895800F0A8F9012808DD74 -:103FC0002178A06805EB01114058BDE87040FFF76B -:103FD00055BBFFF727FABDE87040F7F7D7BE2DE9CC -:103FE000F041C64C2578FFF752FBFF2D6ED04FF005 -:103FF0000808A26808EB0516915900F087F9022815 -:10400000A06801DD80595DE000EB051109782170A1 -:10401000022101EB0511425C5AB1521E42548159F2 -:1040200001F5800121F07F4181512846FFF764FFAF -:1040300034E00423012203EB051302EB051250F8D0 -:1040400003C0875CBCF1000F10D0BCF5007F10D915 -:10405000CCF3080250F806C00CEB423C2CF07F4C2D -:1040600040F806C0C3589A1A520A09E0FF21815449 -:104070000AE0825902EB4C3222F07F428251002248 -:1040800042542846FFF738FF0C21A06801EB0511C8 -:104090004158E06850F82720384690472078FF289C -:1040A00014D0FFF7F4FA2278A16808EB0212454613 -:1040B000895800F02BF9012893DD2178A06805EBE1 -:1040C00001114058BDE8F041FFF7D8BABDE8F081D2 -:1040D000F0B51D4614460E460746FF2B00D3FFDF02 -:1040E000A00700D0FFDF8548FF210022C0E902477A -:1040F000C57006710170427082701046012204E0A2 -:1041000002EB0013401CE154C0B2A842F8D3F0BD4A -:1041100070B57A4C064665782079854200D3FFDF7A -:10412000E06840F825606078401C6070284670BDEB -:104130002DE9FF5F1D468B460746FF24FFF7A7FAD0 -:10414000DFF8B891064699F80100B84200D8FFDFC1 -:1041500000214FF001084FF00C0A99F80220D9F81D -:1041600008000EE008EB0113C35CFF2B0ED0BB422E -:1041700005D10AEB011350F803C0DC450CD0491CF3 -:10418000C9B28A42EED8FF2C02D00DE00C46F6E709 -:1041900099F803108A4203D1FF2004B0BDE8F09FD4 -:1041A0001446521C89F8022008EB04110AEB041291 -:1041B000475440F802B00421029B0022012B01EB7E -:1041C00004110CD040F801204FF4007808234FF080 -:1041D000020C454513D9E905C90D02D002E045504E -:1041E000F2E7414606EB413203EB041322F07F4233 -:1041F000C250691A0CEB0412490A81540BE005B94C -:10420000012506EB453103EB041321F07F41C1503A -:104210000CEB0411425499F800502046FFF76CFE55 -:1042200099F80000A84201D0FFF7BCFE3846B4E779 -:1042300070B50C460546FFF72AFA06462146284681 -:10424000FFF796FE0446FF281AD02C4D082101EBFB -:104250000411A8684158304600F058F800F5805025 -:10426000C11700EBD14040130221AA6801EB0411F1 -:10427000515C09B100EB4120002800DC012070BD39 -:10428000002070BD2DE9F04788468146FFF770FE9B -:104290000746FF281BD0194D2E78A86831463446B2 -:1042A00005E0BC4206D0264600EB06121478FF2C2F -:1042B000F7D10CE0FF2C0AD0A6420CD100EB011084 -:1042C00000782870FF2804D0FFF76CFE03E0002080 -:1042D00030E6FFF7D9F941464846FFF7A9FF012329 -:1042E000A968024603EB0413FF20C854A878401EB7 -:1042F000B84200D1A87001EB041001E0140A0020BC -:1043000001EB061100780870104613E6081A000247 -:10431000C11700EB116000127047000070B5044631 -:10432000A0F500002D4EB0F1786F02D23444A4F510 -:1043300000042B48844201D2012500E0002500F052 -:1043400043F848B125B9B44204D32648006808E0D0 -:10435000012070BD002070BD002DF9D1B442F9D309 -:1043600021488442F6D2F3E710B50446A0F50000D8 -:10437000B0F1786F03D219480444A4F5000400F0AA -:1043800023F84FF0804130B11648006804E08C42B9 -:1043900004D2012003E014488442F8D2002080F0C7 -:1043A000010010BD10B520B1FFF7DEFF08B10120FC -:1043B00010BD002010BD10B520B1FFF7AFFF08B150 -:1043C000012010BD002010BD08480949006888423E -:1043D00001D101207047002070470000000000203C -:1043E000006002002000002008000020B000002033 -:1043F000BEBAFECA0548064A0168914201D10021B1 -:10440000016004490120086070470000B0000020EE -:10441000BEBAFECA40E50140534800210170417018 -:1044200010218170704770B5054616460C46022073 -:10443000EEF7D7F94C49012008704C49F01E08608E -:104440004B480560001F046070BD10B50220EEF7F8 -:10445000C8F945490120087046480021C0F80011FC -:10446000C0F80411C0F8081143494FF40000086077 -:1044700010BD3D480178C9B1404A4FF400011160B8 -:104480003C49D1F800310022002B1CBFD1F8043187 -:10449000002B02D0D1F8081111B14270102103E0B5 -:1044A0000121417036490968817002700020EEF7E1 -:1044B00098B92D480178002904BF407870472D48ED -:1044C000D0F80011002904BF02207047D0F8001175 -:1044D00000291CBFD0F80411002905D0D0F808012C -:1044E000002804BF01207047002070471E4800B517 -:1044F0000278204B4078C821491EC9B282B1D3F856 -:1045000000C1BCF1000F10D0D3F8000100281CBF7F -:10451000D3F8040100280BD0D3F8080150B107E00C -:10452000022802D0012805D002E00029E4D1FFDFF3 -:10453000002000BD012000BD0B480178002904BF08 -:10454000807870470B48D0F8001100291CBFD0F8C4 -:104550000411002902D0D0F8080108B110207047DA -:1045600007480068C0B27047B400002010F5004052 -:1045700008F5004000F0004004F5014008F5014056 -:1045800000F400404C48002101704170704770B544 -:10459000064614460D460120EEF723F9474806600B -:1045A000001D0460001D056070BD70B54249012505 -:1045B0000D7040EA0241424A41F080711160414C65 -:1045C0000026C4F80461404A4FF040711160002891 -:1045D00002BFC4F80052256070BD012818BFFFDF7C -:1045E000C4F8006225604FF000703849086070BD63 -:1045F0003148017879B1344A4FF040711160314946 -:10460000D1F804210021002A08BF417002D0304AAD -:104610001268427001700020EEF7E3B82648017876 -:10462000002904BF407870472648D0F804010028CC -:1046300008BF704726480068C0B27047002808BF0E -:10464000704730B51C480078002808BFFFDF1D48C0 -:10465000D0F80411002918BF30BD0224C0F804436B -:10466000DFF870C0DCF80010C1F30015DCF80010B2 -:1046700041F01001CCF80010D0F80411002904BF5B -:104680004FF400414FF0E02207D100BFC2F8801282 -:1046900020BFD0F80431002BF8D02DB9DCF8001081 -:1046A00021F01001CCF80010C0F8084330BD0549D6 -:1046B0000120886070470000B700002008F5004026 -:1046C00004F5004000F0004008F5014004F5014009 -:1046D00000F4004010ED00E010B5FF480024012177 -:1046E0004470047044728472C17280F82140846204 -:1046F000446314300FF004FFF849601E0860091D80 -:104700000860091D0C60091D0860091D0C60091D69 -:104710000860091D0860091D0860091D0860091D61 -:104720000860091D0860091D0860091D0860091D51 -:10473000086010BDEA48016801F00F01032904BFB9 -:1047400001207047006800F00F00042804BF022019 -:10475000704700B5FFDF012000BD30B4DE490268BC -:10476000DFF884C34A6142688A61007A08770A7D6B -:10477000DC4BACF1040401204AB10A7E00FA02F2DB -:104780001A608D7D002D0CBF2260CCF800204A7D80 -:10479000002A04BF30BC70474A7E90401860C97D33 -:1047A00000290CBF2060CCF8000030BC704730B549 -:1047B00000250446012904D002290CBF4FF0807562 -:1047C000FFDF45F4847040F48010C849086044F469 -:1047D0004030091D40F00070086030BD30B5002544 -:1047E0000446012904D002290CBF4FF08075FFDF79 -:1047F00045F4847040F48010BC49086044F44030B3 -:10480000091D40F000700860B948D0F80001002888 -:1048100018BFFFDF30BD2DE9F04102264FF0E02741 -:1048200001240025C7F88061B248056004600EF0DD -:1048300077FDB14918B1086840F4806008600868E5 -:1048400020F0770040F0880040F0004008600EF053 -:1048500051FD30B1A948016821F47F4141F4B051C4 -:1048600001600EF047FD9C4940B1A5484E770660B7 -:10487000A54AA4481060121FA4481060A44A40F240 -:104880005B601060121F40F203101060101F046084 -:10489000934A032010609F4A96201060487F0028AA -:1048A00014BF4FF4C0209C4840F440209B4A106045 -:1048B0009C4A9B481060121F9B481060C7F880629A -:1048C0008B4A1020C2F8040381F82D50BDE8F08116 -:1048D0009648016821F0010141F080710160704744 -:1048E0007D4A0368C2F802308088D0801172704718 -:1048F000794B10B51A7A8A4208D101460622981CD3 -:104900000FF02AFC002804BF012010BD002010BDBC -:10491000714890F8210070476F4A517010707047CD -:10492000F0B50546800000F1804000F580508B888E -:10493000C0F820360B78D1F8011043EA0121C0F805 -:10494000001605F10800012707FA00F6784C002A46 -:1049500004BF2068B04304D0012A18BFFFDF2068DD -:1049600030432060206807FA05F108432060F0BD5D -:104970000EF096BF584890F82E007047564890F8B1 -:10498000300070476B4AC178116000686A490002C4 -:1049900008607047252808BF02210ED0262808BFCE -:1049A0001A210AD0272808BF502106D00A2894BF10 -:1049B0000422062202EB4001C9B2604A116060493C -:1049C00008607047F0B4444B9D7A012D61D0022DF0 -:1049D0001CBFF0BC704793F815C0BCF1000F04BFBA -:1049E000F0BC70474FF47A7C012D564C564F57D08F -:1049F000DE7D5D7E002E18BF0126012908BF29211A -:104A00000CD0022A0CBF514C012A03D0042A0CBF3F -:104A10003C464F4C04F2E141B1FBFCF1491F084414 -:104A20004C4908604C490020C1F84C01280286F02E -:104A3000010140EA015040F00311187F820002F1A9 -:104A4000804202F5C042C2F81015444901EB8002D1 -:104A5000997EC80000F1804000F5F830C0F81425B8 -:104A6000DFF8FCC0C0F810C5D87EC30003F1804356 -:104A700003F5F833C3F814252B4AC3F81025012297 -:104A800002FA01F102FA00F0084336490860F0BC6E -:104A9000704793F814C0BCF1000FA3D1F0BC70476D -:104AA0009E7D1D7E002E18BF0126012965D0022A99 -:104AB00004BF2D4C4FF47A710CD0012A08BF4FF47B -:104AC000C86107D0042A07BF3C4640F69801274C2E -:104AD00040F6E44121444BE0240A0020000E00404F -:104AE00010150040180500500C050050141500402A -:104AF00000100040FC1F00403C17004040170040E1 -:104B000060150040448000409CF5014028110040A1 -:104B100038150040441500400000040408F5014029 -:104B200040800040A4F5014010110040741700407F -:104B300040160040241500401C1500400815004098 -:104B400054150040A2240200D0FB010004360200EC -:104B5000C0D401004C85004000800040006000404F -:104B60004C81004004F501406836020030D301005A -:104B700001F5FA71B1FBFCF150E7022A08BF4FF4CE -:104B80007A710AD0012A08BF4FF4C86105D0042AFF -:104B90000CBF40F6980140F6E44149F6FC6211442E -:104BA000E8E72DE9F047FC4E80460320154689468C -:104BB000C6F80002F94F787F002814BF4FF4C020D8 -:104BC000F748F849086048460EF0A5FE28460EF062 -:104BD00095FE0124B8F1000F03D0B8F1010F16D0F3 -:104BE00018E00EF087FB78B1EF490A684806022DFD -:104BF000D0F820030CBFC0F30660C0F3062022F4F7 -:104C0000FE4242EA00200860BC72346002E00220EA -:104C1000B8727460E548C464E54800682A464946AD -:104C2000BDE8F047CEE62DE9F0418846DA4907466F -:104C300003201546C1F80002D84C607F002814BF3D -:104C40004FF4C020D648D74E306040460EF063FE89 -:104C500028460EF053FE17B1012F1CD024E00EF0B1 -:104C600049FB78B1D04A11685006022DD0F82003D4 -:104C70000CBFC0F30660C0F3062021F4FE4141EAF8 -:104C8000002010600120A072606B40F4801060630F -:104C90004FF4801007E00220A072606B40F4001017 -:104CA00060634FF4001030602A464146BDE8F04191 -:104CB000002087E62DE9FF4FB74C8346002581B0E1 -:104CC00003208946C4F80002B44E707F002814BF48 -:104CD0004FF4C020B248B34F386003980EF01BFE6B -:104CE00004980EF00BFEDFF8CCA24FF00108BBF1E8 -:104CF000000F03D0BBF1010F35D046E00EF0FAFAF9 -:104D000080B1A94A0498116853060228D3F82003F9 -:104D10000CBFC0F30660C0F3062021F4FE4141EA57 -:104D200000201060CAF8004096F82D00012806D037 -:104D3000022818BFFFDF0CD086F80A8025E0DDE9E5 -:104D4000031396F82C2048460EF066FEB16A45180B -:104D5000F2E7DDE9031296F82C3048460EF0EAFD42 -:104D6000B16A4518E8E79448CAF8000096F82D00A3 -:104D7000DDE90313012896F82C20484624D00EF0D4 -:104D800095FEB16A45180220B0728C4805608D49C5 -:104D90008B480860706B40F400207063D4F8009278 -:104DA0004FF0100AC4F808A30026C4F80062864831 -:104DB0004FF4802BC0F800B0FF208DF80000C4F83D -:104DC0001061C4F810800AE00EF0F2FDB16A4518D7 -:104DD000D9E700BF9DF80000401E8DF800009DF847 -:104DE000000018B1D4F810010028F3D09DF800009D -:104DF000002808BFFFDFC4F80061C4F80C61C4F8E4 -:104E00001061C4F80461C4F81461C4F818610EF0AC -:104E100071FA002818BFC4F828616C480068009037 -:104E2000C4F80092C7F800B0C4F804A34FF40020FF -:104E300038605E48C0F84C805D480068A84228BFD2 -:104E4000FFDF2846DDE9031205B0BDE8F04FB9E504 -:104E50002DE9F84F504CD4F8000220F00B09D4F89B -:104E600004034FF0100AC0F30018C4F808A300268A -:104E7000C4F80062494D687F002814BF4FF4C02079 -:104E8000474840F4402150480160A97A0127012990 -:104E900002D0022903D014E0297D11B911E0697D07 -:104EA00079B1A97EEA7E07FA01F107FA02F211430D -:104EB0000160287F800000F1804000F5C040C0F80C -:104EC0001065FF208DF80000C4F81061276104E030 -:104ED0009DF80000401E8DF800009DF8000018B1FC -:104EE000D4F810010028F3D09DF80000002808BF76 -:104EF000FFDFC4F810610EF0FDF9002818BFC4F8F8 -:104F000028616E72AE72EF72C4F80092B8F1000FB1 -:104F100018BFC4F804A3BDE8F88F00682C4920F03E -:104F20007F40086070474FF0E0200221C0F88011F8 -:104F3000C0F8801270474FF0E0210220C1F8000154 -:104F4000704724490870704723490860704730B59E -:104F5000124C0546A06AA84228BFFFDF012020733B -:104F60002561607F40B1284420610B48D0F80012D1 -:104F700041F04001C0F800120C490020C1F8440182 -:104F8000164920690860606B064940F48000606340 -:104F90004FF48000086030BD00100040240A00205B -:104FA0000000040404F50140881500400080004022 -:104FB0004C850040ACF5014004100040488500409D -:104FC00048810040A8F5014008F501401811004053 -:104FD0003C150040B9000020041500404485004005 -:104FE00070B505460E460220FE4C2073FE4801684F -:104FF00001F00F01032908BF012207D0006800F06B -:105000000F0004280EBF0222FFDF012294F82D00BA -:1050100094F82C10012819D028460EF0A5FD206127 -:10502000607F48B1216908442061F048D0F800123F -:1050300041F04001C0F80012ED490020C1F84401E0 -:105040002169A06A0844EB49086070BD33462846D0 -:105050000EF053FDE3E7E8494FF480000860E148B3 -:10506000416B21F480014163002101737047C2004C -:1050700002F1804202F5F832E04BC2F81035C2F876 -:10508000141501218140DE480160D648426B11436E -:1050900041637047D64801214160C1600021C0F8DA -:1050A0004411D4480160CF488162704710B504466E -:1050B0000EF020F900281CBFCA484477D14804608C -:1050C000CA48D0F8001241F04001C0F8001210BDEB -:1050D000C64810B5D0F8001221F04001C0F8001207 -:1050E0000EF008F9C749002818BF0220086010BD5B -:1050F000BE48D0F8001221F01001C0F800120121C2 -:1051000081617047B9480021C0F81C11D0F8001225 -:1051100041F01001C0F800127047B44981B0D1F8D5 -:105120001C21012A1EBF002001B07047B64A126838 -:1051300002F07F02524202700020C1F81C01B34805 -:1051400000680090012001B0704730B50C000546A2 -:1051500008BFFFDF14F0010F1CBF012CFFDF002D83 -:105160000CBF012002209F4901284872CC729F4940 -:1051700004BFD1F8000240F0040007D0022807BFA6 -:10518000D1F8000240F00800FFDF30BDC1F8000296 -:1051900030BD2DE9F84FDFF8789299F80000042827 -:1051A00028BFFFDFDFF848A2DAF84C1192488D4C97 -:1051B00000274FF00108D1B1A17A012902D00229BC -:1051C00003D014E0217D11B911E0617D79B1A17E98 -:1051D000E27E08FA01F108FA02F211430160217F30 -:1051E000890001F1804101F5C041C1F81075824884 -:1051F000616B01606763217B002019B1DAF844110B -:10520000012900D00021A27A784E012A6ED0022A0C -:1052100074D000BFD6F8101101290CBF1021002155 -:1052200041EA00057B48016811F0FF0F03D0D6F872 -:105230001411012900D0002184F82E10006810F00C -:10524000FF0F03D0D6F81801012800D0002084F801 -:105250002F007148006884F83000FFF72AF9012810 -:1052600018BF002084F83100C6F80071C6F80C7130 -:10527000C6F81071C6F80471C6F81471C6F8187132 -:105280000EF038F8002818BFC6F828716348006887 -:1052900000905748C0F8447161480068DFF854A195 -:1052A0000090DAF800006062617F00291CBF401A9C -:1052B00060625C480068A0624B48016801F00F0121 -:1052C000032908BF012007D0006800F00F00042860 -:1052D0000EBF0220FFDF012084F82C00A07ADFF847 -:1052E00048B184F82D00022824D116E0D6F80C012C -:1052F000012814BF002008208CE7FFE7D6F80C0136 -:10530000012814BF00200220484A1268012A14BF55 -:1053100004220022104308437CE7607850B1DBF898 -:10532000001009780840217831EA000008BF84F8AD -:10533000208001D084F8207015F0020F07D099F872 -:1053400000103B4A4908606A52F82110884715F05E -:10535000010F18BF00210DD0364A99F80030A06A1D -:1053600052F82320904700BF99F8000010F0010F79 -:105370002AD10AE015F0020F18BF0121ECD115F077 -:10538000080F18BF0221E7D1EEE7DBF80000007834 -:1053900000F00F00072828BF84F8217014D2DBF832 -:1053A0000000062200F10901A01C0EF0D5FE40B954 -:1053B000207ADBF800100978B0EBD11F08BF01207C -:1053C00000D0002084F82100E17A002011F0020FC3 -:1053D0001CBF15F0020F15F0040F45D111F0100F8E -:1053E0002AE00000240A00201015004000100040B0 -:1053F000008000404485004008F501400411004051 -:1054000004F5014060150040481500401C110040A3 -:10541000B900002040160040101400401811004050 -:1054200044810040408500400415004000140040C5 -:1054300008480200504802001CBF94F82F20002AA0 -:1054400002D094F831207AB111F0080F1CBF94F803 -:105450002020002A08D111F0040F02D094F8211066 -:1054600011B115F0010F00D00120617A19B198B186 -:10547000FFF7EEFC1EE0607F002814BF4FF4C02150 -:105480007F4980480160D6F8000220F00300C6F88A -:10549000000284F80B800DE04FF0000B012913D0BF -:1054A000022918BFFFDF21D0A06A01225844002141 -:1054B000FFF788FA15F0010F2BD0734899F8001008 -:1054C00050F82100804745E0D6F8000220F00400A3 -:1054D000C6F80002677284F80B80012384F80A8002 -:1054E0001A46002196200EF025FA10E0D6F80002A8 -:1054F00020F00800C6F80002677284F80B800220D2 -:10550000A07201231A46002196200EF051FA83461C -:10551000CAE715F0020F08D05C4999F8002028EA84 -:10552000950051F82210884714E015F0080F06D0B6 -:10553000574899F8001050F8210080470AE015F00C -:10554000100F08BFFFDF05D0524899F8001050F83F -:1055500021008047A07A022818BFBDE8F88F207B81 -:10556000002808BFBDE8F88F4B49C1F844710228F4 -:1055700014D0012818BFFFDFA16A2069884298BFB4 -:10558000FFDF2069CAF80000606B444940F48000E6 -:1055900060634FF480000860BDE8F88F2169A06A5D -:1055A0000844EFE738B500253D4C002818BFC4F883 -:1055B0000052C4F80051C4F80C51C4F81051C4F89A -:1055C0000451C4F81451C4F818510DF093FE00288A -:1055D00018BFC4F8285133480068009038BD01282E -:1055E00004BF28207047022804BF1820704700B568 -:1055F000FFDF282000BD012804BF41F6A4707047DA -:10560000022804BF41F28830704700B5FFDF41F641 -:10561000A47000BD012804BF41F2D4707047022875 -:1056200004BF41F20400704700B5FFDF41F2D470BF -:1056300000BD012812BF02280020704700B5FFDF1F -:10564000002000BD16490820C1F800021648407F1E -:10565000002814BF4FF4C02009480A4908601449C3 -:1056600012480860091D13480860091D12480860A7 -:10567000091D1248086009494FF44020086070472E -:105680000000040408F50140104802002048020010 -:1056900030480200404802000080004004F501400C -:1056A0000010004018110040240A002000110040A2 -:1056B000A0F50140141000401C11004010100040E3 -:1056C00010B53F4822210EF0F2FD3D48017821F04F -:1056D00010010170012107F017FC3A49002081F800 -:1056E00022004FF6FF70888437490880488010BD3B -:1056F000704734498A8C824218BF7047002081F875 -:1057000022004FF6FF70888470472D490160704772 -:105710002D49088070472B498A8CA2F57F43FF3BB7 -:1057200003D0002101600846704791F822202549E6 -:10573000012A1ABF0160012000207047214901F1B0 -:10574000220091F82220012A04BF00207047012284 -:1057500002701D4800888884104670471A494880A6 -:1057600070471849184B8A8C5B889A4206D191F889 -:105770002220002A1EBF01600120704700207047D0 -:105780001048114A818C5288914209D14FF6FF711D -:10579000818410F8221F19B1002101700120704787 -:1057A000002070470748084A818C5288914205D1F1 -:1057B00090F8220000281CBF00207047012070478D -:1057C000820A00205C0A0020BA0000207047574A75 -:1057D000012340B1012818BF70471370086890601A -:1057E00088889081704753700868C2F802008888E2 -:1057F000D08070474D4A10B1012807D00EE0507894 -:1058000060B1D2F802000860D08804E0107828B1B6 -:105810009068086090898880012070470020704758 -:10582000424910B1012803D006E0487810B903E0DE -:10583000087808B1012070470020704730B58DB05E -:105840000C4605460D2104A80EF053FDE0788DF8B6 -:105850001F0020798DF81E0060798DF81D002868E2 -:10586000009068680190A8680290E8680390684614 -:105870000DF0C2FB20789DF82F1088420CD1607883 -:105880009DF82E10884207D1A0789DF82D108842EF -:1058900002BF01200DB030BD00200DB030BD30B5CD -:1058A0000C4605468DB04FF0030104F1030012B120 -:1058B000FEF7F0F901E0FEF70CFA60790D2120F017 -:1058C000C00040F04000607104A80EF012FDE078C6 -:1058D0008DF81F0020798DF81E0060798DF81D006D -:1058E0002868009068680190A8680290E8680390B2 -:1058F00068460DF081FB9DF82F0020709DF82E006A -:1059000060709DF82D00A0700DB030BD10B500295D -:1059100004464FF0060102D0FEF7BCF901E0FEF7A5 -:10592000D8F9607920F0C000607110BDBE00002081 -:1059300070B5F84E0446306890F800110025012932 -:1059400019D090F8FA10012924D090F8D01001292C -:105950002AD090F8F21001291CBF002070BD65709C -:1059600017212170D0F8F4106160B0F8F81021818F -:1059700080F8F25016E065701C212170D0F80111FA -:105980006160D0F80511A16090F80911217380F8C9 -:10599000005107E0657007212170D0F8FC106160AC -:1059A00080F8FA50012070BD65701421217000F15B -:1059B000D2012022201D0EF0FBFB01212172306854 -:1059C00080F8D050D448B0F8D420A0F8FC207268F9 -:1059D000537B80F8FE3080F8FA101088FBF71AF934 -:1059E000FAF7C1FDDEE7CB48006890F8D010002937 -:1059F00014BFB0F8D4004FF6FF70704770B5C54CB7 -:105A00002068002808BFFFDF0025206845700028B7 -:105A100008BFFFDF2068417800291CBFFFDF70BD91 -:105A20004FF486710EF065FC2068FF2101707F2124 -:105A300080F8361013214184282180F8CC100121F0 -:105A400080F8B81080F8BD50FFF742FBFEF711FD5B -:105A5000B24806F0E5FFB24806F0E2FFBDE870404C -:105A6000B04806F0DDBFAB490968097881420CBF38 -:105A7000012000207047A748006890F82200C0F37A -:105A8000001070472DE9F04FA248016891F82400FA -:105A9000B1F822C0C0F38002C0F340031A4400F002 -:105AA00001001044CCF300121AB3BCF1130F1BD049 -:105AB0000BDCBCF1100F02BF9B4931F81000BDE8B0 -:105AC000F08FBCF1120F0FD00AE0BCF1150F08BF28 -:105AD00096490AD0BCF11D0F04BF9548BDE8F08F70 -:105AE000FFDF0020BDE8F08F924931F81000BDE8DB -:105AF000F08F002491F8BA2091F8BB108E4E8F4F92 -:105B00001CF0030F4FF47A7B4FF0190A25464FF42F -:105B1000C8784FF4BF794FF018037DD01CF0010F07 -:105B20001BD0082904BF44464FF0400C0FD0042975 -:105B300004BF4C464FF0100C09D0022907BF05F1F5 -:105B400018044FF0040C05F128044FF0080C0CEB7E -:105B50004C0E0EEB0C1CA44417E0082904BFC446ED -:105B600040240CD0042904BFCC46102407D00229BD -:105B700007BF05F1180C042405F1280C082404EBD8 -:105B8000C40404EB44040CEB440C022A04BF6C4E26 -:105B90004FF47A740CD0012A08BF4FF4C86407D0C0 -:105BA000042A07BF674E40F698043E4640F6E44498 -:105BB000344404F2E734B4FBFBF4C0EB001606EB0C -:105BC000860604EB8604082A30D0042A29D0022A4B -:105BD00007BF05F11802042505F128024FF0190A44 -:105BE00018BF08251AFB052212FB0040082922D005 -:105BF000042925D0022904BF0421C03004D0282361 -:105C000003F5A87108440821C1EBC10101EB410172 -:105C100003EB4101084400E017E0604400F52674FE -:105C200018E04A464FF0140A1025DBE742464FF0D1 -:105C3000140A4025D6E74346402100F53D60E3E7DE -:105C40004B46102100F57C70DEE71CF0020F18BFF8 -:105C5000FFDF02D02046BDE8F08F022A04BF384E95 -:105C60004FF47A7C0CD0012A08BF4FF4C86C07D0DF -:105C7000042A07BF334E40F6980C3E4640F6E44CEB -:105C8000B4440CF2E73CBCFBFBFCC0EB001404EB9F -:105C900084040CEB840C082A04BF4FF0140A402241 -:105CA0000CD0042A29D0022A07BF05F118080422C3 -:105CB00005F128084FF0190A18BF08221AFB0282C2 -:105CC00012FB00C0082904BF4FF4A87340210AD07A -:105CD000042904BF4FF4A873102104D002290EBF79 -:105CE000042128230821C1EBC10101EB410103EB91 -:105CF0004101084400F5B274ACE7C8464FF0140AFD -:105D00001022DBE7034840F271210068806A4843B3 -:105D100070470000CC000020A40A0020B00B002037 -:105D2000D80B0020000C0020744802007C480200C0 -:105D3000F18913006C480200A224020030D3010054 -:105D400068360200D0FB0100F848006890F8350082 -:105D5000002818BF0120704710B5F54C207B0228A1 -:105D600018BF032808D1207D04F1150105F018FDA6 -:105D700008281CBF012010BD207B002816BF022868 -:105D800000200120BDE81040FFF74ABDE74909683F -:105D900081F8300070472DE9F047E44D2968087B11 -:105DA000002816BF02280020012048730E31FFF79B -:105DB00021FD2968087B022816BF03280122002242 -:105DC00081F82F20082081F82D00487B012600272C -:105DD00001F10E03012804BF5B7913F0C00F0AD054 -:105DE00001F10E03012804D1587900F0C0004028C9 -:105DF00001D0002000E0012081F82E00002A04BF1D -:105E000091F8220010F0040F06D0087D153105F03E -:105E1000C7FC296881F82D0028684760FCF7F8FE68 -:105E20002968C34C4FF00009886094F82D0005F0F4 -:105E3000D3FC804694F82F00002818BFB8F1000F5B -:105E400004D01021404606F050FB68B194F83000B1 -:105E500000281CBF94F82E0000281DD0607B04F1A0 -:105E60000E0101280ED012E066734A4604F10E01BD -:105E70004046FFF714FD94F82D1004F10E0005F0D4 -:105E8000A4FD09E0487900F0C000402831D039462F -:105E900004F10E00FFF73AFD2868C77690F822005B -:105EA00010F0040F08BFBDE8F087002794F82D001C -:105EB00005F09BFC040008BFBDE8F087102106F048 -:105EC00014FB002818BFBDE8F08728683A4600F1A7 -:105ED0001C01C6762046FFF7E2FC286800F11C0191 -:105EE000944806F0D4FDBDE8F0470121914806F042 -:105EF000E9BD05F0A3FD4A4604F10E01FFF7CFFC12 -:105F0000CAE778B58A490446884D407B08732968FA -:105F1000207808706088ADF8000080B200F00102BF -:105F2000C0F3400342EA4302C0F3800342EA830223 -:105F3000C0F3C00342EAC302C0F3001342EA0312F3 -:105F4000C0F3401342EA4312C0F3801042EA8010CB -:105F50004884E07D012808BF012603D0022814BF31 -:105F6000FFDF0226286880F8BA60607E012808BF3B -:105F7000012603D0022814BFFFDF0226286880F81C -:105F8000BB60217B80F82410418C1D290CBF0021AF -:105F900061688162617D80F83510A17B002916BFA0 -:105FA0000229002101210175D4F80F10C0F8151045 -:105FB000B4F81310A0F81910A17EB0F8CE2061F348 -:105FC0000302A0F8CE20E17E012918BF002180F84D -:105FD0003410002078BD55480068408CC0F3001193 -:105FE00019B110F0040F05D002E010F0020F01D03B -:105FF00000207047012070474C4A00231268C2F805 -:10600000C030B2F822C0BCF11D0F02BFC2F8C830C8 -:1060100082F8C4307047002908BFC2F8C8300AD0DF -:10602000936A40F2712C03FB0CF31944491EB1FB37 -:10603000F3F1C2F8C81082F8C400704703463B4829 -:1060400010B50168D1F8C820002A1ABFD1F8C0C025 -:10605000BCF1000F012405D09A4205D90124D01AC1 -:10606000C1F8C800204610BD91F82210002411F09C -:10607000010F1CBF406800884FF0430108BF00209B -:1060800001F009F9EEE72948006890F8B700002808 -:106090000CBF01200020704770B51F2834BF044694 -:1060A0001F240022214D286880F8B920224678302C -:1060B0000EF07EF82868012180F8974080F8B9102A -:1060C00070BD10B51F2828BF1F20C2B2174C002377 -:1060D000206880F8B83080F8B72098300EF068F863 -:1060E0002168012081F8B80010BD1049096881F8C5 -:1060F000BD0070470D48006890F8220000F00100D4 -:1061000070470A48006890F82200C0F340007047CA -:106110000648006890F82200C0F34010704703481A -:10612000006890F82200C0F3C0007047CC00002047 -:10613000A40A0020B00B002001207047F748006837 -:1061400090F8BB00704770B5FEF7A4FFFEF783FF21 -:10615000FEF77EFEFEF7E7FEF04C2068D0F8C01098 -:10616000491CC0F8C01090F83300002530B1FEF78C -:10617000AFFFFEF77EF9206880F833502068457045 -:1061800090F8C410F9B1D0F8C02091421BD8042077 -:1061900002F050FA206890F8220010F0010F0CD0A5 -:1061A00060684321008801F076F860680088FAF79B -:1061B00031FDBDE87040FAF7C7B9BDE87040432132 -:1061C000002001F068B8D0F8C81019B1D0F8C0208C -:1061D000914202D990F83700D8B1042002F02AFA8F -:1061E000206890F8220010F0010F0CD060683C216C -:1061F000008801F050F860680088FAF70BFDBDE8F0 -:106200007040FAF7A1B9BDE870403C21002001F0D0 -:1062100042B8BDE87040002002F00CBA2DE9F84FFA -:10622000BE4E8046174630688B464FF0000A458CBC -:1062300015F0030F10D015F0010F05F0020005D086 -:10624000002808BF4FF0010A06D004E0002818BF5C -:106250004FF0020A00D1FFDF4FF000094C4615F065 -:10626000010F05F002000BD070B915F0040F0BD030 -:1062700049F00800002F18BF40F0030440D090E020 -:1062800010B115F0040F0DD015F0070F10D015F058 -:10629000010F05F0020036D0002808BF15F0040FEA -:1062A00027D03DE0002F18BF49F0090479D134E030 -:1062B0002FB149F0080415F0200F14D071E03168B7 -:1062C00005F0200291F87700104308BF49F001045F -:1062D00067D049F0180415F0200F62D191F8BA1078 -:1062E00008295AD156E0316891F8BA10082951D1DD -:1062F00053E049F00800002F18BF40F0010450D1CE -:1063000040F010044DE0002818BF15F0040F07D02E -:10631000002F18BF49F00B0443D149F0180440E0A6 -:1063200015F0030F3CD115F0040F39D077B1316867 -:1063300049F0080091F8BA1008290CBF40F0020497 -:1063400020F0020415F0200F22D02AE0316805F079 -:10635000200291F87700104308BF49F0030420D0D1 -:1063600049F0180015F0200F09D000BF91F8BA10BD -:10637000082914BF40F0020420F0020411E091F853 -:10638000BA20082A14BF40F0010020F00100EDE718 -:10639000082902D024F0010403E044F0010400E0E5 -:1063A000FFDF15F0400F18BFFFDFA8F8009098F846 -:1063B0000000072120F0200088F80000404606F089 -:1063C00034FB5146404606F033FD2146404606F078 -:1063D00038FD14F0010F0CD03068062300F10E01D7 -:1063E0000022404606F00AFD3068417B404606F038 -:1063F0005CFB14F0020F1BD03068BBF1000F0BD018 -:1064000000F11C0106230122404606F0F7FC0121A1 -:10641000404606F057FB0BE000F115010623012270 -:10642000404606F0EBFC3068017D404606F04AFB32 -:1064300014F0040F18BFFFDF14F0080F17D0CDF8C9 -:1064400000903068BDF800100223B0F8CE000209B9 -:1064500062F30B01ADF800109DF80110032260F308 -:1064600007118DF801106946404606F0C7FC012F60 -:1064700016D1306890F8770090B1404606F0D4FC11 -:106480003368401CC0B293F87710C0F125008142F8 -:10649000B8BF084682B203F15801404606F0FFFC3F -:1064A0000020002818BFFFDF0020002818BFFFDFF2 -:1064B0000020002818BFFFDFBDE8F88F2DE9F84362 -:1064C000164C2068002808BFFFDF2068417811BB08 -:1064D0000178FF291FD0002780F83170877080F87D -:1064E00037703846FEF72DFDFEF795F9206890F9D4 -:1064F000BD00FEF73DFA0A48FEF744FA0948FEF7E8 -:106500000CFD206890F8240010F0010F0CD025201D -:10651000FEF740FA10E00C20BDE8F883CC00002024 -:10652000684802006548020010F0020F18BF2620DC -:1065300068D000BFFEF72EFA206890F8BA10252028 -:10654000FEF735F9206880F82C70FEF7F4FC20681F -:10655000002190F8BA200846FEF765FB0F210520C0 -:10656000FEF7DAF92068FF4D012690F82E10002979 -:1065700001BF90F82F10002990F8220010F0040FAE -:1065800070D0FCF745FB8046206841468068FDF7E7 -:106590004DF8F54990FBF1F901FB190041424046E5 -:1065A000FCF73FF80146206881604168494441603A -:1065B00005F0F3F801462068426891426DD8C0E9C1 -:1065C00001784FF0010895F82D0005F005F9814696 -:1065D00095F82F00002818BFB9F1000F04D0102142 -:1065E000484605F082FFA0B195F8300000281CBF96 -:1065F00095F82E00002824D0687B05F10E010128B3 -:1066000015D019E010F0040F14BF2720FFDF91D13F -:1066100092E732466E7305F10E014846FFF73FF9E7 -:1066200095F82D1005F10E0005F0CFF909E0487935 -:1066300000F0C000402816D0414605F10E00FFF7DB -:1066400065F9206890F8220010F0040F25D095F825 -:106650002D0005F0CAF85FEA00081ED0102105F0F1 -:1066600044FF40B119E005F0E9F9324605F10E01A9 -:10667000FFF715F9E5E72068324600F11C01C67600 -:106680004046FFF70CF9206800F11C01B74806F0FE -:10669000FEF90121B54806F015FA2068417B0E305D -:1066A000FEF71EF9206890F8B81079B390F8B7207B -:1066B00080F8772000F1980158300DF0BEFD206879 -:1066C00090F82210C1F30011E9B9B0F8CE00022110 -:1066D0000609ADF800606846FDF7DCFA28B1BDF8A0 -:1066E0000000C0F30B00B04204D1BDF80000401C14 -:1066F000ADF800002168BDF80000B1F8CE2060F3CD -:106700000F12A1F8CE20206880F8B870206890F8A9 -:10671000B91059B190F8972080F8572000F178010E -:1067200038300DF08AFD206880F8B9702068B0F824 -:10673000CE10D0F8C020090951FA82F190F8BC209F -:10674000DFF82CC2114463460022E1FB0C3212092F -:106750006FF0240302FB031180F8BC1090F82210A4 -:10676000824E90F81B80C1F3001106F12809002920 -:106770005DD03780317821F020013170408C1328B2 -:1067800037D01CDC10284DD0122846D0FFDF00BFC8 -:1067900005F10E01754806F06CF9697B734806F047 -:1067A00084F92068418C1D2918BF15297ED090F8E6 -:1067B000772000F15801304606F0ADF97EE015284B -:1067C00018BF1D28E2D10121304606F02EF930789D -:1067D000B8F1000F40F020003070206812D000F1B6 -:1067E0001C01304606F053F90121304606F06AF9E3 -:1067F000CEE70021304606F018F9307840F020004E -:106800003070C5E700F11501304606F040F9206808 -:10681000017D304606F056F9BAE70621304606F00B -:1068200004F9B5E70221304606F0FFF8B0E7002290 -:1068300041463046FFF7F2FC206890F877100029B7 -:1068400004BF408C10F0010F05D110F0020F08BFFB -:1068500010F0200F04D0012241464846FFF7DEFC2D -:10686000F07810F03F0F1CBF307910F0100F25D0DA -:10687000304606F0D8F82268014692F82400C0F3AA -:106880008003C0F3400C634400F00100034492F81D -:106890002C00C0F38002C0F3400C624400F0010001 -:1068A0001044181AC0B200F00AFD00E006E00090A3 -:1068B000032304226946304606F0A0FA206890F8C7 -:1068C0002200C0F30010B0B12A4E042130463780B8 -:1068D00006F0ABF805F10E01304606F0CAF8697B08 -:1068E000304606F0E2F8206800F1380190F85720B1 -:1068F000304606F034F904F0C5FF03211E4805F0C8 -:1069000054F8216881F83300002005E61B494860EF -:1069100070472DE9F843194C8046206890F83120E3 -:1069200032B1408C1D2808BFFFDFBDE8F8430AE400 -:10693000012639B390F8BC00FEF72CF8206890F8D7 -:10694000BB102520FDF733FF206801224FF496711C -:1069500090F8BB300020FEF7ADF90948FEF7F4FAD5 -:10696000206810E0A40A002040420F00B00B002075 -:1069700053E4B36E000C0020280C0020CC00002053 -:10698000D80B002005E04670867080F83160BDE8C5 -:10699000F883FE48FEF7D8FA2068002590F8241006 -:1069A00090F82C0021EA000212F0010F18BF012517 -:1069B0000ED111F0020F04D010F0020F08BF022513 -:1069C00006D011F0040F03D010F0040F08BF042507 -:1069D0000027B8F1000F5CD0012D1CD0022D08BF9C -:1069E00026201CD0042D14BFFFDF272017D02068DD -:1069F00090F8BA102520FDF7DAFE206890F82210F2 -:106A0000C1F3001171B1002201234FF496711046B9 -:106A1000FEF750F93DE02520FDF7BCFFE7E7FDF765 -:106A2000B9FFE4E790F8BA3001224FF496710020E4 -:106A3000FEF740F9D548C17811F03F0F1CBF00792F -:106A400010F0100F25D0D14805F0EDFF2368014666 -:106A500093F82420C2F38000C2F3400C604402F09B -:106A6000010200EB020C93F82C20C2F38000C2F369 -:106A70004003184402F001020244ACEB0200C0B231 -:106A800000F01DFC0090032304226946BF4806F075 -:106A9000B5F9206890F82C10294380F82C1090F854 -:106AA000242032EA010112D04670408C132821D0F4 -:106AB0001CDC102808BFBDE8F88312281AD000BFDC -:106AC000C0F30010002818BFFFDFBDE8F883418C39 -:106AD0001D2908BF80F82C70E6D0C1F300110029F1 -:106AE00014BF80F8316080F83170DDE7152818BFD9 -:106AF0001D28E5D1BDE8F84301210846FEF725BB76 -:106B0000A34810B50068417841B90078FF2805D046 -:106B100000210846FFF7FDFE002010BDFEF7BAFA7F -:106B2000FEF799FAFEF794F9FEF7FDF90C2010BD77 -:106B300097490120096881F837007047944909682E -:106B400081F83200704770B5002501F0E3FB0028A2 -:106B50007CD08F4C2068417800260122012905D085 -:106B6000022901D003297DD0FFDF70BD8178022684 -:106B700039B390F8220010F0030F67D08548FEF774 -:106B8000E3F920680122962190F8BB301046FEF709 -:106B900091F800219620FEF723FA2068467090F8BD -:106BA000330020B1FDF751FC4020FEF77FFA20684A -:106BB00090F83400002808BF70BDBDE87040FEF7B3 -:106BC000A1BA418CC1F300129AB1102929D090F8D2 -:106BD000330020B1FDF739FC4020FEF767FA6D481D -:106BE000FEF7B2F9206890F8221011F0040F1DD0C2 -:106BF00027E090F8242090F82C309A4211D190F898 -:106C00007700002808BF11F0010F05D111F0020F25 -:106C100008BF11F0200F52D0BDE870400121084696 -:106C200077E6BDE870400021012072E690F835005B -:106C3000012814BF0328102545F00E010020FEF79F -:106C400084FA206890F83400002801E037E009E079 -:106C500018BFFEF757FA00219620FEF7C1F9206809 -:106C6000467070BD817801B3418C11F0010F21D0C5 -:106C700080F8D02090F8D210B0F8D40000F00BFBD0 -:106C800060680088F9F7C6FFF9F75EFC2068467077 -:106C9000FEF700FAFEF7DFF9FEF7DAF8FEF743F940 -:106CA000BDE87040032001F0C5BC8178BDE87040AC -:106CB00001202EE611F0020F04BFFFDF70BDBDE81A -:106CC0007040FFF740BAFFF73EBA10B5304C20686D -:106CD00090F8341049B13630FEF71FFA18B9216820 -:106CE0007F2081F83600FEF703FA206890F8330021 -:106CF00018B1FEF7EDF9FDF7BCFB01F00BFBA8B1F5 -:106D0000206890F82210C1F3001179B14078022870 -:106D100018BFFFDF00210120FFF7FBFD206841784D -:106D200000291EBF40780128FFDF10BDBDE81040DC -:106D3000FFF709BA2DE9F047154F0E4603283A68C8 -:106D4000518C0BD092F8320001F0010410F10009CF -:106D500018BF4FF001094FF0010805E0C1F34004EE -:106D60004FF000094FF00208FDF704FE054634EA33 -:106D7000090008BFBDE8F0873868064C90F833007A -:106D800098B104F064FD3070014605E0B00B0020BE -:106D9000CC000020280C0020FF2806D0E01C04F0C6 -:106DA0004BFD307804F05EFD05432078C0F3801180 -:106DB0003868027D914209D100F115010622E01CDC -:106DC0000DF0CAF9002808BF012000D0002031785A -:106DD000FF2906D0C0B9386890F82D00884215D137 -:106DE00012E098B12078E11CC0F3801004F0D8FCC8 -:106DF000064604F03BFE38B1304604F0F6FC18B10C -:106E0000102105F072FB08B1012000E00020396874 -:106E100091F8221011F0040F01D0F0B11AE0CDB9B1 -:106E2000FE4890F83500002818BF404515D114F8E9 -:106E3000030B2146C0F3801004F0B2FC044604F0BA -:106E400015FE38B1204604F0D0FC18B1102105F031 -:106E50004CFB10B10120BDE8F0870020BDE8F087B1 -:106E60002DE9F04FEE4D804683B02868002740782A -:106E7000022818BFFFDF28687F2490F8341049B13A -:106E80003630FEF74AF9002804BF286880F83640FB -:106E9000FEF72EF9E34805F0E8FD0646B8F1000FCD -:106EA00000F0A381DF4805F079FF002800F09D8104 -:106EB000FDF72EFD002800F098813046D94EFF21C5 -:106EC000DFF864A34FF000084FF0030B4FF0010907 -:106ED000062880F0B981DFE800F0FDFDFD03FD8F9D -:106EE0008DF8001069460320FFF724FF002828686A -:106EF0007CD090F8341011B190F8001159B1286885 -:106F0000807801283ED0C948FEF71EF8286880F82E -:106F100001B000F06EB99DF8003080F80091017862 -:106F200080F80111FF2B10D000F20312511E1846F9 -:106F300004F064FC002808BFFFDF286890F8021105 -:106F400041F0020180F802110DE03178C1F38011A7 -:106F500080F80211B149D1F88721C0F80321B1F8B6 -:106F60008B11A0F80711286800F2091690F8360076 -:106F70007F2808BFFFDF286890F83610317080F84E -:106F80003640BCE7A94CDAF8049004F12806A4F8CE -:106F900000800721204605F048FD0021204605F02D -:106FA00047FF4946204605F04CFF0623002206F124 -:106FB0000901204605F022FF2868417B204605F0A4 -:106FC00074FD286800F1380190F85720204605F03C -:106FD00066FF2046FDF7B8FF28680122962190F849 -:106FE000BB300020FDF766FE90E7FFE780780028C1 -:106FF00040F0FD8000F0F9B88DF8081002A90520D6 -:10700000FFF798FE0028286800F0EA808278884917 -:10701000002A7DD0A1F11F066C6890F8BB90D6F8CD -:107020000F00C4F80E00B6F813006082707D207562 -:10703000B07D6075B6F81700E082B6F81900608080 -:10704000B6F81B00A080B6F81D00E08004F108002F -:107050000DF064FA96F8240000F01F00207696F8F0 -:107060002400400984F86C0184F8549084F8559009 -:10707000286890F8CC1084F8561090F8BD0084F879 -:1070800057009DF80810686800F079F9022001F0B7 -:10709000D1FAA6F12804DAF80090A4F800800821BB -:1070A000204605F0C2FC0021204605F0C1FE4946FD -:1070B000204605F0C6FE6946304605F0EFFC304636 -:1070C00005F009FD0146204605F0EFFC06230022ED -:1070D000694600E0B8E0204605F090FE694630467B -:1070E00005F0CEFC304605F0E9FC0146204605F0EF -:1070F000E9FC062301226946204605F07FFE204672 -:10710000FDF722FF28680122962190F8BB3000E0AD -:1071100006E00020FDF7CEFD286880F801B068E0A9 -:107120006C6832783F4E607BC2F34012104060734F -:10713000D6F80F00C4F80E00B6F813006082707D18 -:107140002075B07D6075B6F81700E082B6F81900BA -:107150006080B6F81B00A080B6F81D00E0804FF0FC -:10716000010A04F108000DF0D9F996F8240000F0A6 -:107170001F00207696F82400400984F86C0184F8FA -:1071800054A084F855A0286890F8CC1084F85610C4 -:1071900090F8BD0084F857009DF80810686800F06A -:1071A000EEF8286880F8D09090F8D210B0F8D400AB -:1071B00000F071F868680088F9F72CFDF9F7C4F958 -:1071C000286880F80180FDF765FFFDF744FFFDF7B3 -:1071D0003FFEFDF7A8FE012001F02CFA09E000BFF8 -:1071E00090F82200C0F3001008B1012701E0FEF77B -:1071F000AAFF286890F8330018B1FDF769FFFDF782 -:1072000038F91FB100210120FFF783FB286841787E -:1072100000291ABF4178012903B00BE0A40A00201D -:10722000CC000020280C002060480200000C002048 -:10723000470C002008BFBDE8F08F4078032818BF36 -:10724000FFDF03B0BDE8F08F286890F82200C0F39C -:1072500000100028CBD0C8E770B5864C06460D4616 -:107260002068807858B1FDF765FA216803463046FA -:1072700091F8BB202946BDE8704001F048BAFDF7FF -:1072800059FA21680346304691F8BA202946BDE8EC -:10729000704001F03CBA784A137882F8F530A2F8D1 -:1072A000F60082F8F410012082F8F20092F8C4008F -:1072B000002818BF92F8C00082F8F800704778B52F -:1072C00004466C4800230093006890F8BA20082A0E -:1072D00004BF4FF4C87240230DD0042A04BF4FF4FA -:1072E000BF72102307D0022A07BF03F1180204233C -:1072F00003F128020823491D01FB032690F8BC2056 -:107300009DF8001062F3050141F040058DF8005032 -:1073100090F8BB00012804BF9DF8020020F0E000B7 -:107320002AD0022818BFFFDF21D000BF25F080003F -:107330008DF80000C4EB041106FB04F001EB8101A1 -:1073400000EB81044D48844228BFFFDF4C48A0FB7E -:107350000410BDF80110000960F30C01ADF8011034 -:10736000BDF800009DF8021040EA014078BD9DF88C -:10737000020020F0E00020308DF80200D6E72DE971 -:10738000F0413C4D04460E46286890F8D000002895 -:1073900018BFFFDF0027286880F8D2702188A0F886 -:1073A000D4106188A0F8EA10A188A0F8EC10E18858 -:1073B000A0F8EE1094F86C1180F8F01090F82F10EF -:1073C00049B1427B00F10E01012A04D1497901F053 -:1073D000C001402935D090F8301041B1427B00F116 -:1073E0000E01012A04BF497911F0C00F29D0DE3007 -:1073F0000DF082F82348FF2E0078C0F380106076ED -:107400001D48D0F88711C4F81A10B0F88B01E0833A -:1074100028681ED0C0F8E410E18BA0F8E81000F155 -:10742000D802511E304604F0E9F9002808BFFFDFFA -:10743000286890F8D71041F0020180F8D710BDE815 -:10744000F081D0F80E10C0F8DE10418AA0F8E210EA -:10745000D0E7C0F8E470A0F8E870617E80F8D7103B -:10746000D4F81A10C0F8D810E18BA0F8DC10BDE8F1 -:10747000F0810000CC000020A40A0020C4BF03005B -:1074800089888888280C0020FE48406870472DE9CC -:10749000F0410F46064601461446012005F098F9D2 -:1074A000054696F85500FEF7A6F8014696F85500F1 -:1074B000022808BFF44807D0012808BFF34803D0CA -:1074C00004280CBFF248F34808444FF47A7100F2E4 -:1074D000E140B0FBF1F0718840F271225143C0EB02 -:1074E0004100001BA0F5597402F0B6FD002818BF3A -:1074F0001E3CAF4234BF28463846A04203D2AF42BA -:107500002CBF3C462C467462BDE8F0812DE9FF4F4C -:107510008FB0044690F855601C98994640EA0900DF -:10752000039094F86500002790460D280CBF0120B9 -:1075300000200990B9F1000F04BF94F80C01032852 -:107540002BD1099848B3B4F88E01404525D1D4F821 -:107550001401C4F80001608840F2E2414843C4F8D5 -:107560000401B4F85A01B4F8E6100844C4F808015C -:10757000204602F07BFDB4F89201E08294F890017D -:107580006075B4F894016080B4F89601A080B4F8F6 -:107590009801E080022084F80C01D4F864010C907A -:1075A000B4F8E6B0B4F85801D4F860A1D4F8541196 -:1075B0000691B9F1000F03D094F8201149B193E07E -:1075C00004F1E00107917431089104F5A075091DDB -:1075D00007E004F59A710791091D089104F5927569 -:1075E000091D0A91B4F85810A8EB0000A8EB01019E -:1075F00009B200B20091002805DAD4F850010690D3 -:1076000001200390084694F80C11002971D001293B -:1076100000F03782022900F05F81032918BFFFDFE5 -:1076200000F0728239460698FAF7FBFF08990126A6 -:1076300040F2712208600A98A0F8008000202870AB -:107640002E7108980068A8606188D4F8140151432D -:10765000C0EB41009049A0F54D70886149698142B5 -:1076600087BF07990860079801600798616A0068FA -:10767000084400F5D270E86002F0EEFC10B1E86852 -:107680001E30E8606E71B4F8D000A0EB080000B2C4 -:107690000028C4BF03206871099800281C9800F0D6 -:1076A000A682C0B1B4F8F81000290CBF0020B4F8CD -:1076B000FA00A4F8FA0094F8FC20401C50438842D9 -:1076C00009D26879401E002805DD6E71B4F8FA0011 -:1076D000401CA4F8FA00B9F1000F00F0AB8294F856 -:1076E0002001002800F0A28213B00220BDE8F08F34 -:1076F000FFE7BAF1000F08BFFFDF94F855106148AB -:1077000090F8280005F079F90C90E18A40F2712098 -:1077100041430C98002200EB41011098002806D04C -:1077200000FB01F15D48B1FBF0F000F10102C4F88B -:107730001021608840F2E24100FB01F210994FF005 -:10774000000006D0554801FB02F1B1FBF0F000F15A -:107750000100C4F8140186B221464FF00100D4F8AC -:1077600028B005F035F8074694F85500FDF743FFBB -:10777000014694F85500022808BF434807D0012865 -:1077800008BF424803D004280CBF41484148084480 -:1077900000F2E1414FF47A70B1FBF0F1608840F201 -:1077A00071225043C1EB4000801BA0F5597602F0D6 -:1077B00053FC002818BF1E3EBB4534BF3846584610 -:1077C000B04203D2BB452CBF5E463E46666294F88B -:1077D0005500FDF72EFF4FF47A7600F2E140B0FB42 -:1077E000F6F000EB0A0794F85500FDF722FF01467A -:1077F00094F85500022808BF234A07D0012808BF83 -:10780000224A03D004280CBF214A224A01EB020B72 -:10781000FDF7F1FE584400F2DB514FF47A70B1FBF2 -:10782000F0F1E08A40F2712242430C98D4F810B192 -:1078300000EB4200401AA0EB0B003844A0F12007F7 -:10784000607D40F2E24110FB01F0049094F8556035 -:107850003046FDF7D0FE0146022E08BF0A4807D089 -:10786000012E08BF094803D0042E0CBF0848094860 -:10787000084400F2E1414FF47A70B1FBF0F000EB04 -:107880004B010DE0500C002004360200A22402003F -:10789000D0FB0100C0D40100D400002040420F0002 -:1078A000049801EB000B3046FDF799FE584400F1B7 -:1078B0006201FD48416194F85500FDF7BAFE00F2FF -:1078C000E1414FF47A70B1FBF0F05044381AB0F552 -:1078D0003D7F38BFFFDFA5E6E08A40F27121D4F892 -:1078E0000421484302EB400210980021002806D0F2 -:1078F00000FB02F1ED48B1FBF0F000F10101C4F82A -:107900001011618840F2E24001FB00F210994FF043 -:10791000000006D0E54801FB02F1B1FBF0F000F1F8 -:107920000100C4F8140186B221464FF00100D4F8DA -:1079300028A004F04DFF074694F85500FDF75BFEC4 -:10794000014694F85500022808BFD94807D00128FD -:1079500008BFD84803D004280CBFD748D7480844EC -:1079600000F2E1414FF47A70B1FBF0F1608840F22F -:1079700071225043C1EB4000801BA0F5597602F004 -:107980006BFB002818BF1E3EBA4534BF3846504630 -:10799000B04203D2BA452CBF56463E466662BBF1A2 -:1079A000000F2ED11C9860B394F855603046FDF757 -:1079B00022FE022E08BFBE4907D0012E08BFBD49D6 -:1079C00003D0042E0CBFBC49BC49084400F2E1417D -:1079D0004FF47A70B1FBF0F0D4F81011E38A084448 -:1079E00040F27121D4F80421594302EB41010F1AEE -:1079F0003046FDF7F4FD0C99081A3844A0F1200731 -:107A00000AE0E18A40F27122D4F80401514300EB0C -:107A10004100D4F81011471AD4F80821D4F8001105 -:107A2000D4F8100101FB020B607D40F2E24110FB33 -:107A300001FA94F855603046FDF7DDFD0146022E4F -:107A400008BF9B4807D0012E08BF9A4803D0042ED8 -:107A50000CBF99489948084400F2E1414FF47A700C -:107A6000B1FBF0F000EB4B0082443046FDF7B7FD70 -:107A7000504400F160018C484161012084F80C0100 -:107A8000D0E5628840F27123D4F814115A43C1EB57 -:107A9000420202FB00F70098D4F800C10BEB000291 -:107AA000D4F80801D4F81031121A0CFB0030521E21 -:107AB00002FB010B607D40F2E24110FB01FA94F8F9 -:107AC00055000646FDF797FD0146022E08BF78488F -:107AD00007D0012E08BF774803D0042E0CBF76488C -:107AE0007648084400F2E1414FF47A70B1FBF0F0BF -:107AF00000EB4B0082443046FDF771FD504400F12D -:107B00006001694841618DE5628840F27123D4F8D3 -:107B100014115A43C1EB420101FB00F794F86400D1 -:107B200024281CBF94F8650024280BD1B4F88E01DA -:107B3000A8EB000000B2002804DB94F891010028B3 -:107B400018BF0646039850B3BBF1000F27D10C981D -:107B5000002814BFBAF1000FFFDF94F85500FDF7BD -:107B60004AFD022E08BF524907D0012E08BF5149D5 -:107B700003D0042E0CBF50495049084400F2E141A3 -:107B80004FF47A70B1FBF0F03F1A94F85500FDF70E -:107B900026FD01460C98401A3844A0F120070098B1 -:107BA000D4F81411584400FB01FA3046FDF723FDC8 -:107BB0000146022E08BF3E4807D0012E08BF3D48AF -:107BC00003D0042E0CBF3C483C48084400F2E1417D -:107BD0004FF47A70B1FBF0F000EB4A0A3046FDF743 -:107BE000FEFC504400F160012F4841611AE5002875 -:107BF0007FF458AD94F80C0100283FF46CAD618817 -:107C000040F27122D4F814015143C0EB41012846DF -:107C100004F08DFD0004000C3FF45DAD1D990029BA -:107C200018BF0880012013B0BDE8F08F94F85C0104 -:107C3000FBF748FB94F85C012946FBF731FA002872 -:107C40001CBF89F0010084F82101002013B0BDE8B9 -:107C5000F08F2DE9F04F1A4C074683B02078894603 -:107C6000114E00254FF00208032804BF207BB842C4 -:107C70007ED1606830612078032818BFFFDF0327BA -:107C8000B9F1080F7FD2DFE809F0041D2828237E10 -:107C90007E796562FEF712FC002818BFFFDFB7701F -:107CA00003B0BDE8F08F0000D400002040420F0078 -:107CB00004360200A2240200D0FB0100C0D401005F -:107CC000500C0020FEF71CFF002818BFFFDFE7E77D -:107CD00003B0BDE8F04FFDF75CBA2775257494F842 -:107CE0002C00012658B14FF47A71A069FAF799FC7B -:107CF000A061002104F1100004F019FD1AE0012137 -:107D00006846FBF7BDFF9DF8000042F210710002CB -:107D1000B0FBF1F201FB1205FDF7F4FF0544294623 -:107D2000A069FAF77EFCA061294604F1100004F076 -:107D3000FEFC461C208C411C0A293CBF3044208498 -:107D4000606830B1208C401C0A2828BF84F8158058 -:107D500000D267753046FEF771F90028A0D0607A2E -:107D600000289DD1207B04F11001FBF799F901E077 -:107D70000BE008E0002808BFFFDF91E7207BFAF75F -:107D800028FF25708CE7FFDF8AE7202F28BFFFDF61 -:107D9000DFF804A407213AF81700F8F709FE0400F9 -:107DA00008BFFFDF202F28BFFFDFFB48218830F806 -:107DB0001700884218BFFFDF01273461B9F1080FAF -:107DC00080F05481DFE809F0049EA6A6A1F0F0EF50 -:107DD000C4F86051F580C4F8645194F8210138B9B1 -:107DE000FAF716FFD4F82C11FBF720FC00281BDC57 -:107DF000B4F81E11B4F85800814206D1B4F8D4107A -:107E0000081AA4F8D600204605E0081AA4F8D600FF -:107E1000B4F81E112046A4F85810D4F84811C4F83C -:107E20002C11C0F850111DE0B4F81C11B4F8580022 -:107E3000091AA4F8D610B4F81C112046A4F858105A -:107E4000D4F82C11C4F84811C4F85011D4F83411E6 -:107E5000C4F8E010D4F83811C4F85411B4F83C1147 -:107E6000A4F8581101F0ACFFFAF7ACFE94F855A055 -:107E700081465046FDF7BFFBBAF1020F08BFC74964 -:107E800009D0BAF1010F08BFC54904D0BAF1040FF7 -:107E90000CBFC449C44908444FF47A7100F2E14070 -:107EA000B0FBF1F1D4F8140140F271220144608872 -:107EB0005043C1EB4000A0F1300AB9F1B70F98BFB1 -:107EC0004FF0B7092146012004F082FC4844AAEB98 -:107ED0000000A0F21939A2462146012004F078FCE6 -:107EE000DAF824109C30814288BF0D1AC6F80C9035 -:107EF0004D4538BFA946C6F8089084F8207186F829 -:107F00000280CDE602F0A3F801E0FDF742F984F823 -:107F10002071C5E6FAF77CFED4F8502101461046E0 -:107F2000FBF784FB48B1628840F27123D4F8141146 -:107F30005A43C1EB4201B0FBF1F094F865100D29F2 -:107F40000FD0B4F85820B4F81E1113189942AEBFE0 -:107F5000481C401C1044A4F81E0194F8220178B972 -:107F600005E0B4F81E01401CA4F81E0108E0B4F8B6 -:107F70001E01B4F8D410884204BF401CA4F81E01AE -:107F8000B4F85A01DFF82492401CA4F85A01B4F85E -:107F90008000B4F87E10401AB4F85810401E08440F -:107FA0001FFA80FB24E053E060E000BF96F80080F9 -:107FB000B8F10C0F28BFFFDF39F8188094F86CA1D6 -:107FC000BAF10C0F28BFFFDF39F81A000023404434 -:107FD00081B202A8CDE90050B4F81E212046FFF777 -:107FE00095FA00283FF45CAE012818BFFFDF27D0C8 -:107FF000B4F81E01ABEB000000B20028D6DA08206E -:1080000084F8740084F87370204601F02AFB84F829 -:108010000C5194F85C514FF6FF77202D00D3FFDF11 -:108020005D4820F8157094F85C01FAF7D2FD202025 -:1080300084F85C01307903B0BDE8F04FF3F7A6BED9 -:10804000B4F81E01BDF808100844A4F81E01CFE7DB -:1080500094F80C01042818BFFFDF84F80C5194F841 -:108060005C514FF6FF77202DDAD3D8E7FFDF17E614 -:1080700010B54F4C207850B101206072FEF75EFDC4 -:108080002078032805D0207A002808BF10BD0C20D6 -:1080900010BD207BFBF716F9207BFBF760FB207BF4 -:1080A000FAF797FD002808BFFFDF0020207010BD01 -:1080B0002DE9F04F3E4F83B0387801244FF000088F -:1080C00040B17C720120FEF739FD3878032818BFD3 -:1080D000387A0DD0DFF8DC9089F803406946072034 -:1080E000F8F7EFFB002818BFFFDF4FF6FF7440E002 -:1080F000387BFBF7E7F8387BFBF731FB387BFAF787 -:1081000068FD002808BFFFDF87F80080E2E70298DB -:1081100000281CBF90F80C1100292AD00088A0422A -:108120001CBFDFF874A04FF0200B4AD00721F8F7EE -:108130003FFC040008BFFFDF94F85C01FBF70FFB76 -:1081400084F80C8194F85C514FF6FF76202D28BFFF -:10815000FFDF2AF8156094F85C01FAF73AFD84F81D -:108160005CB169460720F8F7ACFB002818BFFFDFB9 -:1081700022E06846F8F783FB0028C8D021E0029887 -:1081800000281CBF90F80C11002915D00088A0F51C -:108190007F41FF39CAD114E0840C0020043602006C -:1081A000A2240200D0FB0100C0D4010084480200D8 -:1081B000500C0020D40000206846F8F760FB00282F -:1081C000DDD089F8038087F82C8087F80B8003B016 -:1081D0000020BDE8F08F70B50446FD4890F800041B -:1081E000FC4D400995F800144909884218BFFFDF8B -:1081F00095F8140D4009F84991F80014490988428E -:1082000018BFFFDFF549002001220C7188700A7049 -:108210004870C870F2490870BDE8704048E7EF49FF -:10822000087070472DE9F843ED4C064688462078E3 -:1082300000285CD1EB48FAF772FC2073202856D056 -:10824000032766602770002565722572AEB1012193 -:1082500006F1FC00FBF73DFD0620F8F751FB8146D7 -:108260000720F8F74DFB96F8FC104844B1FBF0F2FC -:1082700000FB1210401C86F8FC00FAF7A3FCDA4958 -:10828000091838BF40F2F65000F23D1086B2FDF7F3 -:10829000F9FBE061FDF736FD4FF0010950B384F8BA -:1082A0000A9001216846FBF7EBFC9DF8000042F2C2 -:1082B00010710002B0FBF1F201FB12000644FAF764 -:1082C000A7FC3146FAF7ADF9A061277567752574EB -:1082D000207B04F11001FAF7E3FE002808BFFFDF5E -:1082E00025840020FEF72AFC0020BDE8F8830C203E -:1082F000BDE8F883FAF78CFC3146FAF792F9A061F1 -:10830000A57284F82C90A8F226502063DDE7B349CB -:1083100048707047B24810B5417A0124002918BF4F -:10832000002409D190F82C1031B1416A006B8142D0 -:1083300084BF0024FEF7FCFB204610BD70B5A74C9F -:108340000546E088401CE080D4E902016278D5F857 -:108350006061002A1CBF324604F019FAA060864210 -:1083600008D895F80C01012804D0E078002804BF53 -:10837000012070BD002070BD70B50C4640F2E24196 -:1083800000FB01F52046FDF736F9022C08BF97499E -:1083900007D0012C08BF964903D0042C0CBF954987 -:1083A000954908444FF47A7100F2E140B0FBF1F0D6 -:1083B00000F54D7085428CBF281A002070BD2DE954 -:1083C000F04F83B04FF00009044680F8209190F8F8 -:1083D000DE00002807BF94F80C01032803B0BDE8B5 -:1083E000F08FFAF715FCD4F8502101461046FBF740 -:1083F0001DF90028DCBF03B0BDE8F08F628840F2B1 -:108400007123D4F814115A43C1EB4201B0FBF1F0CF -:10841000411CB4F858000144A4F81C11B4F8D4105D -:10842000B4F81C21891A09B20029DCBF03B0BDE8E9 -:10843000F08F012184F82211B4F88010B4F87E2066 -:108440006E4F891A491E084485B2DFF890A10DF1DC -:10845000080B25E09AF800600C2E28BFFFDF37F8E4 -:10846000166094F86C81B8F10C0F28BFFFDF37F865 -:108470001800CDE9009B3044B4F81C2181B20123DF -:108480002046FFF743F8002804BF03B0BDE8F08F93 -:1084900001280FD0022812BFFFDF03B0BDE8F08F24 -:1084A000B4F81C01281A00B20028BCBF03B0BDE814 -:1084B000F08FCFE7B4F81C01BDF808100844A4F809 -:1084C0001C01EDE72DE9F0430422002583B00629C5 -:1084D0007DD2DFE801F0074B03191951044680F8FB -:1084E0000C2107E004463D48C178002918BF84F8F4 -:1084F0000C210CD0FAF798FAA4F85A51B4F85800A5 -:10850000A4F81E0184F8225103B0BDE8F083067878 -:108510000C2E28BFFFDF394F94F80C0137F8166096 -:108520004FF00109032807D00128E3D194F86C81AA -:10853000B8F10C0F0AD308E0C4F80851C4F8005190 -:1085400094F86C81B8F10C0F00D3FFDF37F81800F6 -:10855000CDE90095304481B2B4F8D4200023204600 -:10856000FEF7D4FF002818BFFFDFC3E7032180F820 -:108570000C1103B0BDE8F0830546876AB0F814011A -:10858000294686B2012004F023F9044695F85500E7 -:10859000FDF731F895F85510022908BF134907D0A7 -:1085A000012908BF124903D004290CBF11491249FF -:1085B00008444FF47A7100F2E140B0FBF1F06988B1 -:1085C00040F271225143C0EB4100801B18E02DE0C6 -:1085D00001E000E00BE000E019E000E0D400002042 -:1085E000500C0020537C01000AFAFFFF0436020001 -:1085F000A2240200D0FB0100C0D401008448020084 -:10860000A0F5597601F028FD002818BF1E3EA742AC -:1086100034BF20463846B04228BF344602D2A74273 -:1086200028BF3C466C6203B0BDE8F083FFDF03B0B7 -:10863000BDE8F083F8B5894C0246874F0025616894 -:10864000606A052A48D2DFE802F0032F34373E0083 -:10865000A07A002660B101216846FBF71BFB9DF85C -:10866000000042F210710002B0FBF1F201FB1206B1 -:10867000FDF748FB8119A069F9F7D3FFA0612574C4 -:1086800003206075607A38B9207B04F11001FAF795 -:1086900007FD002808BFFFDF2584FAF7C5F9387900 -:1086A000BDE8F840F3F772BBBDE8F840002100F0E8 -:1086B0006DB8C1F86001F8BDD1F86001BDE8F840BF -:1086C000012100F063B884F82C50FAF7ADF938793D -:1086D000BDE8F840F3F75ABBFFDFF8BD70B55E4C5C -:1086E000A178022906BFE188002970BD2569C5F877 -:1086F000640195F85500FCF772FFD5F86411081A6B -:10870000A1680144A160E1680844E06070BD70B5F3 -:108710000546514890F802C0BCF1020F06BF00693F -:1087200000F5B0744E4C002904BF256070BD4FF4B5 -:108730007A7601290DD002291CBFFFDF70BD1046DB -:10874000FCF768FF00F2E140B0FBF6F0281A206069 -:1087500070BD1846FCF76DFF00F2E140B0FBF6F08B -:10876000281A206070BD3D48007800281CBF0020FA -:10877000704710B50720F8F7B5F880F0010010BD7C -:1087800036480078002818BF012070472DE9F047CF -:10879000324C82B0002584F82C50D4F8188084F82C -:1087A0002810E572814625700127277229466068E6 -:1087B00003F030FB6168C1F85081267B81F85C6171 -:1087C000C1F86091C1F85481B1F80080202E28BF13 -:1087D000FFDF244820F81680646884F80C51DFF825 -:1087E0007880A4F8585198F800600C2E28BFFFDF5D -:1087F000DFF8749039F816A094F86C610C2E28BF3D -:10880000FFDF39F816000023504481B200951A4664 -:1088100020460195FEF77AFE002818BFFFDFC4F856 -:108820000851C4F8005184F80C71A4F81E51A4F842 -:108830001C5184F82251B4F85800401EA4F8580086 -:10884000A4F85A51FAF7F0F898F8040002B0BDE81D -:10885000F047F3F79BBA0000D4000020500C002032 -:10886000740C0020840C00208448020070B5FE4C7B -:1088700021690A88A1F8FC2181F8FA0191F85400D5 -:10888000012808BF012503D0022814BFFFDF0225FD -:10889000206980F8FE5190F85500012808BF012595 -:1088A00003D0022814BFFFDF02252069012180F8D0 -:1088B000FF5180F8F811002180F8A4112079BDE85B -:1088C0007040F3F763BA2DE9F04FE74C83B0A0791D -:1088D00010F0010F04BF03B0BDE8F08FA0690123C1 -:1088E0000521C578206990F86520583003F0B5FE61 -:1088F00068B1A81E0A2806D2DFE800F009090505BC -:10890000090905050909A07840F00800A070A078C1 -:1089100000281CBF03B0BDE8F08FA06920274FF0EE -:10892000020890F80390B9F1000F1CBFB9F1010FD4 -:10893000B9F1160F1ED1206990F8640003F076FE9D -:10894000C0B1216991F864001F2813D0202808D0F5 -:10895000B9F1160F0CBFA77084F8028003B0BDE810 -:10896000F08F262081F86400B9F1160F1CBF2A2071 -:10897000FFF77CFF47F6FE7A012600254FF0280B13 -:10898000B9F10C0F00F049810BDCB9F10C0F80F04C -:108990005884DFE809F068412BD9F6F6F5F4F3F6D0 -:1089A000AAD0B9F1150F00F0518211DCB9F1110F05 -:1089B00000F0BE83B9F1120F00F0C981B9F1130FB5 -:1089C00000F0B881B9F1140F00F0D58100F039BC86 -:1089D000B9F1160F00F06C82B9F1180F00F0CE82D9 -:1089E000B9F1FF0F00F0268400F02BBC20690123B1 -:1089F000194690F86720583003F02FFE002840F009 -:108A00002284A06904F018FB216981F87201072013 -:108A100081F8670000F017BC20690123002190F85D -:108A20006520583003F019FE002800F0BA83A069D1 -:108A300004F0FFFA2169A1F88E01B1F85820801ADC -:108A400000B28245A8BF0028DCBF81F874B081F86D -:108A5000736040F3F88301F5C871A06904F0E4FA8B -:108A60000B2021693DE020690123002190F8652059 -:108A7000583003F0F2FD002800F09383A06904F061 -:108A8000AFFA002800F0DD83A0692269B0F80D106C -:108A9000A2F88E11B2F85830C91A09B28A45A8BF97 -:108AA0000029DCBF82F874B082F8736040F3CB8396 -:108AB000017982F89011B0F80510A2F8921104F033 -:108AC00082FA2169A1F89401A06904F07FFA216972 -:108AD000A1F89601A06904F080FA2169A1F8980133 -:108AE0000D2081F8650000F0AEBB20690123002154 -:108AF00090F86520583003F0B0FD002820690BD0B5 -:108B0000A0F88A5090F88C10491C80F88C10102125 -:108B100080F8651000F097BB90F8652001230521CF -:108B2000583003F09AFD00281CBF0820A07040F0C8 -:108B30008A8300F036BB206990F86510112908BFC0 -:108B4000122140F09C82E3E720690123002190F884 -:108B50006520583003F081FDA0B9206990F86520A8 -:108B6000122A0FD001230521583003F076FD00288A -:108B700018BF082000F0158300F097B9B7E0F6E2BF -:108B800036E05EE3206990F88E1031B9A0F88A5083 -:108B900090F88C10491C80F88C1000F1E801A06955 -:108BA00004F063FA206900F1C001A06904F068FADA -:108BB000206990F8C001002818BFFFDF20690188F4 -:108BC000A0F8C21100F5E271A06904F03CFA206936 -:108BD00000F5E671A06904F03EFA206980F8C061F2 -:108BE000142180F865102079F3F7D0F800F02BBB42 -:108BF000206990F86510172940F0418290F88C1098 -:108C0000491E49B280F88C100029B8BFFFDF1B2035 -:108C1000216981F8650000F016BB206990F86610A4 -:108C200011F0020F09D090F8642001230821583078 -:108C300003F013FD002800F0B482206990F8900042 -:108C400010F0020F18D1A06904F02EFA216981F802 -:108C50009100A069B0F80520A1F89220B0F80700B3 -:108C6000A1F8940002E00000F000002091F89000CC -:108C700040F0020081F89000206990F8901011F007 -:108C8000010F05D0206990F8641006291CD114E06A -:108C900090F8660010F0020F18BFFFDF206990F80F -:108CA000661041F0020180F86610A0F88A5090F832 -:108CB0008C10491C80F88C10E4E780F8645080F830 -:108CC00088502079F3F762F8206990F88C11042914 -:108CD00040F0B98280F88C512079F3F757F8206979 -:108CE00090F86410002940F0AE8200F01EBA2069AE -:108CF00090F8660010F0010F77D16946A06904F082 -:108D0000DAF99DF8000000F02501206980F896103E -:108D10009DF8011001F0410180F89710A0F88A50E9 -:108D200090F88C10491C80F88C1090F8661041F077 -:108D300001011CE020690123092190F864205830CA -:108D400003F08BFC002840F0248200F02ABA20694E -:108D500090F8661011F0040F40F02382A0F88A50BA -:108D600090F88C2041F00401521C80F88C2080F88F -:108D7000661000F068BA206990F8660010F0300FB5 -:108D800033D1A06904F0B4F9002800F05A822769B1 -:108D9000A06904F0A9F938872769A06904F0A0F94F -:108DA00078872769A06904F0A1F9B8872769A069C5 -:108DB00004F098F9F887A07910F0020F03D06069E9 -:108DC000C078142812D0206990F864101C290DD0A6 -:108DD00090F84E1001290CD090F89B11002904BF87 -:108DE00090F89A1100290CD003E05BE0206980F82C -:108DF0004E60206990F8661041F0100180F866100E -:108E00001AE090F8661041F0200180F866100288A0 -:108E1000A0F8E021028FA0F8E221428FA0F8E4211F -:108E2000828F00F5D671A0F8E621C08F888781F87F -:108E300032602079F2F7AAFF2069A0F88A5090F8F2 -:108E40008C10491C80F88C1000F0FDB920690123BA -:108E50000A2190F86420583003F0FFFB10B3A0699A -:108E600004F046F9A8B12669A06904F03DF93087FD -:108E70002669A06904F034F970872669A06904F0B6 -:108E800035F9B0872669A06904F02CF9F08701F064 -:108E9000EDFA206980F8885080F8645001F0B6FA45 -:108EA00000F0D1B9A07840F00100A07000F0CBB97B -:108EB000206901230B2190F86520583003F0CDFB89 -:108EC00010B1A77000F0BFB920690123002190F80C -:108ED0006520583003F0C1FB002800F06281206952 -:108EE00090F864002428ECD0A06904F01CF9002854 -:108EF00000F0A781206990F8961041F0040180F8F5 -:108F00009610A1694A7902F0070280F85120097988 -:108F100001F0070180F8501090F8A531002B04BF34 -:108F200090F8A431002B1CD190F855C000F15403E7 -:108F30008C4502BF1978914280F87D6011D000F510 -:108F4000D67180F8F2610288A0F8F42190F85020E0 -:108F500080F8F62190F8510081F84B002079F2F763 -:108F600015FF2069212180F86510A0F88A5090F83B -:108F70008C10491C80F88C1000F065B9206990F8BD -:108F80006410202914BF0027012790F865102229BA -:108F900008BF00F1650804D0002F18BF00F1640875 -:108FA0006DD090F8961041F0040180F89610A069F9 -:108FB00004F0DBF8F0B3D4F81890484604F0C9F890 -:108FC0000090484604F0C9F8814603F03CFC0100DB -:108FD00018D0206990F854208A4213D090F8A43118 -:108FE00023B190F8A63113EA090F4BD0002F04BF2C -:108FF00090F8513013EA090F01D18A4242D890F813 -:10900000A401B8B1DDF80090484603F01CFC78B12B -:10901000216991F8552082420AD091F8A40120B12B -:1090200091F8A70110EA090F2CD091F8A40108B11A -:109030006A4600E026E0A169206903F013FCE8B36A -:10904000A06904F090F82169A1F88E01B1F85820C8 -:10905000801A00B28245A8BF0028DCBF81F874B036 -:1090600081F8736052DD9DF8000081F890019DF851 -:10907000010081F89101242088F8000046E084F87E -:109080000280E0E0206990F8A40100281CBF1E20A7 -:10909000FFF7ECFBB7B1A0692169C07881F8CA007D -:1090A00006FA00F010F0807F08BFFFDF0A21206978 -:1090B00080F8641090F88800002800E014E008BFF1 -:1090C000FFDF0DE088F80050216991F88C00401E08 -:1090D00040B281F88C000028B8BFFFDF01F07BF9B7 -:1090E000206980F87D50AEE0206990F8A40120B19D -:1090F0000020FFF7BBFB88F80050206900F16501F4 -:1091000080F87D50884508BF80F86550206900F1DF -:109110006501884509D190F88C10491E49B280F844 -:109120008C100029B8BFFFDF8DE080F888508AE0FE -:10913000206990F8961041F0040180F89610A0691B -:1091400004F02FF816287ED1206990F864002028BA -:1091500002D0262805D076E0A06904F026F8FFF7B3 -:1091600085FB206980F8645080F888506BE02069A6 -:1091700090F864200E2A03D1A1690979122902D03E -:109180001C2A1AD10FE001230921583003F065FA97 -:1091900038B1206980F87C5080F8885080F864509D -:1091A00051E0A6704FE0A1690979142904BF80F845 -:1091B000645080F888503FF471AE202A03D1A16931 -:1091C0000979162914D0262A03D1A169097916290B -:1091D0000ED0A1690979172904BF90F86520222AC9 -:1091E00013D0E2691AB1FF2908BF80F886612AE02E -:1091F00080F8645080F8885090F86500212818BFE6 -:109200001A2020D0FFF732FB1DE080F8655090F85F -:109210008C10491E49B280F88C100029B8BFFFDFBE -:10922000206980F87D5090F8A401002818BF002024 -:1092300009D0E7E7E06900281CBF206980F8866153 -:1092400001D101F0C8F82069D0E92A12491C42F185 -:109250000002C0E92A1203B0BDE8F08F70B5FB4EE2 -:1092600005460C46306990F8CB00FE2818BFFFDF9A -:1092700032690020002C82F8CB501CBFA2F88A0073 -:1092800070BDA2F88400012082F8880070BD30B55E -:1092900085B005466846FCF73EFA002808BFFFDFA8 -:1092A000222100980BF003F80321009803F040FE00 -:1092B0000098017821F010010170294603F066FE44 -:1092C000E24C0D2D04BF0621009830D00BDCA5F137 -:1092D00002000B2819D2DFE800F0201863191926C4 -:1092E000187018192C00152D7BD008DC112D2DD0ED -:1092F000122D18BF132D09D0142D30D005E0162DD6 -:1093000046D0172D6BD0FF2D6AD0FFDFFCF716FA81 -:10931000002808BFFFDF05B030BD2069009990F834 -:10932000CC000871F2E72169009891F8CC10017126 -:10933000ECE7E26800981178017191884171090A9F -:1093400081715188C171090A0172DFE70321009818 -:1093500003F025FF0621009803F025FFD6E72069DA -:10936000B0F84410009803F0ABFE2069B0F8461046 -:10937000009803F0A9FE2069B0F84010009803F0AF -:10938000A7FE2069B0F84210009803F0A5FEBDE7E3 -:109390002069009A90F8A611117190F8A7014BE08E -:1093A000206900F1F001009803F06EFE206900F1E1 -:1093B000C401009803F072FEA8E7A549D1E90001B5 -:1093C000CDE90201206902A990F8960000F025007D -:1093D0008DF80800009803F09CFE97E701E019E083 -:1093E0002CE02069B0F84010009803F071FE20696D -:1093F000B0F84210009803F06FFE2069B0F84410F6 -:10940000009803F05DFE2069B0F84610009803F064 -:109410005BFE7BE7206990F8A41139B1009990F8C0 -:10942000A6210A7190F8A70148716FE7009A90F899 -:109430005410117190F85500507167E7206990F849 -:109440008721D0F88811009803F0AEFD5EE770B573 -:109450000C4605464FF4007120460AF04AFF25806D -:1094600070BDF7F7AEBB2DE9F0410D460746072169 -:10947000F7F79EFA040008BFBDE8F08194F8AC014C -:109480000026B8B16E700920287094F8AC0178B14C -:10949000268484F8AC61D4F8AE016860D4F8B201D7 -:1094A000A860B4F8B601A88194F8AC010028EFD107 -:1094B0002E7144E094F8B801002837D094F8B80130 -:1094C0000D2818D00E2818BFFFDF38D12088F7F7F5 -:1094D000A1FB0746F7F74DF8A0B96E700E20287073 -:1094E00094F8BA0128712088E88084F8B861384679 -:1094F000F7F739F823E02088F7F78CFB0746F7F7F2 -:1095000038F810B10020BDE8F0816E700D20287091 -:1095100094F8BA0128712088E88094F8BE01287276 -:1095200084F8B8613846F7F71EF808E094F8F001BF -:1095300040B16E701020287084F8F061AF80012077 -:10954000BDE8F08194F8C00190B16E700A202870D7 -:109550002088A880D4F8C401D4F8C811C5F8060042 -:10956000C5F80A10B4F8CC01E88184F8C061E6E7D8 -:1095700094F8CE0140B16E701A202870B4F8D00172 -:10958000A88084F8CE61DAE794F8EA0180B16E70C1 -:109590001B20287094F8EA010028D0D084F8EA61F2 -:1095A000D4F8EC01686094F8EA010028F6D1C6E727 -:1095B00094F8D2012F1DA0B16E701520287094F878 -:1095C000D201002818BF04F5EA75B8D084F8D2613A -:1095D000294638460AF099FF94F8D2010028F5D1BF -:1095E000ADE794F8DE0150B16E701D20287084F84C -:1095F000DE6104F5F07138460AF087FF9FE794F8C2 -:10960000F20138B11E20287084F8F261D4F8F40118 -:10961000686094E794F8F801002808BFBDE8F0817D -:109620006E701620287094F8F801002887D000BFCB -:1096300084F8F861D4F8FA016860B4F8FE01288172 -:1096400094F8F8010028F3D179E70000F000002039 -:109650009C480200FE4AD0600020D0611062117167 -:109660007047002180F8641080F8651080F8681059 -:1096700090F8DE1011B10221FEF724BF0321FEF79E -:1096800021BF2DE9F047F24C814686B020690D4696 -:109690000088F7F7D1FA070008BFFFDFA07828435A -:1096A000A070A0794FF0000510F0200F20691CBFBA -:1096B000A0F87E5080F8E45004D1B0F87E10491C28 -:1096C000A0F87E102069012690F86A1039B990F848 -:1096D000652001230621583002F0BFFF48B3E0881F -:1096E00010F4006F07D0206990F86A10002918BFA5 -:1096F000A0F876501DD12069B0F87610491C89B2C7 -:10970000A0F87610B0F878208A422CBF531A0023B4 -:10971000B4F808C00CF1050C634598BF80F87C6074 -:10972000914206D3A0F8765080F8F0612079F2F7E4 -:109730002DFBA0794FF0020A10F0600F11D02069C4 -:1097400090F8681011B1032906D00AE080F868602B -:109750000121FEF7B7FE04E080F868A00121FEF7C2 -:10976000B1FE206990F86810012905D1E18811F453 -:10977000807F18BF80F868A04FF00808B9F1000F8B -:1097800040F09981E28812F4007F18BFA0F8F850E9 -:1097900004D1B0F8F810491CA0F8F81012F0080F26 -:1097A00050D0A17800294DD190F8CB00FE2808BFF9 -:1097B000FFDFFE21206980F8CB1090F86510192991 -:1097C00007D0206990F864101F2911D027292AD0CA -:1097D0002FE080F88D5090F88C10491E49B280F827 -:1097E0008C100029B8BFFFDF206980F86550E8E7DA -:1097F00090F8650002F01AFF80B12069262101234C -:1098000080F8641090F865200B21583002F025FF95 -:10981000002804BF2A20FFF729F80AE02169202048 -:1098200081F8640005E080F8856180F8645080F874 -:109830008850206990F86710082904BF84F800A0B8 -:1098400080F8CBA0FFF73FF8A07910F0040F07D005 -:10985000A07828B9206990F86700072808BF26700B -:1098600000F038FCA07910F0100F09D0A07838B9BA -:10987000206990F865100B2904BF0C2180F8651051 -:10988000E07810F0080F11D020690123052190F82D -:109890006520583002F0E1FE28B184F8028020698A -:1098A00080F8B85102E0002001F0F2FAE0690028E7 -:1098B0005BD000950195029503950495206990F879 -:1098C0005500FBF798FE4FF47A7100F5FA70B0FB83 -:1098D000F1FA206990F85500FBF781FE5044ADF88D -:1098E000060020690188ADF80010B0F85810ADF8F6 -:1098F00004104188ADF8021090F8860130B1A069DB -:10990000C11C039103F0FEFA8DF81000206990F855 -:1099100085018DF80800E16968468847206980F86C -:10992000865180F885510399F9B190F88411E1B915 -:1099300090F86410272918D09DF81010039AA1B14F -:109940001378FF2B06D0072B02BF02295178FF297D -:1099500002D00AE01B2908D880F884610399C0F876 -:1099600088119DF8101080F8871100F0CCFD01F0EF -:1099700085FA0028206918BFA0F8D85004D1B0F8A3 -:10998000D810491CA0F8D81001F07BFA40B1216929 -:1099900091F8E40002289CBF401C81F8E40004D840 -:1099A000206990F8E400022806D92069A0F8D85070 -:1099B000A0F8DA5080F8E45020690123002190F8E3 -:1099C0006520583002F049FE20B9206990F8650002 -:1099D0000C285AD120690123002190F864205830C6 -:1099E00002F03BFEB0B320690123002190F867200C -:1099F000583002F032FE68B3206990F868100229EE -:109A000004BF90F8E40000283FD13846F6F781FB08 -:109A100000B3206990F8CB10FE2936D1B0F8D210EF -:109A2000012932D980F8DD60B0F88010B0F87E20CE -:109A30008B1E9A42AFBF0121891A491E89B2B0F824 -:109A4000D82023899A422EBF01229A1A521C02E082 -:109A5000F000002019E038BF92B2914288BF114651 -:109A6000012908BF80F8DD5090F869218AB1B0F86B -:109A7000DA20B0F86A0182422FBF0120801A401C10 -:109A800080B2814288BF014603E02069012180F84D -:109A9000DD502069B0F85820114489B2A0F8D410E4 -:109AA00090F86830002B18BF012B5DD0022B1CBF33 -:109AB000032BFFDF09D0E088C0F340200028206995 -:109AC00018BFA0F8E65059D151E090F86730082B44 -:109AD00021D0B0F87E10B0F8802000278B1C9A426D -:109AE00006D3511A891E0F043F0C1CBF791E8FB27A -:109AF00090F87C1051B190F864200123092158306E -:109B000002F0ABFD002808BF002729D0206990F89B -:109B10006A1089B908E0B0F87E30032B24D3B0F87E -:109B200080101144491C1FE090F865200123062194 -:109B3000583002F092FD78B121690020B1F8782008 -:109B4000B1F876108B1C9A4203D3501A801E18BFAE -:109B5000401EB84238BF87B2002F1CBF781E87B2A4 -:109B60002069B0F8D4103944A0F8D010A3E7B0F8B9 -:109B7000E610B0F8D6201144A0F8E610206990F85D -:109B8000701139B990F8672001231946583002F056 -:109B900064FD38B12069B0F88210B0F8D6201144C5 -:109BA000A0F88210206990F8883033B1B0F88410A2 -:109BB000B0F8D6201144A0F8841090F98C20002A27 -:109BC00006DDB0F88A10B0F8D6C06144A0F88A105B -:109BD0004FF03D0CB9F1000F18BF80F874C049D1A7 -:109BE0002178022911D0012908BF90F872113FD0C5 -:109BF000A17821B380F8736011F0140F18BF1E21F3 -:109C000009D000BF80F8741050E090F8CC100629FD -:109C100018BF16212CE011F0080F18BF80F874C08F -:109C200044D111F0200F18BF2321EBD111F0030F05 -:109C300008BFFFDF2A20216981F8740032E02BB1D0 -:109C4000B0F88410B0F88630994210D2002A05DDB1 -:109C5000B0F88A10B0F88620914208D2B0F882207D -:109C6000B0F880108A4208D390F870212AB12221DE -:109C700080F8741080F8736018E090F868203AB1AA -:109C8000B0F87E208A4228BF80F87480F2D209E0C2 -:109C9000B0F87E10062905D33E2180F8741080F8B4 -:109CA000736003E0206990F8731079B1206980F83F -:109CB000645080F8655080F8685090F8DE100029F4 -:109CC00014BF02210321FEF7FDFB02E00021FEF795 -:109CD000F9FB206980F8DE5006B0BDE8F047FBF7DD -:109CE0004FBDF84902468878CB78184313D108460F -:109CF00000694AB1897911F0080F03D090F8670024 -:109D0000082808D001207047B0F84810028E914210 -:109D100001D8FEF713BB0020704770B5E94C05462B -:109D20000E46E0882843E08015F0020F04D015F0BD -:109D3000010F18BFFFDF666115F0010F4FF0000241 -:109D40004FF001001AD0A661F178062902D00B2944 -:109D50000BD013E0216991F86530172B0ED1002349 -:109D6000C1E9283381F8690008E0216991F865307C -:109D7000112B04BF81F8692081F88E0015F0020FC5 -:109D800018D06169C978052902D00B290BD011E0E0 -:109D9000216991F86520152A0CD10022C1E92A22F7 -:109DA00081F86A0006E0206990F86510102908BF64 -:109DB00080F86A2015F0800F1CBF0820E07070BD8D -:109DC0002DE9F84FBF4C00254FF00108E580A57044 -:109DD000E5702570206168F30709074680F8DE808A -:109DE0000088F6F729FF5FEA000A08BFFFDF206955 -:109DF0000088FBF78DFC20690088FBF7AFFC206929 -:109E0000B0F8D21071B190F8CB10FE290FD190F8B4 -:109E1000701189B190F8672001231946583002F07B -:109E20001CFC88B1206990F8CB00FE2804D0206982 -:109E300090F8CB00FFF72BFA206990F8DF1000298B -:109E400018BF25811BD10FE02069A0F8825090F83F -:109E5000711180F8CC1000210220FFF7FFF9206972 -:109E600080F8DD500220E5E790F8AC1129B9018CAB -:109E70008288914288BF218101D881882181B0F8F0 -:109E8000D610491E8EB2B0F8D8103144A0F8D810C0 -:109E900090F8DC1000291CBFA0F8DA5080F8DC50E4 -:109EA00004D1B0F8DA103144A0F8DA10B0F87E101E -:109EB0003144A0F87E1090F86A1039B990F8652006 -:109EC00001230621583002F0C8FB28B12069B0F800 -:109ED00076103144A0F876102069B0F8D21001292C -:109EE0009CBF491CA0F8D210002E18BF80F8E45087 -:109EF00090F8DD10A1B1B0F8D800218988420FD2C6 -:109F00005046F6F706F958B1206990F8691139B151 -:109F1000B0F8DA10B0F86A01814228BF00F0B4FF4F -:109F2000206980F8DD5090F865100B2918BF0C29C6 -:109F300016D1B0F85820B0F88E31D21A12B2002AD9 -:109F40000EDBD0F89011816090F89411017302211A -:109F500001F060FF206980F8655080F898804AE041 -:109F6000242924D1B0F85810B0F88E21891A09B2EA -:109F700000291CDB90F8A42190F89011002908BF5B -:109F800090F8541080F8541090F89111002908BFEF -:109F900090F8551080F85510002A1CBF0020FEF7DD -:109FA00065FC206980F8655080F87D5023E090F8CA -:109FB0006410242918BF25291DD1B0F85810B0F815 -:109FC0008E21891A09B2002915DB90F89011002919 -:109FD00008BF90F8541080F8541090F8911100299F -:109FE00008BF90F8551080F855100020FEF73EFC91 -:109FF000206980F86450216901F15800B1F8D62039 -:10A0000002F02CF9206990F86911002918BFA0F816 -:10A01000DA502D4800902D4B2D4A3946484600F025 -:10A0200073FE216A00291CBF6078FBF720F82069C5 -:10A030000123052190F86520583002F00EFB00281E -:10A0400008BFBDE8F88FBDE8F84F00F066BC00F02F -:10A05000FBBE1C49C86170471A48C069002818BF78 -:10A0600001207047174A50701162704710B50446BE -:10A07000B0F894214388B0F89611B0F898019A424C -:10A0800001BFA3889942E38898420FD02388A4F89F -:10A09000B031A4F8B221A4F8B411A4F8B60101209B -:10A0A00084F8AC0107480079F1F770FE01212046E1 -:10A0B00001F0B0FE002084F86500032084F86800F9 -:10A0C00010BD0000F000002083960100E39C010019 -:10A0D0001B9D010070B5FE4CA07910F0020F08BF67 -:10A0E00070BDA078002818BF70BD6169F8482722AC -:10A0F000CB780E26002500690D2B78D00BDCA3F160 -:10A1000002030B2B1FD2DFE803F0201E808B9F2F52 -:10A110001E591E73D100152B00F02A810BDC112B68 -:10A1200065D0122B00F0F480132B00F0FF80142B6D -:10A1300000F00E8107E0162B00F03281172B00F0A3 -:10A140003F81FF2B35D0FFDF70BD90F867200123E2 -:10A150001946583002F081FA002818BF70BD082057 -:10A16000216981F8670070BD90F8643009790A2B85 -:10A1700001BF90F8CA308B4280F8645080F8885054 -:10A1800008BF70BD90F8663013F0080F0DD023F0B3 -:10A19000080180F8661090F88C10491E49B280F8CA -:10A1A0008C100029A8BF70BDCFE0FF291CBFFFDFC6 -:10A1B00070BD80F8642080F8845170BD90F866000E -:10A1C00010F0010F08BFFFDF216991F88C00401EDD -:10A1D00040B281F88C000028B8BFFFDF206990F8FA -:10A1E000661021F0010100BF80F8661070BD21E00B -:10A1F00090F86500102818BFFFDF0121206980F862 -:10A200008D10112180F8651070BD90F8650014283C -:10A2100018BFFFDF0121206980F88D101521F1E7BB -:10A2200090F86500152818BFFFDF1720216981F815 -:10A23000650070BD90F86500152818BFFFDF192074 -:10A24000216981F8650070BD90F865001B2818BF72 -:10A25000FFDF206980F88D5090F8B801002818BF02 -:10A26000FFDF206990F88E1049B180F88E50018888 -:10A27000A0F8BC1180F8BA5180F8B8610AE00188F2 -:10A28000A0F8BC1180F8BA51012180F8BE110D214F -:10A2900080F8B8110088F6F7BDFCF6F755F920797B -:10A2A000F1F774FD206980F8655070BD90F88C114D -:10A2B000042915D0206990F8661011F0020F08BF2C -:10A2C00070BD90F88C10491E49B280F88C1000299E -:10A2D000B8BFFFDF206990F8661021F0020183E724 -:10A2E00090F8642001230021583002F0B6F90028CC -:10A2F00008BFFFDF206990F8901011F0020F07BF30 -:10A30000062180F8641080F8885080F88C51D1E7DD -:10A3100090F8642001230021583002F09EF90028B3 -:10A3200008BFFFDF206980F8646070BD90F8661098 -:10A3300021F0040180F8661090F88C10491E49B293 -:10A3400080F88C100029A8BF70BDFFDF70BD00BF72 -:10A3500090F8642001230021583002F07EF9002893 -:10A3600008BFFFDF1C20216981F8640070BD00BFB9 -:10A3700090F8660000F03000102818BFFFDF206959 -:10A3800090F8661021F0100180F8661090F88C109B -:10A39000491E49B280F88C100029A8BF70BDD4E7CF -:10A3A00090F8642001230021583002F056F900286B -:10A3B00008BFFFDF1F20216981F8640070BD00BF66 -:10A3C00090F8650021281CBF0028FFDF22202169AA -:10A3D00081F8650070BD3E49086990F8662012F06A -:10A3E000080F1EBF01208870704742F0080280F8F5 -:10A3F00066208969C97880F8C9100021A0F88A1000 -:10A4000090F88C10491C80F88C10704710B5304CB7 -:10A4100005212069FEF756F8206990F84E100129B1 -:10A4200002BF022180F84E1010BD00F5D6710288DF -:10A43000A0F8D421028EA0F8D621828EA0F8D821CF -:10A44000028FB0F844309A4228BF1A46CA85828FDC -:10A45000B0F84600824238BF10460886012081F8D5 -:10A4600026002079BDE81040F1F790BC184830B4C0 -:10A47000006990F84E30B0F832C0C48EB0F8401089 -:10A48000428F022B28D08A4238BF11460186C28FE4 -:10A49000B0F842108A4238BF11468186028FB0F868 -:10A4A00044108A4238BF11464186828FB0F8461068 -:10A4B0008A4238BF1146C186418E614588BF8C46AD -:10A4C000A0F832C0C18EA14288BF0C46C48601E00C -:10A4D000F000002030BC7047038E9A4228BF1A4615 -:10A4E000C58F838E9D4238BF2B468A4238BF1146A6 -:10A4F0000186B0F842108B4228BF0B4683860021AC -:10A5000080F84E10CAE770B5FE4C206990F8CB1069 -:10A51000FE2906BFA178002970BD90F867200123AD -:10A520001946583002F099F8002818BF70BD20690C -:10A53000002590F8701159B1A0F8825090F871116F -:10A5400080F8CC10BDE8704000210220FEF786BEE6 -:10A5500090F8652001230421583002F07EF80600AF -:10A560000CD0D4F810C09CF86500102861D01428D5 -:10A5700065D015287BD01B287ED0BEE0216991F8DC -:10A58000660010F0010F05D0BDE8704001210920E0 -:10A59000FEF764BE10F0020F0BD001210C20FEF775 -:10A5A0005DFE206990F8901041F0010180F8901054 -:10A5B00070BD10F0040F05D0BDE8704001211320DC -:10A5C000FEF74CBE10F0080F09D091F8C90081F8D1 -:10A5D000CC00BDE8704001210720FEF73FBE10F01F -:10A5E000100F02D091F89B0120B191F8650021284D -:10A5F00073D179E091F89A0188B1B1F89C01A1F882 -:10A600004000B1F89E01A1F84200B1F8A001A1F804 -:10A610004400B1F8A201A1F8460081F89A51FFF771 -:10A6200025FFFFF7F3FEBDE8704001211520FEF77E -:10A6300015BEBDE8704001210B20FEF70FBEF9F7F3 -:10A6400025FB0C2838BF70BD08212069F030F9F7D0 -:10A6500021FB28B120690421C430F9F71BFB00B9A4 -:10A66000FFDFBDE8704001210420FEF7F7BD9CF834 -:10A67000730101280DD000E030E0022818BF70BD42 -:10A680009CF88E00D8B106208CF8CC000121022065 -:10A690001DE09CF8B801002818BF70BD0CF1B00394 -:10A6A00000220CF1E8010CF5BA7001F052FF012113 -:10A6B0000520FEF7D3FD206980F8735170BD9CF82A -:10A6C000960010F0040F14BF11200D200121FEF799 -:10A6D000C5FD206980F8735170BD0EE0BDE8704083 -:10A6E00001210620FEF7BABD91F87D00C0B991F8AE -:10A6F000A40110B191F8A50190B1206901230021B6 -:10A7000090F86420583001F0A8FFC8B120690123F7 -:10A71000042190F86520583001F09FFF30B10FE020 -:10A72000BDE8704001211720FEF798BD206990F820 -:10A730007C0028B1BDE8704000211220FEF78EBDDC -:10A74000206990F864200A2A2BD0002E18BF70BD13 -:10A7500001230021583001F080FF48B1206990F8B2 -:10A760008C11042904BF90F8900010F0030F22D040 -:10A7700020690123002190F86420583001F06DFF1A -:10A7800000287DD0206990F89A1111B190F89B11A2 -:10A79000E9B190F8A411002972D090F8A511E9B39D -:10A7A00092E090F8CA1080F8CC10BDE8704000210B -:10A7B0000720FEF753BD00210C20FEF74FFD206956 -:10A7C00090F8901041F0010180F8901070BDB0F841 -:10A7D0009C11A0F84010B0F89E11A0F84210B0F8FB -:10A7E000A011A0F84410B0F8A211A0F8461080F80B -:10A7F0009A5190F8660010F0200F13D0FFF736FE44 -:10A80000FFF704FE01211520FEF728FD206990F8CE -:10A81000661021F0200141F0100100E008E080F80E -:10A82000661070BDBDE8704000211420FEF716BD13 -:10A8300090F8652001230B21583001F00EFFF8B984 -:10A84000206990F85400012808BF012503D0022890 -:10A8500014BFFFDF0225206990F85500012808BFCA -:10A86000012603D0022814BFFFDF02262069012D34 -:10A8700090F8A61105D0022D08BF022903D00DE0E3 -:10A8800022E001290AD190F8A711012E04D0022E4E -:10A8900008BF02290BD001E0012908D090F86520FB -:10A8A00001230321583001F0D8FE68B903E00020ED -:10A8B000FDF7DCFF08E020690123022190F8652004 -:10A8C000583001F0CAFEB0B120690123002190F890 -:10A8D0006420583001F0C1FE002808BF70BD206917 -:10A8E00090F88401002808BF70BD0021BDE87040C9 -:10A8F000FF20FEF7B3BCBDE8704000211620FEF734 -:10A90000ADBC0000F000002030B5FB4C05462078BF -:10A91000002818BFFFDF657230BDF74901200872BB -:10A9200070472DE9F14FF54F39464E68304696F89D -:10A93000551001F042FF96F8551080B211F00C0F3F -:10A940006FF00D047FD0B0F5747F38BF002506D3BB -:10A950005038C11700EB916004EBA01085B2708EE7 -:10A96000A84238BF0546E648DFF88C93C9F82400B2 -:10A97000786800F15808834609F13400BBF832705A -:10A9800040689BF8551090F86AA0584601F015FFF2 -:10A990009BF8551080B211F00C0F5FD0B0F5747FAA -:10A9A00038BF002406D35038C21700EB926004EB86 -:10A9B000A01084B2A74238BF3C46BAF1000F1CBFBA -:10A9C000201D84B2E0B2F9F709FF98F812000028C0 -:10A9D0004FD008F15801CA4891E80E1000F50274F2 -:10A9E00084E80E10D8F86810C0F82112D8F86C105E -:10A9F000C0F8251200F58170FAF7A6FABF48007872 -:10AA000000280CBF0120002080F00101BD48017624 -:10AA1000D8E91412C0E90412A0F58372D9F8241001 -:10AA2000F9F7B5FD96F85500012808BF002204D0BB -:10AA300002281ABFFFDF00220122E9B20120F9F744 -:10AA4000B4FD1CE0FFE7022919BF04EBD00085B27A -:10AA50006FF00E0101EB900081D17FE7022919BF51 -:10AA600004EBD00084B26FF00E0202EB9000A1D193 -:10AA70009FE7D9F82400FAF767FAF9F7B9FD0098CB -:10AA800050B9012296F8553096211046FAF712F97E -:10AA900000219620FAF7A4FA96F82C00012808BFA6 -:10AAA000FAF730FB022089F80000BDE8F88F2DE9A5 -:10AAB000F04FDFF8488283B0414681464D68A1F1EE -:10AAC0001400009095F85D0005F158060127A1F1EA -:10AAD000340470B3012879D0022878D0032818BF35 -:10AAE000FFDF75D0206A0823017821F0080101708A -:10AAF000B27903EAC202114321F004010170F27934 -:10AB0000042303EA8202114321F01001017096F838 -:10AB100005B0E06AF5F70DFB8246FAF743FEBBF19C -:10AB2000020F7AD0BBF1010F78D0BBF1030F76D0C2 -:10AB30008AE0FFE700F0CAFB0146284601F03BFE31 -:10AB40001FFA80FB00F0C2FB10F00C0F6FF00D013C -:10AB50004FF0000A20D0BBF5747F38BF504607D3B2 -:10AB6000ABF15000C21700EB926001EBA01080B275 -:10AB7000298E814238BF0846ADF80800A5F8480084 -:10AB80000098FAF7EEFD90B1216AA77062694FF460 -:10AB90008060904703202CE0022819BF01EBDB0006 -:10ABA00080B26FF00E0000EB9B00E1D1DFE701AA5D -:10ABB00002A9E06AF5F7F8F9206210B196F83510AD -:10ABC00039B10098FAF7A1FD77718BE713E016E031 -:10ABD00026E09DF8041031B9A0F800A080F802A08A -:10ABE000012102F0A5F9BDF80810206A02F0DFFA91 -:10ABF0000220707176E70098FAF787FD72E7B5F8E2 -:10AC00004800ADF8000001AA6946E06AF5F7CCF902 -:10AC10002062002808BFFFDF64E708E00BE00EE0D9 -:10AC20000098FAF79EFD002808BFFFDF5AE730EAD8 -:10AC30000A0009D106E030EA0A0005D102E0BAF1C3 -:10AC4000000F01D0012100E00021206A027842EAD1 -:10AC500001110170717C00291CBF7179012933D069 -:10AC600006F15801264891E80E1000F5027A8AE8AC -:10AC70000E10B16EC0F82112F16EC0F8251200F569 -:10AC80008170FAF761F998F8000000280CBF0121E3 -:10AC900000211C480176D6E91212C0E90412A0F581 -:10ACA0008371226AF9F773FC95F85400012808BFF4 -:10ACB000002204D002281ABFFFDF00220122FB215C -:10ACC0000020F9F772FC03E0FAF73EF9F9F790FC7F -:10ACD000B9F1000F06D195F85430012296210020D9 -:10ACE000F9F7E8FF6771206A0188E18180782074B4 -:10ACF000277003B0BDE8F08F140100204801002048 -:10AD0000C80C0020D00E00202DE9F0471E46174643 -:10AD100081460C46FE4DDDF82080287828B9002FAA -:10AD20001CBF002EB8F1000F00D1FFDFC5F81C805A -:10AD3000C5E90576C5E90D9400272F72EF712F71D3 -:10AD4000EF706F71AF71AF70AF81F24E04F15808C0 -:10AD50002088F5F771FFE8622088F5F75BFF28632C -:10AD6000F9F759FD94F95700F9F702FE04F11200C2 -:10AD7000FAF7D3F804F10E00F9F704FE3078002852 -:10AD80000CBF03200120FAF7DCF898F81A00F9F755 -:10AD900001FEFAF7D0F83078002804BFFF2094F8BD -:10ADA000544023D098F81250B4F8328094F85510DB -:10ADB000204601F002FD94F8554080B214F00C0FCB -:10ADC0006FF00D012CD0B0F5747F06D35038C21748 -:10ADD00000EB926001EBA01087B24046B84528BF57 -:10ADE0003846002D1CBF001D80B2C0B22146F9F7C5 -:10ADF000F5FC3078F8B1706890F86801002818BF49 -:10AE0000F9F766FD224600210120F9F70CFF706872 -:10AE1000D0F8E000FAF79BF8BDE8F047012080E5A4 -:10AE2000022C19BF01EBD00087B26FF00E0101EBCD -:10AE30009000D2D1D0E7002122460846F9F7F3FE70 -:10AE4000BDE8F047012032E6B24800B50178343859 -:10AE5000007819B1022818BFFFDF00BD012818BF14 -:10AE6000FFDF00BDAA4810B50078022818BFFFDF39 -:10AE7000BDE8104000F080BA00F07EBAA4484079E6 -:10AE80007047A34800797047A14901208871704735 -:10AE90002DE9F04706009F489D4D406800F1580499 -:10AEA000686A90F8019018BF012E03D1296B08F051 -:10AEB00093FE6870687800274FF00108A0B1012860 -:10AEC0003CD0022860D003281CBFFFDFBDE8F0871C -:10AED000012E08BFBDE8F087286BF5F71FFB687AE5 -:10AEE000BDE8F047F0F752BF012E14D0A86A002841 -:10AEF00008BFFFDF6889C21CD5E9091009F058F9BD -:10AF0000A86A686201224946286BF5F783F9022E88 -:10AF100008BFBDE8F087D4E91401401C41F10001ED -:10AF2000C4E91401E079012801D1E77101E084F856 -:10AF30000780687ABDE8F047F0F728BF012E14D0EB -:10AF4000A86A002808BFFFDF6889C21CD5E909107C -:10AF500009F02EF9A86A686200224946286BF5F7C5 -:10AF600059F9022E08BFBDE8F087D4E91410491C36 -:10AF700040F10000C4E91410E07901280CBFE7712A -:10AF800084F80780BDE8F087012E06D0286BF5F71E -:10AF9000C5FA022E08BFBDE8F087D4E91410491C99 -:10AFA00040F10000C4E91410E0790128BFD1BCE7EA -:10AFB0002DE9F041574F3846A7F13404406800F1BD -:10AFC00058052078012818BFFFDFA878012648B16E -:10AFD0000021A970A6706269042090473878002883 -:10AFE00018BF2E71206A0321007831EA000004BFE7 -:10AFF000E878002805D1EE70216AA6706269022007 -:10B0000090470121002000F0D6F918B1BDE8F041C9 -:10B0100000F0B2B9BDE8F041002082E42DE9F14F23 -:10B020003C4E4FF000083046A6F1340540683178B8 -:10B0300000F1580A2878C146022818BFFFDFA88906 -:10B0400040F40070A88171683078FF2091F85410A6 -:10B05000F9F7C4FB009800289AF8120000F0FD8070 -:10B06000F9F7ECFAF9F7DAFA012788B99AF8120039 -:10B0700070B1686A417859B100789AF80710C0F346 -:10B08000C000884204D1EF70BDE8F84F00F074B9F9 -:10B09000686A41786981002908BFC5F8288003D013 -:10B0A000286BF5F771F8A862A88940F02000A88104 -:10B0B00085F804803078706800F1580B044690F8E9 -:10B0C0002C0001281AD1FAF713F85946204601F04E -:10B0D00080FA98B13078002870680CBF00F58A704B -:10B0E00000F5F570218841809BF8081001719BF8EC -:10B0F000091041710770687AF0F748FE686A9AF89B -:10B1000006100078C0F3800088423BD0307803E01E -:10B110001401002048010020706800F1580490F8E4 -:10B120005D0058B3022847D084F8058030780028A5 -:10B130001CBF2079002806D084F80480AF706A69AB -:10B14000414610209047E07890B184F80380FAF7E8 -:10B1500017FB002808BFFFDF0820AF706A690021D5 -:10B160009047D4E91202411C42F10000C4E91210D8 -:10B17000A07901280CBF84F80680A771A88940F443 -:10B180008070A881686A9AF807300178C1F3C0021C -:10B190009A424FD13278726801F0030102F15804EB -:10B1A000012918BF022932D003291CBFE87940F0D9 -:10B1B000040012D0E8713DE0E86AF4F721FF0028AE -:10B1C00008BFFFDFD4E91210491C40F10000C4E9B8 -:10B1D0001210687AF0F7DAFDA6E701F0C1FE90B12F -:10B1E000A770A989384641F40061A981696AAF70E6 -:10B1F0006A699047E079012803D100BF84F807808D -:10B2000018E0E77116E0E87940F01000D2E74078E6 -:10B21000F8B1A98941F40061A981A96A51B1FB285B -:10B22000F1D8287A002808BFB94603D080206A697F -:10B23000002190470120009900F0BDF8B0B1B9F1AC -:10B24000000F1CBF0020FFF723FEBDE8F84F00F001 -:10B2500093B8E0790128D4D1D0E7002818BFF9F7D6 -:10B2600026FAA88940F04000A881E3E7B9F1000F71 -:10B270001CBF0120FFF70CFE0020FFF718FCB9F1FE -:10B28000000F08BFBDE8F88F0220BDE8F84FFFE5CA -:10B2900070B50D4606466848674900784C6850B15D -:10B2A000F9F748FA034694F8542029463046BDE899 -:10B2B0007040FDF72CBAF9F73DFA034694F8542094 -:10B2C00029463046BDE8704005F00ABD5A4802786C -:10B2D0004168406801F1580C91F8643090F85400CE -:10B2E000242B1CBF9CF80DC0BCF1240F13D01F2BC6 -:10B2F00018BF202B24D0BCF1220F18BF7047002AA2 -:10B3000008BF704791F8A62191F85110114011F033 -:10B31000010F27D02EE04AB191F89011002908BF03 -:10B320007047012818BF012924D021E091F8F210BC -:10B33000002908BF7047012818BF01291AD017E05B -:10B34000BCF1220FDBD0002A08BF704791F8A6118C -:10B3500011F0010F0ED111F0020F08BF7047012844 -:10B3600008D005E011F0020F08BF7047012801D096 -:10B3700002207047012070472F4910B54C68F9F73B -:10B3800089FEF9F768FEF9F763FDF9F7CCFDF9F7E7 -:10B390002FF994F82C00012808BFF9F7A9FE274CD3 -:10B3A00000216269A0899047E269E179E0789047DD -:10B3B0000020207010BD70B5204C0546002908BF44 -:10B3C000012D05D12079401CC0B22071012831D84F -:10B3D000A1692846884700282CD0A179184839B19E -:10B3E000012D01BF41780029017811F0100F21D003 -:10B3F000E179F9B910490978002908BF012D05D074 -:10B4000000290CBF01210021294311D10D490978E0 -:10B4100011F0100F04BF007810F0100F0AD0A078C0 -:10B4200040B9A06A20B9608910B111F0100F01D0A5 -:10B43000002070BD012070BD4801002014010020D3 -:10B44000C80C00202201002010B540F2C311F748BB -:10B4500008F02DFFFF220821F54808F020FFF548ED -:10B46000002141704FF46171418010BD2DE9F04120 -:10B470000E46054600F046FBEC4C102816D004EBB7 -:10B48000C00191F84A0110F0010F1CBF0120BDE876 -:10B49000F081607808283CBF012081F84A011CD265 -:10B4A0006078401C60700120BDE8F0816078082859 -:10B4B00013D222780127501C207004EBC208306898 -:10B4C000C8F84401B088A8F84801102A28BFFFDF57 -:10B4D00088F8435188F84A71E2E70020BDE8F0811E -:10B4E000D2480178491E4BB2002BB8BF704770B4E8 -:10B4F0005FF0000500EBC30191F84A1111F0010F54 -:10B500003BD04278D9B2521E427000EBC10282F8A1 -:10B510004A5190F802C00022BCF1000F0BD98418E8 -:10B5200094F803618E4202D1102A26D103E0521C06 -:10B53000D2B29445F3D80278521ED2B202708A4237 -:10B540001BD000EBC20200EBC10CD2F84341CCF897 -:10B550004341D2F84721CCF84721847890F800C0C5 -:10B560000022002C09D9861896F8036166450AD195 -:10B57000102A1CBF024482F80311591E4BB2002B43 -:10B58000B8DA70BC7047521CD2B29442EBD8F4E7E0 -:10B590002DE9F05F1F4690460E46814600F0B2FA54 -:10B5A000A24D0446102830D0A878002100280ED9DA -:10B5B0006A1892F80331A34205D110291CBF12204A -:10B5C000BDE8F09F03E0491CC9B28842F0D80828C2 -:10B5D00034D2102C1CD0AE781022701CA87005EB51 -:10B5E000061909F10300414600F0A2FF09F18300AA -:10B5F0001022394600F09CFFA819002180F8034171 -:10B6000080F83B110846BDE8F09FA878082815D2BD -:10B610002C78CA46601C287005EBC4093068C9F84C -:10B620004401B0884FF0000BA9F84801102C28BF46 -:10B63000FFDF89F843A189F84AB1CCE70720BDE8CC -:10B64000F09F70B479488178491E4BB2002BBCBF83 -:10B6500070BC704703F0FF0C8178491ECAB282703B -:10B6600050FA83F191F8031194453ED000EB021596 -:10B6700000EB0C14D5F80360C4F80360D5F807603C -:10B68000C4F80760D5F80B60C4F80B60D5F80F60FC -:10B69000C4F80F60D5F88360C4F88360D5F887607C -:10B6A000C4F88760D5F88B60C4F88B60D5F88F50EC -:10B6B000C4F88F50851800EB0C0402EB420295F899 -:10B6C00003610CEB4C0C00EB420284F8036100EBCD -:10B6D0004C0CD2F80B61CCF80B61B2F80F21ACF82E -:10B6E0000F2195F83B2184F83B2100EBC10292F831 -:10B6F0004A2112F0010F33D190F802C00022BCF1B0 -:10B70000000F0BD9841894F803518D4202D1102AEE -:10B7100026D103E0521CD2B29445F3D80278521ECF -:10B72000D2B202708A421BD000EBC20200EBC10C05 -:10B73000D2F84341CCF84341D2F84721CCF8472115 -:10B74000847890F800C00022002C09D9851895F85B -:10B75000035165450BD1102A1CBF024482F8031126 -:10B76000591E4BB2002BBFF675AF70BC7047521C10 -:10B77000D2B29442EAD8F3E72E49487070472D4878 -:10B780004078704738B14AF2B811884203D8294945 -:10B790004880012070470020704726484088704745 -:10B7A00010B500F0AFF9102814D0204A014600204F -:10B7B00092F802C0BCF1000F0CD9131893F80331B2 -:10B7C0008B4203D1102818BF10BD03E0401CC0B24B -:10B7D0008445F2D8082010BD14498A78824286BF79 -:10B7E00001EB001083300020704710498A788242B4 -:10B7F00086BF01EB0010C01C002070470B4B93F874 -:10B8000002C084459CBF00207047184490F8030193 -:10B8100003EBC00090F843310B70D0F84411116075 -:10B82000B0F848019080012070470000F80E002019 -:10B830005A01002050010020FE4A114491F80321D2 -:10B84000FD490A7002684A6080880881704710B517 -:10B85000F8F74CFE002804BFFF2010BDBDE81040E3 -:10B86000F8F76ABEF3498A7882429CBF002070478D -:10B87000084490F8030101EBC00090F84A0100F081 -:10B88000010070472DE9F047EA4F0026B0463878AE -:10B89000002886BF4FF0080ADFF8A093BDE8F087C4 -:10B8A00007EBC80505F5A27195F8430100F02AF9E8 -:10B8B000102808BF544610D0B978002400290BD9AD -:10B8C0003A1992F80321824202D1102C05D103E0EB -:10B8D000621CD4B2A142F3D80824B878A04286BF33 -:10B8E00007EB0410C01C002095F84A1111F0010F5D -:10B8F00016D050B1082C04D2391991F83B11012906 -:10B9000003D0102100F0F1FD50B109F80640304697 -:10B91000731C95F8432105F5A271DEB2F9F700F822 -:10B9200008F1010000F0FF0838784045B8D8BDE8BC -:10B93000F0872DE9F041BF4C00263546A07800285D -:10B940008CBFBE4FBDE8F0816119C0B291F8038190 -:10B95000A84286BF04EB0510C01C002091F83B11E3 -:10B96000012903D0102100F0C0FD58B104EBC8003C -:10B97000BD5590F8432100F5A2713046731CDEB22C -:10B98000F8F7CEFF681CC5B2A078A842DCD8BDE8A5 -:10B99000F08110B5F8F7EEFF002804BF082010BDB5 -:10B9A000F8F7ECFFA549085C10BD0A46A24910B59E -:10B9B000497841B19F4B997829B10244D81CF8F7D6 -:10B9C00032FD012010BD002010BD9A4A01EB41015B -:10B9D00002EB41010268C1F80B218088A1F80F0138 -:10B9E00070472DE9F041934D07460024A8780028C0 -:10B9F00098BFBDE8F081C0B2A04213D905EB041096 -:10BA000010F183060ED01021304600F06EFD48B9CB -:10BA100004EB440005EB400000F20B113A463046BF -:10BA2000F9F73DFF601CC4B2A878A042E3D8BDE896 -:10BA3000F08101461022824800F07ABD80487047AC -:10BA400070B57C4D0446A878A04206D905EB0410D9 -:10BA50001021833000F049FD08B1002070BD04EBD7 -:10BA6000440005EB400000F20B1070BD71498A786C -:10BA7000824206D9084490F83B01002804BF012007 -:10BA80007047002070472DE9F0410E4607461546E5 -:10BA90000621304600F029FD664C98B1A17871B1BD -:10BAA00004F59D7011F0010F18BF00F8015FA17837 -:10BAB000490804D0457000F8025F491EFAD1012000 -:10BAC000BDE8F0813846314600F01CF8102816D049 -:10BAD000A3780021002B12D9621892F80321824228 -:10BAE00009D1102918BF082909D0601880F83B51E6 -:10BAF0000120BDE8F081491CC9B28B42ECD800207E -:10BB0000BDE8F0812DE9F0414A4D06460024287831 -:10BB10000F46002812D900BF05EBC40090F843116E -:10BB2000B14206D10622394600F5A27008F014FB96 -:10BB300038B1601CC4B22878A042EDD81020BDE80E -:10BB4000F0812046BDE8F0813A4910B44A7801EB13 -:10BB5000C003521E4A70002283F84A2191F802C0A5 -:10BB6000BCF1000F0DD98B1893F80341844204D126 -:10BB7000102A1CBF10BC704703E0521CD2B294457F -:10BB8000F1D80A78521ED2B20A70824204BF10BCA9 -:10BB9000704701EBC00301EBC202D2F843C1C3F806 -:10BBA00043C1D2F84721C3F847218C7891F800C0EF -:10BBB0000022002C9CBF10BC70478B1893F80331F7 -:10BBC000634506D1102A1CBF114481F8030110BC43 -:10BBD0007047521CD2B29442EFD810BC704770B478 -:10BBE00014490D188A78521ED3B28B7095F8032130 -:10BBF000984247D001EB031C01EB0014DCF8036012 -:10BC0000C4F80360DCF80760C4F80760DCF80B6078 -:10BC1000C4F80B60DCF80F60C4F80F60DCF88360D8 -:10BC2000C4F88360DCF88760C4F88760DCF88B6058 -:10BC300008E00000F80E0020500100205A0100200A -:10BC4000BB100020C4F88B60DCF88FC0C4F88FC034 -:10BC500001EB030C03EB43039CF8034100EB4000B2 -:10BC600001EB430385F8034101EB4000D3F80B419E -:10BC7000C0F80B41B3F80F31A0F80F319CF83B012D -:10BC800085F83B0101EBC20090F84A0110F0010F6A -:10BC90001CBF70BC704700208C78002C0DD90B188D -:10BCA00093F803C1944504D110281CBF70BC7047A1 -:10BCB00003E0401CC0B28442F1D80878401EC0B2F4 -:10BCC0000870904204BF70BC704701EBC20301EBE7 -:10BCD000C000D0F843C1C3F843C1D0F84701C3F84E -:10BCE00047018C780B780020002C9CBF70BC7047FB -:10BCF00001EB000C9CF803C19C4506D110281CBF29 -:10BD0000084480F8032170BC7047401CC0B28442D4 -:10BD1000EED870BC7047000010B50A7B02F01F021D -:10BD20000A73002202768B181B7A03F0010C5B0861 -:10BD300003F00104A4445B0803F00104A4445B087D -:10BD400003F00104A4445B0803F0010464444FEAD7 -:10BD5000530C0CF0010323444FEA5C0C0CF001047B -:10BD6000234403EB5C0300EB020C521C8CF81330F1 -:10BD700090F818C0D2B263440376052AD3D3D8B260 -:10BD8000252888BFFFDF10BD0023C383428401EB59 -:10BD9000C202521EB2FBF1F10184704770B46FF021 -:10BDA0001F02010C02EA90251F23A1F5AA40543876 -:10BDB0001CBFA1F5AA40B0F1550009D0A1F528504B -:10BDC000AA381EBFA1F52A40B0F1AA00012000D177 -:10BDD00000204FF0000C62464FEA0C048CEA01068A -:10BDE000F6431643B6F1FF3F11D005F001064FEAC6 -:10BDF0005C0C4CEAC63C03F0010652086D085B0877 -:10BE0000641C42EAC632162CE8D370BC704770BC82 -:10BE1000002070472DE9F04701270025044603293B -:10BE20000FD04FF4FA4200297CD0012900F006819E -:10BE3000022918BFBDE8F0870146BDE8F047583039 -:10BE40006AE704F158067821304608F052FAB571D5 -:10BE5000F57135737573F573357475717576B576DF -:10BE6000212086F83E00412086F83F00FE2086F81B -:10BE7000730084F82C50258484F8547084F855702D -:10BE8000282084F856001B20208760874FF4A47078 -:10BE9000E087A0871B20208660864FF4A470E08690 -:10BEA000A0861B20A4F84000A4F844004FF4A4701E -:10BEB000A4F84600A4F842001B20A4F84A00A4F805 -:10BEC0004C00A4F8480067734FF448606080A4F801 -:10BED000D050A4F8D250A4F8D450A4F8D650A4F866 -:10BEE000D850A4F8DA5084F8DD5084F8DF50A4F874 -:10BEF000E65084F8E450A4F8F850A4F8FA5084F816 -:10BF00009A5184F89B5184F8A45184F8A55184F87F -:10BF1000695184F8705184F8735184F88C51BDE8EC -:10BF2000F087FFE7A4F8E65084F8DE506088FE4909 -:10BF30000144B1FBF0F1A4F878104BF68031A4F87D -:10BF40007A10E388A4F87E50B4F882C0DB000CFBC2 -:10BF500000FCB3FBF0F39CFBF0FC5B1CA4F882C07C -:10BF60009BB203FB00FC04F15801A4F88030BCF53F -:10BF7000C84FC4BF5B1E0B85B2FBF0F2521CCA85D2 -:10BF800000F5802202F5EE32531EB3FBF0F20A8474 -:10BF9000CB8B03FB00F2B2FBF0F0C883214604F127 -:10BFA0005800FFF7B9FE07F0A5F9E8B3D4F80E1072 -:10BFB0006FF01F02080C02EA91281F26A0F5AA4183 -:10BFC00054391CBFA0F5AA41B1F155010AD0A0F522 -:10BFD0002851AA391EBFA0F52A41B1F1AA014FF09C -:10BFE000010901D14FF00009002211464FEA020C6D -:10BFF00082EA0003DB430B43B3F1FF3F1AD008F0A2 -:10C000000103520842EAC33206F0010349087608E8 -:10C010000CF1010C41EAC3314FEA5808BCF1160F8C -:10C02000E6D3B9F1000F00E000E003D084F86851D6 -:10C03000BDE8F08784F86871BDE8F087A4F8E650A1 -:10C04000B4F89401B4F89831B4F802C004F158017E -:10C05000A4F87E50B4F88240DB0004FB0CF4B3FB80 -:10C06000F0F394FBF0F45B1C4C859BB203FB00F4F3 -:10C070000B85B4F5C84FC4BF5B1E0B85B2FBF0F255 -:10C08000521CCA854A8C00EBC202521EB2FBF0F26F -:10C090000A84CA8B02FB0CF2B2FBF0F0C883BDE845 -:10C0A000F08770B50025044603290DD04FF4FA42FD -:10C0B000002963D001297DD0022918BF70BD014637 -:10C0C000BDE87040583027E604F158067821304624 -:10C0D00008F00FF9B571F57135737573F573357433 -:10C0E00075717576B576212086F83E00412086F878 -:10C0F0003F00FE2086F8730084F82C502584012030 -:10C1000084F8540084F85500282184F856101B2127 -:10C11000218761874FF4A471E187A1871B212186C4 -:10C1200061864FF4A471E186A1861B21A4F840101A -:10C13000A4F844104FF4A471A4F84610A4F84210D7 -:10C140001B21A4F84A10A4F84C10A4F848106073FE -:10C15000A4F8D850202084F8DA0084F8D050C4F82D -:10C16000D45084F8045184F8055184F80E5184F8B1 -:10C170000F5184F8F45084F8005170BD60886A490A -:10C180000144B1FBF0F1A4F878104BF68031A4F82B -:10C190007A10E388A4F87E50B4F882C0DB000CFB70 -:10C1A00000FC9CFBF0FCB3FBF0F304F15801A4F895 -:10C1B00082C000E022E05B1C9BB203FB00FCA4F801 -:10C1C0008030BCF5C84FC4BF5B1E0B85B2FBF0F2DC -:10C1D000521CCA8500F5802202F5EE32531EB3FBD5 -:10C1E000F0F20A84CB8B03FB00F2B2FBF0F0C883C1 -:10C1F000214604F15800BDE870408DE5D4F8F830D0 -:10C20000B4F802C004F158005989DB89A4F87E50C3 -:10C21000B4F88240DB0004FB0CF4B3FBF1F394FBB5 -:10C22000F1F45B1C44859BB203FB01F40385B4F578 -:10C23000C84FC4BF5B1E0385B2FBF1F2521CC2851E -:10C24000428C01EBC202521EB2FBF1F20284C28B9D -:10C2500002FB0CF2B2FBF1F1C18370BD2DE9F003DA -:10C26000047E0CB1252C03D9BDE8F00312207047E1 -:10C27000002A02BF0020BDE8F003704791F80DC00E -:10C280001F260123294D4FF00008BCF1000F77D085 -:10C29000BCF1010F1EBF1F20BDE8F0037047B0F8CE -:10C2A00000C00A7C8F7B91F80F907A404F7C87EA20 -:10C2B000090742EA072282EA0C0C00270CF0FF096A -:10C2C0004FEA1C2C99FAA9F99CFAACFC4FEA1969BF -:10C2D0004FEA1C6C49EA0C2C0CEB0C1C7F1C9444A0 -:10C2E000FFB21FFA8CFC032FE8D38CEA020C0F4F2D -:10C2F0000022ECFB057212096FF0240502FB05C257 -:10C30000D2B201EBD207427602F007053F7A03FA78 -:10C3100005F52F4218BF82767ED104FB0CF2120C79 -:10C32000521CD2B2002403E0FFDB050053E4B36EDD -:10C3300000EB040C9CF813C094453CBFA2EB0C022C -:10C34000D2B212D30D194FF0000C2D7A03FA0CF76C -:10C350003D421CBF521ED2B2002A6AD00CF1010C21 -:10C360000CF0FF0CBCF1080FF0D304F1010C0CF041 -:10C37000FF04052CD7D33046BDE8F0037047FFE734 -:10C3800090F819C00C7E474604FB02C2FA4C4FF0ED -:10C39000000CE2FB054C4FEA1C1C6FF024040CFB64 -:10C3A0000422D2B201EBD204427602F0070C247AC6 -:10C3B00003FA0CFC14EA0C0F1FBF82764046BDE85E -:10C3C000F003704790F818C0B2FBFCF40CFB142289 -:10C3D000521CD2B25FF0000400EB040C9CF813C0B6 -:10C3E00094453CBFA2EB0C02D2B212D30D194FF010 -:10C3F000000C2D7A03FA0CF815EA080F1CBF521E28 -:10C40000D2B27AB10CF1010C0CF0FF0CBCF1080FA8 -:10C41000F0D304F1010C00E00EE00CF0FF04052C59 -:10C42000DAD3A8E70CEBC40181763846BDE8F00307 -:10C4300070470CEBC40181764046BDE8F0037047BD -:10C44000CE4A016812681140CD4A1268114301605A -:10C45000704730B4CB49C94B00244FF0010C0A7827 -:10C46000521CD2B20A70202A08BF0C700D781A68CC -:10C470000CFA05F52A42F2D0097802680CFA01F1AB -:10C480005140016030BC7047017931F01F0113BF8A -:10C49000002000221146704710B4435C491C03F091 -:10C4A000010C5B0803F00104A4445B0803F00104E1 -:10C4B000A4445B0803F00104A4445B0803F00104F6 -:10C4C000A4445B0803F001045B08A44403F00104E6 -:10C4D000A4440CEB53031A44D2B20529DDDB012A34 -:10C4E0008CBF0120002010BC704730B40022A1F1A5 -:10C4F000010CBCF1000F11DD431E11F0010F08BF4C -:10C5000013F8012F5C785FEA6C0C07D013F8025F18 -:10C5100022435C782A43BCF1010CF7D1491E5CBF71 -:10C52000405C0243002A0CBF0120002030BC704751 -:10C53000130008BF704710B401EB030CD41A1CF8A9 -:10C5400001CC5B1E00F804C013F0FF03F4D110BC53 -:10C550007047F0B58DB0164610251C466A46AC46AD -:10C5600000EB0C03A5EB0C0713F8013CD355ACF121 -:10C57000010313F0FF0CF3D115461032102084464E -:10C580000B18ACEB000713F8013C401ED35510F01C -:10C59000FF00F5D1284606F02FFD86B1102005F1E9 -:10C5A000200201461318A1EB000C13F8013C401EB9 -:10C5B00004F80C3010F0FF00F4D10DB0F0BD089875 -:10C5C0002060099860600A98A0600B98E0600DB048 -:10C5D000F0BD38B505460C466846F8F79EFD0028C4 -:10C5E00008BF38BD9DF900202272A07E607294F9C8 -:10C5F0000A100020511A48BF494295F82D308B424D -:10C60000C8BF38BDFF2B08BF38BDE17A491CC9B28D -:10C61000E17295F82E30994203D8A17A7F2918BF8C -:10C6200038BDA2720020E072012038BD0C2818BF6E -:10C630000B2810D00D2818BF1F280CD0202818BF99 -:10C64000212808D0222818BF232804D024281EBF60 -:10C65000262800207047012070470C2963D2DFE8AC -:10C6600001F006090E13161B323C415C484E002AAD -:10C670005BD058E0072A18BF082A56D053E00C2A8E -:10C6800018BF0B2A51D04EE00D2A4ED04BE0A2F13C -:10C690000F000C2849D946E023B1A2F110000B2865 -:10C6A00043D940E0122A18BF112A3ED090F8360034 -:10C6B00020B1122A37D31A2A37D934E0162A32D3B6 -:10C6C0001A2A32D92FE0A2F10F0103292DD990F8AF -:10C6D000360008B31B2A28D925E0002B08BF042AFE -:10C6E00021D122E013B1062A1FD01CE0012A1AD161 -:10C6F0001BE01C2A1CBF1D2A1E2A16D013E01F2A6D -:10C7000018BF202A11D0212A18BF222A0DD0232A8F -:10C710001CBF242A262A08D005E013B10E2A04D013 -:10C7200001E0052A01D000207047012070472DE963 -:10C73000F04187680D4604462046F6F736FC98B16E -:10C7400015B33846A168F6F771FF00281CDD2844B0 -:10C75000401EB0FBF5F606FB05F13846F5F761FF24 -:10C76000A0603046BDE8F081F6F752FA40F233712E -:10C77000F5F757FFA060DFE753E4B36EA44802006B -:10C78000A8480200620100200020BDE8F08190422C -:10C7900028BF704770B50446101B642838BF64205A -:10C7A00025188D4205D8F6F774FF00281CBF2846CF -:10C7B00070BD204670BD808E7047C08E70470844A3 -:10C7C00018449830002A14BF0421002108447047FF -:10C7D00030B491F854300A8E13F00C0F4FF4747C7F -:10C7E0001CBF0CEB821292B21DD08B8E934238BFCD -:10C7F0001A464B8E91F8554014F00C0F1CBF0CEBF1 -:10C8000083139BB217D0C98E994238BF0B460028BC -:10C810000CBF01200020D1189831002818BF042037 -:10C82000084430BC7047022B07BF92003C32D20054 -:10C83000703292B2D9E7022C07BF9B003C33DB0079 -:10C8400070339BB2DFE710F0010F1CBF012070476F -:10C8500010F0020F1CBF0220704710F0040018BF38 -:10C86000082070472DE9F041054617468846012605 -:10C87000084600F06EFC0446404600F06EFC03469D -:10C8800010F0010F18BF012008D113F0020F18BFDC -:10C89000022003D113F0040018BF082014F0010F88 -:10C8A00018BF4FF0010C20D050EA0C0108BF002641 -:10C8B00013F0030F08BF002014F0030F08BF4FF060 -:10C8C000000C95F85410814208BF0020387095F88C -:10C8D0005510614508BF4FF0000C87F801C00028D3 -:10C8E00008BFBCF1000F1CD10DE014F0020F18BFFF -:10C8F0004FF0020CD8D114F0040F14BF4FF0080C05 -:10C900004FF0000CD0E7404600F02DFCB5F8581071 -:10C91000401A00B247F6FE71884201DC002800DCB4 -:10C9200000263046BDE8F08101281CBF0228002007 -:10C93000704718B4CBB2C1F3072CC1B2C0F30720C3 -:10C94000012B05D0022B08BFBCF1020F1BD002E067 -:10C95000BCF1010F17D0012904D0022908BF022819 -:10C9600011D001E001280ED001EA0C0161F30702A9 -:10C9700010EA030060F30F22D0B210F0020F18BFCC -:10C9800002200BD106E0084003EA0C01084060F3E6 -:10C990000702EFE710F0010018BF01208DF800003A -:10C9A000C2F3072010F0020F18BF022003D110F0CD -:10C9B000010018BF01208DF80100BDF8000018BC6F -:10C9C0007047162A10D12A220C2818BF0D280FD024 -:10C9D0004FF0230C1F280DD031B10878012818BF63 -:10C9E000002805D0162805D0002070470120704788 -:10C9F0001A70FBE783F800C0F8E7012902D002298A -:10CA000005D007E0002804BF40F2E240704740F63E -:10CA1000C410704700B5FFDF40F2E24000BD0000E7 -:10CA2000282107F044BC4078704730B505460078AF -:10CA300001F00F0220F00F0010432870092910D2D6 -:10CA4000DFE801F0050705070509050B0D000624C1 -:10CA500009E00C2407E0222405E0012403E00E2471 -:10CA600001E00024FFDF6C7030BD007800F00F00A3 -:10CA700070470A68C0F803208988A0F8071070473B -:10CA8000D0F803200A60B0F80700888070470A6871 -:10CA9000C0F809208988A0F80D107047D0F8092047 -:10CAA0000A60B0F80D00888070470278402322F0B9 -:10CAB000400203EA81111143017070470078C0F30E -:10CAC000801070470278802322F0800203EAC111AF -:10CAD0001143017070470078C0097047027802F076 -:10CAE0000F02072A16BF082AD0F80520D0F8032025 -:10CAF000C1F809200CBFB0F80920B0F80720A1F850 -:10CB00000D200A7822F080020A700078800942EA3B -:10CB1000C0100870704770B514460E4605461F2AAF -:10CB200088BFFFDF2246314605F1090007F040FBD0 -:10CB3000A01D687070BD70B544780E460546062C81 -:10CB400038BFFFDFA01F84B21F2C88BF1F242246DE -:10CB500005F10901304607F02BFB204670BD70B58A -:10CB600014460E4605461F2A88BFFFDF224631467F -:10CB700005F1090007F01CFBA01D687070BD70B5C1 -:10CB800044780E460546062C38BFFFDFA01F84B24E -:10CB90001F2C88BFFFDF224605F10901304607F050 -:10CBA00007FB204670BD0968C0F80F1070470A885F -:10CBB000A0F8132089784175704790F8242001F07F -:10CBC0001F0122F01F02114380F82410704707292B -:10CBD00088BF072190F82420E02322F0E00203EA36 -:10CBE0004111114380F8241070471F3007F096BCA4 -:10CBF00010B5044600F0E3FA002818BF204410BD29 -:10CC0000C17811F03F0F1BBF027912F0010F002213 -:10CC1000012211F03F0F1BBF037913F0020F002315 -:10CC200001231A4402EB4202530011F03F0F1BBFD5 -:10CC3000027912F0080F0022012203EB420311F0E7 -:10CC40003F0F1BBF027912F0040F00220122134490 -:10CC500011F03F0F1BBF027912F0200F00220122BA -:10CC600002EBC20203EB420311F03F0F1BBF02793C -:10CC700012F0100F0022012202EB42021A4411F0BE -:10CC80003F0F1BBF007910F0400F0020012010441F -:10CC900010F0FF0014BF012100210844C0B270470A -:10CCA00070B50278417802F00F02082A4DD2DFE811 -:10CCB00002F004080B4C4C4C0F14881F1F280AD993 -:10CCC00043E00C2907D040E0881F1F2803D93CE02F -:10CCD000881F1F2839D8012070BD4A1E242A34D845 -:10CCE0008446C07800258209032A09D000F03F0459 -:10CCF000601C884204D86046FFF782FFA04201D939 -:10CD0000284670BD9CF803004FF0010610F03F0F5D -:10CD10001EBF1CF10400007810F0100F13D0644601 -:10CD20000421604600F04BFA002818BF14EB000005 -:10CD3000E6D0017801F03F012529E1D28078022177 -:10CD4000B1EB501FDCD3304670BD002070BDC07801 -:10CD5000800970470178002201F00F030121042BA4 -:10CD60000BD0082B1CBF0020704743780E2B04BF4C -:10CD7000C3785FEA931C04D106E04078801F1F2827 -:10CD800000D911460846704713F03F0F1EBF0079C7 -:10CD900010F0010F10F0020FF4D1F2E710B4017897 -:10CDA00001F00F01032920D0052921D14478B0F8E2 -:10CDB0001910B0F81BC0B0F81730827D222C17D1A3 -:10CDC000062915D3B1F5486F98BFBCF5FA7F0FD28D -:10CDD00072B1082A98BF8A420AD28B429CBFB0F82F -:10CDE0001D00B0F5486F03D805E040780C2802D04C -:10CDF00010BC0020704710BC012070472DE9F041A5 -:10CE00001F4614460D00064608BFFFDF2146304688 -:10CE100000F0D5F9040008BFFFDF30193A46294673 -:10CE2000BDE8F04107F0C4B9C07800F03F0070479A -:10CE3000C02202EA8111C27802F03F021143C170A0 -:10CE40007047C9B201F00102C1F340031A4402EB7A -:10CE50004202C1F3800303EB4202C1F3C00302EBC1 -:10CE60004302C1F3001303EB43031A44C1F340131D -:10CE700003EBC30302EB4302C1F380131A4412F025 -:10CE8000FF0202D0521CD2B20171C37802F03F01FE -:10CE900003F0C0031943C170511C417070472DE964 -:10CEA000F0410546C078164600F03F04C4F1240066 -:10CEB0000F46B042B8BFFFDF281932463946001D81 -:10CEC00007F076F9A019401C6870BDE8F0812DE9E3 -:10CED000F04105464478C0780F4600F03F06002C2C -:10CEE00008BFFFDFA01B401E84B21F2C88BF1F2479 -:10CEF0002FB1A819011D2246384607F059F92046DE -:10CF0000BDE8F0814078704700B5027801F0030376 -:10CF100022F003021A430270012914BF02290021E2 -:10CF200004D0032916BFFFDF012100BD417000BD01 -:10CF300000B5027801F0030322F003021A430270E5 -:10CF4000012914BF0229002104D0032916BFFFDFE5 -:10CF5000012100BD417000BD007800F00300704762 -:10CF6000417889B1C0780E2818BF0F2803D0102847 -:10CF700018BF192802D3FB2904D905E0BF4A105C69 -:10CF8000884201D1012070470020704730B501244C -:10CF90000546C17019293CBFB848445C02D3FF293B -:10CFA00018BFFFDF6C7030BD70B515460E460446E5 -:10CFB0001B2A88BFFFDF65702A463146E01CBDE8AA -:10CFC000704007F0F5B8B0F807007047B0F80900F6 -:10CFD0007047C172090A01737047B0F80B007047BF -:10CFE00030B4B0F80720A64DB0F809C0B0F805304D -:10CFF0000179941F2D1998BFBCF5FA7F0ED269B143 -:10D00000082998BF914209D293429FBFB0F80B0004 -:10D01000B0F5486F012030BC98BF7047002030BC8D -:10D020007047001D07F07ABA021D0846114607F046 -:10D0300075BAB0F809007047007970470A68426015 -:10D0400049688160704742680A608068486070473C -:10D050000988818170478089088070470A68C0F814 -:10D060000E204968C0F812107047D0F80E200A60F0 -:10D07000D0F81200486070470968C0F81610704771 -:10D08000D0F81600086070470A68426049688160FD -:10D09000704742680A608068486070470968C160EC -:10D0A0007047C06808607047007970470A6842603E -:10D0B00049688160704742680A60806848607047CC -:10D0C0000171090A417170478171090AC171704784 -:10D0D0000172090A417270478172090AC172704770 -:10D0E00080887047C08870470089704740897047C2 -:10D0F00001891B2924BF4189B1F5A47F07D3818809 -:10D100001B2921BFC088B0F5A47F012070470020F3 -:10D1100070470A68426049688160704742680A60E7 -:10D12000806848607047017911F0070F1BBF407994 -:10D1300010F0070F002001207047017911F0070F50 -:10D140001BBF407910F0070F0020012070470171CC -:10D15000704700797047417170474079704781711D -:10D16000090AC1717047C088704746A282B0D2E9EF -:10D170000012CDE900120179407901F007026946F9 -:10D180001DF80220012A07D800F00700085C0128DA -:10D190009EBF012002B07047002002B070470171AD -:10D1A000704700797047417170474079704730B5DA -:10D1B0000C460546FB2988BFFFDF6C7030BDC37885 -:10D1C000024613F03F0008BF70470520127903F0B4 -:10D1D0003F0312F0010F36D0002914BF0B20704717 -:10D1E00012F0020F32D0012914BF801D704700BF1A -:10D1F00012F0040F2DD0022914BF401C704700BF4D -:10D2000012F0080F28D0032914BF801C704700BFFC -:10D2100012F0100F23D0042914BFC01C704700BFA8 -:10D2200012F0200F1ED005291ABF1230C0B270476D -:10D2300012F0400F19D006291ABF401CC0B2704727 -:10D24000072918D114E00029CAD114E00129CFD14F -:10D2500011E00229D4D10EE00329D9D10BE0042931 -:10D26000DED108E00529E3D105E00629E8D102E096 -:10D27000834288BF7047002070470000AC4802001E -:10D2800086F3FFFF00010102010202032DE9F041D4 -:10D29000FA4D0446284600216A78806801270E4628 -:10D2A00012B1012A1ED006E090F86620002A18BFAD -:10D2B0006F7000D001216A78C2EB421200EB42028B -:10D2C00092F82830194324D0667090F8D90002F102 -:10D2D0002A0170B12A22201D06F06AFF0420207066 -:10D2E00027710DE090F82820002A18BF6E70E1D158 -:10D2F000E1E73C22201D06F05BFF0520207027712E -:10D300006878A968C0EB401001EB400080F8286005 -:10D310001DE090F8A410E9B190F8D900012818BFD9 -:10D32000FFDFA868D0F8A5106160D0F8A910A1604F -:10D33000D0F8AD10E160D0F8B110216190F8B510CF -:10D340002175667013212170277180F8A460012077 -:10D35000BDE8F08190F82210012922D0017801293E -:10D360001CBF0020BDE8F081667014212170811C73 -:10D370002022201D06F01CFF2672A9680E70C048EE -:10D3800082888284D0F8C420527B80F8262080F8DE -:10D390002270D1F8C4000088F3F73CFCF3F7E3F8FF -:10D3A000D5E7667007212170416A616080F82260CC -:10D3B000CDE7B24880680178002914BF80884FF615 -:10D3C000FF7070472DE9F84F4FF000088946064678 -:10D3D0000127CDF80080FFF748FBBDF80010A74DEE -:10D3E00021F06004ADF8004008284FD2DFE800F0DB -:10D3F00004070D4E184E132C44F003000DE044F0CA -:10D400001500ADF80000474641E044F0100000BFB1 -:10D41000ADF800003BE044F0020040F01000F7E7F8 -:10D42000A86890F8E000052818BFFFDF44F01A0054 -:10D43000ADF80000A96891F8E710002914BF40F08A -:10D44000010020F00100E3E7A86890F8E01003294C -:10D450000AD090F8E010062958D090F8E00004288F -:10D4600018BFFFDF5FD012E03046FFF770FC0028E6 -:10D4700018BFFFDF0AD1F07810F03F0F1FBF3079DF -:10D4800010F0020F44F00400ADF800004746BDF86C -:10D4900000000090BDF80000C0F3C00BA868CBEB03 -:10D4A0004B1A00EB4A0090F82800002818BFBDE88E -:10D4B000F88F3046FFF7D9FA80467048806800EB55 -:10D4C0004A0190F8C90001F12A04012808BF01258A -:10D4D00003D0022814BFFFDF0225257300206073EC -:10D4E0006648806890F8E11084F83B10FF21A17332 -:10D4F0007F21E176BDF80010618190F8E0100429E9 -:10D500001CBF90F8E01006293AD044E044F00A012C -:10D51000ADF8001090F8FA00002814BF41F00400A4 -:10D5200021F0040074E73046FFF711FCD8B1012860 -:10D5300004BF44F00100ADF8000014D0022818BF69 -:10D54000FFDFA4D144F00200ADF80000A96891F813 -:10D55000FA10002914BF40F0040020F00400ADF8D8 -:10D560000000474693E7F07810F03F0F1FBF307977 -:10D5700010F0020FBDF8000040F0040087D047E72C -:10D5800090F8E200012808BF012503D0022814BF4B -:10D59000FFDF0225657304F10900384D00902878FB -:10D5A0007F2808BFFFDF2978009801707F2028704E -:10D5B0006FB1B8F1070F04F11C01304603D2FFF739 -:10D5C000BAFA207239E0FFF782FC207204E00020F2 -:10D5D0002072B8F1070F30D3B8F1070F0DD1A8684A -:10D5E00090F8F91001B3D0F8EA10C4F80210B0F8BE -:10D5F000EE10E18090F8F0006070A07A10F0040F57 -:10D600000ED0A86890F8FA10E9B190F8F7102175DB -:10D61000D0F8F110C4F81510B0F8F500A4F819000E -:10D62000B8F1070F38D098E0F07810F03F0F1ABF2C -:10D63000307910F0010FFF20DED0621CA11C3046B3 -:10D6400001F071FDD9E7B8F1070F1CBFB8F1010F68 -:10D65000FFDFB9F1000F08BFFFDF99F80000207568 -:10D66000B8F1010F03D0B8F1070F0BD075E004F14A -:10D6700015013046FFF712FA6FE000006401002048 -:10D68000CC10002001213046FFF7B2FA0168C4F83F -:10D6900015108088A4F81900F07810F03F0F1CBF17 -:10D6A000317911F0080F1AD0A86890F8E020042A08 -:10D6B00006D090F8E000032811D111F0100F0ED021 -:10D6C00003213046FFF794FA407803210009A07344 -:10D6D0003046FFF78DFA0088C0F30B002082F07807 -:10D6E00010F03F0F1CBF307910F0400F13D0FA48F4 -:10D6F000FFF72DFBA96891F8E020032A14D006213A -:10D700003046FFF775FA0078E076A86890F8E010E8 -:10D71000062922D118E0A86890F8FB10002918BF4C -:10D7200090F8F800F0D1F0E791F8C910042914BF7F -:10D7300008290028E3D1F07810F03F0F1CBF3079A2 -:10D7400010F0080FDBD1E0E790F8E9100909A173A8 -:10D75000B0F8E800C0F30B002082A968012001EBBB -:10D760004A0181F82800BBF1000F14BF06200520F4 -:10D77000BDE8F84F03F0F4B82DE9F041D74DAA68A1 -:10D7800092F8D930002B6ED07F27012611B109788D -:10D79000FE2914D0804692F82800002818BFBDE862 -:10D7A000F08102F12A044046FFF75FF900210828C2 -:10D7B00079D2DFE800F0515356787878595CC64C3E -:10D7C00092F8A400002818BFBDE8F08182F8A66096 -:10D7D00092F8DD0018B1F6F76CFE012829D020463A -:10D7E000FFF76CF90146A86880F8A71000F1A801BE -:10D7F0002046FFF745F92046FFF76DF90146A86876 -:10D8000080F8AE1000F1AF012046FFF747F9A86895 -:10D8100000F1B50428787F2808BFFFDF2878207042 -:10D820002F70A86880F8A460BDE8F041052003F0DF -:10D8300097B8F6F781FEA96801F1A802A731FDF7B4 -:10D84000DDFF002808BFFFDFA86890F8A71041F0AF -:10D85000020180F8A710CEE7A17209E0A67221723A -:10D860000CE0032001E021E00220A07200E0FFDFD5 -:10D8700004F10B014046FFF75EF92072621CA11C07 -:10D88000404601F050FC287809347F2808BFFFDFAC -:10D89000287820702F70A86880F82860BDE8F041D3 -:10D8A000052003F05DB82172BDE8F081BDE8F041CC -:10D8B00088E570B5894C0022A06890F8C910104620 -:10D8C00002F0A8FE002831D0F7F735FBA0688449A4 -:10D8D00090F8DF000D5C2846F7F75CF8A06880F848 -:10D8E000E15090F8C910082916BF04290F202520FF -:10D8F000F6F75DFFA068002190F8C9200120F7F736 -:10D9000050F97548F7F720FBA068D0F80001F7F749 -:10D910001EFBA06890F8C91080F8E21090F8C800CB -:10D92000032814BF0228012908D103E0BDE8704094 -:10D9300001F032BC08210020F7F707FCA06890F83E -:10D94000C91080F8E210F7F7DDFBA06890F8DD0061 -:10D9500020B1F6F77AFD4020F7F7A8FBA168032075 -:10D9600081F8E00070BD2DE9F0410F469046054674 -:10D970000321FFF73DF94078584C0209A06890F860 -:10D98000E91062F3071180F8E91003212846FFF738 -:10D990002FF90188A068B0F8E82061F30B02A0F825 -:10D9A000E82080F8E77090F8C910012905D090F8B8 -:10D9B000E000032808BFBDE8F081E8784FF00106D9 -:10D9C00010F03F0F1CBF287910F0400F09D006213E -:10D9D0002846FFF70DF90178A06880F8F81080F864 -:10D9E000FB60A06890F8E01003292AD0E97811F0D4 -:10D9F0003F0F1CBF297911F0010F08D000F1F00290 -:10DA0000911F284601F08FFBA06880F8F960E87844 -:10DA100010F03F0F1ABF287910F0020FBDE8F08117 -:10DA200001212846FFF7E4F8A1680268C1F8F12057 -:10DA30008088A1F8F50081F8F78081F8FA60BDE8E8 -:10DA4000F081022F18BF012FD0D1BDE8F08123490A -:10DA5000896881F80A01704770B5204DA86890F870 -:10DA6000E010022919BF90F8E010012900210C46AE -:10DA70001CBF0C2070BD00BFC1EB411200EB420285 -:10DA8000034682F82840491CC9B20229F4D3047025 -:10DA900080F8224093F8DD0030B1F7F719FBF6F774 -:10DAA000E8FCA86880F8DD40A868012180F8DC4027 -:10DAB00080F8C11080F8C84080F8DF40282180F845 -:10DAC0000B1180F80A41A0F8E34080F8E5400721F7 -:10DAD00080F8C010002070BDD81100206401002023 -:10DAE000D4480200F74810B58068002180F8E010A3 -:10DAF000012180F8E010FFF7AFFF002818BFFFDF1B -:10DB000010BD2DE9F047EF4C07460C26A06890F8B1 -:10DB1000E01001291FBF90F8E00002280C20BDE8AA -:10DB2000F087F6F778FEA06890F90A01F6F720FF73 -:10DB3000A06890F8C91080F8E21090F8C010012594 -:10DB4000002978D090F8C8004FF00009032802D0CF -:10DB5000022805D008E00521DB4801F0ADFB03E019 -:10DB60000321D94801F0A8FBA06890F8D81000293B -:10DB700004BF90F8DB00002843D0F5F749F80646CB -:10DB8000A0683146D0F8D400F5F750FDCF4990FB9E -:10DB9000F1F801FB180041423046F4F742FD01461E -:10DBA000A068C0F8D410D0F8D0104144C0F8D0100C -:10DBB000FDF7F3FD0146A068D0F8D020914220D8AF -:10DBC000C0E9349690F8DB0000281CBF0120FDF767 -:10DBD00008FF0121A06890F8DC20002A1CBF90F803 -:10DBE000D820002A0DD090F8B93000F1BA02012BEC -:10DBF00004D1527902F0C002402A14D0BA30F7F7AB -:10DC000085FEA06890F8B910BA30F6F769FE0F21CA -:10DC10000720F6F781FEA068002690F8E0100129A1 -:10DC200018D112E007E0FDF709FFA1682A46BA31D2 -:10DC3000F7F735FEE5E790F8E010022904BF80F819 -:10DC4000E0500C2006D1BDE8F08780F80451022195 -:10DC500080F8E010A06890F8C10088B1FDF769FE77 -:10DC600003219B48FDF7A1FE0146A06880F8DD1066 -:10DC7000C0F800719748F7F750F93046BDE8F087D3 -:10DC8000FDF700FEECE738B58E4CA06890F8E01088 -:10DC900002291CBF0C2038BD012180F80511A0F815 -:10DCA000081129208DF800006846F5F7F3FF30B120 -:10DCB000A0689DF8001090F80601884205D1A06880 -:10DCC00090F80601401C8DF80000A1689DF8000046 -:10DCD00081F806010220F7F734F97F48F6F752FE83 -:10DCE000A168DFF8F8C1002091F8C03091F8DF207A -:10DCF000521CACFB02546408A4EB8404224481F857 -:10DD0000DF2023FA02F212F0010F03D1401CC0B24F -:10DD10000328EBD3FFF7CDFD002038BD69498968A2 -:10DD200081F8C900002070476649896881F8DA00E7 -:10DD3000704710B5634CA36893F8B830022B14BF3A -:10DD4000032B00280BD100291ABF02290120002033 -:10DD50001146FDF725FD08281CBF012010BDA06855 -:10DD600090F8B800002816BF022800200120BDE866 -:10DD70001040F7F755BD5348806890F8B800002868 -:10DD800016BF022800200120F7F74ABD4D498968D7 -:10DD900081F8B80070474B49896881F8DC0070470A -:10DDA00070B5484CA16891F8B800002816BF022849 -:10DDB0000020012081F8B900BA31F7F71BFDA068F7 -:10DDC00090F8B810022916BF03290121002180F81C -:10DDD000DB1090F8B920002500F1BA03012A04BF36 -:10DDE0005B7913F0C00F0AD000F1BA03012A04D105 -:10DDF0005A7902F0C002402A01D0002200E001223C -:10DE000080F8D820002A04BF002970BDC0F8D05087 -:10DE1000F4F7FEFEA168C1F8D40091F8DB000028F9 -:10DE20001CBF0020FDF7DDFD0026A06890F8DC1087 -:10DE300000291ABF90F8D810002970BD90F8B920B9 -:10DE400000F1BA01012A04D1497901F0C001402949 -:10DE500005D02946BDE87040BA30F7F757BDFDF749 -:10DE6000EDFDA1683246BDE87040BA31F7F717BD45 -:10DE700070B5144D0C4600280CBF01230023A9687F -:10DE800081F8C13081F8CB004FF0080081F8CC0058 -:10DE90000CD1002C1ABF022C012000201146FDF7E6 -:10DEA0007FFCA968082881F8CC0001D0002070BD53 -:10DEB000022C14BF032C1220F8D170BD002818BF0B -:10DEC00011207047640100200012002040420F0022 -:10DED000D8110020D1480200D7480200ABAAAAAA54 -:10DEE0000328FE4A926808BFC2F8C41082F8C8002E -:10DEF0000020704710B5044602F018FF052809D02D -:10DF000002F014FF042805D0F448806880F8D94056 -:10DF1000002010BD0C2010BDF048816891F8C800A9 -:10DF2000032804D0012818BF022807D004E091F884 -:10DF3000CB00012808BF70470020704791F8CA0045 -:10DF4000012814BF03280120F6D1704710B5F7F758 -:10DF5000A1F8F7F780F8F6F77BFFF6F7E4FFDF4C60 -:10DF6000A06890F8DD0038B1F7F7B2F8F6F781FA5B -:10DF7000A168002081F8DD00A068012180F804116B -:10DF8000022180F8E010002010BDD449896881F892 -:10DF9000FC007047017801291CBF122070474278AD -:10DFA0000023032ACD49896808BFC1F8C43081F82D -:10DFB000C820012281F8C920C27881F8B8200279EE -:10DFC000002A16BF022A0123002381F8C13081F8FC -:10DFD000CA20427981F8C020807981F8DA000020D7 -:10DFE0007047BE488068704701F0D6B82DE9F84FF9 -:10DFF0004FF00008B948F7F790F8B84C4FF07F0A97 -:10E00000002808BF84F800A0F7F772F8B448FEF7BC -:10E010002CFDA070A16891F8E220012A18BFFFDF53 -:10E020000AD0A06890F8DD0018B1F7F751F8F6F7BC -:10E0300020FA4046BDE8F88FA94D0026A5F5867761 -:10E04000072836D291F8C10028B9F6F793FC0028CA -:10E0500008BF002600D00126A06890F8DD0080B13E -:10E06000FDF7F5FBA168FF2881F8DE000ED0014620 -:10E07000E81CFDF7E1FBA06890F8DE00FDF7F2FB7D -:10E080000643A06890F8DE00FF2817D1FDF781FC59 -:10E0900087F8DE0097F8C11081B108280ED12878E2 -:10E0A000E91CC0F38010FDF77BFB082818BF002691 -:10E0B00004E002BF91F8D90000280126A0784FF0B3 -:10E0C00000094FF0010B08281BD2DFE800F035AF44 -:10E0D000041A1A1A12F9002E00F06581A06890F84F -:10E0E000C800012818BF022840F05D81F6F7B0FE95 -:10E0F0007AE036B1A06890F8C800022806D001285E -:10E1000072D0F6F7A5FE4FF003088AE700217448A5 -:10E11000FFF732FBA0684FF00808C0F8E790C0F89E -:10E12000EB90C0F8EF90C0F8F390C0F8F79080F84B -:10E13000FB9080F8E79074E74FF00008002E00F0A5 -:10E140003281A26892F8C80002282DD001284BD055 -:10E1500003287FF466AFD2F8C400E978837E994241 -:10E160001BD12979C37E994217D16979037F9942DE -:10E1700013D1A979437F99420FD1E979837F9942DD -:10E180000BD1297AC37F994207D12978437EC1F305 -:10E190008011994208BF012100D0002192F8CB20C4 -:10E1A000012A26D0A9B3FBE000214D48FFF7E4FA8D -:10E1B000A06890F8051129B1491E11F0FF0180F8FF -:10E1C00005117CD1C0F8E790C0F8EB90C0F8EF9053 -:10E1D000C0F8F390C0F8F79080F8FB904FF0080873 -:10E1E00080F8E7B01DE7FFE700213D48FFF7C4FADC -:10E1F00019E0002965D100BF00F11A013848FEF787 -:10E200003FFC3748FEF75AFCA168D1F8C4104876A5 -:10E21000C6E0FFE797F8CC00082850D097F8DE104A -:10E2200081424ED0BFE04FF00308FAE6A06890F8B4 -:10E23000DB1000290CBF4FF0010B4FF0000B4FF02B -:10E240000008297805F10902C90907D0517901F0C0 -:10E25000C001402908BF4FF0010901D04FF000096B -:10E2600090F8C810032906D190F8C110002918BFF2 -:10E2700090F8CC0001D190F8DE00FDF7ADFA5FEA2E -:10E28000000A13D01021FEF730F9002818BF4FF014 -:10E29000010BB9F1000F04BFA06890F8B9A00DD030 -:10E2A00005F109015046F7F7C9FA8046A068B9F1AF -:10E2B000000F90F8B9A018BF4AF0020A02E072E01D -:10E2C0008CE06DE090F8C810032913D0F6F7C0FD7C -:10E2D000DEB3F6F71DFB50EA080003E064010020FE -:10E2E000D811002062D08DF800A06946FD48FFF7E4 -:10E2F00043FA98E7D0F8C400E978827E91421BD1B6 -:10E300002979C27E914217D16979027F914213D156 -:10E31000A979427F91420FD1E979827F91420BD155 -:10E32000297AC27F914207D12978407EC1F38011BA -:10E33000814208BF012500D0002597F8DE0008289B -:10E3400008D097F8CC10884200E02FE008BF4FF0CB -:10E35000010901D04FF00009B8F1000F05D1BBF160 -:10E36000000F04D0F6F7D4FA08B1012000E0002035 -:10E370004EB197F8CB10012903D021B955EA090114 -:10E3800001D0012100E0002108420CD0A06890F8E3 -:10E39000CB10012904BF002DD0F8C4003FF42CAFEE -:10E3A0004FF00A083DE6F6F753FD3CE7A06890F809 -:10E3B000CA00032818BF02287FF435AFB9F1000F57 -:10E3C0003FF431AFB8F1000F7FF42DAFC648694676 -:10E3D00040680090C348FFF7CFF924E7A06890F8A1 -:10E3E000DA0000283FF48DAEF6F732FDA06890F811 -:10E3F000D91000297FF417AFC0F8E790C0F8EB9070 -:10E40000C0F8EF90C0F8F390C0F8F79080F8FB9058 -:10E4100080F8F8A0B348FEF79AFCE8B301287CD056 -:10E4200002287FF400AFA0684FF0030890F8C800FE -:10E43000032814BF0020012036EA00003FF4F1ADAC -:10E44000A84D1820E97811F03F0F3FF4EAAD297983 -:10E4500088437FF4E6AD04212846FEF7C9FB064653 -:10E46000A06890F8E20002F0CCF80146304600F0D7 -:10E47000B5FE00283FF4D5AD002202212846FFF763 -:10E4800072FA2846FEF763FC0146A06880F8E610A1 -:10E490003188A0F8E31000E005E0B17880F8E510DD -:10E4A0004FF00408BDE5002E3FF4BDAEA06890F823 -:10E4B000C810012918BF02297FF4B5AE894DE9784B -:10E4C00011F03F0F1CBF297911F0020F05D011F098 -:10E4D000010F18BF4FF0010901D14FF000094FF0B3 -:10E4E0000008B9F1000F52D028780027C609012191 -:10E4F0002846FEF77DFB36B1407900F0C000402889 -:10E5000008BF012600D00026A06890F8C810032993 -:10E5100008D190F8C110002900E0AEE018BF90F8D3 -:10E52000CC0001D190F8DE00FDF756F95FEA000853 -:10E530000CD01021FDF7D9FF46B101212846FEF786 -:10E5400057FB01464046F7F779F90746A068002EC9 -:10E5500090F8B98018BF48F00208E87810F03F0F33 -:10E560001CBF287910F0020F0ED02846FEF7B3FA30 -:10E57000824601212846FEF73BFB5146F6F7B8F9E3 -:10E58000002818BF012000D1002038435FD0E87870 -:10E5900010F03F0F1EBF297911F0100F11F0080F76 -:10E5A00041D004212846FEF723FB0646A06890F8D8 -:10E5B000E20002F026F80146304600F00FFEA0B15E -:10E5C000424600212846FFF7CEF94648FEF7BFFB3A -:10E5D0000146A06880F8E6103188A0F8E310B17811 -:10E5E00080F8E5104FF004081BE5A06890F8E20001 -:10E5F00001287FF418AEE87810F03F0F1CBF28798F -:10E6000010F0010F3FF40FAEB9F1000F04D100215B -:10E610002846FEF7D7FE06E68DF8008069462846B4 -:10E62000FEF7D0FEFFE510F03F0F1CBF297911F077 -:10E63000100F7FF4F8AD10F03F0F1CBF287910F0D9 -:10E64000010F3FF4F0ADB9F1000FE5D1DFE7A068AD -:10E6500090F8CA00032818BF02287FF4E4AD002E0A -:10E660003FF4E1AD002F7FF4DEAD1F48694600683E -:10E6700000902846FEF7A6FED5E5002E3FF4D3AD68 -:10E68000184D1820E97811F03F0F3FF4CCAD2979EF -:10E6900088437FF4C8AD04212846FEF7A9FA064650 -:10E6A000A06890F8E20001F0ACFF0146304600F0AF -:10E6B00095FD00283FF4B7AD002201212846FFF761 -:10E6C00052F92846FEF743FB0146A06880F8E610A1 -:10E6D0003188A0F8E310B17880F8E5104FF0040815 -:10E6E0009FE40000D8110020C84802002DE9F04145 -:10E6F000FD4CA0680078002818BFFFDF0025A06847 -:10E7000001278570D0F8C4100A8882804A88428325 -:10E710008A888283C988C18380F82050F34990F8A1 -:10E72000DB20A1F59A764AB10A78C2F38013CA1C9D -:10E7300023B1527902F0C002402A33D090F8DC2095 -:10E7400042B111F8032BC2F380121AB1497911F0CA -:10E75000C00F27D00E3005F0CFFEA06890F8DD0086 -:10E7600018B1F5F7A6FE012824D0A068D0F8C4108F -:10E770004A7EC271D1F81A208260C98B81814561BD -:10E780000583A0680770D0F8C42090F80A1182F8B9 -:10E790005710D0F8C4000088F2F73CFABDE8F04109 -:10E7A000F1F7D2BED6F83711C0F80E10B6F83B110B -:10E7B0004182D2E7F5F7C0FEA16801F10802C91D48 -:10E7C000FDF71CF8002808BFFFDFA068C17941F001 -:10E7D0000201C171D6F80F114161B6F8131101831E -:10E7E000CFE72DE9F84FC04C0546FF21A068002770 -:10E7F0004FF0010980F8DE1090F8C800BA460128F1 -:10E8000018BF022802D0032818BFFFDF28004FF0EE -:10E81000040B4FF07F08B54EA6F1280500F04B81A0 -:10E820002846FEF73DFA28B92846FEF793FA002855 -:10E8300000F04181A06890F8E000082880F038815D -:10E84000DFE800F0FEFEFE04080CCF7BFFF7CEFBF6 -:10E8500000F0C5B800F093FD00F0C1B8A448FEF781 -:10E8600004F92071E878717A88421CD12879B17A4C -:10E87000884218D16879F17A884214D1A879317B1D -:10E88000884210D1E879717B88420CD1287AB17B1B -:10E89000884208D128783178C0F38010B0EBD11FBE -:10E8A00008BF012500D00025F6F7D2FA8E48F6F70A -:10E8B00034FC002808BF84F80080F6F719FC2079A2 -:10E8C000042840F04D81002D00F04A81CDF800A0D1 -:10E8D000A2688748694692F8D93053B3064692F841 -:10E8E0006600002840F03C8102F1680582F872B0B1 -:10E8F0006932A91C304600F016FC05F10B013046C8 -:10E90000FEF73DF9C0B228721F2884BF1F2028726D -:10E91000207809357F2808BFFFDF2078287084F829 -:10E920000080A06880F86690062002F019F800F0D8 -:10E9300017B9FEF747FD00F013B903276A48F6F749 -:10E94000ECFB002808BF84F80080F6F7D1FB68488C -:10E95000FEF78BF880466648FEF7F9F9B8F1080F24 -:10E9600008BF00283AD1E978032011F03F0F35D0D5 -:10E970002979884332D100215D48FEF739F9062212 -:10E9800006F1090105F0E8FB40BB5948FEF796F88F -:10E9900080465648FEF79FF880451FD10121544814 -:10E9A000FEF726F90622F11C05F0D6FBB0B9504857 -:10E9B000FEF791F880464D48FEF780F880450DD16E -:10E9C000F6F768FBF6F747FBF6F742FAF6F7ABFA0D -:10E9D0000227FFF78BFE042001F0C2FF38460746EE -:10E9E000B2E0F6F735FA4048F6F797FB002808BF83 -:10E9F00084F80080F6F77CFB3D48FEF736F80746C2 -:10EA00003B48FEF7A4F9072F08BF00284FD1E9784B -:10EA1000012011F03F0F4AD02979884347D10021C6 -:10EA20003348FEF7E5F8062206F1090105F094FBEC -:10EA300000283CD12E48FEF741F805462B4800E05F -:10EA400036E0FEF748F8854231D1A06890F804110D -:10EA500029B3B0F8082190F80611012A05D9520807 -:10EA6000A0F8082108BFA0F80891012914BF0029C7 -:10EA70000D21C943C1EBC10202EB011190F8052140 -:10EA8000D24302EB8203C3EB82121144B0F8082197 -:10EA9000890CB1FBF2F302FB131180F8051180F829 -:10EAA000049169461248CDF800A0FEF78BFC57E0B0 -:10EAB000FFDFBDE8F88FA06890F8E000082843D297 -:10EAC000DFE800F0424242041F2E3F350648F6F7C9 -:10EAD00024FB002808BF84F80080F6F709FBA06833 -:10EAE00090F8DD0050B105E0640100200012002024 -:10EAF000D8110020F6F7ECFAF5F7BBFCF6F7A8F909 -:10EB00002EE0FE48F6F709FB002808BF84F80080D5 -:10EB1000F6F7EEFAA06890F8DD000028EED0E2E704 -:10EB2000F648F6F7FAFA38B984F8008004E0F348BA -:10EB3000F6F7F3FA0028F7D0F6F7DAFAF6F788F9DD -:10EB40000EE000F02FFE0BE00C2F80F01982DFE8C2 -:10EB500007F006FDFC07FBFAFAFA0BF94FBBA8E732 -:10EB6000BDE8F84FFEF7A5BE00220121022001F00A -:10EB700051FD002800F04181E149A1F12800FDF795 -:10EB8000ADFFA068DE4E90F8B9103046FDF78DFF5E -:10EB9000A06800F1BA013046FDF76BFFA06890F85D -:10EBA000DB10C1B190F8C810032906D190F8C1104C -:10EBB000002918BF90F8CC0001D190F8DE00FCF7D6 -:10EBC0003FFF050007D001213046FDF76EFF2946C3 -:10EBD0003046FDF74EFFCA48F6F7B6F90121084660 -:10EBE000F6F7B3FAA168082081F8E000BDE8F88FD5 -:10EBF000A06890F8E21090F8E2100022032001F0E3 -:10EC000009FD00287ED0BF4F0A2087F8E0000120D0 -:10EC100001F0A6FE07F59A71A1F12800FDF75EFF4D -:10EC2000A06807F59A7890F8B9104046FDF73DFFC7 -:10EC3000A06800F1BA014046FDF71BFFA06890F8FC -:10EC4000DB10C9B190F8C810032906D190F8C110A3 -:10EC5000002918BF90F8CC0001D190F8DE00FCF735 -:10EC6000EFFE5FEA000907D001214046FDF71DFFD6 -:10EC700049464046FDF7FDFEA268A149D2F8C4000E -:10EC8000C08AC875000A0876D2F8C400407DB07505 -:10EC90000846F6F759F99A48D7F8C41020230278A5 -:10ECA000497B22F0200203EA411111430170D7F899 -:10ECB000C4002A78417BC2F340121140417397F897 -:10ECC0000B01D7F8C4106FE0A06890F8E21090F83C -:10ECD000E2100022052001F09DFC98B1894D0B2027 -:10ECE00085F8E000022001F03BFE05F59A71A1F1E4 -:10ECF0002800FDF7F3FEA06805F59A7790F8B910A3 -:10ED0000384600E079E0FDF7D0FEA06800F1BA01D6 -:10ED10003846FDF7AEFEA06890F8DB10F9B190F828 -:10ED2000C810032906D190F8C110002918BF90F827 -:10ED3000CC0001D190F8DE00FCF782FE5FEA00080B -:10ED40000DD004E034E01BE18EE085E07FE001219E -:10ED50003846FDF7AAFE41463846FDF78AFEA2680E -:10ED60006749D2F8C400C08AC875000A0876D2F88C -:10ED7000C400407DB0750846F6F7E6F8D5F8C40043 -:10ED800080F80D90A06890F8E230012296210020D2 -:10ED9000F5F790FF5A48017821F020010170A06832 -:10EDA000D5F8C41090F80B0181F85600BDE8F88F33 -:10EDB000A06890F8E21090F8E2100022042001F020 -:10EDC00029FCD0B14E49A1F12800FDF787FEA068CB -:10EDD0004B4E90F8B9103046FDF767FEA06800F181 -:10EDE000BA013046FDF745FEA06890F8DB10E9B1A6 -:10EDF00090F8C810032904D00AE0BDE8F84F00F0ED -:10EE0000CBB990F8C110002918BF90F8CC0001D1FF -:10EE100090F8DE00FCF714FE050007D00121304613 -:10EE2000FDF743FE29463046FDF723FE3448F6F74A -:10EE30008BF8A06890F8E230012296210020F5F7C7 -:10EE400039FFA168092081F8E000BDE8F88FA068CB -:10EE500080F8E090BDE8F88FA068022180F8049166 -:10EE600080F8E010BDE8F88FA56815F8E31F11F0F1 -:10EE7000800F0CBF1E204FF49670B5F80120C2F32E -:10EE80000C0212FB00F6C80908BF4FF01E0906D09D -:10EE9000002806BFFFDF4FF000094FF49679A878ED -:10EEA000400908BF012703D0012814BF002702270B -:10EEB000A06890F8E20001F0A4FBA6EB0008287817 -:10EEC00008EB0906C0F38010002808BF4FF4FA7A57 -:10EED00005D006BFFFDF4FF0000A4FF0320A0948A5 -:10EEE00090F8FC90B9F10C0F28BFFFDF0648074AE5 -:10EEF00030F819000AEB00010AE00000640100206C -:10EF000000120020CC100020DC4802003F420F001D -:10EF100001FB0620511CB0FBF1F000F120094E442A -:10EF2000F6F709F8287800F03F052846F5F732FD96 -:10EF3000A06880F8E15039462520F5F738FC012219 -:10EF4000A8EB09013B461046F5F7B4FEFE48F5F77D -:10EF5000FBFF00213046F6F743F8A06880F8E27026 -:10EF6000F6F7D0F8A06890F8DD0020B1F5F76DFA5B -:10EF70005020F6F79BF8A06880F8E0B0BDE8F88F65 -:10EF8000FFDFBDE8F88FF14810B5806890F8E00029 -:10EF90000C285FD2DFE800F05E5E5E5E5E5E5E5E65 -:10EFA0000613472DE848F5F7CFFFF6F7ABF8002139 -:10EFB0009620F6F715F8E5490520896830E0E24823 -:10EFC000F5F7C2FFE14CA06890F8E23001229621EB -:10EFD0001046F5F76FFEA06890F8E2000021962039 -:10EFE000F5F7FEFFF6F78EF8A168062081F8E0003D -:10EFF00010BDD548F5F7A8FFD44CA06890F8E230D2 -:10F00000012296211046F5F755FEA06890F8E2001F -:10F0100000219620F5F7E4FFF6F774F8A1680720C1 -:10F0200081F8E00010BDF6F735F8F6F714F8F5F7BB -:10F030000FFFF5F778FFC5480121806880F80411BB -:10F04000022180F8E010FFF751FBBDE810400320DB -:10F0500001F086BCFFDF10BD70B5BC4CA06890F815 -:10F06000E0007F25082828BF70BDDFE800F03F3FA3 -:10F070003F172304390AB548F6F74FF830B9257021 -:10F0800004E0B248F6F749F80028F8D0F6F730F86F -:10F09000F5F7DEFEBDE87040FEF70BBCAB48F6F7B7 -:10F0A0003CF8002808BF2570F6F722F8BDE870404C -:10F0B00000F072B8A548F6F730F8002808BF2570B0 -:10F0C000F6F716F8A06890F8DD0018B1F6F700F82A -:10F0D000F5F7CFF9F5F7BCFEBDE87040FEF7E9BBE8 -:10F0E00000F060FBBDE87040FEF7E3BB70BD70B59B -:10F0F000964C06460D46012909D0A06890F8E230EA -:10F1000090F8E2203046BDE8704001F0E9BDF5F727 -:10F1100011FBA16891F8E220034629463046BDE87C -:10F12000704001F0DDBD70B50646884814460D46B6 -:10F13000806890F8DD0018B1F5F7BBF901280ED012 -:10F140003046FDF7BBFC20703046FDF78EFC0728EB -:10F1500013D229463046BDE87040FDF791BCF5F763 -:10F16000EBF92A462146FCF749FB002808BFFFDFE0 -:10F17000207840F00200207070BD3046FDF775FC2D -:10F18000072818BF70BD00213046FDF731FD01682A -:10F1900029608088A88070BD10B5F5F77BFFF5F772 -:10F1A0005AFFF5F755FEF5F7BEFE684CA06890F8DB -:10F1B000DD0038B1F5F78CFFF5F75BF9A1680020A9 -:10F1C00081F8DD00A068012180F80411022180F897 -:10F1D000E010BDE81040002001F0C2BB2DE9F04175 -:10F1E000044680780222B2EB501F26D00D462178CB -:10F1F00011F0800F0CBF1E204FF49670B4F8012060 -:10F20000C2F30C0212FB00F6C80908BF1E2105D08C -:10F21000002806BFFFDF00214FF49671701BA27813 -:10F22000520908BF012703D0012A14BF0027022773 -:10F23000B0F5877F28BFAE4202D20020BDE8F08142 -:10F2400045182078C0F38010002808BF4FF4FA76E4 -:10F2500003D006BFFFDF002632263D4890F8FC4071 -:10F260000C2C28BFFFDF3B483B4A30F81400311814 -:10F2700001FB0520511CB0FBF1F020300544334860 -:10F28000806890F8E200F6F7B6F904463846F6F7DB -:10F29000B2F94FF47A7184423ABF001B00F2E730B2 -:10F2A000201AB0FBF1F034BF42192A1A3946BDE8E2 -:10F2B000F041012001F0AEB970B50D460446FDF7EE -:10F2C000AFFB032D55D0052D18BF70BD052120467D -:10F2D000FDF7ABFB1D4DA868D0F8C40000F10E018E -:10F2E0002046FDF760FCA868D0F8C40000F11201C8 -:10F2F0002046FDF75CFCA868D0F8C410497DA175D4 -:10F30000D0F8C410C98AE175090A2176D0F8C41072 -:10F3100049886176090AA176D0F8C4108988E17617 -:10F32000090A2177D0F8C410C9886177090AA17742 -:10F33000D0F8C40000F108012046FDF756FCA8688B -:10F34000D0F8C400017E09E0D8110020640100203B -:10F35000CC100020DC4802003F420F002046FDF7A1 -:10F360002CFCA86890F8FC102046BDE87040FDF722 -:10F370002EBC2046BDE870400321FDF756BB2DE9A9 -:10F38000F84FFD48F5F7C9FEFB4C002804BF7F206D -:10F390002070F5F7ADFEA06890F8D900002818BFDE -:10F3A000FFDFF648FDF761FBDFF8D083E0704FF038 -:10F3B000000998F803004D4610F03F0F1CBF98F865 -:10F3C000040010F0080F14D0EC48FDF7C0FC70B139 -:10F3D000012802D002280AD00BE098F8030010F0B0 -:10F3E0003F0F1CBF98F8040010F0010F01D04FF040 -:10F3F0000109A06890F8DD0018B1F5F769FEF5F78E -:10F4000038F898F803002E4637464FF0000A10F0FF -:10F410003F0F1CBF98F8040010F0020F43D0A06803 -:10F42000DFF858A3002690F8DB0000280CBF012766 -:10F4300000279AF800000121C5095046FDF7D8FBC6 -:10F4400035B1407900F0C000402808BF012500D048 -:10F450000025A06890F8C810032906D190F8C110C3 -:10F46000002918BF90F8CC0001D190F8DE00FCF71D -:10F47000B3F95FEA000B0FD01021FDF736F8002832 -:10F4800018BF012745B101215046FDF7B1FB0146E8 -:10F490005846F6F7D3F90646A068002D90F8B9A0B3 -:10F4A00018BF4AF0020AE0784FF0030B072875D125 -:10F4B000B248FDF74CFC002800F0F280012803D090 -:10F4C000022800F031819FE0009700270321AB481C -:10F4D000FDF78EFBB9F1000F7ED0A16891F8E7200F -:10F4E000012A79D1427891F8E9301209B2EB131F61 -:10F4F00072D10088B1F8E810C0F30B00C1F30B0122 -:10F50000884269D19D48FDF722FCA16891F8E62068 -:10F51000904261D191F8C800012818BF022802D09A -:10F5200003283CD0B9E0F5F793FC98F8030010F0FD -:10F530003F0F1CBF98F8040010F0020F17D08F4F38 -:10F540003846FDF7C8FA804601213846FDF750FBE2 -:10F550004146F5F7CDF9002818BF012030430BD004 -:10F560008DF800A069468548FDF72CFF14E00021C6 -:10F570008248FDF727FF0FE0A06890F8CA00032833 -:10F5800018BF022808D13DB136B97D486946806868 -:10F5900000907A48FDF716FF03277EE034E0002153 -:10F5A0007648FDF725FBA1680622D1F8C4101A3170 -:10F5B00004F0D2FD50B97148FDF780FAA168D1F886 -:10F5C000C410497E884208BF012500D0002598F864 -:10F5D000030010F03F0F00E05CE01CBF98F804004F -:10F5E00010F0020F01D0CEB127E0A06890F8CB1048 -:10F5F000012901D015B10CE05DB937E090F8DE10BB -:10F6000090F8CC00814204D0F5F722FC5846BDE8C2 -:10F61000F88FA06890F8E2000B273EE0009870B1E8 -:10F62000564E3046FDF757FA074601213046FDF7A2 -:10F63000DFFA3946F5F75CF908B1012200E0002253 -:10F64000A06890F8CB10012907D041B92DB990F8E6 -:10F65000DE3090F8CC00834201D1012000E0002090 -:10F66000024217D0012908BF002DD2D10021434802 -:10F67000FDF7BEFAA1680268D1F8C410C1F81A20DB -:10F680008088C8833D48FDF719FAA168D1F8C410F5 -:10F690004876BEE7F5F7DCFB03273846BDE8F88F70 -:10F6A000F5F7D6FB03213548FDF7A2FAB9F1000FB3 -:10F6B00036D0A16891F8E7206ABB427891F8E9302A -:10F6C0001209B2EB131F2BD10088B1F8E810C0F378 -:10F6D0000B00C1F30B01884222D12848FDF737FB0C -:10F6E000A16891F8E62090421AD191F8C80001284B -:10F6F00018BF022814D198F8030010F03F0F1CBF68 -:10F7000098F8040010F0020F06D08DF800A06946AA -:10F710001A48FDF757FE03E000211848FDF752FE96 -:10F720005846BDE8F88F00BFF5F792FBA06890F847 -:10F73000C80003281CD01148FDF709FBA16891F807 -:10F74000E620904214D198F80320092012F03F0FD0 -:10F750000ED098F8042090430AD1B9F1000F07D0D9 -:10F7600091F8C80002280DD000210448FDF72AFEB8 -:10F770000320BDE8F88F000064010020D8110020AC -:10F78000C848020091F8050128B1401E10F0FF00A2 -:10F7900081F80501ECD1524601212348FEF7E3F838 -:10F7A0000920E6E710B5F5F753FB2048F5F7B5FC5F -:10F7B0001E4C002804BF7F202070F5F799FCA0683C -:10F7C00090F8041119B1002180F8041110BDB0F8AF -:10F7D000082190F80611FF2A0AD24FF6FF7303EAB8 -:10F7E0004202A0F80821FF2A84BFFF22A0F80821C6 -:10F7F000012914BF00290D21C943C1EBC10202EB4D -:10F80000011290F80511C94301EB8103C3EB81118B -:10F810001144B0F80821890CB1FBF2F302FB13117B -:10F8200080F80511CFE70000D81100206401002006 -:10F830002DE9FF4F07460C46488881B040F2E2416F -:10F8400048430090E08A002600FB01FB94F8640026 -:10F8500091460D2818BF0C281FD024281EBF94F8ED -:10F86000650024284FF0000A17D0049818B1012130 -:10F87000204602F0B2FB94F8540094F8558094F8B6 -:10F88000D010054661B101296DD0022952D003295B -:10F8900018BFFFDF67D000F0D5B84FF0010AE4E7EA -:10F8A000B9F1000F08BFFFDFFD4EB068002808BFA8 -:10F8B000FFDF94F85410FB4890F82400FDF79DF802 -:10F8C000009094F85400F5F7A5FE00F2E7314FF4EC -:10F8D0007A79B1FBF9F1F24880680E1894F8540077 -:10F8E000F5F798FE014694F85400022804BFEE484C -:10F8F0004FF47A720DD0012804BFEC484FF4C8626F -:10F9000007D0042807BFEA4840F69802E94840F6C5 -:10F91000E4421044084400F2E731B1FBF9F10098E9 -:10F92000401A00EB0B01DE48406930440844061DD4 -:10F93000012015E0DA48A9F101018068084308BFF9 -:10F94000FFDFDD48B9F1000F006800EB0B0606D0C1 -:10F95000D348806800F22230B04288BFFFDF032026 -:10F9600084F8D0006DE094F86410009E24291EBF36 -:10F9700094F86520242A25294FD1B4F85810B4F8FA -:10F98000F020891A491C09B2002946DB94F8F210CC -:10F99000002942D00D4694F8F310002918BF88467C -:10F9A000022804BFC0494FF47A700DD0012804BF6B -:10F9B000BE494FF4C86007D0042807BFBC4940F6D1 -:10F9C0009800BC4940F6E4400144022D04BFB6480B -:10F9D0004FF47A720DD0012D04BFB4484FF4C862C1 -:10F9E00007D0042D07BFB24840F69802B14840F650 -:10F9F000E4421044814208D9081A00F5FA714FF424 -:10FA00007A70B1FBF0F0064407E0401A00F5FA7195 -:10FA10004FF47A70B1FBF0F0361AB9F1000F10D044 -:10FA2000DFF87C92D9F8080020B9B9F80200002864 -:10FA300018BFFFDFD9F8080000F22230B04288BFBB -:10FA4000FFDF06B9FFDF3146D4F8D400F2F7E9FD55 -:10FA5000C4F8D400B860002038704FF0010987F86E -:10FA60000490204602F0A6FBAAF10101084208BF5B -:10FA700087F8059006D094F8D00001280CBF02202A -:10FA8000032078714046D4F824B0F5F7B4FD014660 -:10FA9000022D04BF84484FF47A720DD0012D04BFAB -:10FAA00082484FF4C86207D0042D07BF804840F653 -:10FAB0009802804840F6E4421044084400F23F6156 -:10FAC0004FF47A70B1FBF0F0584400F5C970F8605B -:10FAD000049830EA0A0004BF05B0BDE8F08F314653 -:10FAE0003846FCF724FE85B2204602F063FBA842AC -:10FAF0000FD8054687F8059006FB05F1D4F8D40029 -:10FB0000F2F78FFDB86031463846FCF710FE284406 -:10FB100085B22946204602F060FAB868C4F8D400DD -:10FB200005B0BDE8F08F2DE9F0430446634885B089 -:10FB30000D4690F80004DFF88891400999F8001408 -:10FB40004909884218BFFFDFDFF85481002708F118 -:10FB50004406082D80F00E81DFE805F0046872721B -:10FB60006DFEFEB6202C28BFFFDF36F814000621FC -:10FB7000F0F71EFF050008BFFFDF202C28BFFFDFC6 -:10FB800036F814002988884218BFFFDF95F8D000A6 -:10FB9000002808BFFFDF284601F02EFFC8F80870D4 -:10FBA000A8F8027029460020C8F81470FCF710FE6F -:10FBB00000F19804686AA04225D995F85500F5F738 -:10FBC0001AFD014695F85400022804BF36484FF448 -:10FBD0007A720DD0012804BF34484FF4C86207D0B0 -:10FBE000042807BF324840F69802324840F6E44203 -:10FBF000104408444FF47A7100F23F60B0FBF1F119 -:10FC0000686A0844071B29460020C8F80C70FCF7F6 -:10FC1000DFFD698840F2E24251439830081AA0F2B1 -:10FC20002230C8F8100005B0BDE8F08305B0BDE88B -:10FC3000F04302F0ADB805B0BDE8F043F5F7A9BA5E -:10FC400099F8140D1F49400991F800144909884298 -:10FC500018BFFFDF202C28BFFFDF36F81400062175 -:10FC6000F0F7A6FE050008BFFFDF202C28BFFFDF4E -:10FC700036F814002988884218BFFFDF00220123CC -:10FC800029466846FFF7D4FD95F8DA006946F3F790 -:10FC900007FA002808BFFFDF05B0BDE8F0830000C9 -:10FCA000281200204412002068360200A22402001C -:10FCB000D0FB010030D301007401002001E000E01E -:10FCC0000BE000E019E000E0202C28BFFFDF36F851 -:10FCD00014000621F0F76CFE050008BFFFDF202CA2 -:10FCE00028BFFFDF36F814002988884218BFFFDFDD -:10FCF00095F8D000042818BFFFDF85F8D07095F87C -:10FD0000DA404FF6FF79202C28BFFFDF26F8149049 -:10FD100095F8DA00F2F75DFF002808BFFFDF20202A -:10FD200085F8DA00D5F8E000002804BFD5F8DC003B -:10FD3000C8F8180008D0D5E9391211448269114475 -:10FD40008161D5E93701C860D5F8DC0000281CBF07 -:10FD5000D5F8E010016100E00CE004D1D5F8E00036 -:10FD6000002818BF8761FE48007805B0BDE8F04361 -:10FD7000ECF70CB8FFDF05B0BDE8F0832DE9F05FCC -:10FD8000F84E07468B46F08B7568401CF083307840 -:10FD90004FF00008002808BFFFDF07D0DFF8C89346 -:10FDA00004282ED0052818BFFFDF5BD05846FEF789 -:10FDB00018F9040008BFFFDF29463069F2F731FC6B -:10FDC000B86087F800800120387194F8C9000228D3 -:10FDD00008BFE64807D0012808BFE54803D004283B -:10FDE0000CBFE448E4484FF47A7100F2E140B0FB04 -:10FDF000F1F0B168FA300844F860307804287DD119 -:10FE000083E0002AD2D0D6F810A0D9F8184034B335 -:10FE1000A146E468002CFBD1B9F1000F1FD099F87E -:10FE20000000002808BFFFDFD9F81410D9F804003B -:10FE300001445046F3F7FAFB002807DA291A491E55 -:10FE400091FBF5F101FB05042A4604E090FBF5F176 -:10FE500001FB15042A46944288BFFFDF00E04446B8 -:10FE60002546A3E7002AA1D0B569002D08BFFFDF12 -:10FE70000024D5F8E420D9F818002346611E58B1B3 -:10FE80008369934228BF994284BF194604460346BA -:10FE9000C0680028F4D104B91C46C5F8E040D0354C -:10FEA000002C04BFC5F80C80C9F8185005D0E068D4 -:10FEB000E560E860002818BF0561D5F81090C5F826 -:10FEC0001880B9F1000F0ED0D9F8180048B1D5F854 -:10FED00014A0504538BFFFDFD9F81800A0EB0A0086 -:10FEE000A861C9F81880002C08BFC6F8208009D086 -:10FEF0002078002808BFFFDF616900E00AE0606841 -:10FF00000844306240F6B83550E7F08B0A2838BF15 -:10FF1000032000D302207871F08B012807D93846DE -:10FF20007168FCF704FC0146F08B0844F083B86864 -:10FF30003061BDE8F09F2DE9F04107468F4884B05D -:10FF40000D4690F80004DFF83882400998F8001454 -:10FF50004909884218BFFFDF01200026082D814C87 -:10FF600080F0BB80DFE805F004718C8C87B9B9A5FF -:10FF700060732073607800281CBF04B0BDE8F08176 -:10FF800079488660466126733846FEF72AF80500F0 -:10FF900008BFFFDF95F8C900022804BF79494FF474 -:10FFA0007A720DD0012804BF71494FF4C86207D09E -:10FFB000042807BF6F4940F69802734940F6E442AF -:10FFC00011444FF47A7201F2E731B1FBF2F1A26809 -:10FFD0008C18F5F704FB024695F8C900082808BFFD -:10FFE000082127D004280CBF0221002322D0022898 -:10FFF0000CBF182128211944042816BF08280F23F4 -:020000040002F8 -:1000000025235B1D082808BF402007D0042808BF0F -:10001000102003D002280CBF0420082013FB00107E -:10002000801A201AFDF76DFD002818BFFFDF04B00D -:10003000BDE8F08101EB410101F12803082814BF5C -:1000400004284FF4A871D6D0D1E7617851B1207B54 -:10005000002808BFFDF77AFF667304B0BDE8F041E1 -:10006000F2F7E2BCA073FDF70EFE002818BFFFDF19 -:1000700004B0BDE8F08104B0BDE8F041F5F789B8FF -:1000800098F8140D4149400991F800144909884233 -:1000900018BFFFDF002239466846FFF76FFE69464A -:1000A0003846F2F7FDFF002808BFFFDF04B0BDE8C7 -:1000B000F0812078052818BFFFDF207F002808BFC7 -:1000C000FFDF26772670207DF2F783FD002808BF2A -:1000D000FFDF267504B0BDE8F081FFDF04B0BDE8A6 -:1000E000F0812DE9F0411F4C0026207804281FBF25 -:1000F000207805280C20BDE8F08101206070607B2D -:100100000025A8B1EFF3108010F0010F72B60CBFFC -:1001100000270127607B00281CBFA07B002805D09A -:10012000FDF714FF6573A573F2F77EFC2FB903E0AA -:10013000207DF3F7C7F800E062B6207DF3F70FFBF0 -:10014000207F28B125772078052818BFFFDF0C26EF -:1001500065702570207DF2F73CFD002818E0000056 -:1001600070010020441200202812002004360200F2 -:10017000A2240200D0FB0100C0D4010001E000E095 -:100180000BE000E06836020030D3010019E000E027 -:1001900008BFFFDF25753046BDE8F0812DE9F04F3F -:1001A000FD4883B00078002818BFFFF79AFF0120B0 -:1001B000DFF8E88388F8000069460620F0F781FB45 -:1001C000002818BFFFDF00274FF6FF7934E00298C0 -:1001D00000281CBF90F8D01000292DD00088484579 -:1001E0001CBFDFF8BCA34FF0200B3BD00621F0F77B -:1001F000DFFB040008BFFFDF94F8DA00F3F7AFFA83 -:1002000084F8D07094F8DA504FF6FF76202D28BF8E -:10021000FFDF2AF8156094F8DA00F2F7DAFC00281C -:1002200008BFFFDF84F8DAB069460620F0F749FB23 -:10023000002818BFFFDF10E06846F0F720FB002819 -:10024000C5D00FE0029800281CBF90F8D0100029FC -:1002500003D000884845C9D104E06846F0F70FFB99 -:100260000028EFD088F80070C8F8187003B000209C -:10027000BDE8F08F10B5CB4C60B101280CBF40F643 -:10028000C410FFDF06D0A06841F66A01884228BF8B -:10029000FFDF10BDA060F6E710B5DFF808C3BE4C65 -:1002A00000238CF80000237063702377237363733B -:1002B000A3732020A3612075A4F11C004370423079 -:1002C00010214FF6FF72428020F8042F491EFAD108 -:1002D000CCF80830DCF8080041F66A01884228BFF3 -:1002E000FFDFFFF75BFF40F6C41101206160F5F707 -:1002F00082F900F2E7314FF47A70B1FBF0F042F28C -:1003000010710844A0606168A1F21731884298BF5B -:100310000146A16010BDF0B59F4C054685B0207820 -:1003200000281EBF0C2005B0F0BD95F8546095F86C -:1003300055006F6AF5F75FF9022E04BF9A494FF432 -:100340007A720DD0012E04BF98494FF4C86207D0CD -:10035000042E07BF964940F69802964940F6E442BB -:10036000114408444FF47A7100F23F60B0FBF1F0A1 -:10037000384400F22230C5F8E400A56195F8D000B9 -:10038000002818BFFFDF0020844948610521217043 -:1003900060702077E0838848F2F7C1FB2075202841 -:1003A00008BFFFDFF2F734FC2061217D012268469F -:1003B000FFF7E4FC207D6946F2F772FE002808BFD3 -:1003C000FFDF002005B0F0BD7348007800281CBF97 -:1003D0000020704710B50620F0F784FA80F0010085 -:1003E00010BD70B56C4C05462078002818BFFFDFA3 -:1003F000287801281CBF112070BD698840F2712245 -:10040000AD88514301206160F5F7F5F800F2E7315E -:100410004FF47A70B1FBF0F040F2712105FB01005E -:10042000A0606168A1F21731884298BF01460020A0 -:10043000A16070BD10B584B008431EBF112004B088 -:1004400010BD554C207800281EBF0C2004B010BDF4 -:100450000020607004212170E0835748F2F75FFBB1 -:100460002075202808BFFFDF4C48806938B101465D -:10047000C0680028FBD111B1F2F7CAFB05E0F2F722 -:10048000C7FB40F6B831F2F7CCF82061217D01229C -:100490006846FFF773FC207D6946F2F701FE0028ED -:1004A00008BFFFDF002004B010BD70B53A4CA16951 -:1004B0000160FFF716FE002300BBA169D1F8E02020 -:1004C0005AB1D1E939C5AC449569AC44C2F818C0F9 -:1004D000D1E9372CCCF80C2005E0DFF8C0C0D1F80A -:1004E000DC20CCF81820D1F8DC20D1F8E010002A6C -:1004F00018BF116102D1002918BF8B61A36170BDC3 -:1005000026494870704770B540F2E24300FB03F59E -:1005100010460C46F5F76FF8022C04BF22494FF441 -:100520007A720DD0012C04BF20494FF4C86207D065 -:10053000042C07BF1E4940F698021E4940F6E442CB -:10054000114408444FF47A7100F23F60B0FBF1F0BF -:1005500000F2223085428CBF281A002070BD70B591 -:100560000D46064601460020FCF732F9044696F88F -:100570005500F5F740F8014696F85400022804BFEC -:10058000094A4FF47A7020D0012804BF074A4FF47B -:10059000C8601AD0042811E044120020281200205C -:1005A0006C1200207001002068360200A2240200B4 -:1005B000D0FB010030D3010037FF010007BFFC4A28 -:1005C00040F69800FB4A40F6E440104408444FF4DB -:1005D0007A7100F23F60B0FBF1F0718840F2712255 -:1005E0005143C0EB4100A0F22230A54234BF214666 -:1005F0002946814203D2A5422CBF2846204670627C -:1006000070BD10B5F4F7EBFFEB498A684968511AE1 -:10061000084410BD2DE9F74FE74A00231826D2F809 -:1006200008B028270BF198044FF004084FF0100988 -:100630004FF0080A4FF4C8724FF4BF754FF0400CEA -:1006400006287CD2DFE800F0034A21472465142005 -:10065000042912D0082909D02A20022911D010FB20 -:100660000A40002328211944441877E010FB0C406D -:100670004FEA0C034FF4A871F5E710FB09402E2355 -:10068000F8E710FB08401821EDE704F5317465E048 -:10069000082904BF4FF4BA6140200CD0042915D0BA -:1006A000022903BF03F15C01324604203A461CBF15 -:1006B00003F1B001082000EBC00000EB400002EBAA -:1006C00040000844204400F19C0447E02A4640F2E0 -:1006D0008E211020EFE704F5B0743FE0082908BF31 -:1006E00040200CD0042904BF2A46102007D002293C -:1006F00007BF03F11802042003F128020820C0EB11 -:10070000C00000EB400002EB4001029858440C1876 -:1007100024E0082904BF4FF4356140200CD004299F -:1007200016D0022903BF324603F1B401042003F5B9 -:10073000B0711CBF3A46082000EB400300E00CE01B -:1007400003EB001010440844204400F19C0405E031 -:100750002A4640F2EE311020EEE7FFDF974880682E -:10076000A0428CBF0120002003B0BDE8F08F10B57F -:10077000914C607828B1D4E90301A268FCF707F82E -:10078000E060D4E9020188429CBF2078002814BFB1 -:100790000020012010BD04222DE9F04F884E894F22 -:1007A000DFF80C82DFF80C9285B04FF47A7A0529D5 -:1007B00080F0D280DFE801F00A2B0331920080F84C -:1007C000D02005B0BDE8F04FF2F72EB904467A48C4 -:1007D0000078002818BF84F8D02004D005B0BDE808 -:1007E000F04FF2F721B90122002321466846FFF7B6 -:1007F0001FF894F8DA006946F2F752FC002808BFA7 -:10080000FFDFB4F85800401CA4F85800E6E70321C5 -:1008100080F8D01005B0BDE8F08F8346408840F2E4 -:10082000E241484368490860DBF8F800594600890E -:10083000ABF81600DBF8F80080798BF81500DBF8D0 -:10084000F8004089ABF80200DBF8F8008089ABF8CB -:100850000400DBF8F800C089ABF806000020DBF8E4 -:100860002850FBF7B5FF04469BF85500F4F7C3FE8C -:100870009BF85410022908BF4FF47A710DD001295A -:1008800004BF3E464FF4C86107D0042907BF46465F -:1008900040F698014E4640F6E4413144084400F2E7 -:1008A0003F60B0FBFAF1BBF8020040F27122504306 -:1008B000C1EB4000A0F22230A54234BF21462946B8 -:1008C000814203D2A5422CBF28462046CBF8240003 -:1008D00002208BF8D00005B0BDE8F08F83460146BA -:1008E000856A0020FBF774FF04469BF85500F4F777 -:1008F00082FE9BF85410022908BF4FF47A710DD084 -:10090000012904BF3E464FF4C86107D0042907BF40 -:10091000464640F698014E4640F6E44131440844CC -:1009200000F23F60B0FBFAF0BBF8021040F2712217 -:100930005143C0EB4100A0F22230A54234BF214612 -:100940002946814203D2A5422CBF28462046CBF837 -:10095000240005B0BDE8F08FFFDF05B0BDE8F08FE3 -:100960002DE9F043DFF864800024144D98F800105E -:1009700085B0072880F0AD81DFE800F0042A2AFC6A -:10098000FCFBFB00EC830846EBF700FA68780028D4 -:1009900040F05E81297D00226846FFF7EFF9287D4F -:1009A0006946F2F77DFB002808BFFFDF00F050B971 -:1009B000D0FB010030D30100281200204412002097 -:1009C00068360200A2240200740100207001002099 -:1009D00002280CBF01260026287DFDF702FB04003B -:1009E00008BFFFDF94F8E2103046FCF706F8DFF8A6 -:1009F000449301462869D9F80820002E024408BF14 -:100A00004FF4FC706ED094F8E20094F8E2000828ED -:100A10001EBF94F8E2000428002000F0B98000BF57 -:100A200094F8E230082B1ABF94F8E230042B4FF40C -:100A3000A87305D094F8E230022B0CBF18232823AA -:100A4000034494F8E200082808BF40200BD094F833 -:100A5000E200042808BF102005D094F8E200022824 -:100A60000CBF04200820C0EBC00C0CEB401003446A -:100A700094F8E20008281EBF94F8E2000428002041 -:100A800079D000BF94F8E2C0BCF1080F1ABF94F807 -:100A9000E2C0BCF1040F4FF4A87C08D094F8E2C087 -:100AA000BCF1020F0CBF4FF0180C4FF0280C84441F -:100AB00094F8E200082808BF40200BD094F8E20028 -:100AC000042808BF102005D094F8E20002280CBFCB -:100AD0000420082000EB400606EB00106044184498 -:100AE00000F59A7010440844061D94F8E200F4F7EB -:100AF00082FD94F8E210022908BF8F490BD094F8C8 -:100B0000E210012908BF8D4905D094F8E2100429AC -:100B10000CBF8B498B4994F8E220022A08BF4FF49E -:100B20007A720ED094F8E220012A08BF4FF4C8620E -:100B300007D094F8E220042A0CBF40F6980240F651 -:100B4000E442114408444FF47A7100F2E730B0FBFC -:100B5000F1F0A969301A40F2E2434A88D03102FB31 -:100B600003F6D9F818208A4208BF00272AD0296A3C -:100B700002E0A8E055E014E0F2F758FD002819DA89 -:100B8000311A4A1E92FBF6F202FB0607314616E0C6 -:100B900094F8E200082818BF022000EB400028303B -:100BA0003EE794F8E200082818BF022000EB40005E -:100BB000283067E790FBF6F202FB160731468F42BA -:100BC00088BFFFDFD8F80800874208D2A86940F242 -:100BD00071224188C1824A4307EB420705E040F297 -:100BE000E240B7FBF0F0A969C88294F8E210A86966 -:100BF00080F8541094F8E21080F8551005214175E2 -:100C0000C08A6FF41C71484307EB400040F6354141 -:100C1000C9F81400B0EB410F28BFFFDF05B0BDE8F5 -:100C2000F08304280CBF01260026EC830846EBF76E -:100C3000ADF80120287785F82460A8692969C0F8F3 -:100C4000D41080F8D0402978052918BFFFDF06D0DE -:100C5000F1F7EAFE6C73AC7305B0BDE8F0830028D1 -:100C600008BFFFDFA86990F8D000002818BFFFDF99 -:100C7000A86990F8DA00202818BFFFDF3248F1F7A2 -:100C80004EFFA9690646202881F8DA000F8828BFA0 -:100C9000FFDF2E4820F81670A86990F8DA002028A7 -:100CA00008BFFFDF002301226846A969FEF7C0FDE7 -:100CB000A869694690F8DA00F2F7F2F9002808BF4F -:100CC000FFDFAC61C4E705B00846BDE8F043EBF7D1 -:100CD0005DB8FFDF05B0BDE8F08316494860704796 -:100CE00070B5144D0446002904BFA86070BD4FF4D0 -:100CF0007A76012910D002291CBFFFDF70BD6888F9 -:100D0000401C68801046F4F785FC00F2E730B0FB29 -:100D1000F6F0201AA86070BD1846F4F78AFC00F2BD -:100D2000E730B0FBF6F0201AA86070BD08480078E4 -:100D3000704700002812002068360200A22402003A -:100D4000D0FB010030D3010027FB01006C12002012 -:100D500044120020F7490C28896881F8CB001ABF9B -:100D6000132818287047002211280FD0072808BF21 -:100D7000704715280AD001281ABF0028022870479A -:100D8000A1F88420012081F888007047A1F88A200A -:100D9000704770B5E74CA1680A88A1F83E2181F838 -:100DA0003C0191F85400012808BF012503D0022816 -:100DB00014BFFFDF0225A06880F8405190F855006D -:100DC000012808BF012503D0022814BFFFDF022538 -:100DD000A068012180F8415180F83A11002180F883 -:100DE0000E11E078BDE87040EAF7D0BFD14A012982 -:100DF00092681BD0002302290FD0032922D030B3E0 -:100E000001282FD0032818BF704792F864001328D8 -:100E10001CBF1628182805D1704792F8CB0000286F -:100E200008BF7047D2F8F8000370704792F8CB0003 -:100E3000012808BF704700BFD2F8FC000178491EA6 -:100E40000170704792F8CB000328EBD17047D2F8BD -:100E5000F800B2F858108288891A09B20029A8BF90 -:100E600003707047B2F85800B2F80211401A00B28D -:100E70000028E1DA70472DE9F041AE4C0026032747 -:100E8000D4F808C0012590B12069C0788CF8CA0058 -:100E900005FA00F010F4000F08BFFFDFA06880F82B -:100EA0006470A0F8846080F88850BDE8F081002369 -:100EB0009CF8652019460CF15800FBF7CEFB002882 -:100EC00004BF6570BDE8F0816078002818BFBDE8F8 -:100ED000F0812069C178A06880F8C91080F8657039 -:100EE000A0F88A6080F88C50BDE8F08170B5914C14 -:100EF00084B0207910F0010F04BF04B070BD2069E8 -:100F000000230521C578A06890F864205830FBF7CD -:100F1000A4FB002818BF062D09D020DC022D1CBF21 -:100F2000042D052D03D0607840F0080060706078D3 -:100F300000281CBF04B070BD2069C078801E162830 -:100F400080F00783DFE800F011FF89A7D52CFFFEB2 -:100F5000FF7FFDD2FFFFFFC5FCFBFAF9F8F50B2D73 -:100F60001CBF0D2D112DDED1E1E7A068002301216A -:100F700090F867205830FBF770FB002840F05C8346 -:100F80002069FCF759F8A16881F8F600072081F87C -:100F90006700002081F88C0081F8880000F04CBBCD -:100FA000A0680921002390F864205830FBF755FB16 -:100FB00018B120690079122812D0A0680A210023F4 -:100FC00090F864205830FBF748FB18B1206900798D -:100FD000142820D020690079162840F02D8324E0C1 -:100FE000A0680125002390F8642009215830FBF700 -:100FF00034FB002808BF657000F01E83607800286D -:1010000040F01A83A16881F87C0081F8880081F89B -:10101000640000F011BBA168002081F86400A1F811 -:10102000840081F8880000F035BAA06890F8641058 -:101030001F2940F00183002180F8641080F8881097 -:101040001A2000F0F7BAA06890F864100F2927D191 -:10105000002180F86910122137E0A06890F8641030 -:1010600013291DD1D0F8F81000884988814218BF93 -:10107000FFDFA068D0F8F80000F126012069FCF736 -:1010800008F8A06800F1C4012069FCF70AF81620EE -:10109000A16800F05BB9A26892F86400162802D03B -:1010A000022000F03BBAD2F8F80002F1B00300F1E0 -:1010B0001E0100220E30FBF74CFAA0680021C0E9A7 -:1010C0002811012180F86910182180F8641000F0BF -:1010D000B3BA2069FCF765F8032840F0AD822069B7 -:1010E000FCF763F801F0D0FB00F0A6BA20690079A4 -:1010F000F8E7A06890F864101A29D1D1002580F88B -:101100008D5080F88850D0F8F810008849888142C6 -:1011100018BFFFDFA068D0F8F8100D70D0F84411A8 -:101120000A78002A18BFFFDF7ED190F88E20DAB14E -:101130000AE03CE27C010020B6E181E125E1F1E03A -:1011400008E12BE09EE0A9E180F88E500288CA8079 -:10115000D0F844110D71D0F844210E211170D0F84F -:1011600044210188518010E00288CA80D0F84411DF -:101170000D71D0F8442101211172D0F844210D21C4 -:101180001170D0F84421018851800088EFF742FDAA -:10119000EFF7DAF9E078EAF7F9FDBEE0A06800239E -:1011A000194690F865205830FBF757FA50B9A068F7 -:1011B0000023082190F864205830FBF74EFA0028ED -:1011C00000F0FA816078002840F03682A06890F83C -:1011D000900010F0020F14D12069FBF765FFA168A1 -:1011E00081F891002069B0F80520A1F89220B0F8AC -:1011F0000700A1F8940091F8900040F0020081F8F7 -:101200009000A06890F8901011F0010F14D190F8A0 -:101210006520002319465830FBF71FFA002808BF45 -:10122000FFDF0121A06800E077E080F8651080F81A -:101230008C100021A0F88A10A06890F86410012991 -:1012400007D1002180F8641080F88810E078EAF770 -:101250009DFDA168D1F8F800098842888A4204BF40 -:101260000178042940F0E88100250570E078EAF76C -:101270008DFDA06890F86410002908BF80F88850A0 -:1012800000F0DAB9A0680023072190F864205830F4 -:10129000FBF7E3F9002800F08F816078002840F028 -:1012A000CB8102A92069FBF739FF9DF808000025D2 -:1012B00000F02501A06880F896109DF8091001F053 -:1012C000410180F8971080F88850D0F8F810008815 -:1012D0004988814218BFFFDFA068D0F8F8100D7070 -:1012E000D0F844110A78002A18BFFFDF15D1028810 -:1012F000CA80D0F844110D71D0F84411029A8A6066 -:10130000039ACA60D0F84421082111700188D0F8EE -:1013100044014180E078EAF739FDA06880F8645024 -:1013200000F08AB9A0680023092190F864205830A1 -:10133000FBF793F9002800F03F816078002840F027 -:101340007B81A16881F87C0081F8880081F86400C5 -:1013500000F072B9A0680023194690F86520583053 -:10136000FBF77BF9002800F027816078002840F027 -:101370006381A0680021A0F88A10012180F88C10F8 -:10138000022180F8651000F057B9A06800231946C3 -:1013900090F865205830FBF760F900287FD020696D -:1013A000FBF7A6FE002879D0A5682069FBF79CFE14 -:1013B0002887A5682069FBF793FE6887A5682069E0 -:1013C000FBF794FEA887A5682069FBF78BFEE887EA -:1013D000A06890F864101C2913BF90F84E100121EA -:1013E00080F84E10012907D090F80511002904BF9C -:1013F00090F80411002903D01E2180F8651017E031 -:101400001D2180F865100288A0F82A21028FA0F81B -:101410002C21428FA0F82E21828F00F58A71A0F82E -:101420003021C08FC88301200875E078EAF7AEFC50 -:10143000A0680021A0F88A10012180F88C10FBE040 -:10144000A06800230A2190F864205830FBF705F9C2 -:1014500018B32069FBF74CFEA8B1A5682069FBF71B -:1014600043FE2887A5682069FBF73AFE6887A568D0 -:101470002069FBF73BFEA887A5682069FBF732FED1 -:10148000E88700F0FEFEA168002081F8880081F85E -:10149000640000BF00F0C6FECEE000E059E06078D6 -:1014A00040F001006070C7E0A0680023194690F882 -:1014B00065205830FBF7D1F878B3A06890F8640045 -:1014C000232812BF2428607840F0200026D06846E8 -:1014D000F4F747F9002808BF002104D0009802A9BA -:1014E000C0788DF80800A06801AB162290F864005F -:1014F000FBF767FAA0B1A0689DF80420162180F8D8 -:10150000EC2080F8ED10192180F86510012180F899 -:101510008C100021A0F88A108EE04DE060708BE006 -:101520002069FBF700FEA0B12269107900F00701E5 -:10153000A06880F85010527902F0070280F851201C -:1015400090F80F31002B04BF90F80E31002B04D01F -:1015500022E00020FFF78FFC6EE090F855C000F10C -:1015600054038C4501BF19789142012180F87D1008 -:1015700012D00288A0F8362190F8502000F58A7128 -:1015800080F8382190F8510081F82500012081F879 -:101590002000E078EAF7FAFBA068212180F86510C6 -:1015A000012180F88C100021A0F88A1044E0A06886 -:1015B00090F864001F2801D00120AFE72069FBF7F5 -:1015C000BCFD88B32069A2680179407901F0070168 -:1015D00061F30705294600F0070060F30F210120A1 -:1015E00082F888000025A2F88450232082F8640045 -:1015F000566DD2F81001FBF79CF9F2B2C1B28A42E3 -:1016000007BFA16881F8F250A26882F8F210C6F311 -:101610000721C0F30720814219BFA16881F8F300B8 -:10162000A06880F8F35007E0FFE70120FFF723FCF4 -:101630005FF01E00FFF7ADFBA068D0E92A12491C3D -:1016400042F10002C0E92A1204B070BD2DE9F04752 -:10165000FE4D04464FF0000768780843687028790B -:1016600010F0200F2846806818BFA0F87E7004D1C3 -:10167000B0F87E10491CA0F87E1090F86A10012680 -:1016800039B990F86420002306215830FAF7E5FFB5 -:1016900058B3A88810F4006F07D0A86890F86A10B3 -:1016A000002918BFA0F876701FD1A868B0F876108E -:1016B000491C89B2A0F87610B0F878208A422CBF75 -:1016C000511A00218288521D8A4228BF80F87C600E -:1016D000B0F87610B0F87820914206D3A0F8767072 -:1016E00080F81A61E878EAF751FB287910F0600F6A -:1016F00008D0A86890F8681021B980F868600121C6 -:10170000FFF749F84FF00808002C56D168780028F8 -:1017100051D1287910F0040F0DD0A86890F864001A -:10172000032808BFFFDFA86890F86710072904BFE7 -:101730002E7080F8677001F0F7F8287910F0080F24 -:1017400019D06878B8B9A868002190F8CB00FFF7E5 -:101750004DFBA86890F8CB00FE2808BFFFDFFE21F4 -:10176000A86880F8CB1090F86710082903D10221EF -:10177000297080F86770FFF7B9FBA87810F0080FA0 -:1017800016D0A8680023052190F864205830FAF795 -:1017900064FF50B185F80180A868D0F8441108783A -:1017A0000D2808BF0020087002E00020F9F770FB48 -:1017B000A86800F0F2FF00F0AEFDA868A14600F1B5 -:1017C000580490F8F40030B9E27B00230121204650 -:1017D000FAF743FF10B1608D401C60853D21B9F1DF -:1017E000000F18D12878022808BF16200ED0012833 -:1017F00004BFA86890F8F60008D06878E8B110F047 -:10180000140F1CBF1E20207702D005E0207703E0D4 -:1018100010F0080F02D02177E67641E010F0030FB8 -:1018200003D02A202077E6763AE010F0200F08BF98 -:10183000FFDF23202077E67632E094F8300028B1ED -:10184000A08D411CA185E18D884213D294F834000B -:1018500028B1608E411C6186E18D88420AD2618D7B -:10186000208D814203D3AA6892F8F42012B9E28D48 -:10187000914203D322202077E67611E0217C31B11A -:10188000E18C814228BF84F81C80C5D206E0E08C40 -:10189000062803D33E202077E67601E0E07EA0B163 -:1018A0002773677327740221A868FEF774FFA8687E -:1018B00090F8CB10012904D1D0F8FC000178491E22 -:1018C0000170E878EAF762FA03E00021A868FEF701 -:1018D00062FFBDE8F047F3F753BF5C4A5178937855 -:1018E000194314D111460128896809D0107910F0E4 -:1018F000040F03D091F86700072808D00120704733 -:10190000B1F84800098E884201D8FEF730BF0020A8 -:10191000704770B54D4C06460D46A0883043A080F8 -:1019200016F0020F04D016F0010F18BFFFDFE560BC -:1019300016F0010F18BF256116F0020F10D0E878DD -:10194000062802D00B2837D00AE0A06890F864106F -:10195000182905D10021C0E92A11012180F86A1057 -:1019600016F0800F1CBF0820A07016F4806F08BF0F -:1019700070BDA268B2F8580091880844801DE978CB -:1019800080B2012908BFA2F8020107D0002904BFD4 -:10199000D2F8F810888001D0182915D0E9782846A7 -:1019A00001291CD009B3182918BF70BDB2F8F01076 -:1019B000BDE87040FBF7D3BBA06890F86410122913 -:1019C00008BF0021CCD1C9E792F8F210002902BF6C -:1019D00092F8F31000290020A2F8F000DEE7B2F838 -:1019E00002114172090AA97270BDD2F8F8108988F3 -:1019F0004173090AA97370BDF0B5144C85B0002677 -:101A0000A060A6806670A670054626700088F3F771 -:101A10007FFEA0680088F3F7A1FEB5F8D800A168A2 -:101A2000401C82B201F15800FAF718FC002818BFD8 -:101A3000FFDF95F8650024280ED1B5F85810B5F8E9 -:101A4000F000081A00B2002802E000007C0100202B -:101A5000A4BF6078002806D095F86400242818BF39 -:101A600025283BD119E0A06890F8F210002908BFA2 -:101A700090F8541080F8541090F8F310002908BF23 -:101A800090F8551080F855100020FFF782F985F87E -:101A90006560A16881F87D6020E0B5F85810B5F860 -:101AA000F000081A00B20028A4BF6078002815D101 -:101AB000A06890F8F210002908BF90F8541080F840 -:101AC000541090F8F310002908BF90F8551080F8D2 -:101AD00055100020FFF75DF985F86460A5F8D8601F -:101AE000A06890F8881039B1B0F88410B0F886205A -:101AF000914224BF05B0F0BD90F88C1039B1B0F818 -:101B00008A10B0F88620914224BF05B0F0BDB0F82D -:101B10008220B0F880108A4224BF05B0F0BD90F852 -:101B200068208AB3B0F87E208A4224BF05B0F0BD99 -:101B300090F8CB70FE2F00F012816846F3F7EBFDB2 -:101B4000002808BFFFDF2221009802F0B0FB03212C -:101B50000098FBF7EDF90098017821F01001017071 -:101B60003946FBF713FA192F71D2DFE807F0271F68 -:101B70001445D6D6D71971D6D7D763D6D6D6D6C9F7 -:101B8000D7D77B94ADD6B600B0F87E10062924BF17 -:101B900005B0F0BDCCE7A168009891F8F51003E01E -:101BA000A168009891F8CC100171B7E0A068D0F856 -:101BB000FC00411C0098FBF734FAAFE0A1680098E4 -:101BC000D1F8F82092790271D1F8F8201289427187 -:101BD000120A8271D1F8F8205289C271120A027277 -:101BE000D1F8F82092894272120A8272D1F8F81064 -:101BF000C989FBF7EEF991E0A068D0F8F800011D63 -:101C00000098FBF71BFAA068D0F8F80000F10C016F -:101C10000098FBF71DFAA068D0F8F80000F11E014B -:101C20000098FBF71BFAA06800F1C0010098FBF7D1 -:101C300023FA73E06269009811780171918841710B -:101C4000090A81715188C171090A017266E064E074 -:101C5000FD49D1E90001CDE9020102A90098FBF795 -:101C600025FA5BE0A068B0F844100098FBF728FA6A -:101C7000A068B0F846100098FBF726FAA068B0F804 -:101C800040100098FBF724FAA068B0F842100098C2 -:101C9000FBF722FA42E0A068B0F840100098FBF78A -:101CA00017FAA068B0F842100098FBF715FAA06880 -:101CB000B0F844100098FBF703FAA068B0F846109B -:101CC0000098FBF701FA29E0A168009891F810212B -:101CD000027191F81111417120E0A06890F8F300B1 -:101CE000FAF722FE01460098FBF735FAA06890F853 -:101CF000F200FAF719FE01460098FBF728FA0DE00A -:101D0000A06890F8ED100098FBF749FAA06890F8E9 -:101D1000EC100098FBF747FA00E0FFDFF3F70EFD49 -:101D2000002808BFFFDF0098C178012903D049B11E -:101D300018290FD013E0A168B1F802114172090A05 -:101D400081720CE0A168D1F8F81089884173090A02 -:101D5000817304E0A168B1F8F010FBF700FABB480A -:101D60000090BB4BBB4A29463046F8F7CDFFA06830 -:101D70000023052190F864205830FAF76EFC002803 -:101D800004BF05B0F0BD05B0BDE8F040F8F7C5BD33 -:101D9000B148806890F8881029B1B0F88410B0F884 -:101DA000862091421AD290F88C1029B1B0F88A108E -:101DB000B0F88620914211D2B0F88220B0F880109D -:101DC0008A420BD290F86820B0F87E0022B1884297 -:101DD00004D200BFF9F738B80628FBD3002001462B -:101DE00034E470B50C46064615464FF4A4712046FF -:101DF00002F07FFA2680002D08BFFFDF2868C4F8B4 -:101E0000F8006868C4F8FC00A868C4F8440170BD14 -:101E1000EEF7D7BE2DE9F0410D4607460621EEF755 -:101E2000C7FD040008BFBDE8F081D4F844110026C6 -:101E3000087858B14A8821888A4207D1092810D0E9 -:101E40000E281DD00D2832D008284CD094F81A0145 -:101E5000002857D06E701020287084F81A61AF8067 -:101E60003EE06E7009202870D4F844014168696032 -:101E70008168A9608089A881D4F8440106702FE0A8 -:101E80000846EEF7C7FE0746EEF773FBB0B96E7073 -:101E90000E202870D4F8440140686860D4F84401EA -:101EA00006703846EEF75FFB0120BDE8F08108467A -:101EB000EEF7B0FE0746EEF75CFB10B10020BDE880 -:101EC000F0816E700D202870D4F84401416869607B -:101ED00000892881D4F8440106703846EEF743FBA8 -:101EE0000120BDE8F0816E7008202870D4F844010C -:101EF00041688268C0686960AA60E860D4F84401FB -:101F00000670EDE794F81C01B0B16E7015202870D2 -:101F100094F81C010028E3D084F81C61D4F81E0159 -:101F20006860D4F82201A860B4F82601A88194F86A -:101F30001C010028F0D1D3E794F8280170B16E702D -:101F40001D20287084F82861D4F82A016860D4F82C -:101F50002E01A860B4F83201A881C1E794F83401D9 -:101F600040B16E701E20287084F83461D4F83601B8 -:101F70006860B5E794F8140180B16E701B2028707A -:101F800094F814010028ABD084F81461D4F8160139 -:101F9000686094F814010028F6D1A1E794F83A019A -:101FA000002808BFBDE8F0816E701620287094F8F4 -:101FB0003A01002894D000BF84F83A61D4F83C017B -:101FC0006860B4F84001288194F83A010028F3D100 -:101FD00086E7214A5061D17070472DE9F0470446E9 -:101FE000481E85B238BFBDE8F08704F10808012615 -:101FF000DFF864904FF0090A5FF00007B4F8D800EA -:10200000401CA4F8D800B4F87E00401CA4F87E0060 -:1020100094F86A0040B994F864200023062104F182 -:102020005800FAF71AFB30B3B4F87600401C80B2BF -:10203000A4F87600B4F8781081422CBF0A1A002266 -:10204000A3885B1D934209E0F44802004D1602008C -:10205000DB180200131902007C01002028BF84F85D -:102060007C60884207D3A4F8767084F81A6199F8E6 -:102070000300E9F78BFE94F8880020B1B4F88400DF -:10208000401CA4F8840094F88C0020B1B4F88A00B5 -:10209000401CA4F88A0094F8F40040B994F8672032 -:1020A0000023012104F15800FAF7D7FA20B1B4F85F -:1020B0008200401CA4F8820094F864000C2802D02E -:1020C0000D2820D067E0B4F85800411CB4F8020194 -:1020D000814260D1D4F8FC00411C404602F01EFA57 -:1020E00002212046F9F7DDFFD4F8FC000078002833 -:1020F00008BFFFDF0121FE20FEF778FE84F8647040 -:1021000084F8986047E0B4F85800411CD4F8F8000F -:10211000808881423FD1D4F844010178002918BF5A -:10212000FFDF22D12188C180D4F8F8004189D4F89A -:1021300044010181D4F8F8008189D4F84401418137 -:10214000D4F8F800C189D4F844018181D4F844015D -:102150000771D4F8440180F800A0D4F84401218824 -:10216000418099F80300E9F711FE01212046F9F7B3 -:1021700098FF03212046FEF70EFBD9F80800D0F89F -:10218000F8000078022818BFFFDF0221FE20FEF7CA -:102190002DFE84F86470B4F85800401C691EA4F841 -:1021A00058008DB2BFF42AAFBDE8F087F84AC2E903 -:1021B0000601704770B50446B0F87E0094F86810C8 -:1021C000002908BFC0F1020503D0B4F88010081A36 -:1021D000051F94F87C0040B194F864200023092185 -:1021E00004F15800FAF739FAA0B1B4F8766094F81F -:1021F0006A0058B994F864200023062104F15800BD -:10220000FAF72BFA002808BF284603D0B4F8780064 -:10221000801B001F8542C8BF0546002DD4BF00208B -:10222000A8B270BD042110B5D94CA068FEF7B3FA6E -:10223000A06890F84E10012902BF022180F84E10CC -:1022400010BD00F58A710288A0F81E21028EA0F848 -:102250002021828EA0F82221028FB0F844309A42C9 -:1022600028BF1A460A82828FB0F84600824238BFE1 -:102270001046488201200872E078BDE81040E9F776 -:1022800085BDC34830B4806890F84E30B0F832C095 -:10229000C48EB0F84010428F022B25D08A4238BF3E -:1022A00011460186C28FB0F842108A4238BF1146EB -:1022B0008186028FB0F844108A4238BF11464186A9 -:1022C000828FB0F846108A4238BF1146C186418ECF -:1022D000614588BF8C46A0F832C0C18EA14288BF3C -:1022E0000C46C48630BC7047038E9A4228BF1A46FB -:1022F000C58F838E9D4238BF2B468A4238BF114618 -:102300000186B0F842108B4228BF0B46838600211D -:1023100080F84E10CDE770B59D4CA06890F8CB10BA -:10232000FE2906BF6178002970BD90F86720002360 -:1023300001215830FAF791F9002818BF70BDA06844 -:1023400090F8F41021B1BDE870400220FEF702BD04 -:1023500090F86420002319465830FAF77EF940B10E -:10236000A06890F87C0020B1BDE870401220FEF714 -:10237000F1BCA068002590F86420122A1FD004DC6C -:10238000032A3FD0112A1FD003E0182A35D0232A70 -:1023900043D0002304215830FAF75FF9002818BF12 -:1023A00070BDD4F808C09CF8650019287CD03BDCCF -:1023B00001286BD0022879D003285DD038E0BDE831 -:1023C00070400B20FEF7C6BCF1F760FC0C2838BF4C -:1023D00070BDA0680821D0F8F8001E30F1F75AFC53 -:1023E00028B1A0680421C030F1F754FC00B9FFDF28 -:1023F000BDE870400320FEF7ADBCBDE8704006208C -:10240000FEF7A8BC90F8CA1080F8CC100720FEF7A1 -:10241000A1FCA06880F8645070BD1820FEF79AFCFB -:10242000A068A0F8845070BD1E2847D021286BD02A -:10243000DCF8F80001260178002973D04088BCF848 -:10244000001088426ED100239CF8642019460CF1DC -:102450005800FAF702F9002864D0A068D0F8F81004 -:10246000097802297ED003297DD004297CD0052952 -:1024700008BF082079D0C7E09CF8C9008CF8CC00D0 -:102480000720FEF767FCA06800F06DB90C20FEF78E -:1024900061FCA068A0F88A5090F8901041F001010A -:1024A00080F8901000F05FB96DE0FFE71320FEF7B1 -:1024B00051FCA068A0F88A5000F055B99CF80501BD -:1024C000002818BF70BD9CF8040188B1BCF8060153 -:1024D000ACF84000BCF80801ACF84200BCF80A01B6 -:1024E000ACF84400BCF80C01ACF846008CF8045180 -:1024F000FFF7C7FEFFF796FE1520FEF72BFCA0683E -:10250000A0F88A5000F02FB99CF87D0058B18CF8E3 -:10251000F2508CF8F3501820FEF71CFCA068A0F8CD -:102520008A5070BD70E09CF80F01002818BF70BD84 -:102530009CF80E01002808BF70BDDCE91416DCF819 -:102540001001FAF7F6F9F2B2C1B28A4207BFA168E8 -:1025500081F8F250A26882F8F210C6F30721C0F3A6 -:10256000072003E016E01BE03BE022E0814219BFB8 -:10257000A16881F8F300A06880F8F3501820BDE846 -:102580007040FEF7E7BB1120FEF7E4FBA068EAE02D -:102590007C01002090F86500FAF748F8A0BB08E03D -:1025A00090F8691041B190F86A00002808BFFFDF79 -:1025B0000A20FEF7CFFB27E0F1F768FB0C2823D3B6 -:1025C000A0680821D0F8F8001E30F1F763FB28B1AD -:1025D000A0680421C030F1F75DFB00B9FFDF0320E4 -:1025E000E7E790F8900010F0030F0DD10C20FEF7F4 -:1025F000B1FBA068A0F8845080F8886090F8901033 -:1026000041F0010180F89010A06890F8CB10FE29ED -:1026100018BF70BD90F86420002319465830FAF7AF -:102620001CF8002808BF70BDA06890F80011E9B33D -:10263000A1690978D1BB90F86500F9F7F7FFA8BB4D -:10264000A068B0F858100A2931D900F10801052214 -:10265000E06901F081FD0028A06804BF80F8005106 -:1026600070BDD0F8FC00017861B1411C0522E06921 -:1026700001F072FD002818BF70BDA068D0F8FC0002 -:10268000007830B9A068E169D0F8FC00401C01F086 -:1026900045FFA068D0F8FC000178491C01700120BA -:1026A000FEF758FBA06880F8005170BDFFE7A068F6 -:1026B00090F8041111B190F8051181B390F80E1142 -:1026C000002908BF70BD90F80F11002918BF70BD18 -:1026D00090F86500F9F7AAFF002818BF70BDA06840 -:1026E00090F85400012808BF012503D0022814BF28 -:1026F000FFDF0225A06890F85500012808BF0126D9 -:1027000003D0022814BFFFDF0226A168012D91F833 -:1027100010012BD0022D08BF022829D033E0FFE79B -:10272000B0F80611A0F84010B0F80811A0F8421057 -:10273000B0F80A11A0F84410B0F80C11A0F8461037 -:1027400080F8045190F865001D2804D0BDE8704061 -:102750001420FEF7FFBAFFF794FDFFF763FD152085 -:10276000FEF7F8FAA06880F8655070BD01280AD11C -:1027700091F81101012E04D0022E08BF022807D0C3 -:1027800001E0012804D0BDE870401620FEF7E2BA4F -:10279000BDE870400020FEF7FCBA70B5044690F822 -:1027A000640000250C2814D00D2818BF70BDB4F8A3 -:1027B0005800D4F8F810401C8988884218BF70BDB2 -:1027C000D4F84401FE4E0178002918BFFFDF45D13F -:1027D00022E0B4F85800B4F80211401C884218BF37 -:1027E00070BDD4F8FC00411C04F1080001F096FE15 -:1027F00002212046F9F755FCD4F8FC0000780028A7 -:1028000008BFFFDF0121FE20FEF7F0FA84F86450D4 -:10281000012084F8980070BD2188C180D4F8F800A8 -:10282000D4F8441140890881D4F8F800D4F8441150 -:1028300080894881D4F8F800D4F84411C08988818F -:10284000D4F844010571D4F8441109200870D4F873 -:10285000441120884880F078E9F798FA0121204651 -:10286000F9F71FFC03212046FDF795FFB068D0F86B -:10287000F8000078022818BFFFDF0221FE20FEF7D3 -:10288000B5FA84F8645070BD70B5CD4CA16891F86C -:102890006420162A11BF132A91F88E20002A62782C -:1028A0001BBF02206070002A70BD81F8C80000259F -:1028B00081F88D5081F88850D1F8F8000988408857 -:1028C000884218BFFFDFA068D0F8F800007803281E -:1028D00018BFFFDF0321FE20FEF788FAA068D0F8BA -:1028E00044110A78002A18BFFFDF19D10288CA8074 -:1028F000D0F8442190F8C8101171D0F844110D722D -:10290000D0F844210D211170D0F844210188518064 -:102910000088EEF77FF9EDF717FEE078E9F736FA71 -:10292000A06880F8645070BD10B5A54C207910F0F7 -:10293000020F08BF10BD6078002818BF10BDE06806 -:10294000C078192880F06981DFE800F05F4F0D8FB3 -:10295000F8F8A6223FF86F83B1F8F8F8F8F7E3E04B -:10296000F9F5F4F8F300A0680023012190F867203E -:102970005830F9F772FE002818BF10BD0821A06872 -:1029800080F86710002180F8881080F88C1010BD46 -:10299000A0680023194690F865205830F9F75DFECD -:1029A00018B1A168002081F88C00A06800231946A6 -:1029B00090F864205830F9F750FE002808BF10BD89 -:1029C0000020A16881F8880010BDA0680023194686 -:1029D00090F864205830F9F740FE002808BFFFDF68 -:1029E0000420A16881F8640010BDA0680023194686 -:1029F00090F864205830F9F730FE002808BFFFDF58 -:102A00000C20A16881F8640010BDA068002319465D -:102A100090F864205830F9F720FE002808BFFFDF47 -:102A20000D20A16881F8640010BDA068002319463C -:102A300090F864205830F9F710FE002808BFFFDF37 -:102A40000121A06880F88D105FF00F0180F86410FC -:102A500010BDA06890F86400122818BFFFDF0121A4 -:102A6000A06880F88E101121F0E7A06800231946B5 -:102A700090F864205830F9F7F0FD28B9A06890F874 -:102A80008E00002808BFFFDF0121A06880F88D10AC -:102A9000132180F8641010BDA06890F86400182815 -:102AA00018BFFFDF1A20A16881F8640010BDA0687C -:102AB000D0F8F81003884A889A4204BF097804299C -:102AC00019D190F86420002319465830F9F7C5FD54 -:102AD000002808BFFFDFA06890F8901011F0020FE7 -:102AE00004BF012180F8641005D0002180F888100F -:102AF000D0F8F8000170A0680023194690F865200E -:102B00005830F9F7AAFD002808BF10BD0020A168C1 -:102B100080E0A0680023194690F864205830F9F747 -:102B20009CFD002808BFFFDF0520A16881F8640034 -:102B300010BD30E01FE012E001E067E06DE0A0684A -:102B40000023194690F864205830F9F786FD0028D4 -:102B500008BFFFDF1C20A16881F86400E8E7A068D7 -:102B60000023194690F865205830F9F776FD0028C3 -:102B700008BFFFDFCAE7A0680023194690F8642069 -:102B80005830F9F76AFD002808BFFFDF1F20A16851 -:102B900081F86400CCE7A06890F8651021291DD069 -:102BA00090F86410232918BFFFDFC1D190F8F2100C -:102BB000002906BF90F8F3100029242102E000004C -:102BC0007C01002018BF80F864107FF4F9AE00216A -:102BD00080F864100846FEF7DCF8F1E690F8F21091 -:102BE000002907BF90F8F3100029242180F8651010 -:102BF0008CD1002180F8651080F87D1090F80E01CE -:102C000000281CBF0020FEF7C4F87FE7A168002061 -:102C100081F8650081F88C008AE7FFDF88E7000013 -:102C200070B58D4C0829207A63D2DFE801F0041AD0 -:102C30005A5A2662625A80B1F1F7EDFD012211461F -:102C40001046F1F7F0FFF2F7FDFC0020A072F1F75B -:102C5000A1FEBDE87040F2F76EB9BDE87040EFF735 -:102C6000E3BED4E90001EFF7DCFC2060A07A401C51 -:102C7000C0B2A07228281CD370BDA07A0025401EC7 -:102C8000C6B2E0683044F2F748FA10B9E1687F2034 -:102C90008855A07A272828BF01252846F2F782FC0C -:102CA000A07A282809D2401CC0B2A072282828BFC8 -:102CB00070BDBDE87040F1F76DBE207A00281CBFE2 -:102CC000012000F085F8F2F7C3F8F2F72CF90120A3 -:102CD000E07262480078E9F759F8BDE87040EFF714 -:102CE000A3BE002808BF70BD0020BDE8704000F002 -:102CF0006FB8FFDF70BD10B5574C207A002804BFB5 -:102D00000C2010BD00202072E072607AF0F7DAFA31 -:102D1000607AF0F724FD607AEFF75BFF00280CBFC4 -:102D20001F20002010BD002270B54B4C06460D46FA -:102D3000207A68B12272E272607AF0F7C3FA607AA0 -:102D4000F0F70DFD607AEFF744FF002808BFFFDFC2 -:102D50004248E560067070BD70B5050007D0A5F566 -:102D6000E8503F494C3881429CBF122070BD3A4C1C -:102D7000E068002804BF092070BD207A00281CBF2D -:102D80000C2070BD3748EFF7CAFE6072202804BFE0 -:102D90001F2070BDEFF73CFF2060002D1CBF2844B2 -:102DA0002060012065602072002000F011F80020F2 -:102DB00070BD2949CA7A002A04BF002070471F222B -:102DC000027000224270CB684360CA7201207047D3 -:102DD0002DE9F04184B00746EFF71AFF1E4D8046FB -:102DE000414668682C6800EB800046002046F0F7FA -:102DF0001DFCB04206DB6868811B4046EFF711FC02 -:102E00000446286040F2337621464046F0F70EFC37 -:102E1000B04204DA31464046EFF703FC0446002096 -:102E20008DF8000040F2E760039004208DF8050063 -:102E3000002F14BF012003208DF80400684602947F -:102E4000F0F7B3F8687A6946F0F72AF9002808BF66 -:102E5000FFDF04B0BDE8F081AC1200209C0100202F -:102E6000B5EB3C00212C02002DE9F0410C46124943 -:102E70000D68114A114908321160A0F12001312971 -:102E800001D301200CE0412810D040CC0C4F94E835 -:102E90000E0007EB8000241F50F8807C3046B847B6 -:102EA00020600548001D0560BDE8F0812046DEF782 -:102EB00097F9F5E706207047100502400100000170 -:102EC000FC48020010B5524800F038FA00B1FFDFAC -:102ED0004F48401C00F032FA002800D0FFDF10BD40 -:102EE0002DE9F14F4B4ED6F800B00127484800F0CD -:102EF0002DFADFF81C8128B95FF0000708F1010006 -:102F000000F03AFA444C00254FF0030901206060BC -:102F1000C4F80051C4F80451009931602060DFF812 -:102F2000FCA018E0DAF80000C00614D50E2000F06E -:102F300064F8EFF3108010F0010072B600D00120A9 -:102F4000C4F80493D4F8001119B9D4F8041101B9E4 -:102F500020BF00B962B6D4F8000118B9D4F8040152 -:102F60000028DFD0D4F804010028CFD137B1C6F84B -:102F700000B008F1010000F0E9F911E008F10100EA -:102F800000F0E4F90028B9D1C4F80893C4F804515A -:102F9000C4F800510E2000F030F81D4800F0ECF9A4 -:102FA0000020BDE8F88F2DE9F0438DB00D460646B0 -:102FB00000240DF110090DF1200817E004EB44077F -:102FC000102255F82710684601F0F2F805EB870744 -:102FD00010224846796801F0EBF86846FFF780FF59 -:102FE00010224146B86801F0E3F8641CB442E5DB06 -:102FF0000DB00020BDE8F08372E700F01F02012150 -:1030000091404009800000F1E020C0F88012704734 -:103010009D01002004E5004000E0004010ED00E0CC -:10302000AA4900200870704770B5A94D01232B6094 -:10303000A84B1C68002CFCD0002407E00E6806603A -:103040001E68002EFCD0001D091D641C9442F5D39F -:103050000020286018680028FCD070BD70B59B4E19 -:1030600004469D4D3078022800D0FFDFAC4200D3EB -:10307000FFDF71699948012903D847F23052944221 -:1030800001DD03224271491C7161291BC160934912 -:103090007078F0F705F8002800D1FFDF70BD70B53B -:1030A0008A4C0D466178884200D0FFDF8A4E082D99 -:1030B0004BD2DFE805F04A041E2D4A4A4A382078F0 -:1030C000022800D0FFDF03202070A078012801D063 -:1030D00020B108E0A06800F0B7FD04E004F10800AA -:1030E00007C8FFF7A1FF05202070BDE87040EFF78B -:1030F0009BBCEFF78DFD01466068F0F797FAB04290 -:1031000002D2616902290BD30320F0F74CFD12E0D3 -:10311000EFF77EFD01466068F0F788FAB042F3D21F -:10312000BDE870409AE7207802280AD0052806D02A -:10313000FFDF04202070BDE8704000F0BDB8022021 -:1031400000E00320F0F72FFDF3E7FFDF70BD70B55F -:103150000546EFF75DFD5D4C60602078012800D0EA -:10316000FFDF5E49012008700020087104208D6097 -:1031700048715948C860022020706078EFF790FFCE -:10318000002800D1FFDF70BD10B5504C207838B951 -:103190000220F0F71EFD18B90320F0F71AFD08B160 -:1031A000112010BD4E48EFF7BAFC6070202804D003 -:1031B000012020700020606110BD032010BD2DE9AA -:1031C000F041144600EB84070E4605463F1F00F011 -:1031D0004EFD4FF080521169484306EB8401091FF0 -:1031E000B14201D2012100E000211CB11269B4EB0F -:1031F000920F02D90920BDE8F0813A4A95420ED3D8 -:10320000AF420CD3854205D2874203D245EA06007D -:10321000800701D01020EEE7964200D309B10F20BD -:10322000E9E7314831490068884205D022463146F5 -:103230002846FFF7F9FE10E0FFF7A6FF0028DAD1D5 -:10324000224800218560C0E9036481704FF4A971B0 -:1032500004FB01F01830FFF77AFF0020CBE770B5D0 -:103260004FF08055044628691E49B1FBF0F08442B6 -:1032700001D20F2070BD00F0FAFCA04201D810204E -:1032800070BD194819490068884204D02869604314 -:1032900000F0DAFC0CE0FFF777FF0028F0D1296995 -:1032A0000A4861438160012181701148FFF74FFF97 -:1032B000002070BD00F024BF10B5044C6078EFF71B -:1032C00088FC00B9FFDF0020207010BDA0010020A5 -:1032D00004E5014000E40140105C0C00BC12002039 -:1032E0009F30020000600200B0000020BEBAFECA9B -:1032F0007C5E01004FF08050D0F83011062903D0D9 -:10330000D0F83011491C07D1D0F83411062905D363 -:10331000D0F83401401C01D00020704701207047D4 -:103320004FF08050D0F83011062905D1D0F8340183 -:10333000062801D30120704700207047002101704A -:10334000084670470146002008707047EFF310816F -:1033500001F0010172B60278012A01D0012200E0D9 -:1033600000220123037001B962B60AB10020704740 -:103370004FF400507047E9E7EFF3108111F0010FAF -:1033800072B64FF00002027000D162B600207047A2 -:10339000F2E700004C4909680160002070474A4983 -:1033A00008600020704701218A0720B1012804D05D -:1033B00042F204007047916700E0D1670020704737 -:1033C00042490120086042F20600704708B5042314 -:1033D0003E4A1907103230B1C1F80433106840F08A -:1033E000010010600BE0106820F001001060C1F8CF -:1033F00008330020C1F8080135480068009000201B -:1034000008BD011F0B2909D8304910310A6822F084 -:103410001E0242EA400008600020704742F20500A8 -:103420007047000100F18040C0F804190020704787 -:10343000000100F18040C0F8081900207047000129 -:1034400000F18040D0F80009086000207047012892 -:1034500001D9072070471F4A52F8200002680A432A -:10346000026000207047012801D907207047194ADF -:1034700052F8200002688A43026000207047012849 -:1034800001D907207047134A52F8200000680860ED -:1034900000207047020010494FF0000003D0012ABD -:1034A00001D0072070470A6070474FF0804100202C -:1034B000C1F808014FF0E020802180F800140121BC -:1034C000C0F80011704700000004004000050040F3 -:1034D00008010040C0490200780500406249634B82 -:1034E0000A6863499A42096801D1C1F31001016079 -:1034F000002070475C495D4B0A685D49091D9A428E -:1035000001D1C0F310000860002070475649574BA6 -:103510000A68574908319A4201D1C0F31000086087 -:103520000020704730B5504B504D1C6842F20803E4 -:10353000AC4202D0142802D203E0112801D318466D -:1035400030BDC3004B481844C0F81015C0F814250E -:10355000002030BD4449454B0A6842F209019A42B5 -:1035600002D0062802D203E0042801D3084670479F -:10357000404A012142F83010002070473A493B4B45 -:103580000A6842F209019A4202D0062802D203E0F8 -:10359000042801D308467047364A012102EBC000D7 -:1035A00041600020704770B52F4A304E314C15688D -:1035B00042F2090304EB8002B54204D0062804D28B -:1035C000C2F8001807E0042801D3184670BDC1F303 -:1035D0001000C2F80008002070BD70B5224A234ECA -:1035E000244C156842F2090304EB8002B54204D072 -:1035F000062804D2D2F8000807E0042801D31846B0 -:1036000070BDD2F80008C0F310000860002070BD43 -:10361000174910B50831184808601120154A0021D3 -:1036200002EBC003C3F81015C3F81415401C14288E -:10363000F6D3002006E0042804D302EB8003C3F88D -:10364000001807E002EB8003D3F80048C4F310042D -:10365000C3F80048401C0628EDD310BD04490648B5 -:103660000831086070470000B0000020BEBAFECAF2 -:1036700000F5014000F001400000FEFF7E4B1B689A -:1036800003B19847BFF34F8F7C4801687C4A01F42F -:10369000E06111430160BFF34F8FFEE710B5EFF318 -:1036A000108010F0010F72B601D0012400E0002458 -:1036B00000F0D9F850B1DDF72DFEEFF776F8F0F70E -:1036C00013FADFF7A2FB6F490020086004B962B665 -:1036D000002010BD70B50C460546EFF3108010F0C9 -:1036E000010F72B601D0012600E0002600F0BBF801 -:1036F00018B106B962B6082070BDDDF787FDDDF7A9 -:103700000DFE0246002043099B0003F1E02300F078 -:103710001F01D3F80031CB40D9071BD0202803D29A -:1037200022FA00F1C90722D141B2002906DA01F0DC -:103730000F0101F1E02191F8141D03E001F1E021F6 -:1037400091F800144909082911D281B101290ED03C -:1037500004290CD0401C6428D5D3DFF72DFB494940 -:10376000494808602046F0F7D9FD60B904E006B981 -:1037700062B641F2010070BD3F4804602DB1284699 -:10378000F0F719FE18B110242CE0404D19E028780C -:10379000022802D94FF4805424E0072400286878D6 -:1037A00001D0F8B908E0E8B120281BD8A878212872 -:1037B00018D8012816D001E0A87898B9E8780B2825 -:1037C00010D83349802081F8140DDDF7A7FD294674 -:1037D000F0F770F9EEF7A8FF00F07CFA2846DDF765 -:1037E0006BFD044606B962B61CB1FFF757FF2046D1 -:1037F00070BD002070BD10B5044600F034F800B173 -:1038000001202070002010BD224908600020704770 -:1038100070B50C4620490D681F49204E08310E60D6 -:10382000102807D011280CD012280FD0132811D03F -:10383000012013E0D4E90001FFF74CFF354620607A -:103840000DE0FFF72BFF0025206008E02068FFF760 -:10385000D2FF03E00F4920680860002020600E4876 -:10386000001D056070BD074807490068884201D106 -:103870000120704700207047B80100200CED00E0E7 -:103880000400FA05B0000020BEBAFECAC849020012 -:103890000BE000E0040000201005024001000001E0 -:1038A00000B5C44910F1080F08BFF82024D014DC7B -:1038B00010F1280F08BFD8201ED010F1140F08BF38 -:1038C000EC2019D010F1100F08BFF02014D010F127 -:1038D0000C0F08BFF4200FD00CE010F1040F08BF4C -:1038E000FC2009D0002818BF032805D0042804BFF5 -:1038F000086000BDFFDF00BD086000BD00B5AE4937 -:10390000012808BF032004D0022816BFFFDF0420CF -:1039100000BD086000BDA949002804BF086820F068 -:10392000010005D0012806BF086840F0010070477B -:103930000860704770B51E460546012924D0022A4A -:1039400004BF9F484FF47A710DD0012A04BF9D48EF -:103950004FF4C86107D0042A07BF9B4840F698017E -:103960009A4840F6E44144181846F1F744FE0444EE -:103970003046F1F75EFE20444FF47A7100F2712078 -:10398000B0FBF1F0281A70BD022A08BF4FF47A701C -:103990000AD0012A08BF4FF4C86005D0042A0CBF22 -:1039A00040F6980040F6E44049F608514418DBE739 -:1039B00070B514460546012908BF49F6CA660DD000 -:1039C000022B08BF824807D0012B08BF7D4803D0D7 -:1039D000042B0CBF7C487F4800F1FA061046F1F733 -:1039E00019FE012C08BF4FF47A710AD0022C08BFCF -:1039F0004FF4FA7105D0042C0CBF4FF4FA614FF468 -:103A0000FA51711A08444FF47A7100F28920B0FB20 -:103A1000F1F0281A801E70BD70B5144606460129C3 -:103A200030D0022B04BF66494FF47A700DD0012BC1 -:103A300004BF64494FF4C86007D0042B07BF624934 -:103A400040F69800614940F6E4400D181046F1F741 -:103A5000E1FD012C08BF4FF47A710AD0022C08BF97 -:103A60004FF4FA7105D0042C0CBF4FF4FA614FF4F7 -:103A7000FA51691A08444FF47A716438B0FBF1F0D6 -:103A8000301A70BD022B08BF4FF47A700AD0012B98 -:103A900008BF4FF4C86005D0042B0CBF40F6980057 -:103AA00040F6E44049F608514518CFE770B5164690 -:103AB0000446012908BF49F6CA650DD0022B08BF8C -:103AC000434807D0012B08BF3E4803D0042B0CBF4E -:103AD0003D48404800F1FA051046F1F78CFD0544D9 -:103AE0003046F1F7A6FD28444FF47A7100F2E14028 -:103AF000B0FBF1F0201A801E70BD2DE9F0410746A1 -:103B00001E460C4615461046082A16BF04284DF6D8 -:103B10008830F1F770FD07EB4701C1EBC71100EBEF -:103B2000C100012C08BF4FF47A710AD0022C08BFE3 -:103B30004FF4FA7105D0042C0CBF4FF4FA614FF426 -:103B4000FA5147182046F1F765FD381A4FF47A719B -:103B500000F60F60B0FBF1F42846F1F740FD204479 -:103B60003044401DBDE8F08170B5054614460E4650 -:103B70000846F1F740FD05EB4502C2EBC512C0EB6C -:103B8000C2053046F1F755FD2D1A2046082C16BF08 -:103B900004284DF68830F1F72EFD28444FF47A7151 -:103BA00000F6B730B0FBF1F52046F1F718FD2844D8 -:103BB000401D70BD0C15004010150040501600400F -:103BC00068360200A2240200D0FB010030D30100BD -:103BD00004360200C0D401002DE9FE430C468046A5 -:103BE000F9F7BAF9074698F80160204601A96A4634 -:103BF000ECF79BFC05000DD0012F02D00320BDE89F -:103C0000FE83204602AA0199ECF7B1FB0298B0F8B6 -:103C100003000AE0022F14D1042E12D3B8F80300D7 -:103C2000BDF80020011D914204D8001D80B2A919E1 -:103C3000814202D14FF00000E1E702D24FF00100D3 -:103C4000DDE74FF00200DAE70B4A022111600B4971 -:103C50000B68002BFCD0084B1B1D1860086800285F -:103C6000FCD00020106008680028FCD070474FF09E -:103C7000805040697047000004E5014000E40140C5 -:103C800002000B464FF00000014620D0012A04D06C -:103C9000022A04D0032A0DD103E0012002E0022011 -:103CA00015E00320072B05D2DFE803F00406080A1D -:103CB0000C0E100007207047012108E0022106E0E9 -:103CC000032104E0042102E0052100E00621EEF7D3 -:103CD00042BF0000F9480521817000210170417048 -:103CE0007047F7490A78012A05D0CA681044C860AD -:103CF0004038EFF768BC8A6810448860F8E700280D -:103D000019D00378EF49F04A13B1012B0ED011E01E -:103D10000379012B00D06BB943790BB1012B09D189 -:103D20008368643B8B4205D2C0680EE00379012BA7 -:103D300002D00BB10020704743790BB1012BF9D1B0 -:103D4000C368643B8B42F5D280689042F2D8012070 -:103D50007047DB4910B501220A700279A2B1002236 -:103D60000A71427992B104224A718268D34C52326C -:103D70008A60C0681434C8606060EEF749FFCF49BC -:103D800020600220887010BD0322E9E70322EBE7E0 -:103D900070B5044609B1012000E00320C84D0021A0 -:103DA0002970217901B100202871607968B104205F -:103DB000C24E6871A168F068EEF733FCA860E06855 -:103DC0005230E8600320B07070BD0320F0E72DE9A9 -:103DD000F04105460226EFF722FB006800B1FFDF45 -:103DE000B64C01273DB12878B0B1012805D0022892 -:103DF00010D0032813D027710CE06868C82807D3B7 -:103E0000EFF747FC20B16868FFF76BFF012603E07E -:103E1000002601E000F05CF93046BDE8F081207832 -:103E20000028F7D16868FFF76AFF0028E3D06868C8 -:103E3000017879B1A078042800D0FFDF01216868FB -:103E4000FFF7A6FF9E49E078EFF72AF90028E1D1B5 -:103E5000FFDFDFE7FFF77DFF6770DBE72DE9F04766 -:103E6000964C8846E178884200D0FFDFDFF84C921C -:103E700000250127924E09F11409B8F1080F75D2F7 -:103E8000DFE808F0040C28527A808D95A07803288A -:103E900002D0022800D0FFDFBDE8F087A078032819 -:103EA00002D0022800D0FFDF0420A0702571207806 -:103EB000002878D1FFF715FF3078012806D0B068C8 -:103EC000E06000F031F92061002060E0E078EEF77A -:103ED000E4FFF5E7A078032802D0022800D0FFDF36 -:103EE000207800286DD1A078032816D0EEF790FE38 -:103EF00001464F46D9F80000EFF798FB00280EDB8B -:103F0000796881420BDB081AF0606D49E078EFF7C1 -:103F1000C7F80028C0D1FFDFBEE7042028E0042056 -:103F2000EFF741FEA570B7E7A078032802D002287A -:103F300000D0FFDF207888BBA078032817D0EEF7E9 -:103F400067FE01464F46D9F80000EFF76FFB0028E7 -:103F5000E5DB79688142E2DB081AF0605849E078D5 -:103F6000EFF79EF8002897D1FFDF95E740E00520A6 -:103F7000EFF719FEA7708FE7A078042800D0FFDFC5 -:103F8000022004E0A078042800D0FFDF0120A1680F -:103F90008847FFF71CFF054630E004E011E0A078F9 -:103FA000042800D0FFDFBDE8F04700F091B8A0780A -:103FB000042804D0617809B1022800D0FFDF2078FE -:103FC00018B1BDE8F04700F08CB8207920B1062088 -:103FD000EFF7E9FD2571CDE7607838B13849E07831 -:103FE000EFF75EF800B9FFDF657055E70720BFE720 -:103FF000FFDF51E73DB1012D03D0FFDF022DF9D1E5 -:104000004AE70420C3E70320C1E770B5050004D0E8 -:104010002A4CA078052806D101E0102070BD0820A8 -:10402000EFF7D7FD08B1112070BD2848EEF777FDF6 -:10403000E070202803D00020A560A07070BD032090 -:1040400070BD1E4810B5017809B1112010BD8178EE -:10405000052906D0012906D029B1012101700020CF -:1040600010BD0F2010BD00F03CF8F8E770B5134C00 -:104070000546A07808B1012809D155B12846FFF7B7 -:104080003EFE40B1287840B1A078012809D00F2029 -:1040900070BD102070BD072070BD2846FFF759FE87 -:1040A00003E000212846FFF773FE0549E078EEF7AC -:1040B000F7FF00B9FFDF002070BD0000BC01002049 -:1040C000CC1200203D860100FF1FA1075D3E0200CB -:1040D0000A4810B5006900F01FF8BDE81040EEF77F -:1040E000A3BC064810B5C078EEF773FD00B9FFDF3A -:1040F0000820EFF758FDBDE81040EBE5BC010020BB -:1041000010B5134C2060201D016011481030026072 -:10411000001D0360002010BD0E490A6848F202131A -:104120009A4302430A6070470A4A116848F2021330 -:1041300001EA0300994311607047054B02465B4258 -:1041400010201344FC2B01D81160002070470000A0 -:1041500000060040C806024040EA010310B59B0774 -:104160000FD1042A0DD310C808C9121F9C42F8D0E1 -:1041700020BA19BA884201D9012010BD4FF0FF3092 -:1041800010BD1AB1D30703D0521C07E0002010BDA8 -:1041900010F8013B11F8014B1B1B07D110F8013B34 -:1041A00011F8014B1B1B01D1921EF1D1184610BD15 -:1041B000032A40F2308010F0030C00F0158011F853 -:1041C000013BBCF1020F624498BF11F801CB00F82B -:1041D000013B38BF11F8013BA2F1040298BF00F87F -:1041E00001CB38BF00F8013B11F0030300F025803C -:1041F000083AC0F0088051F8043B083A51F804CB63 -:10420000A0E80810F5E7121D5CBF51F8043B40F828 -:10421000043BAFF30080D20724BF11F8013B11F833 -:1042200001CB48BF11F8012B24BF00F8013B00F877 -:1042300001CB48BF00F8012B704710B5203AC0F001 -:104240000B80B1E81850203AA0E81850B1E8185097 -:10425000A0E81850BFF4F5AF5FEA027C24BFB1E8D4 -:104260001850A0E8185044BF18C918C0BDE8104045 -:104270005FEA827C24BF51F8043B40F8043B08BF4E -:104280007047D20728BF31F8023B48BF11F8012B15 -:1042900028BF20F8023B48BF00F8012B704702F00E -:1042A000FF0343EA032242EA024200F002B84FF061 -:1042B00000020429C0F0128010F0030C00F01B80F3 -:1042C000CCF1040CBCF1020F18BF00F8012BA8BF01 -:1042D00020F8022BA1EB0C0100F00DB85FEAC17CC5 -:1042E00024BF00F8012B00F8012B48BF00F8012B78 -:1042F00070474FF0000200B51346944696462039A9 -:1043000022BFA0E80C50A0E80C50B1F12001BFF48E -:10431000F7AF090728BFA0E80C5048BF0CC05DF8F4 -:1043200004EB890028BF40F8042B08BF704748BF42 -:1043300020F8022B11F0804F18BF00F8012B7047B6 -:10434000FEDF04207146084219D10699124A9142B3 -:1043500015DC069902394878DF2810D10878FE2844 -:1043600007D0FF280BD14FF001004FF000020B4B9C -:10437000184741F201000099019A084B1847084B71 -:10438000002B02D01B68DB6818474FF0FF307146E6 -:104390004FF00002014B1847006002007D3602001A -:1043A00004000020184819497047FFF7FBFFDCF7AD -:1043B00005FF00BD4FF4805015490968884203D1BC -:1043C000144A13605B68184700BD000020BFFDE77A -:1043D0004FF480500E490968884210D10E4B18687E -:1043E0004FF0FF318842F1D080F308884FF0202150 -:1043F000884204DD0948026803210A430260084834 -:10440000804708488047FFDFE0120020E0120020CC -:104410000000002004000020006002001409004099 -:10442000F5430100B543020004207146084202D062 -:10443000EFF3098101E0EFF3088188690238007821 -:10444000102813DB20280FDB2C280BDB0A4A12680C -:104450000A4B9A4203D1602804DB094A1047022024 -:1044600008607047074A1047074A1047074A126812 -:104470002C32126810470000B0000020BEBAFECAFD -:1044800021130000692E02001138020004000020F0 -:104490000D4B0E4908470E4B0C4908470D4B0B4975 -:1044A00008470D4B094908470C4B084908470C4B76 -:1044B000064908470B4B054908470B4B034908477A -:1044C0000A4B02490847000049BB00000D2F0000BD -:1044D0006D2C0000092B0000972A00000F2D000012 -:1044E0003D13000053280000C1BD0000C9110000A9 -:1044F00000210160017170470021016081807047D7 -:10450000002101604160017270470A684B680260D7 -:104510004360B1F808C0A0F808C070470A6802609C -:104520000B79037170470000B19500003B970000C4 -:1045300099980000BD980000F79800002B990000A2 -:104540005D9900008D990000039A00008996000093 -:10455000A7120000A712000075440000C14400002B -:10456000E5440000794500009546000057470000EB -:1045700089470000714800000349000057490000C6 -:104580003D4A00005D4A0000DF15000003160000F0 -:10459000331500008715000035160000C91600000D -:1045A0005B6000000B620000DF650000F566000044 -:1045B0007F670000FD6700006168000085690000FA -:1045C000556A0000C16A00007F4A0000854A000069 -:1045D0008F4A000085410000F74A00005941000061 -:1045E0007B4C0000B34C0000294D00000F4E000032 -:1045F000254E0000A7120000A7120000A71200001D -:10460000A7120000A7120000A7120000A7120000C6 -:10461000A7120000BF24000045250000612500000E -:104620007D2500000B270000A7250000B125000014 -:10463000F325000015260000F126000033270000B6 -:10464000A7120000A71200005F8300007F83000014 -:1046500081830000C5830000F3830000E184000033 -:104660006F85000083850000D1850000C1860000B1 -:10467000678800009189000073730000A989000019 -:10468000A7120000A7120000C9B4000033B6000052 -:1046900087B60000F3B60000A3B7000001000000D9 -:1046A00000000000100110013A0200001A02000090 -:1046B000F3900000E1900000FFFFFFFF0000FFFF0C -:1046C000C5AC0000253D000065200000BD73000062 -:1046D000598E0000000000000000020000000000F1 -:1046E00000020000000000000001000000000000C7 -:1046F0000B810000EB800000598100004124000084 -:1047000003240000232400002FA800005BA8000061 -:1047100063AA0000515900007981000000000000E8 -:10472000A98100008F2400000000000000000000AC -:104730000000000045A9000000000000E55900004D -:10474000000000004808000048080000D3560000A0 -:10475000D35600005144000071AB00003F760000CA -:10476000771F0000E31D02004F9401001157000065 -:104770001157000073440000D3AB0000C376000063 -:10478000E91F0000111E0200639401007001700116 -:10479000400038005C0024004801000200000300D3 -:1047A000656C746200000000000000000000000062 -:1047B0000000000087000000000000000000000072 -:1047C00000000000BE83605ADB0B376038A5F5AAF5 -:1047D0009183886C010000007911010041200100E3 -:1047E00000000001020603040500000007000000AD -:1047F00000000000060000000A0000003200000077 -:1048000073000000B4000000DD860100DB0C020034 -:10481000CB6C010065AE010059F0010065AE0100EE -:10482000616E01001DB00100E3E701001DB0010051 -:10483000476B0100B1AF010087EF0100B1AF01008C -:10484000C76C010079AE0100E9DF010079AE01001B -:104850005972010091B20100EFF0010091B2010024 -:104860000300000001555555D6BE898E0000C706CD -:10487000C70CC71200006B030F06B3080000B70493 -:10488000A708970CF401FA00960064004B00320070 -:104890001E0014000A000500020001000041000093 -:1048A00000000000AAAED7AB154120100C0802177B -:1048B0000D0101020909010106020918180301018D -:1048C0000909030305000000FE000000FE000000CF -:1048D000FE555555252627D6BE898E00F401FA00CF -:1048E000960064004B0032001E0014000A00050010 -:1048F000020001002541000000000000DD3402003C -:10490000F53402000D350200253502005535020050 -:104910007D350200A7350200DB3502005F32020060 -:10492000BF310200B53202003B4102003D330200BC -:104930004D330200793302009F3C0100A73C010087 -:10494000B93C0100A7330200C133020095330200D5 -:104950009F330200CD33020003340200B52E020063 -:1049600023340200313402003F3402004F3402008D -:10497000673402007F34020095340200B52E020035 -:104980000000000077B90000CDB90000E3B90000D5 -:10499000813C0200E12E0200A72F02000B40020022 -:1049A000434002006D400200493B0100C93E010046 -:1049B000B52E0200B52E0200B52E0200B52E020063 -:1049C0001C0500402005004000100200EC490200D8 -:1049D00008000020D001000044110000244A020019 -:1049E000D801002008110000A0110000011813C810 -:1049F000140250201A0102227C2720FB349B5F8086 -:104A00001280021A10138B091B2048041ACE0401CD -:104A1000200B50A40AAC01300912CB637F010B6854 -:044A2000CC10A00016 -:00000001FF diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json deleted file mode 100644 index b6a26ff8c5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S132_OTA/mbed_lib.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "softdevice", - "macros": [ - "SOFTDEVICE_PRESENT=1", - "S132", - "BLE_STACK_SUPPORT_REQD", - "NRF_SDH_CLOCK_LF_XTAL_ACCURACY=7", - "NRF_SD_BLE_API_VERSION=5", - "NRF_SDH_ENABLED=1", - "NRF_SDH_BLE_ENABLED=1", - "PEER_MANAGER_ENABLED=1", - "NRF_SDH_BLE_GATT_MAX_MTU_SIZE=23", - "NRF_SDH_BLE_OBSERVER_PRIO_LEVELS=4", - "NRF_SDH_BLE_GAP_EVENT_LENGTH=3", - "BLE_ADV_BLE_OBSERVER_PRIO=1", - "BLE_CONN_STATE_BLE_OBSERVER_PRIO=0", - "BLE_CONN_PARAMS_BLE_OBSERVER_PRIO=1", - "NRF_BLE_GATT_BLE_OBSERVER_PRIO=1", - "NRF_SDH_DISPATCH_MODEL=2", - "NRF_SDH_SOC_ENABLED=1", - "NRF_SDH_STACK_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_STATE_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_SOC_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_REQ_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", - "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", - "FDS_BACKEND=2", - "SWI_DISABLE1", - "SWI_DISABLE2", - "SWI_DISABLE3", - "SWI_DISABLE4", - "SWI_DISABLE5" - ], - "target_overrides": { - "*": { - "target.features_add": ["BLE"], - "target.bootloader_img": "hex/s132_nrf52_6.0.0_softdevice.hex" - } - } -} From 8ddef46e906096a449c22c39c0de02230055b2e5 Mon Sep 17 00:00:00 2001 From: Harrison Mutai Date: Tue, 15 Dec 2020 11:48:39 +0000 Subject: [PATCH 3/4] Remove unsupported S140 SoftDevice build support (MBR,OTA,FULL) --- .../CMakeLists.txt | 9 - .../s140_nrf52_6.0.0_licence-agreement.txt | 35 - .../s140_nrf52_6.0.0_migration-document.pdf | Bin 71009 -> 0 bytes .../doc/s140_nrf52_6.0.0_release-notes.pdf | Bin 64894 -> 0 bytes .../headers/ble_err.h | 93 - .../headers/ble_gap.h | 2669 ----- .../headers/ble_gatt.h | 228 - .../headers/ble_gattc.h | 715 -- .../headers/ble_gatts.h | 845 -- .../headers/ble_hci.h | 135 - .../headers/ble_l2cap.h | 506 - .../headers/ble_ranges.h | 156 - .../headers/ble_types.h | 215 - .../headers/nrf52/nrf_mbr.h | 242 - .../headers/nrf_ble.h | 622 -- .../headers/nrf_error.h | 90 - .../headers/nrf_error_sdm.h | 70 - .../headers/nrf_error_soc.h | 85 - .../headers/nrf_nvic.h | 487 - .../headers/nrf_sd_def.h | 59 - .../headers/nrf_sdm.h | 358 - .../headers/nrf_soc.h | 1036 -- .../headers/nrf_svc.h | 90 - .../s140_nrf52_6.0.0_licence-agreement.txt | 35 - .../hex/s140_nrf52_6.0.0_softdevice.hex | 9443 ----------------- .../TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json | 38 - .../TARGET_SOFTDEVICE_S140_MBR/CMakeLists.txt | 18 - .../headers/nrf_mbr.h | 242 - .../headers/nrf_svc.h | 90 - .../hex/mbr_nrf52_2.3.0_licence-agreement.txt | 35 - .../hex/mbr_nrf52_2.3.0_mbr.hex | 165 - .../libraries/fstorage/nrf_fstorage_nvmc.c | 217 - .../libraries/fstorage/nrf_fstorage_nvmc.h | 75 - .../TARGET_SOFTDEVICE_S140_MBR/mbed_lib.json | 8 - .../nrf_soc_nosd/nrf_error.h | 95 - .../nrf_soc_nosd/nrf_nvic.c | 123 - .../nrf_soc_nosd/nrf_nvic.h | 166 - .../nrf_soc_nosd/nrf_sdm.h | 56 - .../nrf_soc_nosd/nrf_soc.c | 48 - .../nrf_soc_nosd/nrf_soc.h | 80 - .../TARGET_SOFTDEVICE_S140_OTA/CMakeLists.txt | 9 - .../s140_nrf52_6.0.0_licence-agreement.txt | 35 - .../s140_nrf52_6.0.0_migration-document.pdf | Bin 71009 -> 0 bytes .../doc/s140_nrf52_6.0.0_release-notes.pdf | Bin 64894 -> 0 bytes .../headers/ble_err.h | 93 - .../headers/ble_gap.h | 2669 ----- .../headers/ble_gatt.h | 228 - .../headers/ble_gattc.h | 715 -- .../headers/ble_gatts.h | 845 -- .../headers/ble_hci.h | 135 - .../headers/ble_l2cap.h | 506 - .../headers/ble_ranges.h | 156 - .../headers/ble_types.h | 215 - .../headers/nrf52/nrf_mbr.h | 242 - .../headers/nrf_ble.h | 622 -- .../headers/nrf_error.h | 90 - .../headers/nrf_error_sdm.h | 70 - .../headers/nrf_error_soc.h | 85 - .../headers/nrf_nvic.h | 486 - .../headers/nrf_sd_def.h | 59 - .../headers/nrf_sdm.h | 358 - .../headers/nrf_soc.h | 1036 -- .../headers/nrf_svc.h | 90 - .../s140_nrf52_6.0.0_licence-agreement.txt | 35 - .../hex/s140_nrf52_6.0.0_softdevice.hex | 9281 ---------------- .../TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json | 36 - 66 files changed, 37775 deletions(-) delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_migration-document.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_release-notes.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_err.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatt.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gattc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatts.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_hci.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_l2cap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_ranges.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_types.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf52/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_ble.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sd_def.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_softdevice.hex delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_mbr.hex delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/mbed_lib.json delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_migration-document.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_release-notes.pdf delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_err.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatt.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gattc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatts.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_hci.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_l2cap.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_ranges.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_types.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf52/nrf_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_ble.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_nvic.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sd_def.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sdm.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_soc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_svc.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_licence-agreement.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_softdevice.hex delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/CMakeLists.txt deleted file mode 100644 index 9125e60859..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./headers/nrf52 -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_migration-document.pdf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/doc/s140_nrf52_6.0.0_migration-document.pdf deleted file mode 100644 index 1379ecd581fe350004ea88531838f769efc8ef80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71009 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 diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_err.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_err.h deleted file mode 100644 index 1b4820dc3d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_err.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ -#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ -#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_.h or ble_error_.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif - - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gap.h deleted file mode 100644 index 6e6cae2754..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gap.h +++ /dev/null @@ -1,2669 +0,0 @@ -/* - * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ - SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ - SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ - SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ - SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ - SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ - SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ - SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ - SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ - SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ - SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ - SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ - SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ - SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ - SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ - SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ - SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ - SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ - SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ -}; - -/**@brief GAP Event IDs. - * IDs that uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, - BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ - BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ - BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ - BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ - BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ - BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ - BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ - BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ - BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ - BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ - BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ - BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ - BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ - BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ - BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ - BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ - BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ -}; - -/**@brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ - BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ - BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ - BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ - BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ -}; - -/**@brief GAP Configuration IDs. - * - * IDs that uniquely identify a GAP configuration. - */ -enum BLE_GAP_CFGS -{ - BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ - BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ -}; - -/**@brief GAP TX Power roles. - */ -enum BLE_GAP_TX_POWER_ROLES -{ - BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ - BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ - BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ -}; - -/** @} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ -#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ -#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. - This type of advertising is called anonymous. */ -/**@} */ - - -/**@brief The default interval in seconds at which a private address is refreshed. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ - - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN (6) - -/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes - * @{ */ -#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, - and will not accept a peer using identity address as sender address when - the peer IRK is exchanged, non-zero and added to the identity list. */ -/**@} */ - -/** @brief Invalid power level. */ -#define BLE_GAP_POWER_LEVEL_INVALID 127 - -/** @brief Advertising set handle not set. */ -#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) - -/** @brief The default number of advertising sets. */ -#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) - -/** @brief The maximum number of advertising sets supported by this SoftDevice. */ -#define BLE_GAP_ADV_SET_COUNT_MAX (1) - -/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. - * @{ */ -#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. */ -/**@}. */ - -/** @brief Set ID not available in advertising report. */ -#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF - -/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons - * @{ */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ -/**@} */ - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ -#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ -#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. - @note Support for values above @ref BLE_GAP_ADV_INTERVAL_MAX - is experimental. Values above 0xFFFFFF, i.e 10,485.759375 s - are not supported. */ - /**@} */ - - -/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min - * @{ */ -#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min - * @{ */ -#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min - * @{ */ -#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ -#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ - /** @} */ - -/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size - * - * Scan buffers are used for storing advertising data received from an advertiser. - * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. - * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. - * @{ */ -#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an - extended advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an - extended advertising set. - @note Extended scanning is only - supported as an experimental - feature in this SoftDevice. - The scanner will only receive - advertising data up to 31 bytes. */ -/** @} */ - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * - * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. - * - * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. - * Note that some of the advertising types do not support advertising data. Non-scannable types do not support - * scan response data. - * - * @{ */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising - events. Advertising interval is less that 3.75 ms. - Use this type for fast reconnections. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising - events. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status - * @{ */ -#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. */ -/**@} */ - -/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies - * @{ */ -#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets - not addressed to this device. */ -#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed - packets not addressed to this device. */ -#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. - For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - - -/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types - * @{ */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@defgroup BLE_GAP_DEVNAME GAP device name defines. - * @{ */ -#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -/**@} */ - - -/**@brief Disable RSSI events for connections */ -#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF - -/**@defgroup BLE_GAP_PHYS GAP PHYs - * @{ */ -#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ -#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ -#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ -#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ -#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ - -/**@brief Supported PHYs in connections, for scanning, and for advertising. */ -#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS | BLE_GAP_PHY_CODED) /**< All PHYs are supported. - @note Coded PHY is only supported - as an experimental feature - in this SoftDevice. */ - -/**@} */ - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Random Number Length. */ -#define BLE_GAP_SEC_RAND_LEN 8 - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -#define BLE_GAP_LESC_P256_PK_LEN 64 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -#define BLE_GAP_LESC_DHKEY_LEN 32 - - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - - -/**@brief Maximum amount of addresses in the whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - - -/**@brief Maximum amount of identities in the device identities list. */ -#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) - - -/**@brief Default connection count for a configuration. */ -#define BLE_GAP_CONN_COUNT_DEFAULT (1) - - -/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. - * @{ */ -#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ -#define BLE_GAP_EVENT_LENGTH_CODED_PHY_MIN (6) /**< The shortest event length in 1.25 ms units supporting LE Coded PHY. */ -#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. - * @{ */ -#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ - -/**@} */ - -/**@brief Automatic data length parameter. */ -#define BLE_GAP_DATA_LENGTH_AUTO 0 - -/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. - * @{ */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ -/**@} */ - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@brief The total number of channels in Bluetooth Low Energy. */ -#define BLE_GAP_CHANNEL_COUNT (40) - -/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines - * @{ */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ - /**@} */ - -/** @} */ - - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Advertising event properties. */ -typedef struct -{ - uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ - uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. - @note Anonymous advertising is only available for - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ - uint8_t include_tx_power : 1; /**< Include TxPower set by @ref sd_ble_gap_tx_power_set in the extended header - of the advertising PDU. - @note TxPower can only be added to the extended header when @ref type is an extended advertising type. */ -} ble_gap_adv_properties_t; - - -/**@brief Advertising report type. */ -typedef struct -{ - uint16_t connectable : 1; /**< Connectable advertising event type. */ - uint16_t scannable : 1; /**< Scannable advertising event type. */ - uint16_t directed : 1; /**< Directed advertising event type. */ - uint16_t scan_response : 1; /**< Received a scan response. */ - uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ - uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ - uint16_t reserved : 9; /**< Reserved for future use. */ -} ble_gap_adv_report_type_t; - -/**@brief Advertising Auxiliary Pointer. */ -typedef struct -{ - uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ - uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ -} ble_gap_aux_pointer_t; - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. - Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ - uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. - addr is not used if addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - * - * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: - * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval - * that corresponds to the following Bluetooth Spec requirement: - * The Supervision_Timeout in milliseconds shall be larger than - * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP connection security modes. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Channel mask (40 bits). - * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, - * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents - * channel index 39. If a bit is set to 1, the channel is not used. - */ -typedef uint8_t ble_gap_ch_mask_t[5]; - - -/**@brief GAP advertising parameters. */ -typedef struct -{ - ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ - ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. - @note ble_gap_addr_t::addr_type cannot be - @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. - - When privacy is enabled and the local device uses - @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, - the device identity list is searched for a matching entry. If - the local IRK for that device identity is set, the local IRK - for that device will be used to generate the advertiser address - field in the advertising packet. - - If @ref ble_gap_adv_properties_t::type is directed, this must be - set to the targeted scanner or initiator. If the peer address is - in the device identity list, the peer IRK for that device will be - used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE - target addresses used in the advertising event PDUs. */ - uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE - advertising, this parameter is ignored. */ - uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, - an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - @sa BLE_GAP_ADV_TIMEOUT_VALUES. */ - uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling - advertising. Setting the value to 0 disables the limitation. When - the count of advertising events specified by this parameter - (if not 0) is reached, advertising will be automatically stopped - and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, - this parameter is ignored. - @note Setting max_adv_evts to a values not equal to 0 is only supported - as an experimental feature in this SoftDevice. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be used. - Masking away secondary advertising channels is not supported. */ - uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets - are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS - will be used. - Valid values are @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_CODED. - @note The primary_phy shall indicate @ref BLE_GAP_PHY_1MBPS if - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets - are transmitted. - If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. - Valid values are - @ref BLE_GAP_PHY_1MBPS, @ref BLE_GAP_PHY_2MBPS, and @ref BLE_GAP_PHY_CODED. - If @ref ble_gap_adv_properties_t::type is an extended advertising type - and connectable, this is the PHY that will be used to establish a - connection and send AUX_ADV_IND packets on. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other - advertising sets transmitted by this and other devices. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a - scan request is received and the scanner address is allowed - by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is a non-scannable - advertising type. */ -} ble_gap_adv_params_t; - - -/**@brief GAP advertising data buffers. - * - * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and - * shall never be modified while advertising. The data shall be kept alive until either: - * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding - * advertising handle. - * - Advertising is stopped. - * - Advertising data is changed. - * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ -typedef struct -{ - ble_data_t adv_data; /**< Advertising data. - @note - Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type - that is allowed to contain advertising data. */ - ble_data_t scan_rsp_data; /**< Scan response data. - @note - Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type - that is scannable. */ -} ble_gap_adv_data_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. - If set to 0, the scanner will not receive advertising packets - on secondary advertising channels, and will not be able - to receive long advertising PDUs. - @note Extended scanning is only supported as an experimental feature in this - SoftDevice. */ - uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have - @ref ble_gap_adv_report_type_t::status set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. - This parameter is ignored when used with @ref sd_ble_gap_connect - @note This may be used to abort receiving more packets from an extended - advertising event, and is only available for extended - scanning, see @ref sd_ble_gap_scan_start. - @note This feature is not supported by this SoftDevice. */ - uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. - This parameter is ignored when used with @ref sd_ble_gap_connect. */ - uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. - @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and - @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with - @ref sd_ble_gap_connect */ - uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, - scan_phys will default to @ref BLE_GAP_PHY_1MBPS. - - If @ref ble_gap_scan_params_t::extended is set to 0, the only - supported PHY is @ref BLE_GAP_PHY_1MBPS. - - When used with @ref sd_ble_gap_scan_start, - the bitfield indicates the PHYs the scanner will use for scanning - on primary advertising channels. The scanner will accept - @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. - - When used with @ref sd_ble_gap_connect, the - bitfield indicates the PHYs on where a connection may be initiated. - If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, - the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. - If scan_phys also contains @ref BLE_GAP_PHY_CODED, the primary scan - PHY will also contain @ref BLE_GAP_PHY_CODED. If the only scan PHY is - @ref BLE_GAP_PHY_CODED, the primary scan PHY is - @ref BLE_GAP_PHY_CODED only. */ - uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ - uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. */ - uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be - set to 0. - Masking away secondary channels is not supported. */ -} ble_gap_scan_params_t; - - -/**@brief Privacy. - * - * The privacy feature provides a way for the device to avoid being tracked over a period of time. - * The privacy feature, when enabled, hides the local device identity and replaces it with a private address - * that is automatically refreshed at a specified interval. - * - * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). - * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, - * and devices can establish connections without revealing their real identities. - * - * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) - * are supported. - * - * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all - * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. - * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. - */ -typedef struct -{ - uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ - uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ - uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ - ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. - When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. - By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -} ble_gap_privacy_params_t; - - -/**@brief PHY preferences for TX and RX - * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. - * @code - * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * @endcode - * - */ -typedef struct -{ - uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ -} ble_gap_phys_t; - -/** @brief Keys that can be exchanged during a bonding procedure. */ -typedef struct -{ - uint8_t enc : 1; /**< Long Term Key and Master Identification. */ - uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ - uint8_t sign : 1; /**< Connection Signature Resolving Key. */ - uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -} ble_gap_sec_kdist_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ - uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ - uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< The OOB data flag. - - In LE legacy pairing, this flag is set if a device has out of band authentication data. - The OOB method is used if both of the devices have out of band authentication data. - - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. - The OOB method is used if at least one device has the peer device's OOB data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ - ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ - ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 6; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP LE Secure Connections P-256 Public Key. */ -typedef struct -{ - uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -} ble_gap_lesc_p256_pk_t; - - -/**@brief GAP LE Secure Connections DHKey. */ -typedef struct -{ - uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -} ble_gap_lesc_dhkey_t; - - -/**@brief GAP LE Secure Connections OOB data. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address of the device. */ - uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ - uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -} ble_gap_lesc_oob_data_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ - uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ -} ble_gap_evt_connected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -typedef struct -{ - uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ -} ble_gap_evt_phy_update_request_t; - -/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ -typedef struct -{ - uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ - uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ -} ble_gap_evt_phy_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ - uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply - with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or - @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -} ble_gap_evt_passkey_display_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -typedef struct -{ - uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -} ble_gap_evt_key_pressed_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -typedef struct -{ - ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory - inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ - uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -} ble_gap_evt_lesc_dhkey_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ - uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Encryption Key. */ -typedef struct -{ - ble_gap_enc_info_t enc_info; /**< Encryption Information. */ - ble_gap_master_id_t master_id; /**< Master Identification. */ -} ble_gap_enc_key_t; - - -/**@brief Identity Key. */ -typedef struct -{ - ble_gap_irk_t id_info; /**< Identity Resolving Key. */ - ble_gap_addr_t id_addr_info; /**< Identity Address. */ -} ble_gap_id_key_t; - - -/**@brief Security Keys. */ -typedef struct -{ - ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ - ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ - ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ - ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined - in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -} ble_gap_sec_keys_t; - - -/**@brief Security key set for both local and peer keys. */ -typedef struct -{ - ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ - ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -} ble_gap_sec_keyset_t; - - -/**@brief Data Length Update Procedure parameters. */ -typedef struct -{ - uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ - uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ -} ble_gap_data_length_params_t; - - -/**@brief Data Length Update Procedure local limitation. */ -typedef struct -{ - uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ - uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ - uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ -} ble_gap_data_length_limitation_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - uint8_t bonded : 1; /**< Procedure resulted in a bond. */ - uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ - ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ - union - { - ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released - scan buffer is contained in this field. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. - @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ - uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ -} ble_gap_evt_rssi_changed_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ -typedef struct -{ - uint8_t reason; /**< Reason for why the advertising set terminated. See - @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ - uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, - this field indicates the number of completed advertising events. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. */ -} ble_gap_evt_adv_set_terminated_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. - * - * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * not all fields in the advertising report may be available. - * - * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. - */ -typedef struct -{ - ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the - peer's identity address. */ - ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if - @ref ble_gap_adv_report_type_t::directed is set to 1. If the - SoftDevice was able to resolve the address, - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr - contains the local identity address. If the target address of the - advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, - and the SoftDevice was unable to resolve it, the application may try - to resolve this address to find out if the advertising event was - directed to us. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received on. - See @ref BLE_GAP_PHYS. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received on. - See @ref BLE_GAP_PHYS. This field is to 0 if no packets where received on - a secondary advertising channel. */ - int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. - This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the - last received packet did not contain the Tx Power field. - @note TX Power is only included in extended advertising packets. */ - int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. - @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ - uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ - uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present - if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID - is not present if @ref ble_gap_evt_adv_report_t::set_id is set to - @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - ble_data_t data; /**< Received advertising or scan response data. If - @ref ble_gap_adv_report_type_t::status is not set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided - in @ref sd_ble_gap_scan_start is now released. */ - ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising - event. @note This field is only set if @ref ble_gap_adv_report_type_t::status - is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ -} ble_gap_evt_adv_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection requested. */ - uint8_t lesc : 1; /**< LE Secure Connections requested. */ - uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -} ble_gap_evt_sec_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -typedef struct -{ - uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ - int8_t rssi; /**< Received Signal Strength Indication in dBm. - @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ -} ble_gap_evt_scan_req_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ -} ble_gap_evt_data_length_update_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ -typedef struct -{ - ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ -} ble_gap_evt_data_length_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ -typedef struct -{ - int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy - channels, in dBm, indexed by Channel Index. - If no measurement is available for the given channel, channel_energy is set to - @ref BLE_GAP_POWER_LEVEL_INVALID. */ -} ble_gap_evt_qos_channel_survey_report_t; - -/**@brief GAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ - ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ - ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ - ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ - ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ - ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ - ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ - ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ - ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ - ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_t; - - -/** - * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. - * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. - */ -typedef struct -{ - uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. - The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ - uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. - The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. - The event length and the connection interval are the primary parameters - for setting the throughput of a connection. - See the SoftDevice Specification for details on throughput. */ -} ble_gap_conn_cfg_t; - - -/** - * @brief Configuration of maximum concurrent connections in the different connected roles, set with - * @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too - * large. The maximum supported sum of concurrent connections is - * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. - * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. - * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum - * supported advertising handles is - * @ref BLE_GAP_ADV_SET_COUNT_MAX. - */ -typedef struct -{ - uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ - uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ - uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ - uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ - uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the - application using @ref sd_ble_gap_qos_channel_survey_start. */ -} ble_gap_cfg_role_count_t; - - -/** - * @brief Device name and its properties, set with @ref sd_ble_cfg_set. - * - * @note If the device name is not configured, the default device name will be - * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be - * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name - * will have no write access. - * - * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, - * the attribute table size must be increased to have room for the longer device name (see - * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). - * - * @note If vloc is @ref BLE_GATTS_VLOC_STACK : - * - p_value must point to non-volatile memory (flash) or be NULL. - * - If p_value is NULL, the device name will initially be empty. - * - * @note If vloc is @ref BLE_GATTS_VLOC_USER : - * - p_value cannot be NULL. - * - If the device name is writable, p_value must point to volatile memory (RAM). - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Invalid device name location (vloc). - * - Invalid device name security mode. - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). - * - The device name length is too long for the given Attribute Table. - * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. - */ -typedef struct -{ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ - uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ - uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -} ble_gap_cfg_device_name_t; - - -/**@brief Configuration structure for GAP configurations. */ -typedef union -{ - ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ - ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ -} ble_gap_cfg_t; - - -/**@brief Channel Map option. - * - * @details Used with @ref sd_ble_opt_get to get the current channel map - * or @ref sd_ble_opt_set to set a new channel map. When setting the - * channel map, it applies to all current and future connections. When getting the - * current channel map, it applies to a single connection and the connection handle - * must be supplied. - * - * @note Setting the channel map may take some time, depending on connection parameters. - * The time taken may be different for each connection and the get operation will - * return the previous channel map until the new one has taken effect. - * - * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. - * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. - * - * @retval ::NRF_SUCCESS Get or set successful. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Less then two bits in @ref ch_map are set. - * - Bits for primary advertising channels (37-39) are set. - * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. - * - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ - uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -} ble_gap_opt_ch_map_t; - - -/**@brief Local connection latency option. - * - * @details Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * @details Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is disabled by default, and needs to be enabled for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - -/**@brief Disable slave latency - * - * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection - * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the - * peripheral will ignore the slave_latency set by the central. - * - * @note Shall only be called on peripheral links. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ -} ble_gap_opt_slave_latency_disable_t; - -/**@brief Passkey Option. - * - * @details Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication - * instead of generating a random one. - * - * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Compatibility mode 1 option. - * - * @details This can be used with @ref sd_ble_opt_set to enable and disable - * compatibility mode 1. Compatibility mode 1 is disabled by default. - * - * @note Compatibility mode 1 enables interoperability with devices that do not support a value of - * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a - * limited set of legacy peripheral devices from another vendor. Enabling this compatibility - * mode will only have an effect if the local device will act as a central device and - * initiate a connection to a peripheral device. In that case it may lead to the connection - * creation taking up to one connection interval longer to complete for all connections. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable compatibility mode 1.*/ -} ble_gap_opt_compat_mode_1_t; - - -/**@brief Authenticated payload timeout option. - * - * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other - * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. - * - * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated - * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted - * link. - * - * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance - * to reset the timer. In addition the stack will try to prioritize running of LE ping over other - * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects - * on other activities, it is recommended to use high timeout values. - * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ -} ble_gap_opt_auth_payload_timeout_t; - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ - ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ - ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ - ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ - ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set the local Bluetooth identity address. - * - * The local Bluetooth identity address is the address that identifies this device to other peers. - * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @note The identity address cannot be changed while advertising, scanning or creating a connection. - * - * @note This address will be distributed to the peer during bonding. - * If the address changes, the address stored in the peer device will not be valid and the ability to - * reconnect using the old address will be lost. - * - * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being - * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged - * for the lifetime of each IC. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in] p_addr Pointer to address structure. - * - * @retval ::NRF_SUCCESS Address successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, - * scanning or creating a connection. - */ -SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); - - -/**@brief Get local Bluetooth identity address. - * - * @note This will always return the identity address irrespective of the privacy settings, - * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @param[out] p_addr Pointer to address structure to be filled in. - * - * @retval ::NRF_SUCCESS Address successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); - - -/**@brief Set the active whitelist in the SoftDevice. - * - * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. - * The whitelist cannot be set if a BLE role is using the whitelist. - * - * @note If an address is resolved using the information in the device identity list, then the whitelist - * filter policy applies to the peer identity address and not the resolvable address sent on air. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @endmscs - * - * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. - * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. - * - * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. - * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when - * pp_wl_addrs is not NULL. - */ -SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); - - -/**@brief Set device identity list. - * - * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. - * The device identity list cannot be set if a BLE role is using the list. - * - * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. - * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. - * To fill in the list with the currently set device IRK for all peers, set to NULL. - * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. - * This code may be returned if the local IRK list also has an invalid entry. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can - * only return when pp_id_keys is not NULL. - */ -SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); - - -/**@brief Set privacy settings. - * - * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. - * - * @param[in] p_privacy_params Privacy settings. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. - * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning - * or creating a connection. - */ -SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); - - -/**@brief Get privacy settings. - * - * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. - * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. - * - * @param[in,out] p_privacy_params Privacy settings. - * - * @retval ::NRF_SUCCESS Privacy settings read. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - */ -SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); - - -/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. - * - * @note The format of the advertising data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertising data and scan response data. - * - * @note In order to update advertising data while advertising, new advertising buffers must be provided. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure - * a new advertising set. On success, a new handle is then returned through the pointer. - * Provide a pointer to an existing advertising handle to configure an existing advertising set. - * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. - * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, - * this parameter must be NULL. See @ref ble_gap_adv_params_t. - * - * @retval ::NRF_SUCCESS Advertising set successfully configured. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, - * see @ref sd_ble_gap_whitelist_set. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * - It is invalid to provide non-NULL advertising set parameters while advertising. - * - It is invalid to provide the same data buffers while advertising. To update - * advertising data, provide new advertising buffers. - * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to - * configure a new advertising handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification - * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an - * existing advertising handle instead. - * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - */ -SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @note Only one advertiser may be active at any time. - * - * @events - * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} - * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} - * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable - * advertising, this is ignored. - * - * @retval ::NRF_SUCCESS The BLE stack has started advertising. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. adv_handle is not configured or already advertising. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * @retval ::NRF_ERROR_RESOURCES Either: - * - adv_handle is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * - Not enough BLE role slots available. - Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. - * - p_adv_params is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle The advertising handle that should stop advertising. - * - * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. - * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); - - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CPU_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected - * - * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a @ref BLE_GAP_EVT_DISCONNECTED event. - * - * @events - * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CONN_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). - * - * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for - * possible roles. - * @param[in] handle The handle parameter is interpreted depending on role: - * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. - * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, - * will use the specified transmit power, and include it in the advertising packet headers if - * @ref ble_gap_adv_properties_t::include_tx_power set. - * - For all other roles handle is ignored. - * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). - * - * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm. - * @note The initiator will have the same transmit power as the scanner. - * @note When a connection is created it will inherit the transmit power from the initiator or - * advertiser leading to the connection. - * - * @retval ::NRF_SUCCESS Successfully changed the transmit power. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); - - -/**@brief Set GAP device name. - * - * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), - * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. - * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @retval ::NRF_SUCCESS GAP device name retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); - - -/**@brief Initiate the GAP Authentication procedure. - * - * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), - * otherwise in the peripheral role, an SMP Security Request will be sent. - * - * @events - * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} - * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} - * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} - * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} - * @event{@ref BLE_GAP_EVT_KEY_PRESSED} - * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} - * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} - * @event{@ref BLE_GAP_EVT_AUTH_STATUS} - * @event{@ref BLE_GAP_EVT_TIMEOUT} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. - * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. - * In the central role, this pointer may be NULL to reject a Security Request. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have - * already been provided during a previous call to @ref sd_ble_gap_authenticate. - * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure - * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application - * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. - * Note that the SoftDevice expects the application to provide memory for storing the - * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key - * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the - * @ref BLE_GAP_EVT_AUTH_STATUS event. - * - * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); - - -/**@brief Reply with an authentication key. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) - * or NULL when confirming LE Secure Connections Numeric Comparison. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. - * - * @retval ::NRF_SUCCESS Authentication key successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); - - -/**@brief Reply with an LE Secure connections DHKey. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dhkey LE Secure Connections DHKey. - * - * @retval ::NRF_SUCCESS DHKey successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); - - -/**@brief Notify the peer of a local keypress. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. - * - * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. - */ -SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); - - -/**@brief Generate a set of OOB data to send to a peer out of band. - * - * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, - * the one used during connection setup). The application may manually overwrite it with an updated value. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. - * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. - * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. - * - * @retval ::NRF_SUCCESS OOB data successfully generated. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); - -/**@brief Provide the OOB data sent/received out of band. - * - * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. - * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. - * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref sd_ble_gap_authenticate in the central role - * or @ref sd_ble_gap_sec_params_reply in the peripheral role. - * - * @retval ::NRF_SUCCESS OOB data accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); - - -/**@brief Initiate GAP Encryption procedure. - * - * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. - * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. - */ -SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); - - -/**@brief Reply with GAP security information. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @retval ::NRF_SUCCESS Successfully accepted security information. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Current connection security successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @events - * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is - * dependent on the settings of the threshold_dbm - * and skip_count input parameters.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. - * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. - * - * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); - - -/**@brief Stop reporting the received signal strength. - * - * @note An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * - * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); - - -/**@brief Get the received signal strength for the last connection event. - * - * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND - * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. - * @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. - * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. - * - * @retval ::NRF_SUCCESS Successfully read the RSSI. - * @retval ::NRF_ERROR_NOT_FOUND No sample is available. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - */ -SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); - - -/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). - * - * @note A call to this function will require the application to keep the memory pointed by - * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped - * or when this function is called with another buffer. - * - * @note The scanner will automatically stop in the following cases: - * - @ref sd_ble_gap_scan_stop is called. - * - @ref sd_ble_gap_connect is called. - * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. - * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application - * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop - * to stop scanning. - * - * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will - * receive more reports from this advertising event. The following reports will include the old and new received data. - * The application can stop the scanner from receiving more packets from this advertising event by calling this function. - * This might be useful when receiving data from extended advertising events where @ref ble_gap_evt_adv_report_t::aux_pointer - * is large. - * - * @events - * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} - * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue - * scanning, this parameter must be NULL. - * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. - * The memory pointed to should be kept alive until the scanning is stopped. - * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. - * If the scanner receives advertising data larger than can be stored in the buffer, - * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status - * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. - * - * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: - * - Scanning is already ongoing and p_scan_params was not NULL - * - Scanning is not running and p_scan_params was NULL. - * - The scanner has timed out when this function is called to continue scanning. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. - * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again - */ -SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); - - -/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). - * - * @note The buffer provided in @ref sd_ble_gap_scan_start is released. - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Not in the scanning state. - */ -SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); - - -/**@brief Create a connection (GAP Link Establishment). - * - * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. - * The scanning procedure will be stopped even if the function returns an error. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use - * whitelist, then p_peer_addr is ignored. - * @param[in] p_scan_params Pointer to scan parameters structure. - * @param[in] p_conn_params Pointer to desired connection parameters. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. - * - * @retval ::NRF_SUCCESS Successfully initiated connection procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * - Invalid parameter(s) in p_scan_params or p_conn_params. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an - * existing locally initiated connect procedure, which must complete before initiating again. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. - * @retval ::NRF_ERROR_RESOURCES Either: - * - Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. - * - The event_length parameter associated with conn_cfg_tag is too small to be able to - * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. - * Use @ref sd_ble_cfg_set to increase the event length. - */ -SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); - - -/**@brief Cancel a connection establishment. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - */ -SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); - - -/**@brief Initiate or respond to a PHY Update Procedure - * - * @details This function is used to initiate or respond to a PHY Update Procedure. It will always - * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. - * If this function is used to initiate a PHY Update procedure and the only option - * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the - * currently active PHYs in the respective directions, the SoftDevice will generate a - * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the - * procedure in the Link Layer. - * - * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, - * then the stack will select PHYs based on the peer's PHY preferences and the local link - * configuration. The PHY Update procedure will for this case result in a PHY combination - * that respects the time constraints configured with @ref sd_ble_cfg_set and the current - * link layer data length. - * - * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. - * - * If the peer does not support the PHY Update Procedure, then the resulting - * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to - * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. - * - * If the PHY procedure was rejected by the peer due to a procedure collision, the status - * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or - * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. - * If the peer responds to the PHY Update procedure with invalid parameters, the status - * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. - * If the PHY procedure was rejected by the peer for a different reason, the status will - * contain the reason as specified by the peer. - * - * @note @ref BLE_GAP_PHY_CODED is only supported as an experimental feature in this SoftDevice. - * When this function is used to reply to a PHY Update, depending on the peers preferences, - * @ref BLE_GAP_PHY_AUTO might result in the PHY to be changed to @ref BLE_GAP_PHY_CODED. - * - * @events - * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} - * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} - * @endmscs - * - * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. - * @param[in] p_gap_phys Pointer to PHY structure. - * - * @retval ::NRF_SUCCESS Successfully requested a PHY Update. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the combination of - * @ref ble_gap_phys_t::tx_phys, @ref ble_gap_phys_t::rx_phys, and @ref ble_gap_data_length_params_t. - * The connection event length is configured with @ref BLE_CONN_CFG_GAP using @ref sd_ble_cfg_set. - * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. - * - */ -SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); - - -/**@brief Initiate or respond to a Data Length Update Procedure. - * - * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of - * p_dl_params, the SoftDevice will choose the highest value supported in current - * configuration and connection parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update - * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let - * the SoftDevice automatically decide the value for that member. - * Set to NULL to use automatic values for all members. - * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not - * have enough resources or does not support the requested Data Length - * Update parameters. Ignored if NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect - * p_dl_limitation to see which parameter is not supported. - * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. - * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. - * Inspect p_dl_limitation to see where the limitation is. - * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the - * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. - */ -SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); - -/**@brief Start the Quality of Service (QoS) channel survey module. - * - * @details The channel survey module provides measurements of the energy levels on - * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT - * events will periodically report the measured energy levels for each channel. - * - * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, - * Radio Timeslot API events and Flash API events. - * - * @note The channel survey module will attempt to do measurements so that the average interval - * between measurements will be interval_us. However due to the channel survey module - * having the lowest priority of all roles and modules, this may not be possible. In that - * case fewer than expected channel survey reports may be given. - * - * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available - * must be set. This is done using @ref sd_ble_cfg_set. - * - * @param[in] interval_us Requested average interval for the measurements and reports. See - * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set - * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel - * survey role will be scheduled at every available opportunity. - * - * @retval ::NRF_SUCCESS The module is successfully started. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the - * allowed range. - * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. - * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. - * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using - * @ref sd_ble_cfg_set. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(uint32_t interval_us)); - -/**@brief Stop the Quality of Service (QoS) channel survey module. - * - * @retval ::NRF_SUCCESS The module is successfully stopped. - * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(void)); - - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatt.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatt.h deleted file mode 100644 index 98a7a150bf..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatt.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default ATT MTU, in bytes. */ -#define BLE_GATT_ATT_MTU_DEFAULT 23 - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/**@brief First Attribute Handle. */ -#define BLE_GATT_HANDLE_START 0x0001 - -/**@brief Last Attribute Handle. */ -#define BLE_GATT_HANDLE_END 0xFFFF - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. - */ -typedef struct -{ - uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. - The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - @mscs - @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - @endmscs - */ -} ble_gatt_conn_cfg_t; - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ - uint8_t read :1; /**< Reading the value permitted. */ - uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ - uint8_t write :1; /**< Writing the value with Write Request permitted. */ - uint8_t notify :1; /**< Notification of the value permitted. */ - uint8_t indicate :1; /**< Indications of the value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -} ble_gatt_char_ext_props_t; - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATT_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gattc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gattc.h deleted file mode 100644 index 7fb3920244..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gattc.h +++ /dev/null @@ -1,715 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ - SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -}; - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ - BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ - BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ - BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ - BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -/** @} */ - -/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats - * @{ */ -#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -/** @} */ - -/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults - * @{ */ -#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. - The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ -} ble_gattc_conn_cfg_t; - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t const *p_value; /**< Pointer to the value data. */ -} ble_gattc_write_params_t; - -/**@brief Attribute Information for 16-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -} ble_gattc_attr_info16_t; - -/**@brief Attribute Information for 128-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -} ble_gattc_attr_info128_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Attribute count. */ - uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ - union { - ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - } info; /**< Attribute information union. */ -} ble_gattc_evt_attr_info_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -typedef struct -{ - uint16_t server_rx_mtu; /**< Server RX MTU size. */ -} ble_gattc_evt_exchange_mtu_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of write without response transmissions completed. */ -} ble_gattc_evt_write_cmd_tx_complete_t; - -/**@brief GATTC event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ - ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. - * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @events - * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @events - * @event{@ref BLE_GATTC_EVT_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note Only one write with response procedure can be ongoing per connection at a time. - * If the application tries to write with response while another write with response procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. - * - * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. - * - * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} - * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @retval ::NRF_SUCCESS Successfully started the Write procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. - * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. - * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @mscs - * @mmsc{@ref BLE_GATTC_HVI_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/**@brief Discovers information about a range of attributes on a GATT server. - * - * @events - * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} - * @endevents - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range The range of handles to request information about. - * - * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); - -/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value, and - * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @events - * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] client_rx_mtu Client RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - used for this connection. - * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent request to the server. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); - -/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * - * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * @note If the buffer contains different event, behavior is undefined. - * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with - * the next Handle-Value pair in each iteration. If the function returns other than - * @ref NRF_SUCCESS, it will not be changed. - * - To start iteration, initialize the structure to zero. - * - To continue, pass the value from previous iteration. - * - * \code - * ble_gattc_handle_value_t iter; - * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); - * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) - * { - * app_handle = iter.handle; - * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); - * } - * \endcode - * - * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. - * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. - */ -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); - -/** @} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -{ - uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; - uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; - uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; - - if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) - { - p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; - p_iter->p_value = p_next + sizeof(uint16_t); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_NOT_FOUND; - } -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif -#endif /* BLE_GATTC_H__ */ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatts.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatts.h deleted file mode 100644 index e437b6e076..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_gatts.h +++ /dev/null @@ -1,845 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" -#include "ble_gap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ - SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ - SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ - SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -}; - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ - BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ - BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ - BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ -}; - -/**@brief GATTS Configuration IDs. - * - * IDs that uniquely identify a GATTS configuration. - */ -enum BLE_GATTS_CFGS -{ - BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ - BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - -/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags - * @{ */ -#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -/** @} */ - -/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values - * @{ - */ -#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size - * @{ - */ -#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ -#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ -/** @} */ - -/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults - * @{ - */ -#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. - The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ -} ble_gatts_conn_cfg_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -} ble_gatts_attr_t; - -/**@brief GATT Attribute Value. */ -typedef struct -{ - uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ - uint16_t offset; /**< Attribute value offset. */ - uint8_t *p_value; /**< Pointer to where value is stored or will be stored. - If value is stored in user memory, only the attribute length is updated when p_value == NULL. - Set to NULL when reading to obtain the complete length of the attribute value */ -} ble_gatts_value_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ - ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ - uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. - Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, - as the data to be written needs to be stored and later provided by the application. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ - } params; /**< Reply Parameters. */ -} ble_gatts_rw_authorize_reply_params_t; - -/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ -typedef struct -{ - uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ -} ble_gatts_cfg_service_changed_t; - -/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The specified Attribute Table size is too small. - * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. - * - The specified Attribute Table size is not a multiple of 4. - */ -typedef struct -{ - uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ -} ble_gatts_cfg_attr_tab_size_t; - -/**@brief Config structure for GATTS configurations. */ -typedef union -{ - ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ - ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ -} ble_gatts_cfg_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the received data. */ - uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gatts_evt_write_t; - -/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; /**< Request Parameters. */ -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; /**< Hint (currently unused). */ -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -typedef struct -{ - uint16_t client_rx_mtu; /**< Client RX MTU size. */ -} ble_gatts_evt_exchange_mtu_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of notification transmissions completed. */ -} ble_gatts_evt_hvn_tx_complete_t; - -/**@brief GATTS event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the Attribute Table. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the Attribute Table. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a service declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); - - -/**@brief Add an include declaration to the Attribute Table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). - * - * @note The included service must already be present in the Attribute Table prior to this call. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added an include declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, - * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a characteristic. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); - - -/**@brief Add a descriptor to the Attribute Table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a descriptor. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); - -/**@brief Set the value of a given attribute. - * - * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully set the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Get the value of a given attribute. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. - * The application may use this information to allocate a suitable buffer size. - * - * @note When retrieving system attribute values with this function, the connection handle - * may refer to an already disconnected connection. Refer to the documentation of - * @ref sd_ble_gatts_sys_attr_get for further information. - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, - * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. - * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). - * - * @note Only one indication procedure can be ongoing per connection at a time. - * If the application tries to indicate an attribute value while another indication procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. - * - * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. - * - * @note The application can keep track of the available queue element count for notifications by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} - * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_HVN_MSC} - * @mmsc{@ref BLE_GATTS_HVI_MSC} - * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data - * contains a non-NULL pointer the attribute value will be updated with the contents - * pointed by it before sending the notification or indication. If the attribute value - * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to - * contain the number of actual bytes written, else it will be set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. - * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute - * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @events - * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_SC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref - * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @retval ::NRF_ERROR_BUSY Procedure already in progress. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond - * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update - * is set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, - * handle supplied does not match requested handle, - * or invalid data to be written provided by the application. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply information about persistent system attributes to the stack, - * previously obtained using @ref sd_ble_gatts_sys_attr_get. - * This call is only allowed for active connections, and is usually - * made immediately after a connection is established with an known bonded device, - * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the system attributes - * obtained using @ref sd_ble_gatts_sys_attr_get. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved system attribute data for this device. - * - * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully set the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored persistently by the application - * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, - * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. - * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for - * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. - * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes - * may be written to at any time by the peer during a connection's lifetime. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. - * - * @mscs - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described - * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); - - -/**@brief Retrieve the first valid user attribute handle. - * - * @param[out] p_handle Pointer to an integer where the handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully retrieved the handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); - -/**@brief Retrieve the attribute UUID and/or metadata. - * - * @param[in] handle Attribute handle - * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. - * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. - * - * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. - * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. - */ -SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); - -/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. - * - * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and - * - The Server RX MTU value. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @mscs - * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] server_rx_mtu Server RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - * used for this connection. - * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent response to the client. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATTS_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_hci.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_hci.h deleted file mode 100644 index f0dde9a03a..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_hci.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -*/ -#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ -/* -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ - -/** @} */ - - -#ifdef __cplusplus -} -#endif -#endif // BLE_HCI_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_l2cap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_l2cap.h deleted file mode 100644 index eaeb4b7d28..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_l2cap.h +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology - * @{ - * @details - * - * L2CAP SDU - * - A data unit that the application can send/receive to/from a peer. - * - * L2CAP PDU - * - A data unit that is exchanged between local and remote L2CAP entities. - * It consists of L2CAP protocol control information and payload fields. - * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. - * - * L2CAP MTU - * - The maximum length of an L2CAP SDU. - * - * L2CAP MPS - * - The maximum length of an L2CAP PDU payload field. - * - * Credits - * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. - * @} */ - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ - SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ - SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ -}; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. - \n See @ref ble_l2cap_evt_ch_setup_request_t. */ - BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. - \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ - BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. - \n See @ref ble_l2cap_evt_ch_setup_t. */ - BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. - \n No additional event structure applies. */ - BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. - \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ - BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. - \n See @ref ble_l2cap_evt_ch_credit_t. */ - BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. - \n See @ref ble_l2cap_evt_ch_rx_t. */ - BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. - \n See @ref ble_l2cap_evt_ch_tx_t. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@brief Maximum number of L2CAP channels per connection. */ -#define BLE_L2CAP_CH_COUNT_MAX (64) - -/**@brief Minimum L2CAP MTU, in bytes. */ -#define BLE_L2CAP_MTU_MIN (23) - -/**@brief Minimum L2CAP MPS, in bytes. */ -#define BLE_L2CAP_MPS_MIN (23) - -/**@brief Invalid CID. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ -#define BLE_L2CAP_CREDITS_DEFAULT (1) - -/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources - * @{ */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ - /** @} */ - - /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes - * @{ */ -#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ -#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ -#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ -#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ -#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ -#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ -#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ -#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ -/** @} */ - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @note These parameters are set per connection, so all L2CAP channels created on this connection - * will have the same parameters. - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. - * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. - */ -typedef struct -{ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to receive on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to transmit on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per - L2CAP channel. The minimum value is one. */ - uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission - per L2CAP channel. The minimum value is one. */ - uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection - with this configuration. The default value is zero, the maximum - value is @ref BLE_L2CAP_CH_COUNT_MAX. - @note if this parameter is set to zero, all other parameters in - @ref ble_l2cap_conn_cfg_t are ignored. */ -} ble_l2cap_conn_cfg_t; - -/**@brief L2CAP channel RX parameters. */ -typedef struct -{ - uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to - receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be - able to receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. - - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ - ble_data_t sdu_buf; /**< SDU data buffer for reception. - - If @ref ble_data_t::p_data is non-NULL, initial credits are - issued to the peer. - - If @ref ble_data_t::p_data is NULL, no initial credits are - issued to the peer. */ -} ble_l2cap_ch_rx_params_t; - -/**@brief L2CAP channel setup parameters. */ -typedef struct -{ - ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting - setup of an L2CAP channel, ignored otherwise. */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. - Used when replying to a setup request of an L2CAP - channel, ignored otherwise. */ -} ble_l2cap_ch_setup_params_t; - -/**@brief L2CAP channel TX parameters. */ -typedef struct -{ - uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to - transmit on this L2CAP channel. */ - uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is - able to receive on this L2CAP channel. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able - to transmit on this L2CAP channel. This is effective tx_mps, - selected by the SoftDevice as - MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ - uint16_t credits; /**< Initial credits given by the peer. */ -} ble_l2cap_ch_tx_params_t; - -/**@brief L2CAP Channel Setup Request event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ -} ble_l2cap_evt_ch_setup_request_t; - -/**@brief L2CAP Channel Setup Refused event. */ -typedef struct -{ - uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ -} ble_l2cap_evt_ch_setup_refused_t; - -/**@brief L2CAP Channel Setup Completed event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ -} ble_l2cap_evt_ch_setup_t; - -/**@brief L2CAP Channel SDU Data Duffer Released event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice - returns SDU data buffers supplied by the application, which have - not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or - @ref BLE_L2CAP_EVT_CH_TX event. */ -} ble_l2cap_evt_ch_sdu_buf_released_t; - -/**@brief L2CAP Channel Credit received event. */ -typedef struct -{ - uint16_t credits; /**< Additional credits given by the peer. */ -} ble_l2cap_evt_ch_credit_t; - -/**@brief L2CAP Channel received SDU event. */ -typedef struct -{ - uint16_t sdu_len; /**< Total SDU length, in bytes. */ - ble_data_t sdu_buf; /**< SDU data buffer. - @note If there is not enough space in the buffer - (sdu_buf.len < sdu_len) then the rest of the SDU will be - silently discarded by the SoftDevice. */ -} ble_l2cap_evt_ch_rx_t; - -/**@brief L2CAP Channel transmitted SDU event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< SDU data buffer. */ -} ble_l2cap_evt_ch_tx_t; - -/**@brief L2CAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occured. */ - uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or - @ref BLE_L2CAP_CID_INVALID if not present. */ - union - { - ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ - ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ - ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ - ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ - ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ - ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ - ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_l2cap_evt_t; - -/** @} */ - -/**@addtogroup BLE_L2CAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set up an L2CAP channel. - * - * @details This function is used to: - * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. - * - Reply to a setup request of an L2CAP channel (if called in response to a - * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection - * Response packet to a peer. - * - * @note A call to this function will require the application to keep the SDU data buffer alive - * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or - * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} - * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: - * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP - * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST - * event when replying to a setup request of an L2CAP channel. - * - As output: local_cid for this channel. - * @param[in] p_params L2CAP channel parameters. - * - * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, - * see @ref ble_l2cap_conn_cfg_t::ch_count. - */ -SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); - -/**@brief Release an L2CAP channel. - * - * @details This sends a Disconnection Request packet to a peer. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * - * @retval ::NRF_SUCCESS Successfully queued request for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); - -/**@brief Receive an SDU on an L2CAP channel. - * - * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers - * for reception per L2CAP channel. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Buffer accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a - * @ref BLE_L2CAP_EVT_CH_RX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Transmit an SDU on an L2CAP channel. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for - * transmission per L2CAP channel. - * - * @note The application can keep track of the available credits for transmission by following - * the procedure below: - * - Store initial credits given by the peer in a variable. - * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Decrement the variable, which stores the currently available credits, by - * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns - * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Increment the variable, which stores the currently available credits, by additional - * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than - * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in - * @ref BLE_L2CAP_EVT_CH_SETUP event. - * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a - * @ref BLE_L2CAP_EVT_CH_TX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Advanced SDU reception flow control. - * - * @details Adjust the way the SoftDevice issues credits to the peer. - * This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set - * the value that will be used for newly created channels. - * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every - * time it starts using a new reception buffer. - * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will - * use if this function is not called. - * - If set to zero, the SoftDevice will stop issuing credits for new reception - * buffers the application provides or has provided. SDU reception that is - * currently ongoing will be allowed to complete. - * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be - * written by the SoftDevice with the number of credits that is or will be - * available to the peer. If the value written by the SoftDevice is 0 when - * credits parameter was set to 0, the peer will not be able to send more - * data until more credits are provided by calling this function again with - * credits > 0. This parameter is ignored when local_cid is set to - * @ref BLE_L2CAP_CID_INVALID. - * - * @note Application should take care when setting number of credits higher than default value. In - * this case the application must make sure that the SoftDevice always has reception buffers - * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have - * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic - * on the connection handle may be stalled until the SoftDevice again has an available - * reception buffer. This applies even if the application has used this call to set the - * credits back to default, or zero. - * - * @retval ::NRF_SUCCESS Flow control parameters accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_L2CAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_ranges.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_ranges.h deleted file mode 100644 index 0935bca071..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_ranges.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC, event and option number subranges - @{ - - @brief Definition of SVC, event and option number subranges for each API module. - - @note - SVCs, event and option numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC, event and option values are defined in each module's ble_.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ - -#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ - -#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ -#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ - -#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ -#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ - -#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ -#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ - - -#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ - -#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ - -#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ - -#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ - -#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ - -#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ -#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ - - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ - -#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ -#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ - -#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ - -#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ - -#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ - - -#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ - -#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ -#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ - -#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ -#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ - -#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ -#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ - -#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ -#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ - -#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ -#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ - -#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ -#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ - -#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ -#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ - - - - - -#ifdef __cplusplus -} -#endif -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_types.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_types.h deleted file mode 100644 index 88c93180c8..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/ble_types.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the BLE SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_TYPES_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/**@brief Data structure. */ -typedef struct -{ - uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ - uint16_t len; /**< Length of the data buffer, in bytes. */ -} ble_data_t; - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf52/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf52/nrf_mbr.h deleted file mode 100644 index e0c80e278c..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf52/nrf_mbr.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is - * not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_ble.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_ble.h deleted file mode 100644 index 9ebb41f538..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_ble.h +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the BLE SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_err.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ - SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ -}; - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ - BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -}; - -/**@brief BLE Connection Configuration IDs. - * - * IDs that uniquely identify a connection configuration. - */ -enum BLE_CONN_CFGS -{ - BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ - BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ - BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ - BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ - BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ -}; - -/**@brief BLE Common Configuration IDs. - * - * IDs that uniquely identify a common configuration. - */ -enum BLE_COMMON_CFGS -{ - BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ -}; - -/**@brief Common Option IDs. - * IDs that uniquely identify a common option. - */ -enum BLE_COMMON_OPTS -{ - BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ - BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVT_PTR_ALIGNMENT 4 - -/** @brief Leaves the maximum of the two arguments. -*/ -#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) - -/** @brief Maximum possible length for BLE Events. - * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. - * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. -*/ -#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ - offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -) - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts - * @{ - */ -#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ -#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ -/** @} */ - -/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. - * @{ - */ -#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ - -/** @} */ - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union - { - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; /**< Event parameter union. */ -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE__EVT series. */ - uint16_t evt_len; /**< Length in octets including this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - } evt; /**< Event union. */ -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/** - * @brief Configuration parameters for the PA and LNA. - */ -typedef struct -{ - uint8_t enable :1; /**< Enable toggling for this amplifier */ - uint8_t active_high :1; /**< Set the pin to be active high */ - uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -} ble_pa_lna_cfg_t; - -/** - * @brief PA & LNA GPIO toggle configuration - * - * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or - * a low noise amplifier. - * - * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided - * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences - * and must be avoided by the application. - */ -typedef struct -{ - ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ - ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ - - uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ - uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ - uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -} ble_common_opt_pa_lna_t; - -/** - * @brief Configuration of extended BLE connection events. - * - * When enabled the SoftDevice will dynamically extend the connection event when possible. - * - * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. - * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, - * and if there are no conflicts with other BLE roles requesting radio time. - * - * @note @ref sd_ble_opt_get is not supported for this option. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -} ble_common_opt_conn_evt_ext_t; - -/**@brief Option structure for common options. */ -typedef union -{ - ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ - ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -} ble_common_opt_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ - ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -} ble_opt_t; - -/**@brief BLE connection configuration type, wrapping the module specific configurations, set with - * @ref sd_ble_cfg_set. - * - * @note Connection configurations don't have to be set. - * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, - * the default connection configuration will be automatically added for the remaining connections. - * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in - * place of @ref ble_conn_cfg_t::conn_cfg_tag. - * - * @sa sd_ble_gap_adv_start() - * @sa sd_ble_gap_connect() - * - * @mscs - * @mmsc{@ref BLE_CONN_CFG} - * @endmscs - - */ -typedef struct -{ - uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the - @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls - to select this configuration when creating a connection. - Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ - union { - ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ - ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ - ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ - ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ - ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ - } params; /**< Connection configuration union. */ -} ble_conn_cfg_t; - -/** - * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. - */ -typedef struct -{ - uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. - Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is - @ref BLE_UUID_VS_COUNT_MAX. */ -} ble_common_cfg_vs_uuid_t; - -/**@brief Common BLE Configuration type, wrapping the common configurations. */ -typedef union -{ - ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ -} ble_common_cfg_t; - -/**@brief BLE Configuration type, wrapping the module specific configurations. */ -typedef union -{ - ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ - ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ - ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ - ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ -} ble_cfg_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the BLE stack - * - * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the - * application RAM region (APP_RAM_BASE). On return, this will - * contain the minimum start address of the application RAM region - * required by the SoftDevice for this configuration. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note The value of *p_app_ram_base when the app has done no custom configuration of the - * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can - * be found in the release notes. - * - * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located - * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between - * APP_RAM_BASE and the start of the call stack. - * - * @details This call initializes the BLE stack, no BLE related function other than @ref - * sd_ble_cfg_set can be called before this one. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not - * large enough to fit this configuration's memory requirement. Check *p_app_ram_base - * and set the start address of the application RAM region accordingly. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); - -/**@brief Add configurations for the BLE stack - * - * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref - * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. - * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. - * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). - * See @ref sd_ble_enable for details about APP_RAM_BASE. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note If a configuration is set more than once, the last one set is the one that takes effect on - * @ref sd_ble_enable. - * - * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default - * configuration. - * - * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref - * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref - * sd_ble_enable). - * - * @note Error codes for the configurations are described in the configuration structs. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The configuration has been added successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not - * large enough to fit this configuration's memory requirement. - */ -SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); - -/**@brief Get an event from the pending events queue. - * - * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. - * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. - * The buffer should be interpreted as a @ref ble_evt_t struct. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that - * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. - * The application is free to choose whether to call this function from thread mode (main context) or directly from the - * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher - * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) - * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so - * could potentially leave events in the internal queue without the application being aware of this fact. - * - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to - * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, - * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. - * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length - * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: - * - * \code - * uint16_t len; - * errcode = sd_ble_evt_get(NULL, &len); - * \endcode - * - * @mscs - * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} - * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); - - -/**@brief Add a Vendor Specific base UUID. - * - * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later - * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t - * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code - * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses - * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to - * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field - * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to - * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in - * p_uuid_type along with an @ref NRF_SUCCESS error code. - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @retval ::NRF_SUCCESS Successfully encoded into the buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[out] p_version Pointer to a ble_version_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Version information stored successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @endmscs - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ -#ifdef __cplusplus -} -#endif -#endif /* BLE_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error.h deleted file mode 100644 index 6badee98e5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_sdm.h deleted file mode 100644 index 530959b9d6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_sdm.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_soc.h deleted file mode 100644 index 1e784b8db3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_error_soc.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_nvic.h deleted file mode 100644 index c71a633c6b..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_nvic.h +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_nvic_api SoftDevice NVIC API - * @{ - * - * @note In order to use this module, the following code has to be added to a .c file: - * \code - * nrf_nvic_state_t nrf_nvic_state = {0}; - * \endcode - * - * @note Definitions and declarations starting with __ (double underscore) in this header file are - * not intended for direct use by the application. - * - * @brief APIs for the accessing NVIC when using a SoftDevice. - * - */ - -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_NVIC_DEFINES Defines - * @{ */ - -/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions - * @{ */ - -#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ - -#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ -#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ - (1U << POWER_CLOCK_IRQn) \ - | (1U << RADIO_IRQn) \ - | (1U << RTC0_IRQn) \ - | (1U << TIMER0_IRQn) \ - | (1U << RNG_IRQn) \ - | (1U << ECB_IRQn) \ - | (1U << CCM_AAR_IRQn) \ - | (1U << TEMP_IRQn) \ - | (1U << __NRF_NVIC_NVMC_IRQn) \ - | (1U << (uint32_t)SWI5_IRQn) \ - )) - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ -#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) - -/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ -#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) - -/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ -#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) - -/**@} */ - -/**@} */ - -/**@addtogroup NRF_NVIC_VARIABLES Variables - * @{ */ - -/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -typedef struct -{ - uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ - uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -} nrf_nvic_state_t; - -/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an - * application source file. */ -extern nrf_nvic_state_t nrf_nvic_state; - -/**@} */ - -/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions - * @{ */ - -/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. - * - * @retval The value of PRIMASK prior to disabling the interrupts. - */ -__STATIC_INLINE int __sd_nvic_irq_disable(void); - -/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. - */ -__STATIC_INLINE void __sd_nvic_irq_enable(void); - -/**@brief Checks if IRQn is available to application - * @param[in] IRQn IRQ to check - * - * @retval 1 (true) if the IRQ to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); - -/**@brief Checks if priority is available to application - * @param[in] priority priority to check - * - * @retval 1 (true) if the priority to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); - -/**@} */ - -/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions - * @{ */ - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * @pre Priority is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); - -/**@brief Enter critical region. - * - * @post Application interrupts will be disabled. - * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each - * execution context - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - -/**@} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE int __sd_nvic_irq_disable(void) -{ - int pm = __get_PRIMASK(); - __disable_irq(); - return pm; -} - -__STATIC_INLINE void __sd_nvic_irq_enable(void) -{ - __enable_irq(); -} - -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -{ - if (IRQn < 32) - { - return ((1UL<= (1 << __NVIC_PRIO_BITS)) - { - return 0; - } - if( priority == 0 - || priority == 1 - || priority == 4 - || priority == 5 - ) - { - return 0; - } - return 1; -} - - -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); - } - else - { - NVIC_EnableIRQ(IRQn); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); - } - else - { - NVIC_DisableIRQ(IRQn); - } - - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (!__sd_nvic_is_app_accessible_priority(priority)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - NVIC_SetPriority(IRQn, (uint32_t)priority); - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - int was_masked = __sd_nvic_irq_disable(); - if (!nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__cr_flag = 1; - nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); - NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; - nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); - NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; - *p_is_nested_critical_region = 0; - } - else - { - *p_is_nested_critical_region = 1; - } - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) - { - int was_masked = __sd_nvic_irq_disable(); - NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; - NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; - nrf_nvic_state.__cr_flag = 0; - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - } - - return NRF_SUCCESS; -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif - -#endif // NRF_NVIC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sd_def.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sd_def.h deleted file mode 100644 index c9ab241872..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sd_def.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SD_DEF_H__ -#define NRF_SD_DEF_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SD_DEF_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sdm.h deleted file mode 100644 index 8c48d93678..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_sdm.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_sdm.h" -#include "nrf_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ -#ifdef NRFSOC_DOXYGEN -/// Declared in nrf_mbr.h -#define MBR_SIZE 0 -#warning test -#endif - -/** @brief The major version for the SoftDevice binary distributed with this header file. */ -#define SD_MAJOR_VERSION (6) - -/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -#define SD_MINOR_VERSION (0) - -/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -#define SD_BUGFIX_VERSION (0) - -/** @brief The full version number for the SoftDevice binary this header file was distributed - * with, as a decimal number in the form Mmmmbbb, where: - * - M is major version (one or more digits) - * - mmm is minor version (three digits) - * - bbb is bugfix version (three digits). */ -#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) - -/** @brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE 0x10 - -/** @brief SoftDevice unique string size in bytes. */ -#define SD_UNIQUE_STR_SIZE 20 - -/** @brief Invalid info field. Returned when an info field does not exist. */ -#define SDM_INFO_FIELD_INVALID (0) - -/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -the start of the SoftDevice (without MBR)*/ -#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) - -/** @brief Defines the absolute SoftDevice Information Structure location (address) when the - * SoftDevice is installed just above the MBR (the usual case). */ -#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) - -/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the - * SoftDevice base address. The size value is of type uint8_t. */ -#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) - -/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. - * The size value is of type uint32_t. */ -#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) - -/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value - * is of type uint16_t. */ -#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) - -/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID - * is of type uint32_t. */ -#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) - -/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in - * the same format as @ref SD_VERSION, stored as an uint32_t. */ -#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) - -/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. - * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. - */ -#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) - -/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value - * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is - * installed just above the MBR (the usual case). */ -#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base - * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above - * the MBR (the usual case). */ -#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual - * case). */ -#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the - * usual case). */ -#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges - * @{ */ -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -/**@} */ - -/**@defgroup NRF_FAULT_IDS Fault ID types - * @{ */ -#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ -#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, - in case of SoftDevice RAM access violation. In case of SoftDevice peripheral - register violation the info parameter will contain the sub-region number of - PREGION[0], on whose address range the disallowed write access caused the - memory access fault. */ -/**@} */ - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy - * @{ */ - -#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ -#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ -#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ -#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ -#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ -#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ -#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ -#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ -#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ -#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ -#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ - -/** @} */ - -/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources - * @{ */ - -#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ - -/** @} */ - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing LFCLK oscillator source. */ -typedef struct -{ - uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ - uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second - units (nRF52: 1-32). - @note To avoid excessive clock drift, 0.5 degrees Celsius is the - maximum temperature change allowed in one calibration timer - interval. The interval should be selected to ensure this. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ - uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration - intervals) the RC oscillator shall be calibrated if the temperature - hasn't changed. - 0: Always calibrate even if the temperature hasn't changed. - 1: Only calibrate if the temperature has changed (legacy - nRF51 only). - 2-33: Check the temperature and only calibrate if it has changed, - however calibration will take place every rc_temp_ctiv - intervals in any case. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. - - @note For nRF52, the application must ensure calibration at least once - every 8 seconds to ensure +/-500 ppm clock stability. The - recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is - rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at - least once every 8 seconds and for temperature changes of 0.5 - degrees Celsius every 4 seconds. See the Product Specification - for the nRF52 device being used for more information.*/ - uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing - windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ -} nrf_clock_lf_cfg_t; - -/**@brief Fault Handler type. - * - * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. - * - * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. - * @param[in] pc The program counter of the instruction that triggered the fault. - * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. - * - * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when - * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. - */ -typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available. - * - A portion of RAM will be unavailable (see relevant SDS documentation). - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). - * - Interrupts will not arrive from protected peripherals or interrupts. - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). - * - Chosen low frequency clock source will be running. - * - * @param p_clock_lf_cfg Low frequency clock source and accuracy. - If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 - In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. - * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); - - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_soc.h deleted file mode 100644 index 3fa177281e..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_soc.h +++ /dev/null @@ -1,1036 +0,0 @@ -/* - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * - */ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ - -/**@brief Guaranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -/**@brief The maximum processing time to handle a timeslot extension. */ -#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) - -/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ -#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. - The default interrupt priority for this handler is set to 4 */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. - The default interrupt priority for this handler is set to 4 */ -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/**@} */ - -/**@addtogroup NRF_SOC_ENUMS Enumerations - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, - SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, - SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, - SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, - SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, - SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, - SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, - SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, - SD_FLASH_WRITE = SOC_SVC_BASE + 9, - SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, - SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, - SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, - SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, - SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, - SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, - SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, - SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, - SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, - SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, - SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, - SD_POWER_POF_THRESHOLDVDDH_SET = SOC_SVC_BASE_NOT_AVAILABLE + 12, - SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, - SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, - SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, - SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, - SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, - SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, - SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, - SD_POWER_DCDC0_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 20, - SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, - SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, - SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, - SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, - SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, - SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, - SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, - SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, - SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, - SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, - SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, - SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, - SD_POWER_USBPWRRDY_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 33, - SD_POWER_USBDETECTED_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 34, - SD_POWER_USBREMOVED_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 35, - SD_POWER_USBREGSTATUS_GET = SOC_SVC_BASE_NOT_AVAILABLE + 36, - SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Power modes. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Power failure thresholds */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ -}; - -/**@brief Power failure thresholds for high voltage */ -enum NRF_POWER_THRESHOLDVDDHS -{ - NRF_POWER_THRESHOLDVDDH_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V28, /**< 2.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V29, /**< 2.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V30, /**< 3.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V31, /**< 3.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V32, /**< 3.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V33, /**< 3.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V34, /**< 3.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V35, /**< 3.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V36, /**< 3.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V37, /**< 3.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V38, /**< 3.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V39, /**< 3.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V40, /**< 4.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V41, /**< 4.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V42 /**< 4.2 Volts power failure threshold. */ -}; - - -/**@brief DC/DC converter modes. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ - NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -}; - -/**@brief Radio notification distances. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Radio notification types. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/**@brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current - timeslot. Maximum execution time for this action: - @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. - This action must be started at least - @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before - the end of the timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the - external crystal for the whole duration of the timeslot. This should be the - preferred option for events that use the radio or require high timing accuracy. - @note The SoftDevice will automatically turn on and off the external crystal, - at the beginning and end of the timeslot, respectively. The crystal may also - intentionally be left running after the timeslot, in cases where it is needed - by the SoftDevice shortly after the end of the timeslot. */ - NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. - The RC oscillator may be the clock source in part or for the whole duration of the timeslot. - The RC oscillator's accuracy must therefore be taken into consideration. - @note If the application will use the radio peripheral in timeslots with this configuration, - it must make sure that the crystal is running and stable before starting the radio. */ -}; - -/**@brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ -}; - -/**@brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ - NRF_EVT_POWER_USB_POWER_READY, /**< Event indicating that a USB 3.3 V supply is ready. */ - NRF_EVT_POWER_USB_DETECTED, /**< Event indicating that voltage supply is detected on VBUS. */ - NRF_EVT_POWER_USB_REMOVED, /**< Event indicating that voltage supply is removed from VBUS. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/**@} */ - - -/**@addtogroup NRF_SOC_STRUCTURES Structures - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/**@brief Parameters for a normal radio timeslot request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/**@brief Radio timeslot request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ - } params; /**< Parameter union. */ -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; /**< Parameter union. */ -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio timeslot signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB parameter typedefs */ -typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ - -/**@brief AES ECB data structure */ -typedef struct -{ - soc_ecb_key_t key; /**< Encryption key. */ - soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ - soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -} nrf_ecb_hal_data_t; - -/**@brief AES ECB block. Used to provide multiple blocks in a single call - to @ref sd_ecb_blocks_encrypt.*/ -typedef struct -{ - soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ - soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ - soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ -} nrf_ecb_hal_data_block_t; - -/**@} */ - -/**@addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Enables or disables the USB power ready event. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_POWER_READY) when a USB 3.3 V supply is ready. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] usbpwrrdy_enable True if the power ready event should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBPWRRDY_ENABLE, uint32_t, sd_power_usbpwrrdy_enable(uint8_t usbpwrrdy_enable)); - -/**@brief Enables or disables the power USB-detected event. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_DETECTED) when a voltage supply is detected on VBUS. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] usbdetected_enable True if the power ready event should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBDETECTED_ENABLE, uint32_t, sd_power_usbdetected_enable(uint8_t usbdetected_enable)); - -/**@brief Enables or disables the power USB-removed event. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_REMOVED) when a voltage supply is removed from VBUS. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] usbremoved_enable True if the power ready event should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBREMOVED_ENABLE, uint32_t, sd_power_usbremoved_enable(uint8_t usbremoved_enable)); - -/**@brief Get USB supply status register content. - * - * @param[out] usbregstatus The content of USBREGSTATUS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBREGSTATUS_GET, uint32_t, sd_power_usbregstatus_get(uint32_t * usbregstatus)); - -/**@brief Sets the power failure comparator threshold value. - * - * @note: Power failure comparator threshold setting. This setting applies both for normal voltage - * mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to - * VDDH only). - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); - -/**@brief Sets the power failure comparator threshold value for high voltage. - * - * @note: Power failure comparator threshold setting for high voltage mode (supply connected to - * VDDH only). This setting does not apply for normal voltage mode (supply connected to both - * VDD and VDDH). - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDVDDHS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLDVDDH_SET, uint32_t, sd_power_pof_thresholdvddh_set(uint8_t threshold)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. - * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. - * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); - -/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. - * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); - -/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); - -/**@brief Enable or disable the DC/DC regulator for the regulator stage 1 (REG1). - * - * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); - -/**@brief Enable or disable the DC/DC regulator for the regulator stage 0 (REG0). - * - * For more details on the REG0 stage, please see product specification. - * - * @param[in] dcdc_mode The mode of the DCDC0, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The dcdc_mode is invalid. - */ -SVCALL(SD_POWER_DCDC0_MODE_SET, uint32_t, sd_power_dcdc0_mode_set(uint8_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the interrupt - * is disabled. - * - * When the application waits for an application event by calling this function, an interrupt that - * is enabled will be taken immediately on pending since this function will wait in thread mode, - * then the execution will return in the application's main thread. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M - * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets - * pended, this function will return to the application's main thread. - * - * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ - * in order to sleep using this function. This is only necessary for disabled interrupts, as - * the interrupt handler will clear the pending flag automatically for enabled interrupts. - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - To ensure that the radio notification signal behaves in a consistent way, the radio - * notifications must be configured when there is no protocol stack or other SoftDevice - * activity in progress. It is recommended that the radio notification signal is - * configured directly after the SoftDevice has been enabled. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all - * running activities and retry. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Encrypts multiple data blocks provided as an array of data block structures. - * - * @details: Performs 128-bit AES encryption on multiple data blocks - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in] block_count Count of blocks in the p_data_blocks array. - * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of - * @ref nrf_ecb_hal_data_block_t structures. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50 us from call to return. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write -* -* Commands to write a buffer to flash -* -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the - * write has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is -* protected. -* -* -* @param[in] p_dst Pointer to start of flash location to be written. -* @param[in] p_src Pointer to buffer with data to be written. -* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one -* flash page. See the device's Product Specification for details. -* -* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); - - -/**@brief Flash Erase page -* -* Commands to erase a flash page -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -* erase has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is -* protected. -* -* -* @param[in] page_number Page number of the page to erase -* -* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - - -/**@brief Opens a session for radio timeslot requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio timeslot requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - -/**@brief Requests a radio timeslot. - * - * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST - * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. - * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by - * p_request->distance_us and is given relative to the start of the previous timeslot. - * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this - * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); - -/**@brief Write register protected by the SoftDevice - * - * This function writes to a register that is write-protected by the SoftDevice. Please refer to your - * SoftDevice Specification for more details about which registers that are protected by SoftDevice. - * This function can write to the following protected peripheral: - * - ACL - * - * @note Protected registers may be read directly. - * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in - * the register has not changed. See the Product Specification for more details about register - * properties. - * - * @param[in] p_register Pointer to register to be written. - * @param[in] value Value to be written to the register. - * - * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. - * @retval ::NRF_SUCCESS Value successfully written to register. - * - */ -SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); - -/**@} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SOC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_softdevice.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_softdevice.hex deleted file mode 100644 index 0229a59955..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/hex/s140_nrf52_6.0.0_softdevice.hex +++ /dev/null @@ -1,9443 +0,0 @@ -:020000040000FA -:1000000000040020990900002D0600007909000075 -:1000100037060000410600004B060000000000000B -:10002000000000000000000000000000BD0900000A -:1000300055060000000000005F0600006906000091 -:10004000730600007D060000870600009106000090 -:100050009B060000A5060000AF060000B9060000E0 -:10006000C3060000CD060000D7060000E106000030 -:10007000EB060000F5060000FF060000090700007F -:10008000130700001D0700002707000031070000CC -:100090003B070000450700004F070000590700001C -:1000A000630700006D07000077070000810700006C -:1000B0008B070000950700009F070000A9070000BC -:1000C000B3070000BD070000C7070000D10700000C -:1000D000DB070000E5070000EF070000F90700005C -:1000E000030800000D0800001708000021080000A8 -:1000F0002B080000350800003F08000049080000F8 -:10010000530800001FB500F003F88DE80F001FBD75 -:1001100000F038BC70B50B46010B184400F6FF70B8 -:10012000040B4FF080500022090303692403406947 -:1001300043431D1B104600F0E9F929462046BDE85F -:10014000704000F0E3B9F0B54FF6FF734FF4B475AB -:100150001A466E1E12E0A94201D3344600E00C4656 -:10016000B1EB040130F8027B641E3B441A44F9D120 -:100170009CB204EB134394B204EB12420029EAD17F -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000C34992B00446D1E90001CDE91001FF2224 -:1001A0004021684600F094FB94E80F008DE80F00B2 -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7BFFF1090AA208DF8440069 -:1001D00000F0FAF800F0DDF84FF01024A0691022CA -:1001E0006946803000F0DEF8A069082210A900F00E -:1001F000D9F800F0C2F870B504460068A94D072888 -:1002000069D2DFE800F033041929561E2500D4E92D -:10021000026564682946304600F0FDF82A4621460A -:10022000304600F0BFF8AA002146304600F024FB1B -:10023000002800D0032070BD00F0D6FB4FF48050A2 -:1002400007E0201D00F0C6F80028F4D100F0CCFB38 -:1002500060682860002070BD241D94E807009200AB -:1002600000F00AFB0028F6D00E2070BD00F0BEF8AA -:100270000028FAD1D4E9010100EB81034FF080504E -:10028000026945696A43934209D84FF010225369C5 -:1002900003EB81030169406941438B4201D9092085 -:1002A00070BD5069401C01D10F2070BD2046FFF782 -:1002B0006FFF00F09BF80028F7D1201D00F08AF8AE -:1002C0000028F2D160680028F0D100F07DF800F03D -:1002D00060F800F052F8072070BD10B50C461828E1 -:1002E00002D00120086010BD2068FFF784FF206065 -:1002F00010BD4FF01024A069401C05D0A569A66967 -:1003000080353079AA2808D06069401C2DD06069FA -:100310000068401C29D060692CE010212846FFF7B6 -:1003200012FF316881421CD1A16901F18002C03104 -:1003300005E030B108CA51F8040D984201D10120FE -:1003400000E000208A42F4D158B1286810B1042896 -:1003500003D0FEE7284600F070F85249686808604C -:1003600008E000F016F800F008F84FF4805001683B -:10037000491C01D000F012FBFEE7BFF34F8F4A4843 -:1003800001684A4A01F4E06111430160BFF34F8FF5 -:10039000FEE74FF010208169491C02D0806900F00F -:1003A0008CB870472DE9F04117460D4606460024EB -:1003B00006E03046296800F093F8641C2D1D361DB8 -:1003C000BC42F6D3BDE8F0814FF0102080694FF4B5 -:1003D00080519FE64FF080510A69496900684A439D -:1003E000824201D810207047002070474FF08050A3 -:1003F0000169406941434FF01020826902F5805243 -:10040000914201D2092070478069401C01D0002030 -:1004100070470420704770B50C4605464FF480665F -:1004200008E0284600F049F8B44205D3A4F58064FA -:1004300005F58055002CF4D170BD4168044609B122 -:10044000012600E000264FF010256869A26892009E -:1004500000F012FAF8B1A06881006869FFF75AFE4F -:10046000BEB16E694FF08050A56864680169426949 -:100470005143A1420DD9016940694143A94208D9BC -:1004800029463046FFF7C7FF2A4621463046FFF788 -:1004900089FFFFF772FFFFF797FFFFF77AFFF8E793 -:1004A0000C0A0000000000200CED00E00400FA053A -:1004B000144801680029FCD07047134A02211160DA -:1004C00010490B68002BFCD00F4B1B1D18600868EF -:1004D0000028FCD00020106008680028FCD070477D -:1004E000094B10B501221A60064A1468002CFCD092 -:1004F000016010680028FCD00020186010680028F7 -:10050000FCD010BD00E4014004E5014070B50C468C -:10051000054600F073F810B900F07EF828B12146C6 -:100520002846BDE8704000F007B821462846BDE8DF -:10053000704000F037B800007FB5002200920192B1 -:10054000029203920A0B000B6946012302440AE05F -:10055000440900F01F0651F8245003FA06F635430B -:1005600041F82450401C8242F2D80D490868009A94 -:1005700010430860081D0168019A1143016000F0F2 -:100580003DF800280AD0064910310868029A104345 -:100590000860091D0868039A104308607FBD0000C9 -:1005A0000006004030B50F4C002200BF04EB0213E0 -:1005B000D3F800582DB9D3F8045815B9D3F8085812 -:1005C0001DB1521C082AF1D330BD082AFCD204EB1D -:1005D0000212C2F80008C3F804180220C3F8080881 -:1005E00030BD000000E001404FF08050D0F83001F5 -:1005F000082801D000207047012070474FF080503C -:10060000D0F83011062905D0D0F83001401C01D0B7 -:1006100000207047012070474FF08050D0F8300123 -:100620000A2801D0002070470120704708208F4918 -:1006300009680958084710208C4909680958084773 -:1006400014208A4909680958084718208749096809 -:100650000958084730208549096809580847382053 -:1006600082490968095808473C20804909680958A7 -:10067000084740207D4909680958084744207B49BC -:1006800009680958084748207849096809580847FF -:100690004C20764909680958084750207349096871 -:1006A00009580847542071490968095808475820D3 -:1006B0006E490968095808475C206C49096809585F -:1006C0000847602069490968095808476420674954 -:1006D00009680958084768206449096809580847A3 -:1006E0006C20624909680958084770205F49096809 -:1006F0000958084774205D49096809580847782057 -:100700005A490968095808477C2058490968095816 -:1007100008478020554909680958084784205349EB -:100720000968095808478820504909680958084746 -:100730008C204E4909680958084790204B490968A0 -:1007400009580847942049490968095808479820DA -:1007500046490968095808479C20444909680958CE -:100760000847A0204149096809580847A4203F4983 -:10077000096809580847A8203C49096809580847EA -:10078000AC203A49096809580847B0203749096838 -:1007900009580847B4203549096809580847B8205E -:1007A0003249096809580847BC2030490968095886 -:1007B0000847C0202D49096809580847C4202B491B -:1007C000096809580847C82028490968095808478E -:1007D000CC202649096809580847D02023490968D0 -:1007E00009580847D4202149096809580847D820E2 -:1007F0001E49096809580847DC201C49096809583E -:100800000847E0201949096809580847E4201749B2 -:10081000096809580847E820144909680958084731 -:10082000EC201249096809580847F0200F49096867 -:1008300009580847F4200D49096809580847F82065 -:100840000A49096809580847FC20084909680958F5 -:1008500008475FF480700549096809580847000097 -:1008600003480449024A034B70470000000000207F -:10087000180A0000180A000040EA010310B59B079F -:100880000FD1042A0DD310C808C9121F9C42F8D0FA -:1008900020BA19BA884201D9012010BD4FF0FF30AB -:1008A00010BD1AB1D30703D0521C07E0002010BDC1 -:1008B00010F8013B11F8014B1B1B07D110F8013B4D -:1008C00011F8014B1B1B01D1921EF1D1184610BD2E -:1008D00002F0FF0343EA032242EA024200F005B8B5 -:1008E0007047704770474FF000020429C0F0128033 -:1008F00010F0030C00F01B80CCF1040CBCF1020FD3 -:1009000018BF00F8012BA8BF20F8022BA1EB0C01A7 -:1009100000F00DB85FEAC17C24BF00F8012B00F89D -:10092000012B48BF00F8012B70474FF0000200B5C3 -:10093000134694469646203922BFA0E80C50A0E802 -:100940000C50B1F12001BFF4F7AF090728BFA0E8B0 -:100950000C5048BF0CC05DF804EB890028BF40F87C -:10096000042B08BF704748BF20F8022B11F0804FBE -:1009700018BF00F8012B7047014B1B68DB68184754 -:100980000000002009480A497047FFF7FBFFFFF706 -:10099000B9FB00BD20BFFDE7064B1847064A1060B3 -:1009A000016881F30888406800470000180A0000C9 -:1009B000180A0000F3020000000000201EF0040FDF -:1009C0000CBFEFF30881EFF30981886902380078E2 -:1009D000182803D100E00000074A1047074A1268B0 -:1009E0002C3212681047000000B5054B1B68054A01 -:1009F0009B58984700BD0000DB020000000000206B -:100A0000080A0000040000000010000000000000C0 -:080A100000FFFFFF0090D0037E -:10100000E0120020754D0200192F0000E74C02008D -:10101000192F0000192F0000192F000000000000F8 -:10102000000000000000000000000000CD4D0200A4 -:10103000192F000000000000192F0000192F0000D8 -:10104000354E02003B4E0200192F0000192F000000 -:10105000192F0000192F0000192F0000192F000070 -:10106000414E0200192F0000192F0000474E0200C8 -:10107000192F00004D4E0200534E0200594E02003F -:10108000192F0000192F0000192F0000192F000040 -:10109000192F0000192F0000192F0000192F000030 -:1010A000192F00005F4E0200192F0000192F0000B9 -:1010B000192F0000192F0000192F0000192F000010 -:1010C000654E0200192F0000192F0000192F000093 -:1010D000192F0000192F0000192F0000192F0000F0 -:1010E000192F0000192F0000192F0000192F0000E0 -:1010F000192F0000192F0000192F0000192F0000D0 -:10110000192F0000192F000000F002F823F01FFE35 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D123F014FEAFF2090EBAE80F0013F05C -:10113000010F18BFFB1A43F00103184734420200A5 -:10114000544202000A444FF0000C10F8013B13F027 -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A10470000752E0000D7 -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F061FF01B496 -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000023F084BDFC -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704008F060B8BB -:1012600008F069B870B50C461149097829B1A0F1A8 -:1012700060015E2908D3012013E0602804D06928AA -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C000020CC4E020010B504460021012085 -:1012C00000F03DF800210B2000F039F8042119202E -:1012D00000F035F804210D2000F031F804210E2033 -:1012E00000F02DF804210F2000F029F80421C84354 -:1012F00000F025F80621162000F021F8062115201F -:1013000000F01DF82046FFF79BFF002010BDA9212B -:1013100001807047FFF7A4BF11487047104870471D -:10132000104A10B514680F4B0F4A08331A60FFF7C4 -:1013300099FF0C48001D046010BD704770474907B5 -:10134000090E002806DA00F00F0000F1E02080F816 -:10135000141D704700F1E02080F800147047000071 -:1013600003F900421005024001000001FE4800217F -:1013700001604160018170472DE9F743044692B056 -:101380009146406813F060F940B1606813F065F968 -:1013900020B9607800F00300022801D0012000E0AD -:1013A0000020F14E3072484613F00AF918B11020AF -:1013B00015B0BDE8F0834946012001F018FF002870 -:1013C000F6D101258DF842504FF4C050ADF84000E1 -:1013D000002210A9284606F04BFC0028E8D18DF821 -:1013E00042504FF428504FF00008ADF840004746F7 -:1013F0001C216846CDF81C8023F04DFC9DF81C0094 -:1014000008AA20F00F00401C20F0F00010308DF8EA -:101410001C0020788DF81D0061789DF81E0061F396 -:10142000420040F001008DF81E009DF800000AA95E -:1014300040F002008DF800002089ADF83000ADF8D2 -:101440003270608907AFADF834000B97606810AC5C -:101450000E900A94684606F000FA0028A8D1BDF85C -:10146000200030808DF8425042F60120ADF8400057 -:101470009DF81E0008AA20F00600801C20F0010044 -:101480008DF81E000220ADF83000ADF8340013A82E -:101490000E900AA9684606F0E0F9002888D1BDF848 -:1014A00020007080311D484600F033F9002887D1B4 -:1014B0008DF8425042F6A620ADF840001C21684647 -:1014C000CDF81C8023F0E7FB9DF81C00ADF83450EC -:1014D00020F00F00401C20F0F00010308DF81C00B0 -:1014E0009DF81D0008AA20F0FF008DF81D009DF852 -:1014F0001E000AA920F0060040F00100801C8DF8B3 -:101500001E009DF800008DF8445040F002008DF858 -:101510000000CDE90A4711A80E90ADF8305068469A -:1015200006F09BF9002899D1BDF82000F08000203A -:101530003EE73EB504460820ADF80000204613F013 -:101540003FF808B110203EBD2146012001F04FFEBA -:101550000028F8D12088ADF804006088ADF80600B6 -:10156000A088ADF80800E088ADF80A007E4801AB1D -:101570006A468088002106F075FDBDF80010082934 -:10158000E1D003203EBD1FB5044600200290082094 -:10159000ADF80800CDF80CD0204613F011F810B1CA -:1015A000102004B010BD704802AA81884FF6FF7069 -:1015B00006F09AFF0028F4D1BDF80810082901D0E0 -:1015C0000320EEE7BDF800102180BDF80210618015 -:1015D000BDF80410A180BDF80610E180E1E701B577 -:1015E00082B00220ADF800005F4802AB6A46408836 -:1015F000002106F037FDBDF80010022900D00320BD -:101600000EBD1CB5002100910221ADF80010019023 -:1016100012F0FCFF08B110201CBD53486A464188F7 -:101620004FF6FF7006F060FFBDF800100229F3D0FE -:1016300003201CBDFEB54C4C06461546207A0F46CD -:10164000C00705D0084612F0BBFF18B11020FEBD40 -:101650000F20FEBDF82D01D90C20FEBD304612F042 -:10166000AFFF18BB208801A905F040FE0028F4D187 -:1016700030788DF80500208801A906F0D2FC0028FA -:10168000EBD100909DF800009DF8051040F002009D -:101690008DF80000090703D040F008008DF8000025 -:1016A0002088694606F05AFC0028D6D1ADF80850CB -:1016B00020883B4602AA002106F0D4FCBDF80810A1 -:1016C000A942CAD00320FEBD7CB50546002000908B -:1016D00001900888ADF800000C462846019512F0EC -:1016E000B3FF18B9204612F091FF08B110207CBD5D -:1016F00015B1BDF8000050B11B486A4601884FF68D -:10170000FF7006F0F1FEBDF8001021807CBD0C20BA -:101710007CBD30B593B0044600200D4600901421E6 -:1017200001A823F0B8FA1C2108A823F0B4FA9DF808 -:101730000000CDF808D020F00F00401C20F0F00091 -:1017400010308DF800009DF8010020F0FF008DF8AA -:1017500001009DF8200040F002008DF820000120DB -:101760008DF8460002E000000C02002042F6042042 -:10177000ADF8440011A801902088ADF83C006088C5 -:10178000ADF83E00A088ADF84000E088ADF842001A -:101790009DF8020006AA20F00600801C20F001003F -:1017A0008DF802000820ADF80C00ADF810000FA86D -:1017B000059001A908A806F050F8002803D1BDF84B -:1017C00018002880002013B030BD0000F0B5007B69 -:1017D000059F1E4614460D46012800D0FFDF0C2051 -:1017E00030803A203880002C08D0287A032806D090 -:1017F000287B012800D0FFDF17206081F0BDA88979 -:10180000FBE72DE9F04786B0144691F80C900E9A4C -:101810000D46B9F1010F0BD01021007B2E8A8846AE -:10182000052807D0062833D0FFDF06B0BDE8F087D3 -:101830000221F2E7E8890C2100EB400001EB4000B7 -:10184000188033201080002CEFD0E88960810027B9 -:101850001AE00096688808F1020301AA696900F09D -:1018600084FF06EB0800801C07EB470186B204EBFF -:101870004102BDF8040090810DF1060140460E3290 -:1018800010F074FF7F1CBFB26089B842E1D8CCE78A -:1018900034201080E889B9F1010F11D0122148439A -:1018A0000E301880002CC0D0E88960814846B9F11C -:1018B000010F00D00220207300270DF1040A1FE061 -:1018C0000621ECE70096688808F1020301AA69691D -:1018D00000F04BFF06EB0800801C86B2B9F1010F47 -:1018E00012D007EBC70004EB4000BDF80410C18123 -:1018F00010220AF10201103023F02CF97F1CBFB234 -:101900006089B842DED890E707EB470104EB41025B -:10191000BDF80400D0810AF102014046103210F0F7 -:1019200025FFEBE72DE9F0470E4688B090F80CC094 -:1019300096F80C80378AF5890C20109902F10C0476 -:101940004FF0000ABCF1030F08D0BCF1040F3ED0E9 -:10195000BCF1070F7DD0FFDF08B067E705EB850C12 -:1019600000EB4C00188031200880002AF4D0A8F148 -:10197000060000F0FF09558125E0182101A823F099 -:101980008AF900977088434601AA716900F0EDFE5C -:10199000BDF804002080BDF80600E080BDF8080016 -:1019A0002081A21C0DF10A01484610F0DFFEB9F1BA -:1019B000000F00D018B184F804A0A4F802A007EB2F -:1019C000080087B20A346D1EADB2D6D2C4E705EB6B -:1019D000850C00EB4C00188032200880002ABBD018 -:1019E000A8F1050000F0FF09558137E000977088E5 -:1019F000434601AA716900F0B8FE9DF80600BDF8E3 -:101A00000410E1802179420860F3000162F3410192 -:101A1000820862F38201C20862F3C301020962F321 -:101A20000411420962F34511820962F386112171A2 -:101A3000C0096071BDF80700208122460DF109013F -:101A4000484610F093FE18B184F802A0A4F800A054 -:101A500000E007E007EB080087B20A346D1EADB264 -:101A6000C4D279E7A8F1020084B205FB08F000F1C6 -:101A70000E0CA3F800C035230B80002AA6D0558198 -:101A80009481009783B270880E32716900F06DFE08 -:101A900062E72DE9F84F1E460A9D0C4681462AB1A1 -:101AA000607A00F58070D080E089108199F80C0090 -:101AB0000C274FF000084FF00E0A0D2873D2DFE814 -:101AC00000F09E070E1C28303846556A7373730069 -:101AD000214648460095FFF779FEBDE8F88F207B48 -:101AE0009146082802D0032800D0FFDF378030203D -:101AF0000AE000BFA9F80A80EFE7207B914604289E -:101B000000D0FFDF378031202880B9F1000FF1D1FC -:101B1000E3E7207B9146042800D0FFDF37803220A6 -:101B2000F2E7207B9146022800D0FFDF3780332088 -:101B3000EAE7207B1746022800D0FFDF3420A6F812 -:101B400000A02880002FC8D0A7F80A80C5E7207B16 -:101B50001746042800D0FFDF3520A6F800A0288013 -:101B6000002FBAD04046A7F80A8012E0207B174623 -:101B7000052802D0062800D0FFDF10203080362054 -:101B80002880002FA9D0E0897881A7F80E80B9F8C5 -:101B90000E00B881A1E7207B9146072800D0FFDF27 -:101BA00037803720B0E72AE04FF0120018804FF05E -:101BB00038001700288090D0E0897881A7F80E803F -:101BC000A7F8108099F80C000A2805D00B2809D036 -:101BD0000C280DD0FFDF80E7207B0A2800D0FFDF34 -:101BE00001200AE0207B0B2800D0FFDF042004E066 -:101BF000207B0C2800D0FFDF052038736DE7FFDF66 -:101C00006BE770B50C46054601F025FC20B1007865 -:101C1000222804D2082070BD43F2020070BD0521C5 -:101C200028460FF021F8206008B1002070BD032085 -:101C300070BD30B44880087820F00F00C01C20F040 -:101C4000F000903001F8080B1DCA81E81D0030BC7F -:101C500007F0E7BB2DE9FF4784B0002782460297D3 -:101C600007989046894612300AF048F9401D20F046 -:101C70000306079828B907A95046FFF7C2FF0028B6 -:101C800054D1B9F1000F05D00798017B19BB052588 -:101C900004681BE098F80000092803D00D2812D032 -:101CA000FFDF46E0079903254868B0B3497B4288C7 -:101CB0007143914239D98AB2B3B2011D0EF047FE89 -:101CC0000446078002E0079C042508340CB12088F4 -:101CD00010B1032D29D02CE00798012112300AF011 -:101CE0003FF9ADF80C00024602AB2946504608F019 -:101CF000F4F9070001D1A01C029007983A4612306F -:101D0000C8F80400A8F802A003A94046029B0AF004 -:101D100034F9D8B10A2817D200E006E0DFE800F075 -:101D200007091414100B0D141412132014E60020CC -:101D300012E6112010E608200EE643F203000BE63F -:101D4000072009E60D2007E6032005E6BDF80C0094 -:101D50002346CDE900702A465046079900F015FD4C -:101D600057B9032D08D10798B3B2417B406871433E -:101D70008AB2011D0EF0FFFDB9F1000FD7D007990F -:101D800081F80C90D3E72DE9FE4F91461A881C4646 -:101D90008A468046FAB102AB494608F09EF9050032 -:101DA00019D04046A61C27880FF0A2F83246072615 -:101DB00029463B4600960EF0B0FC20882346CDE92C -:101DC00000504A465146404600F0DFFC002020808B -:101DD0000120BDE8FE8F0020FBE710B586B01C4651 -:101DE000AAB104238DF800301388ADF8083052886A -:101DF000ADF80A208A788DF80E200988ADF80C100D -:101E000000236A462146FFF725FF06B010BD1020CB -:101E1000FBE770B50D4605210EF026FF040000D14A -:101E2000FFDF294604F11200BDE870400AF081B8D6 -:101E30002DE9F8430D468046002607F0EFFA0446E8 -:101E40002878102878D2DFE800F0773B345331311E -:101E5000123131310831313131312879001FC0B2AE -:101E6000022801D0102810D114BBFFDF35E004B9DF -:101E7000FFDF052140460EF0F7FE007B032806D069 -:101E800004280BD0072828D0FFDF072655E0287943 -:101E9000801FC0B2022820D050B1F6E72879401F39 -:101EA000C0B2022819D0102817D0EEE704B9FFDF1E -:101EB00013E004B9FFDF287901280ED1172137E09C -:101EC000052140460EF0D0FE070000D1FFDF07F1EC -:101ED000120140460AF00AF82CB12A462146404633 -:101EE000FFF7A7FE29E01321404602F0A9FD24E0F8 -:101EF00004B9FFDF052140460EF0B6FE060000D112 -:101F0000FFDF694606F1120009F0FAFF060000D073 -:101F1000FFDFA988172901D2172200E00A46BDF881 -:101F20000000824202D9014602E005E01729C5D32C -:101F3000404600F03AFCD0E7FFDF3046BDE8F883CA -:101F4000401D20F0030219B102FB01F0001D00E06A -:101F500000201044704713B5009848B1002468462B -:101F60000EF09FFC002C02D1F74A009911601CBDB5 -:101F700001240020F4E72DE9F0470C461546242102 -:101F8000204622F088FE05B9FFDFA8786073288814 -:101F9000DFF8B4A3401D20F00301AF788946DAF8DA -:101FA00000000EF09CFC060000D1FFDF4FF000089F -:101FB0002660A6F8008077B109FB07F1091D0AD059 -:101FC000DAF800000EF08BFC060000D1FFDF66603F -:101FD000C6F8008001E0C4F80480298804F11200EA -:101FE000BDE8F04709F074BF2DE9F047804601F1E4 -:101FF00012000D46814609F081FF401DD24F20F0AE -:1020000003026E7B1446296838680EF093FC3EB1DB -:1020100004FB06F2121D03D0696838680EF08AFCD2 -:1020200005200EF0C9FD044605200EF0CDFD201A56 -:10203000012802D138680EF047FC49464046BDE809 -:10204000F04709F05ABF70B5054605210EF00CFEA9 -:10205000040000D1FFDF04F112012846BDE8704002 -:1020600009F044BF2DE9F04F91B04FF0000BADF8EF -:1020700034B0ADF804B047880C46054692460521B9 -:1020800038460EF0F1FD060000D1FFDF24B1A78035 -:10209000A4F806B0A4F808B0297809220B20B2EB06 -:1020A000111F7DD12A7A04F1100138274FF00C0856 -:1020B0004FF001090391102A73D2DFE802F072F2A7 -:1020C000F1F07F08D2888D9F3DDBF3EEB6B6307B12 -:1020D000022800D0FFDFA88908EBC001ADF804108A -:1020E0003021ADF83410002C25D06081B5F80E9069 -:1020F00000271DE004EBC708317C88F80E10F18939 -:10210000A8F80C10CDF800906888042304AA296967 -:1021100000F02BFBBDF81010A8F8101009F1040016 -:10212000BDF812107F1C1FFA80F9A8F81210BFB278 -:102130006089B842DED80DE1307B022800D0FFDF95 -:10214000E98908EBC100ADF804003020ADF8340097 -:10215000287B0A90001FC0B20F90002CEBD0618149 -:10216000B5F81090002725E0CDF8009068886969DF -:1021700003AA0A9B00F0F9FA0A9804EBC70848443E -:102180001FFA80F908F10C0204A90F9810F0EEFA7A -:1021900018B188F80EB0A8F80CB0BDF80C1001E02A -:1021A000D4E0CFE0A8F81010BDF80E107F1CA8F8FE -:1021B0001210BFB26089B842D6D8CBE00DA800900B -:1021C00001AB224629463046FFF71BFBC2E0307BBD -:1021D000082805D0FFDF03E0307B082800D0FFDFB0 -:1021E000E8891030ADF804003620ADF83400002C3A -:1021F0003FD0A9896181F189A18127E0307B09283D -:1022000000D0FFDFA88900F10C01ADF804103721E0 -:10221000ADF83410002C2CD06081E8890090AB8997 -:10222000688804F10C02296956E0E88939211030E8 -:1022300080B2ADF80400ADF83410002C74D0A98938 -:102240006181287A0E280AD002212173E989E1816F -:10225000288A0090EB8968886969039A3CE001212B -:10226000F3E70DA8009001AB224629463046FFF760 -:1022700059FB6FE0307B0A2800D0FFDF1220ADF859 -:102280000400ADF834704CB3A9896181A4F810B092 -:10229000A4F80EB084F80C905CE020E002E031E09D -:1022A00039E042E0307B0B2800D0FFDF288AADF810 -:1022B00034701230ADF8040084B104212173A9896F -:1022C0006181E989E181298A2182688A00902B8ACB -:1022D000688804F11202696900F047FA3AE0307B3D -:1022E0000C2800D0FFDF1220ADF80400ADF83470E8 -:1022F0003CB305212173A4F80AB0A4F80EB0A4F8E9 -:1023000010B027E00DA8009001AB224629463046C8 -:10231000FFF75CFA1EE00DA8009001AB22462946AB -:102320003046FFF7B6FB15E034E03B21ADF8040082 -:10233000ADF8341074B3A4F80690A4F808B084F88B -:102340000AB007E0FFDF05E010000020297A01292C -:1023500017D0FFDFBDF80400AAF800006CB1BDF88B -:1023600034002080BDF804006080BDF834003928B6 -:1023700003D03C2801D086F80CB011B00020BDE895 -:10238000F08F3C21ADF80400ADF8341014B1697A37 -:10239000A172DFE7AAF80000EFE72DE9F8435688BD -:1023A0000F4680461546052130460EF05DFC0400C0 -:1023B00000D1FFDF123400943B46414630466A6844 -:1023C00009F00FFFBAE570B50D4605210EF04CFC83 -:1023D000040000D1FFDF294604F11200BDE870407F -:1023E00009F099BD70B50D4605210EF03DFC0400C5 -:1023F00000D1FFDF294604F11200BDE8704009F06A -:10240000B7BD70B5054605210EF02EFC040000D1C5 -:10241000FFDF04F1080321462846BDE8704004228E -:10242000B1E470B5054605210EF01EFC040000D194 -:10243000FFDF214628462368BDE870400522A2E45C -:1024400070B5064605210EF00FFC040000D1FFDF39 -:1024500004F1120009F052FD401D20F0030511E0C7 -:10246000011D00880322431821463046FFF78BFCEC -:1024700000280BD0607BABB2684382B26068011D5C -:102480000EF0AFFA606841880029E9D170BD70B5DF -:102490000E46054606F0C2FF040000D1FFDF012012 -:1024A000207266726580207820F00F00C01C20F03A -:1024B000F00030302070BDE8704006F0B2BF2DE96A -:1024C000F0438BB00D461446814606A9FFF799FBF1 -:1024D000002814D14FF6FF7601274FF420588CB115 -:1024E00003208DF800001020ADF8100007A805901B -:1024F00007AA204604A910F058F978B107200BB0BC -:10250000BDE8F0830820ADF808508DF80E708DF806 -:102510000000ADF80A60ADF80C800CE00698A178D8 -:1025200001742188C1818DF80E70ADF80850ADF8A6 -:102530000C80ADF80A606A4602214846069BFFF708 -:1025400089FBDCE708B501228DF8022042F6020281 -:10255000ADF800200A4603236946FFF73EFC08BD9C -:1025600008B501228DF8022042F60302ADF80020E2 -:102570000A4604236946FFF730FC08BD00B587B062 -:1025800079B102228DF800200A88ADF80820498828 -:10259000ADF80A1000236A460521FFF75BFB07B080 -:1025A00000BD1020FBE709B1072316E407207047A0 -:1025B00070B588B00D461446064606A9FFF721FB04 -:1025C00000280ED17CB10620ADF808508DF800002F -:1025D000ADF80A40069B6A460821DC813046FFF7C9 -:1025E00039FB08B070BD05208DF80000ADF808502B -:1025F000F0E700B587B059B107238DF80030ADF88A -:102600000820039100236A460921FFF723FBC6E750 -:102610001020C4E770B588B00C460646002506A910 -:10262000FFF7EFFA0028DCD106980121123009F0FB -:1026300097FC9CB12178062921D2DFE801F0200522 -:1026400005160318801E80B2C01EE28880B20AB14F -:10265000A3681BB1824203D90C20C2E71020C0E757 -:10266000042904D0A08850B901E00620B9E7012967 -:1026700013D0022905D004291CD005292AD007200F -:10268000AFE709208DF800006088ADF80800E08809 -:10269000ADF80A00A068039023E00A208DF800003E -:1026A0006088ADF80800E088ADF80A00A0680A2547 -:1026B000039016E00B208DF800006088ADF808004C -:1026C000A088ADF80A00E088ADF80C00A0680B25E2 -:1026D000049006E00C208DF8000060788DF808006A -:1026E0000C256A4629463046069BFFF7B3FA78E781 -:1026F00000B587B00D228DF80020ADF8081000233A -:102700006A461946FFF7A6FA49E700B587B071B1E6 -:1027100002228DF800200A88ADF808204988ADF81B -:102720000A1000236A460621FFF794FA37E71020C3 -:1027300035E770B586B0064601200D46ADF80810A5 -:102740008DF80000014600236A463046FFF782FA02 -:10275000040008D12946304605F09EFC0021304691 -:1027600005F0B8FC204606B070BDF8B51C4615460D -:102770000E46069F0EF0AAFB2346FF1DBCB2314653 -:102780002A4600940DF095FFF8BD30B41146DDE9FE -:1027900002423CB1032903D0002330BC08F026BB21 -:1027A0000123FAE71A8030BC704770B50C46054625 -:1027B000FFF72FFB2146284605F07DFC2846BDE8A3 -:1027C0007040012105F086BC4FF0E0224FF400413B -:1027D0000020C2F88011204908702049900208604A -:1027E000704730B51C4D04462878A04218BF002C15 -:1027F00002D0002818BFFFDF2878A04208BF30BDF4 -:102800002C701749154A0020ECB1164DDFF858C05E -:10281000131F012C0DD0022C1CBFFFDF30BD086040 -:1028200003200860CCF800504FF4000010601860DE -:1028300030BD086002200860CCF800504FF04070B6 -:102840001060186030BD086008604FF06070106064 -:1028500030BD00B5FFDF00BD1800002008F50140C5 -:1028600000F500408C02002014F5004070B50B20EC -:1028700000F0B5F9082000F0B2F900210B2000F0BB -:10288000C4F90021082000F0C0F9EC4C0125656076 -:10289000A5600020C4F84001C4F84401C4F8480110 -:1028A0000B2000F0A7F9082000F0A4F90B2000F09D -:1028B0008BF9256070BD10B50B2000F090F9082051 -:1028C00000F08DF9DD48012141608160DC490A6832 -:1028D000002AFCD10021C0F84011C0F84411C0F812 -:1028E00048110B2000F086F9BDE81040082000F0E8 -:1028F00081B910B50B2000F07DF9BDE8104008202B -:1029000000F078B900B530B1012806D0022806D011 -:10291000FFDF002000BDCB4800BDCB4800BDCA484A -:10292000001D00BD70B5C9494FF000400860C84D9A -:10293000C00BC5F80803C74800240460C5F840412F -:102940000820C43500F04BF9C5F83C41C24804707A -:1029500070BD08B5B94A002128B1012811D002285C -:102960001CD0FFDF08BD4FF48030C2F80803C2F866 -:102970004803B3483C300160C2F84011BDE808404C -:10298000D0E74FF40030C2F80803C2F84803AC485F -:1029900040300160C2F84411AB480CE04FF4802095 -:1029A000C2F80803C2F84803A54844300160C2F8E1 -:1029B0004811A548001D0068009008BD70B5164676 -:1029C0000D460446022800D9FFDF00229B48012360 -:1029D00004F110018B4000EB8401C1F8405526B191 -:1029E000C1F84021C0F8043303E0C0F80833C1F84F -:1029F0004021C0F8443370BD2DE9F0411C46154616 -:102A000030B1012834D0022839D0FFDFBDE8F08191 -:102A1000891E002221F07F411046FFF7CFFF012CD5 -:102A200024D000208C4E8A4F012470703C6189496B -:102A300000203C3908600220091D086085490420F7 -:102A40003039086083483D350560C7F800420820EA -:102A500000F0D0F82004C7F80403082000F0B4F810 -:102A60007A49E007091F08603470CFE70120D9E7F1 -:102A7000012B02D00022012005E00122FBE7012BFF -:102A800004D000220220BDE8F04197E70122F9E7D7 -:102A90006B480068704770B500F0C7F8674C054692 -:102AA000D4F840010026012809D1D4F80803C00356 -:102AB00005D54FF48030C4F80803C4F84061D4F859 -:102AC000440101280CD1D4F80803800308D54FF441 -:102AD0000030C4F80803C4F84461012010F029FE56 -:102AE000D4F8480101280CD1D4F80803400308D5D4 -:102AF0004FF48020C4F80803C4F84861022010F0A5 -:102B000018FE5648056070BD70B500F08EF8524D45 -:102B10000446287858B1FFF705FF687820B10020F7 -:102B200085F8010010F005FE4C48046070BD0320DC -:102B3000F8E74FF0E0214FF40010C1F800027047B1 -:102B4000152000F057B8424901200861082000F024 -:102B500051B83F494FF47C10C1F8080300200246E9 -:102B600001EB8003C3F84025C3F84021401CC0B2EC -:102B70000628F5D37047410A43F609525143C0F382 -:102B8000080010FB02F000F5807001EB5020704748 -:102B900010B5430B48F2376463431B0C5C020C60B6 -:102BA0002F4C03FB04002F4B4CF2F72443435B0DE7 -:102BB00013FB04F404EB402000F580704012107009 -:102BC00008681844086010BD00F01F020121914000 -:102BD0004009800000F1E020C0F80011704700F0CB -:102BE0001F02012191404009800000F1E020C0F85F -:102BF0008011704700F01F020121914040098000C0 -:102C000000F1E020C0F8801270474907090E002843 -:102C100006DA00F00F0000F1E02080F8141D704784 -:102C200000F1E02080F8001470470C48001F006895 -:102C30000A4A0D49121D11607047000000B00040A3 -:102C400004B500404081004044B1004008F5014017 -:102C500000800040408500403800002014050240FC -:102C6000F7C2FFFF6F0C0100010000010A4810B518 -:102C70000468094909480831086010F0EEFD06486B -:102C8000001D046010BD0649002008604FF0E021DF -:102C90000220C1F8800270471005024001000001C7 -:102CA000FC1F004010B50D2000F06FF8C4B26FF0AB -:102CB000040000F06AF8C0B2844200D0FFDF3A4955 -:102CC0000120086010BD70B50D2000F048F8374CA9 -:102CD0000020C4F800010125C4F804530D2000F0C1 -:102CE00049F825604FF0E0216014C1F8000170BD83 -:102CF00010B50D2000F033F82C480121416000216F -:102D0000C0F80011BDE810400D2000F033B828488D -:102D100010B5046826492748083108602349D1F8CE -:102D20000001012804D0FFDF2148001D046010BD10 -:102D30001D48001D00680022C0B2C1F8002111F03A -:102D400039F9F1E710B51948D0F800110029FBD086 -:102D5000FFF7DDFFBDE810400D2000F00BB800F0DC -:102D60001F02012191404009800000F1E020C0F8DD -:102D70008011704700F01F0201219140400980003E -:102D800000F1E020C0F880127047002806DA00F059 -:102D90000F0000F1E02090F8140D03E000F1E020B6 -:102DA00090F800044009704704D5004000D000406E -:102DB000100502400100000110B5202000F082F84B -:102DC000202000F08AF84A49202081F8000449496F -:102DD00000060860091D48480860FEF79DFA45494D -:102DE000C83108604548D0F8041341F00101C0F82B -:102DF0000413D0F8041341F08071C0F804133C4967 -:102E000001201C39C1F8000110BD10B5202000F0D0 -:102E100059F8384800210160001D0160354A481EFC -:102E2000E83A1060354AC2F80803324BC8331960DB -:102E3000C2F80001C2F8600131490860BDE81040E5 -:102E4000202000F04AB82B492E48EC390860704722 -:102E500028492C48E8390860704726480160001D61 -:102E6000521E0260704723490120E8390860BFF311 -:102E70004F8F704770B51F4A8069E83A2149116049 -:102E80001E49D1F8006100231F4D1D4A5C1E1EB172 -:102E9000A84206D300210FE0D1F8606186B1A842B4 -:102EA00009D2C1F80031C1F860311460BDE870404A -:102EB000202000F012B81168BDE8704021F012BF68 -:102EC000FFDF70BD00F01F0201219140400980002A -:102ED00000F1E020C0F88011704700F01F020121CE -:102EE00091404009800000F1E020C0F88012704756 -:102EF00020E000E000060240C41400200000024070 -:102F00000004024001000001006002000F4A126844 -:102F10000D498A420CD118470C4A12680A4B9A4252 -:102F200006D101B511F0C0F8FFF78DFFBDE80140F3 -:102F3000074909680958084706480749054A064BE2 -:102F40007047000000000000BEBAFECAB0000020BA -:102F500004000020E0120020E012002070B50C46B2 -:102F6000054609F0DBFA21462846BDE870400AF024 -:102F7000C0BB10B511F01EFDFFF726FC11F09EFB43 -:102F8000BDE8104011F050BC012081070860704777 -:102F9000012081074860704712480068C00700D0D0 -:102FA000012070470F48001F0068C00700D00120B3 -:102FB00070470C4808300068C00700D001207047F7 -:102FC000084810300068704706490C310A68D2037F -:102FD00006D5096801F00301814201D10120704743 -:102FE000002070470C0400407047704770477047DE -:102FF000704770477047704770470004050600002F -:103000002CFFFFFFDBE5B15100600200A900FFFFCC -:103010008C000000808D5B0016425791AD5F58BC5C -:103020008E702F5A0FAA100DBCD52BFD30B5FC4D5C -:103030000446062CA9780ED2DFE804F0030E0E0E2B -:103040000509FFDF08E0022906D0FFDF04E00329BD -:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA -:103060001038EF4D07280CD2DFE800F0040C060CF6 -:103070000C0C0C00FFDF05E0287E112802D0FFDFDA -:1030800000E0FFDF2C7630BD2DE9F0410FF0F8FCB9 -:10309000044610F08CFE201AC5B206200DF08CFDFF -:1030A000044606200DF090FD211ADD4C207E1228EA -:1030B00018D000200F1807200DF07EFD06460720CF -:1030C0000DF082FD301A3918207E13280CD0002014 -:1030D0000144A078042809D000200844281AC0B26E -:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 -:1030F000CB4810B590F825004108C94800F12600DA -:1031000005D00BF0EBFABDE8104005F0B3BF0BF0B3 -:10311000BEFAF8E730B50446A1F120000D460A28B2 -:103120004AD2DFE800F005070C1C2328353A3F445B -:10313000FFDF42E0207820283FD1FFDF3DE0B848A4 -:103140008178052939D0007E122836D020782428AD -:1031500033D0252831D023282FD0FFDF2DE0207851 -:1031600022282AD0232828D8FFDF26E0207822280A -:1031700023D0FFDF21E0207822281ED024281CD075 -:1031800026281AD0272818D0292816D0FFDF14E0C7 -:103190002078252811D0FFDF0FE0207825280CD0DB -:1031A000FFDF0AE02078252807D0FFDF05E0207840 -:1031B000282802D0FFDF00E0FFDF257030BD10B50A -:1031C000012803D0022805D0FFDF10BDBDE8104064 -:1031D00003202BE79248007E122800D0FFDF002159 -:1031E000052011F0A1F9BDE81040112036E71FB508 -:1031F00004466A46002001F01FFEB4B1BDF802206B -:103200004FF6FF700621824201D1ADF80210BDF8E1 -:103210000420824201D1ADF80410BDF808108142AB -:1032200003D14FF44860ADF8080068460CF06AF925 -:1032300005F020FF04B010BD70B514460D460646DB -:1032400011F0BEF958B90DB1A54201D90C2070BDDD -:10325000002408E056F8240011F0B2F908B110205B -:1032600070BD641CE4B2AC42F4D3002070BD2DE903 -:10327000F04105461F4690460E460024006811F0B6 -:10328000ECF908B110202BE728680028A88802D0A4 -:10329000B84202D84FE00028F5D0092020E728687E -:1032A000025DB2B1611C475C152F2DD03BDC3AD2D8 -:1032B000DFE807F03912222228282A2A3131393949 -:1032C00039393939393939392200025D32BB641C48 -:1032D000A4B2A142F9D833E0022ADED1A21C805C5C -:1032E00088F80000072801D2400701D40A20F7E639 -:1032F000307840F0010015E0D043C00707E0012A14 -:1033000007D010E00620EBE61007A0F1805000285F -:10331000F5D01846E4E63078820701D50B20DFE6C9 -:1033200040F0020030702868005D084484B2A8882C -:10333000A04202D2B1E74FF4485381B2A142AED8C5 -:103340000020CDE610B5027843F202235408012292 -:10335000022C12D003DC3CB1012C16D106E0032C68 -:1033600010D07F2C11D112E0002011E080790324CD -:10337000B4EB901F09D10A700BE08079B2EB901F7B -:1033800003D1F8E780798009F5D0184610BDFF20F9 -:103390000870002010BD224991F82E2042B191F80A -:1033A0002F10022909D0032909D043F202207047C7 -:1033B00001461B48253001F092BD032100E00121A8 -:1033C00001700020704738B50C460546694601F08B -:1033D00086FD00280DD19DF80010207861F347008C -:1033E000207055F8010FC4F80100A888A4F8050062 -:1033F000002038BD38B51378B0B1022814D0FF28AA -:103400001BD008A46D46246800944C7905EB9414F5 -:10341000247864F34703137003280AD010E00000F7 -:10342000D80100200302FF0123F0FE0313700228DD -:10343000F2D1D8B240F0010005E043F0FE00107078 -:10344000107820F0010010700868C2F80100888828 -:10345000A2F8050038BD02210DF006BC38B50C46B7 -:103460000978222901D2082038BDADF800008DF876 -:10347000022068460BF079F905F0FCFD050003D148 -:1034800021212046FFF746FE284638BD1CB5002006 -:103490008DF80000CDF80100ADF80500FE4890F869 -:1034A0002E00022801D0012000E000208DF8070046 -:1034B00068460BF092FB002800D0FFDF1CBD002205 -:1034C0000A80437892B263F345120A8043785B081E -:1034D00063F386120A8000780C282BD2DFE800F014 -:1034E0002A06090E1116191C1F220C2742F0110082 -:1034F00009E042F01D0008800020704742F01100F2 -:1035000012E042F0100040F00200F4E742F0100038 -:10351000F1E742F00100EEE742F0010004E042F082 -:103520000200E8E742F0020040F00400E3E742F066 -:103530000400E0E7072070472DE9FF478AB0002527 -:10354000BDF82C6082461C4691468DF81C507007D1 -:1035500003D5606811F034F868B9CF4F4FF0010817 -:1035600097F82E0058B197F82F00022807D160680D -:1035700011F073F818B110200EB0BDE8F0873007D5 -:1035800002D5A08980283DD8700705D4B9F1000F75 -:1035900002D097F8240098B3E07DC0F300108DF8B6 -:1035A0001B00627D072003215AB3012A2CD0022A76 -:1035B000E2D0042AE0D18DF81710F00627D4A27DBE -:1035C000072022B3012A22D0022A23D0042AD3D1F1 -:1035D0008DF819108DF81590606810B307A9FFF7E2 -:1035E000B1FE0028C8D19DF81C00FF2816D06068E5 -:1035F00050F8011FCDF80F108088ADF8130014E0CB -:1036000000E001E00720B7E78DF81780D5E78DF8D7 -:103610001980DFE702208DF81900DBE743F2022072 -:10362000AAE7CDF80F50ADF81350E07B40B9207CED -:1036300030B9607C20B9A07C10B9E07CC00601D014 -:10364000062099E78DF800A0BDF82C00ADF8020027 -:10365000A0680190A068029004F10F0001F033FC13 -:103660008DF80C000DF10D00FFF795FE00B1FFDFA6 -:103670009DF81C008DF80E008DF816508DF818502E -:10368000E07D08A900F00F008DF81A0068460CF0E4 -:10369000F8F805F0EFFC6FE7F0B59DB000228DF86B -:1036A00068208DF858208DF8602005468DF86C2034 -:1036B000129213921492159219B10FC912AC84E8A8 -:1036C0000F00754CA078052801D004280CD1129861 -:1036D0006168884200D120B91498E168884203D11A -:1036E00010B108201DB0F0BD1F26334618AA1AA934 -:1036F00012A8FFF7BCFD0028F4D133461BAA16A977 -:1037000014A8FFF7B4FD0028ECD19DF85800C007BD -:1037100001D00A20E6E7A08A410708D4A17D31B193 -:103720009DF86010890702D043F20120DAE79DF886 -:103730006010C90709D0400707D4208818B144F2A7 -:103740005061884201D90720CCE78DF8005003264C -:103750008DF8016001278DF80270BDF84C208DF8BE -:10376000032001A8129921F0F5F968460CF0F0F851 -:1037700005F080FC0028B5D18DF824508DF8256027 -:103780008DF82670BDF854208DF827200AA81499CA -:1037900021F0E0F909A80CF028F905F06BFC0028ED -:1037A000A0D112AD241D95E80F0084E80F00002081 -:1037B00098E770B586B00D46040005D010F04DFFB7 -:1037C00020B1102006B070BD0820FBE72078C107AB -:1037D000A98802D0FF2902D303E01F2901D20920C2 -:1037E000F0E7800761D4FFF74FFC38B12078C0F3D1 -:1037F000C101012904D0032902D005E01320E1E72B -:10380000254991F8241041B1C0074FF000054FF051 -:10381000010604D08DF80F6003E00720D2E78DF891 -:103820000F506846FFF7B7FD00B1FFDF2078C0F307 -:10383000C1008DF801008DF80250607808B98DF84C -:1038400002606078C00705D09DF8020040F00100DA -:103850008DF802006078800705D59DF8020040F0E1 -:1038600002008DF802006078400705D59DF802003F -:1038700040F004008DF802002078C0F380008DF83D -:1038800003006088ADF80600A088ADF80A00207A31 -:1038900058B9607A48B901E0D8010020A07A20B96F -:1038A000E07A10B9207BC00601D006208AE704F137 -:1038B000080001F008FB8DF80E0068460BF090FA46 -:1038C00005F0D8FB00288BD18DF810608DF81150D1 -:1038D000ADF81250ADF8145004A80BF0CBFA05F077 -:1038E000C9FB00288BD1E08864280AD248B10120A6 -:1038F00001F0FFFA002891D12078C00705D01520EB -:1039000004E06421B0FBF1F0F2E71320FFF7A6FB1F -:10391000002057E72DE9FF470220FF4E8DF80400F5 -:103920000027708EADF80600B84643F202094CE05D -:1039300001A80DF000F9050006D0708EA8B3A6F816 -:103940003280ADF806803EE0039CA07F01072DD5B4 -:1039500004F124000090A28EBDF80800214604F175 -:10396000360301F056FC050005D04D452AD0112D37 -:103970003CD0FFDF3AE0A07F20F00801E07F420862 -:1039800062F3C711A177810861F30000E07794F832 -:10399000210000F01F0084F820002078282826D17C -:1039A00029212046FFF7B6FB21E014E040070AD5A5 -:1039B000BDF8080004F10E0101F0A9FA05000DD0D0 -:1039C0004D4510D100257F1CFFB202200DF0F4F808 -:1039D000401CB842ACD8052D11D008E0A07F20F0E3 -:1039E0000400A07703E0112D00D0FFDF0025BDF813 -:1039F00006007086052D04D0284604B0BDE5A6F863 -:103A000032800020F9E770B50646FFF724FD054631 -:103A100005F004FD040000D1FFDF6680207820F06F -:103A20000F00801C20F0F000203020700620207253 -:103A300095F83E006072BDE8704005F0F2BC2DE9DB -:103A4000F04786B0040000D1FFDF2078B24D20F0AF -:103A50000F00801C20F0F00070302070606801784A -:103A6000491F1B2933D2DFE801F0FE32323255FD07 -:103A7000320EFDFD42FC32323278FCFCFB32323237 -:103A8000FCFCFAF9FC00C6883046FFF7E4FC05466A -:103A9000304607F0A9F8E0B16068007A85F83E008A -:103AA00021212846FFF736FB3046FEF7CCFA304698 -:103AB00003F018FE3146012010F036FDA87F20F0FB -:103AC0001000A877FFF726FF002800D0FFDF06B020 -:103AD00053E5207820F0F00020302070062020727E -:103AE00066806068007A607205F09BFCD8E7C58844 -:103AF0002846FFF7B0FC00B9FFDF606800790128B5 -:103B000000D0FFDF6068017A06B02846BDE8F047C4 -:103B100007F046BCC6883046FFF79DFC050000D183 -:103B2000FFDF05F07EFC606831460089288160680F -:103B30004089688160688089A881012010F0F4FCC8 -:103B40000020A875A87F00F003000228BFD1FFF76E -:103B5000E1FE0028BBD0FFDFB9E70079022811D0D1 -:103B600000B1FFDF05F05DFC6668B6F806A0307AAC -:103B7000361D01280CD0687E814605F0E7F9070064 -:103B800009D107E006B00220BDE8F047FFF717BBF8 -:103B9000E878F1E7FFDF0022022150460DF05BF8E4 -:103BA000040000D1FFDF22212046FFF7B3FA30796D -:103BB000012800D00220A17F804668F30101A1778F -:103BC000308B2081708B6081B08BA08184F8229033 -:103BD0008DF80880B8680090F86801906A46032163 -:103BE00050460DF038F800B9FFDFB888ADF8100086 -:103BF000B8788DF8120004AA052150460DF02BF874 -:103C000000B9FFDFB888ADF80C00F8788DF80E0029 -:103C100003AA042150460DF01EF800B9FFDF06216B -:103C200006F1120001F091F938B37079800700D5E0 -:103C3000FFDF7179E07D61F34700E075D6F806009B -:103C4000A0617089A083062106F10C0001F07DF9C6 -:103C5000E8B195F825004108607805E032E02AE0F7 -:103C600047E03FE021E035E061F347006070D5F8C0 -:103C70002600C4F80200688D12E0E07D20F0FE000E -:103C8000801CE075D6F81200A061F08ADAE760784F -:103C900020F0FE00801C6070F068C4F80200308ADA -:103CA000E0804046FFF78BFA11E706B02046BDE8FA -:103CB000F04701F037BD05F0B4FB15F8300F40F0C8 -:103CC000020005E005F0ADFB15F8300F40F00400F0 -:103CD0002870FCE6287E132809D01528E4D1162088 -:103CE000FFF7BCF906B0BDE8F04705F09ABB142019 -:103CF000F6E7A978052909D00429D5D105F091FB6B -:103D0000022006B0BDE8F047FFF790B9007900281F -:103D1000CAD0E87802E00000D801002001F0BAF82B -:103D200005F07FFB0320ECE72DE9F05F0546007806 -:103D30004FF000080009DFF820A891460C464646DF -:103D400001287AD001274FF0020C4FF6FF730228AA -:103D500074D007280BD00A2871D0FFDFA9F80060C3 -:103D600014B1A4F8008066800020BDE8F09F696867 -:103D700004F108000A78172A70D010DC4FF0000B0D -:103D8000142A31D006DC052A6DD0092A0FD0102A5A -:103D90007ED11FE0152A7CD0162AF9D1F0E01B3A1B -:103DA000052A75D2DFE802F009C5FDDAFC00C888F3 -:103DB0004FF012081026214675E14FF01C080A2624 -:103DC000D4B38888A0806868807920726868C079D8 -:103DD0006072C3E74FF01B0814266CB303202072F7 -:103DE00068688088A080B9E70A793C2AB6D00D1DA2 -:103DF0004FF010082C26FCB16988A180298B6182C4 -:103E0000298B2182698BA182A98BE1826B79024681 -:103E1000A91D1846FFF7EEFA2879012810D084F87A -:103E20000FC0FF202076C4F81CB0C4F820B0C4F83E -:103E300024B0C4F828B091E712E013E13BE135E18A -:103E4000E7730AF1040084F818B090E80E00DAF87D -:103E50001000C4E90930C4E907127FE7A8E002E0D6 -:103E6000A9F8006080E72C264FF01D08002CF7D041 -:103E70000546A380887B2A880F1D60F300022A80F4 -:103E8000887B400860F341022A80887B800801E03B -:103E9000E6E0ADE060F382022A80887BB91CC008AE -:103EA00060F3C3022A80B87A0011401C60F3041248 -:103EB00002F07F0028807878AA1CFFF79BFA387DF3 -:103EC00005F1090207F11501FFF794FA387B01F0BB -:103ED0004BF82874787B01F047F86874F87EA87472 -:103EE000787AE87497F83B002875B87B6875A5F870 -:103EF00016B0DAF81C00A861397ABAF820008842B6 -:103F000001D2014610E0B87AC0F3411002280BD06C -:103F1000012809D0288820F060002880A1840A4662 -:103F200007F11C01A86998E0288820F06000403063 -:103F3000F3E711264FF02008002C91D0A380686889 -:103F400004F10A02007920726868007B6072696877 -:103F50008B1D48791946FFF74DFAFFE60A264FF008 -:103F60002108002CE9D08888A080686880792072B8 -:103F70006868C07960729AF8301021F004018BE013 -:103F80000B264FF02208002CD7D0C888A080686884 -:103F9000007920726868007A00F0E6FF607201E044 -:103FA00052E039E06868407A00F0DEFFA072D5E6A2 -:103FB0001C264FF02608002CBFD0A38068684079EB -:103FC00060726868007AA0720AF1040090E80E003E -:103FD000DAF81000C4E90530C4E903126868007912 -:103FE0003C2803D043287DD0FFDFB7E62772B5E633 -:103FF00010264FF02408002C9FD08888A080686885 -:10400000807920816868807A608168680089A081F1 -:1040100068688089E081A1E610264FF02308002C13 -:104020008BD08888A0806868C088208168680089F3 -:10403000608168684089A08168688089E0819AF819 -:10404000301021F0020127E030264FF02508002C27 -:1040500088D0A38069682822496820F07BFD7DE62E -:104060004A4677E0287A012803D0022817D0FFDFDC -:1040700074E610264FF01F08002C85D06888A080B9 -:10408000A8892081E8896081288AA081688AE081E6 -:104090009AF8301021F001018AF830105EE64FF0F6 -:1040A00012081026688800F03DFF57E62846BDE854 -:1040B000F05F01F0C1BC287A07284DD2DFE800F09C -:1040C0004C38384A4A4A040009264FF01108002C9F -:1040D00092D06F883846FFF7BEF990F822A0A780EB -:1040E000687A00E02DE02072042138460CF0CEFD05 -:1040F000052138460CF0CAFD002138460CF0C6FDFB -:10410000012138460CF0C2FD032138460CF0BEFDFB -:10411000022138460CF0BAFD062138460CF0B6FDF7 -:10412000072138460CF0B2FD504600F0B3FE15E60C -:1041300014264FF01B08002C8AD0A380287A01286F -:1041400002D084F808C009E62772DAE90710C4E94A -:10415000031003E62146A9E7FFDFFFE570B5FE4D3A -:10416000287E122801D0082070BD0BF094F904F0CD -:1041700081FF040002D1687E00F08CFE0021052042 -:1041800010F0D2F9204670BD1CB5F348007E13280C -:1041900001D208201CBD00208DF8000068460AF0FE -:1041A00069FE04F067FF0028F4D10021052010F01B -:1041B000BBF91120FEF752FF00201CBD70B501288D -:1041C00005D0052825D0062800D0FFDF70BD8DB2B0 -:1041D0002846FFF740F9040000D1FFDF20782128AE -:1041E000F4D005F01BF968B1017821F00F01891CAA -:1041F00021F0F00110310170022101724580002090 -:10420000A07528E021462846BDE870401322FFF73C -:1042100025B9D148047EA4F1120005281FD2DFE899 -:1042200000F0060303030300FFF7AEFF01E0FFF712 -:1042300095FF0028CAD105F0F1F80028C6D0017812 -:1042400021F00F01891C21F0F00120310170132CA5 -:1042500007D002210172BDE8704005F0E2B8FFDF2F -:1042600070BD0121F6E72DE9F04116460C008046AD -:1042700000D1FFDF307820F00F00801C20F0F0002C -:10428000103030702078012804D0022818D0FFDFC9 -:10429000BDE8F0814046FFF7DEF8050000D1FFDF02 -:1042A0000320A87505F0BDF894E80F00083686E8ED -:1042B0000F00A94810F8301F41F001010170E7E735 -:1042C0004046FFF7C8F8050000D1FFDFA1884FF690 -:1042D000FF700027814202D1E288824203D08142EE -:1042E00001D1E08840B105F09CF894E80F00083651 -:1042F00086E80F00AF75CBE7A87D0128C8D17823E9 -:104300000022414610F066F80220A875C0E738B5D3 -:1043100005460C46084610F053F918BB203D062D03 -:104320004AD2DFE805F0031B373C4230002106206B -:1043300010F0D0F808B1112038BDA01C0BF07EF9A8 -:1043400004F098FE050038D100220823114606200B -:1043500010F040F8062830D0FFDF2EE0606810F043 -:1043600073F908B1102038BD618820886A460BF0C7 -:104370003BFD04F07FFE05001FD16068E8B1BDF889 -:104380000010018019E0A07800F0010120880BF0F6 -:1043900061FD0EE0206801F0FDFD05460DE020788E -:1043A00000F001000AF066F903E0618820880BF054 -:1043B000A0FC04F05FFEF0E70725284638BD70B585 -:1043C00005460C46084610F021F908B1102070BDD2 -:1043D000202D07D0212D0DD0222D0BD0252D09D039 -:1043E000072070BD2088A11C0AF039FABDE8704092 -:1043F00004F040BE062070BD57482530704708B510 -:104400003421554820F047FC0120FEF70FFE112013 -:10441000FEF724FE50496846263104F095FF4E48C9 -:104420009DF8002010F8251F62F3470121F00101DB -:104430000170002141724FF46171A0F80710022150 -:104440008172FEF755FE00B1FFDFFCF78FFF01F030 -:1044500034F908BD10B50C464021204620F0F9FB88 -:10446000A07F20F00300A077202020700020A075FE -:1044700084F8230010BD70472DE9FC41074610F079 -:104480009FF810B11020BDE8FC81334E06F12501E4 -:10449000D6F825000090B6F82950ADF8045096F8EB -:1044A0002B408DF806403846FEF78DFF0028EAD1F4 -:1044B000FEF71EFE0028E6D0009946F8251FB580BD -:1044C000B471E0E710B5044610F0A0F808B1102070 -:1044D00010BD21482049224690F825002631400889 -:1044E000FEF788FF002010BDFEB50D4604004FF01A -:1044F000000712D00822FEF79FFE002812D10026E6 -:1045000009E000BF54F826006946FEF71BFF0028AB -:1045100008D1761CF6B2AE42F4D309F0AEFF10B16A -:1045200043F20320FEBD0C4E86F8247024B300270E -:104530001EE000BF54F8270002A9FEF703FF00B1F8 -:10454000FFDF9DF808008DF8000054F8270050F8B0 -:10455000011FCDF8011001E0D80100208088ADF8DE -:104560000500684609F0D3FF00B1FFDF7F1CFFB2F2 -:10457000AF42DFD386F824500020FEBD2DE9F0477E -:104580008AB01546894604001ED00F4608222946E7 -:10459000FEF752FE002810D1002613E054F8260042 -:1045A0006946103000F09BFC002806D147B157F84F -:1045B000260010F005F818B110200AB0BDE8F08709 -:1045C000761CF6B2AE42E9D30026A5F101081BE045 -:1045D00006F1010A0AF0FF0712E000BF54F82600B6 -:1045E000017C4A0854F827100B7CB2EB530F05D11D -:1045F00006221130113120F081FA58B17F1CFFB230 -:10460000AF42EBD30AF0FF064645E1DB4E4624B14C -:10461000012003E043F20520CFE7002009F0A8FFC6 -:1046200010B909F0B9FF10B143F20420C5E75CB33B -:1046300000270DF1170825E054F8270069461030CF -:1046400000F04DFC00B1FFDF54F82700102250F8B5 -:10465000111FCDF801108088ADF8050054F827101F -:104660000DF1070020F076FA96B156F827101022C7 -:10467000404620F06FFA684609F022FF00B1FFDFE4 -:104680007F1CFFB2AF42D7D3FEF700FF002094E7B4 -:10469000404601F073FCEEE730B585B004460FF0FC -:1046A0008FFF18B960680FF0D8FF10B1102005B067 -:1046B00030BD60884AF2B811884206D82078FB4D98 -:1046C00028B1012806D0022804D00720EFE7FEF722 -:1046D0000FFD18E06078022804D0032802D043F2CE -:1046E0000220E4E785F82F00C1B200200090ADF869 -:1046F000040002292CD0032927D0FFDF684609F0E7 -:10470000EDFF04F0B7FC0028D1D1606801F029FC6E -:10471000207858B101208DF800000DF1010001F062 -:104720002DFC68460BF0F5FB00B1FFDF207885F823 -:104730002E00FEF7ABFE608860B1A88580B209F05C -:104740000FFF00B1FFDF0020B1E78DF80500D5E7CE -:104750004020FAE74FF46170EFE710B504460FF020 -:1047600055FF20B9606838B10FF06EFF08B1102016 -:1047700010BD606801F002FCCC4830F82C1F61804D -:10478000C178617080782070002010BD2DE9F84359 -:104790001446894606460FF039FFA0B948460FF087 -:1047A0005CFF80B920460FF058FF60B9BF4DA87874 -:1047B000012800D13CB13178FF2906D049B143F23C -:1047C0000400BDE8F8831020FBE7012801D0042095 -:1047D000F7E74FF00008A4B3052811D004280FD044 -:1047E00069462046FEF76BFE0028EAD1207D48B1DD -:1047F000012809D0022809D0032809D00720E0E7C2 -:104800000820DEE7424604E0012202E0022200E046 -:1048100003222346174600200099FEF78DFE00284C -:10482000CFD1A0892880A07BE875BDF80000A882C0 -:10483000AF75BDF80000000701D5A08988B1A08937 -:10484000288049460020FEF727FF0028B9D1A87824 -:1048500005280BD0042809D0287DC00703D00320E9 -:1048600002E08020ECE70220FEF7E0FB86F8008003 -:104870000020A6E77CB58D4C05460E46A0780228A0 -:1048800003D0032801D008207CBD15B143F20400F9 -:104890007CBD07200CF098F910B9A078032806D049 -:1048A000FEF7F2FB28B1A078032804D009E012201B -:1048B0007CBD13207CBD304600F0CBFA0028F9D136 -:1048C000E67001208DF800008DF801008DF802508F -:1048D0002088ADF80400E07D8DF8060068460BF0F6 -:1048E000C6F904F0C7FB0028E4D1A078032805D05E -:1048F0005FF00400FEF79AFB00207CBDE07800F03A -:10490000B8FA0520F6E71CB510B143F204001CBD4F -:10491000664CA078042803D0052801D008201CBDCF -:1049200000208DF8000001218DF801108DF80200A3 -:1049300068460BF09CF904F09DFB0028EFD1A078AD -:10494000052805D05FF00200FEF770FB00201CBDBB -:10495000E07800F09FFA0320F6E72DE9FC4180465D -:104960000E46032508460FF078FE002866D1404623 -:10497000FEF771FD040004D02078222804D208201C -:1049800081E543F202007EE5A07F00F003073EB11F -:10499000012F0CD000203146FEF729FC0500EFD195 -:1049A000012F06D0022F1AD0FFDF28466BE5012029 -:1049B000F1E7A07D3146022801D011B107E01120B6 -:1049C00061E56846FCF7DFFD0028D9D1694640461D -:1049D00006F0A9FC0500E8D10120A075E5E7A07D5F -:1049E000032804D1314890F83000C00701D02EB31D -:1049F0000EE026B1A07F40071ED4002100E0012177 -:104A0000404606F0B0FC0500CFD1A075002ECCD0FA -:104A10003146404600F07BFA05461128C5D1A07FFB -:104A20004107C2D4316844F80E1F7168616040F0DC -:104A3000040020740025B8E71125B6E7102022E510 -:104A400070B50C460546FEF706FD010005D022466E -:104A50002846BDE87040FEF701BD43F2020070BD7C -:104A600010B5012807D1114B9B78012B00D011B153 -:104A700043F2040010BD09F0B6FDBDE8104004F09B -:104A8000F9BA012300F010BA00231A46194600F0C3 -:104A90000BBA70B506460C4608460FF091FD18B9E2 -:104AA00020680FF0B3FD18B1102070BDD8010020B0 -:104AB000F64D2A7E112A04D0132A00D33EB10820D5 -:104AC000F3E721463046FEF774FE60B1EDE70920BA -:104AD000132A0DD0142A0BD0A188FF29E5D3152065 -:104AE000FEF7BCFA0020D4E90012C5E90712DCE7A2 -:104AF000A1881F29D9D31320F2E72DE9F047DFF869 -:104B00008C93804690B099F818009A4615460C464A -:104B1000132803D3FFF738FB002836D120460FF0C7 -:104B20004FFD88BB28460FF04BFD68BB20784FF047 -:104B30000107C0074FF0000602D08DF83A7001E07F -:104B40008DF83A602078C0F3C1008DF800006178DC -:104B50000720E1B101291AD0022916D0042914D165 -:104B600004208DF809006088ADF80A00A088ADF82F -:104B700010002078C0F3C100012825D0032823D0DD -:104B800040460FF01DFD28B1102010B016E58DF83D -:104B90000970E8E798F80000400808D0012809D01B -:104BA000022807D0032805D043F20220EDE78DF854 -:104BB000026001E08DF80270404650F8011FCDF808 -:104BC00003108088ADF807000DF10100FEF7E3FB4C -:104BD00008B10320D9E72888ADF816006888ADF839 -:104BE0001C00A888ADF82200E888ADF82800ADF8D0 -:104BF0002E60ADF8346068460AF057FAE8B999F8C3 -:104C000018004D46112801D00820BEE706200BF001 -:104C1000DBFF38B12078C0F3C100012804D003289D -:104C200002D004E01220B0E795F8240028B1FEF786 -:104C30002BFA022803D21320A7E70720A5E7504646 -:104C400000F007F90028A0D185F819A068460AF0FD -:104C50001FFC04F00FFA002897D1687E00F009F9D4 -:104C6000E08864280BD250B15FF0010000F041F9F8 -:104C700004008AD11220FEF7F1F9204685E764216D -:104C8000B0FBF1F0F2E770B5064615460C46084653 -:104C90000FF0BCFC18B928460FF0B8FC08B1102082 -:104CA00003E72A46214630460BF081F804F0E2F98A -:104CB0000028F5D121787F29F2D10520F5E67CB5D1 -:104CC00005460C4608460FF07BFC08B110207CBD61 -:104CD0002846FEF7C0FB20B10078222804D2082025 -:104CE0007CBD43F202007CBD684890F8300040076C -:104CF00001D511207CBD2078C00802D16078C008A1 -:104D000001D007207CBDADF8005020788DF802005E -:104D100060788DF803000220ADF8040068460AF0C0 -:104D200055F804F0A7F97CBD70B586B014460D4661 -:104D30000646FEF790FB28B10078222805D208200D -:104D400006B0B2E643F20200FAE728460FF085FC0F -:104D500020B944B120460FF077FC08B11020EFE7EE -:104D600000202060A080494890F83000800701D5DD -:104D70001120E5E703A9304609F0F7FD18B100BF9F -:104D800004F078F9DCE7ADF80060BDF81400ADF888 -:104D90000200BDF81600ADF80400BDF81000BDF823 -:104DA0001210ADF80600ADF808107DB1298809B1E0 -:104DB000ADF80610698809B1ADF80210A98809B1EB -:104DC000ADF80810E98809B1ADF80410DCB1BDF800 -:104DD0000610814201D9081A2080BDF80210BDF8E2 -:104DE0001400814201D9081A6080BDF80800BDF89E -:104DF0000410BDF816200144BDF812001044814291 -:104E000001D9081AA080684609F0E6FEB8E71CB58B -:104E10001F490968CDE9001068460AF048F904F016 -:104E200029F91CBD1CB500200090019068460AF0CD -:104E30003EF904F01FF91CBD108008885080488896 -:104E40009080C88810818888D0800020508190810F -:104E5000704710B5044604F079F830B1407830B1AD -:104E6000204604F082FB002010BD052010BD12205A -:104E700010BD10B504F06AF8040000D1FFDF6078BF -:104E800000B9FFDF6078401E607010BDD8010020BF -:104E90004050020010B504F059F8040000D1FFDFC3 -:104EA0006078401C607010BD1CB5ADF800008DF836 -:104EB00002308DF803108DF8042068460AF03CFF9C -:104EC00004F0D8F81CBD0CB52FA2D2E90012CDE930 -:104ED00000120079694601EB501000780CBD027891 -:104EE000520804D0012A02D043F202207047FEF794 -:104EF00029BA10B548B183000022114605200FF0F1 -:104F000069FA052801D0032010BD002010BD1FB58F -:104F10006A46FFF791FF68460AF01DFB04F0AAF805 -:104F200004B010BD70B50C0006460DD0FEF793FA24 -:104F3000050000D1FFDFA6802889208128896081B3 -:104F40006889A081A889E081AFE510B500231A46E1 -:104F500003E0845C2343521CD2B28A42F9D30BB1E2 -:104F6000002010BD012010BD00B540B1012805D0C2 -:104F7000022803D0032804D0FFDF002000BDFF205B -:104F800000BD042000BD0000070605040302010067 -:104F900010B504460FF014FB08B1102010BD2078A6 -:104FA000C0F30210042807D86078072804D3A1783A -:104FB000102901D8814201D2072010BDE0784107B5 -:104FC00006D421794A0703D4000701D4080701D584 -:104FD000062010BD002010BD10B513785C08837F3B -:104FE00064F3C713837713789C08C37F64F30003CB -:104FF000C3771078C309487863F341004870137889 -:105000001C090B7864F347130B701378DB0863F308 -:10501000000048705078487110BD10B5C4780B7806 -:1050200064F300030B70C478640864F341030B70ED -:10503000C478A40864F382030B70C478E40864F3B2 -:10504000C3030B700379117863F3000111700379C6 -:105050005B0863F34101117003799B0863F38201DC -:1050600011700079C00860F3C301117010BD70B5F4 -:1050700014460D46064604F0D1F980B10178182295 -:1050800021F00F01891C21F0F001A03100F8081B6C -:1050900021461FF0A4FDBDE8704004F0C2B92946C6 -:1050A0003046BDE870401322FEF7D8B92DE9F0472D -:1050B000064608A8894690E830041F469046142109 -:1050C00028461FF0E8FD0021CAF80010B8F1000FD3 -:1050D00003D0B9F1000F03D114E03878C00711D024 -:1050E00020680FF093FAC0BBB8F1000F07D1206819 -:1050F000123028602068143068602068A860216839 -:10510000CAF800103878800724D560680FF09CFA40 -:1051100018BBB9F1000F21D0FFF76EF90168C6F88E -:1051200068118188A6F86C11807986F86E0101F00B -:1051300002FDF94FEF60626862B196F8680106F20D -:10514000691140081032FEF755F91022394660689F -:105150001FF000FD0020BDE8F08706E0606820B188 -:10516000E8606068C6F86401F4E71020F3E730B542 -:10517000054608780C4620F00F00401C20F0F00196 -:10518000103121700020607095F8230030B10428A0 -:105190000FD0052811D0062814D0FFDF2078012178 -:1051A000B1EB101F04D295F8200000F01F006070D2 -:1051B00030BD21F0F000203002E021F0F00030306E -:1051C0002070EBE721F0F0004030F9E7F0B591B046 -:1051D000022715460C4606463A46ADF808700921E6 -:1051E00003AB04F07AFF0490002810D004208DF85F -:1051F00004008DF80170E034099605948DF818507C -:105200000AA968460DF022FA00B1FFDF012011B0B3 -:10521000F0BD10B588B00C460A99ADF80000C3B1D6 -:105220001868CDF802005868CDF80600ADF80A20DD -:10523000102203A81FF08EFC68460AF02FFA03F034 -:1052400019FF002803D1A17F41F01001A17708B018 -:1052500010BD0020CDF80200E6E72DE9F84F064624 -:10526000808A0D4680B28246FEF7F5F80446307813 -:10527000DFF8A48200274FF00509A8F120080F28C5 -:1052800070D2DFE800F06FF23708387D8CC8F1F09B -:10529000EFF35FF3F300A07F00F00300022809D0D2 -:1052A0005FF0000080F0010150460BF0DDFC0500CE -:1052B00003D101E00120F5E7FFDF98F85C10C90792 -:1052C00002D0D8F860000BE0032105F11D000EF0BC -:1052D00052FED5F81D009149B0FBF1F201FB12001E -:1052E000C5F81D0070686867B068A8672078252831 -:1052F00000D0FFDFCAE0A07F00F00300022809D041 -:105300005FF0000080F0010150460BF0ADFC06009C -:1053100003D101E00120F5E7FFDF3078810702D5F6 -:105320002178252904D040F001003070BDE8F88FC5 -:1053300002202870307F287106F11D002D36C5E946 -:105340000206F3E7A07F00F00300022808D0002047 -:1053500080F0010150460BF087FC040004D102E00C -:105360000120F5E7A7E1FFDF2078C10604D507207B -:1053700028703D346C60D9E740F008002070D5E714 -:10538000E07F000700D5FFDF307CB28800F001032A -:1053900001B05046BDE8F04F092105F027BD04B922 -:1053A000FFDF716821B1102204F124001FF0D2FB4D -:1053B00028212046FDF7AEFEA07F00F00300022862 -:1053C0000ED104F12400002300901A4621465046D5 -:1053D000FFF71FFF112807D029212046FDF79AFE6D -:1053E000307A84F82000A1E7A07F000700D5FFDF16 -:1053F00014F81E0F40F008002070E782A761E761F3 -:10540000C109607861F34100014660F38201617077 -:10541000307AE0708AE7A07F00F00300022809D00C -:105420005FF0000080F0010150460BF01DFC04000D -:1054300003D101E00120F5E7FFDF022104F185003F -:105440000EF099FD0420287004F5B4706860B4F87B -:1054500085002882304810387C346C61C5E90280B0 -:1054600064E703E024E15BE02DE015E0A07F00F0BD -:105470000300022807D0002080F0010150460BF005 -:10548000F3FB18B901E00120F6E7FFDF32462146C1 -:105490005046BDE8F84FEAE504B9FFDF207821283F -:1054A000A1D93079012803D1E07F40F00800E077EE -:1054B000324621465046FFF7DAFD2046BDE8F84F58 -:1054C0002321FDF727BE3279AA8005F108030921BF -:1054D000504604F002FEE86010B185F8009025E720 -:1054E000A07F00F00300022808D0002080F0010116 -:1054F00050460BF0B9FB040003D101E00120F5E7B1 -:10550000FFDF04F1620102231022081F0BF033FABF -:1055100007703179417009E73802002040420F00DE -:10552000A07F00F00300022808D0002080F00101D5 -:1055300050460BF099FB050003D101E00120F5E78F -:10554000FFDF95F8840000F0030001287AD1A07FE6 -:1055500000F00307E07F10F0010602D0022F04D113 -:1055600033E095F8A000C0072BD0D5F8601121B327 -:1055700095F88320087C62F387000874A17FCA092C -:10558000D5F8601162F341000874D5F8601166F334 -:1055900000000874AEB1D5F86001102204F12401B6 -:1055A00088351FF0D7FA287E40F001002876287849 -:1055B00020F0010005F8880900E016B1022F04D0A0 -:1055C0002DE095F88800C00727D0D5F85C1121B3ED -:1055D00095F88320087C62F387000874A17FCA09CC -:1055E000D5F85C1162F341000874D5F85C1166F3DC -:1055F000000008748EB1D5F85C01102204F124017A -:1056000088351FF0A7FA287840F0010005F8180B3C -:10561000287820F0010005F8A009022F44D00020CE -:1056200000EB400005EBC00090F88800800709D52A -:1056300095F87C00D5F86421400805F17D01103211 -:10564000FDF7D8FE8DF8009095F884006A4600F0CA -:1056500003008DF8010095F888108DF8021095F878 -:10566000A0008DF803002146504601F04DFA207845 -:10567000252805D0212807D0FFDF2078222803D94C -:1056800022212046FDF746FDA07F00F003000228FE -:105690000CD0002080F0010150460BF0F7FA0028F2 -:1056A0003FF44FAEFFDF41E60120B9E70120F1E70B -:1056B000706847703AE6FFDF38E670B5FE4C0025AB -:1056C00084F85C5025660CF08EFF04F11001204632 -:1056D00003F060FE84F8305070BD70B50D46FDF7E4 -:1056E000BAFE040000D1FFDF4FF4B87128461FF066 -:1056F000D2FA04F124002861A07F00F00300022800 -:1057000008D0012105F1E0000CF06EFF002800D068 -:10571000FFDF70BD0221F5E70A46014602F1E00015 -:105720000CF082BF70B50546406886B001780A2942 -:1057300006D00D2933D00E292FD0FFDF06B070BD63 -:1057400086883046FDF787FE040000D1FFDF207811 -:105750002128F3D028281BD1686802210E3001F0DF -:10576000C8F9A8B168680821801D01F0C2F978B1B4 -:1057700004F1240130460AF07CFA03F07BFC00B10E -:10578000FFDF06B02046BDE870402921FDF7C2BC0E -:1057900006B0BDE8704003F044BE012101726868A4 -:1057A000C6883046FDF757FE040000D1FFDFA07F1A -:1057B00000F00301022902D120F01000A077207828 -:1057C00021280AD06868017A09B1007980B1A07FE8 -:1057D00000F00300022862D0FFDFA07F00F003008A -:1057E0000228ABD1FEF796F80028A7D0FFDFA5E787 -:1057F00003F017FEA17F08062BD5E07FC00705D078 -:1058000094F8200000F01F00102820D05FF0050061 -:1058100084F82300207829281DD02428DDD13146A2 -:1058200004200EF081FE22212046FDF773FCA07FAC -:1058300000F00300022830D05FF0000080F001018A -:1058400030460BF023FA0028C7D0FFDFC5E706205B -:10585000DEE70420DCE701F00300022808D0002086 -:1058600080F0010130460BF0FFF9050003D101E0A3 -:105870000120F5E7FFDF25212046FDF74BFC032043 -:105880008DF80000694605F1E0000CF0C4FE022826 -:10589000A3D00028A1D0FFDF9FE70120CEE703F0CF -:1058A000C0FD9AE72DE9F04387B099461646884631 -:1058B0000746FDF7D0FD04004BD02078222848D3BE -:1058C000232846D0E07F000743D4A07F00F00300E8 -:1058D000022809D05FF0000080F0010138460BF08B -:1058E000C3F9050002D00CE00120F5E7A07F00F02D -:1058F0000300022805D00121002238460BF0ABF945 -:1059000005466946284601F026F9009800B9FFDFF0 -:1059100045B10098E03505612078222806D024287A -:1059200004D007E000990020086103E0252120460B -:10593000FDF7F0FB0098012141704762868001A9C4 -:10594000C0E902890CF082FE022802D0002800D0B3 -:10595000FFDF07B0BDE8F08370B586B00546FDF700 -:105960007AFD017822291ED9807F00F003000228E9 -:1059700008D0002080F0010128460BF075F90400E2 -:105980002FD101E00120F5E7FFDF2AE0B4F85E0047 -:1059900004F1620630440178427829B12146284654 -:1059A000FFF714FCB0B9C9E6ADF804200921284678 -:1059B00002AB04F092FB03900028F4D005208DF890 -:1059C0000000694604F1E0000CF025FE022801D039 -:1059D00000B1FFDF02231022314604F15E000BF01C -:1059E00000F8B4F860000028D0D1A7E610B586B062 -:1059F0000446FDF730FD017822291BD9807F00F095 -:105A00000300022808D0002080F0010120460BF09E -:105A10002BF9040003D101E00120F5E7FFDF0620A8 -:105A20008DF80000694604F1E0000CF0F4FD002858 -:105A300000D0FFDF06B010BD2DE9F05F05460C4633 -:105A400000270078904601093E4604F1080BBA464B -:105A500002297DD0072902D00A2909D146E06868C9 -:105A600001780A2905D00D2930D00E292ED0FFDF6C -:105A7000BCE114271C26002C6BD08088A080FDF789 -:105A8000EAFC5FEA000900D1FFDF99F817005A46E7 -:105A9000400809F11801FDF7ADFC6868C089208253 -:105AA000696851F8060FC4F812004868C4F8160077 -:105AB000A07E20F0060001E01802002040F0010066 -:105AC000A07699F81E0040F020014DE01A270A2622 -:105AD000002CD1D0C088A080FDF7BDFC050000D10E -:105AE000FFDF59462846FFF742FB7FE10CB1A88B48 -:105AF000A080287A0B287DD006DC01287BD00228E4 -:105B000008D0032804D135E00D2875D00E2874D0B4 -:105B1000FFDF6BE11E270926002CADD0A088FDF722 -:105B20009AFC5FEA000900D1FFDF287B00F0030048 -:105B30000128207A1BD020F001002072297B8908DF -:105B400061F341002072297BC90861F3820001E002 -:105B500041E1F2E02072297B090961F3C300207260 -:105B600099F81E0040F0400189F81E103EE140F017 -:105B70000100E2E713270D26002CAAD0A088FDF72C -:105B80006AFC8146807F00F00300022808D00020D4 -:105B900080F00101A0880BF067F8050003D101E057 -:105BA0000120F5E7FFDF99F81E0000F00302022A4A -:105BB00050D0686F817801F003010129217A4BD020 -:105BC00021F00101217283789B0863F34101217266 -:105BD0008378DB0863F38201217283781B0963F306 -:105BE000C3012172037863F306112172437863F3D2 -:105BF000C71103E061E0A9E090E0A1E0217284F820 -:105C000009A0C178A172022A29D00279E17A62F34F -:105C10000001E1720279520862F34101E1720279F6 -:105C2000920862F38201E1720279D20862F3C30141 -:105C3000E1724279217B62F30001217342795208BB -:105C400062F3410121734279920862F38201217368 -:105C5000407928E0A86FADE741F00101B2E7427951 -:105C6000E17A62F30001E1724279520862F3410184 -:105C7000E1724279920862F38201E1724279D208BC -:105C800062F3C301E1720279217B62F300012173A7 -:105C90000279520862F3410121730279920862F39A -:105CA000820121730079C00860F3C301217399F860 -:105CB0000000232831D9262140E018271026E4B31C -:105CC000A088FDF7C8FB8346807F00F00300022810 -:105CD00009D0002080F00101A0880AF0C5FF5FEA2A -:105CE000000903D101E00120F4E7FFDFE868A060CC -:105CF00099F8000040F0040189F8001099F80100BB -:105D0000800708D5012020739BF8000023286DD957 -:105D10002721584651E084F80CA067E015270F268C -:105D20005CB1A088FDF797FB814606225946E868DA -:105D300008F089F90120A073A2E041E048463CE068 -:105D400016270926E4B3287B20724FE0287B192709 -:105D50000E26ACB3C4F808A0A4F80CA0012807D004 -:105D6000022805D0032805D0042803D0FFDF0DE06A -:105D7000207207E0697B042801F00F0141F08001E7 -:105D800021721ED0607A20F003006072A088FDF7B7 -:105D900062FB05460078212828D0232800D0FFDFA9 -:105DA000A87F00F00300022813D0002080F001013A -:105DB000A0880AF06BFF22212846FDF7ABF915E019 -:105DC00004E0607A20F00300401CDEE7A8F80060E1 -:105DD00011E00120EAE70CB16888A080287A032846 -:105DE0002ED004280AD0052850D0FFDFA8F8006084 -:105DF0000CB1278066800020BDE8F09F15270F2694 -:105E0000002CE3D0A088FDF726FB807F00F0030084 -:105E1000022809D05FF0000080F00101A0880AF09C -:105E200023FF050003D101E00120F5E7FFDFD5F8EE -:105E30001D000622594608F006F984F80EA0D5E7A1 -:105E400017270926002CC1D0A088FDF704FB814646 -:105E5000807F00F00300022808D0002080F00101BC -:105E6000A0880AF001FF050003D101E00120F5E759 -:105E7000FFDF6878800701D5022000E00120207252 -:105E800099F800002328B1D9272157E719270E26B2 -:105E9000002C9BD0A088FDF7DEFA5FEA000900D154 -:105EA000FFDFC4F808A0A4F80CA084F808A0A07A2A -:105EB00040F00300A07299F81E10C90961F3820036 -:105EC000A07299F81F2099F81E1012EAD11F05D070 -:105ED00099F8201001F01F0110292BD020F00800A4 -:105EE000A07299F81F10607A61F3C3006072697A3A -:105EF00001F003010129A2D140F00400607299F879 -:105F00001E0000F003000228E87A16D0217B60F31F -:105F100000012173AA7A607B62F300006073EA7A61 -:105F2000520862F341012173A97A490861F34100E3 -:105F300060735BE740F00800D2E7617B60F300012B -:105F40006173AA7A207B62F300002073EA7A520818 -:105F500062F341016173A97A490861F3410020733A -:105F600044E710B5FE4C30B10146102204F1200088 -:105F70001EF0F0FD012084F8300010BD10B504467D -:105F800000F0D9FDF64920461022BDE8104020312E -:105F90001EF0E0BD70B5F24D06004FF0000413D0C6 -:105FA0000EF00EFB08B110240CE00621304608F07C -:105FB00031F8411C05D028665FF0010085F85C00CF -:105FC00000E00724204670BD0020F7E7007810F0BD -:105FD0000F0204D0012A05D0022A0CD110E00009DA -:105FE00009D10AE00009012807D0022805D00328BA -:105FF00003D0042801D007207047087000207047A4 -:106000000620704705282AD2DFE800F003070F17A3 -:106010001F00087820F0FF001EE0087820F00F0035 -:10602000401C20F0F000103016E0087820F00F003F -:10603000401C20F0F00020300EE0087820F00F0027 -:10604000401C20F0F000303006E0087820F00F000F -:10605000401C20F0F00040300870002070470720FE -:1060600070472DE9F041804688B00D46002708466C -:106070000EF0F3FAA8B94046FDF7EDF9040003D09D -:106080002078222815D104E043F2020008B0BDE8D0 -:10609000F08145B9A07F410603D500F00300022836 -:1060A00001D01020F2E7A07FC10601D4010702D57C -:1060B0000DB10820EAE7E17F090701D50D20E5E7EA -:1060C00000F00300022805D125B12846FEF760FF45 -:1060D0000700DBD1A07F00F00300022808D00020D9 -:1060E00080F0010140460AF0BFFD060002D00FE03B -:1060F0000120F5E7A07F00F0030002280ED0002069 -:1061000080F00101002240460AF0A5FD060007D0FC -:10611000A07F00F00300022804D009E00120EFE78F -:106120000420B3E725B12A4631462046FEF754FF46 -:106130006946304600F00FFD009800B9FFDF009976 -:10614000022006F1E0024870C1F824804A61002272 -:106150000A81A27F02F00302022A1CD001200871EA -:10616000287800F00102087E62F3010008762A78A0 -:10617000520862F3820008762A78920862F3C3001C -:1061800008762A78D20862F3041008762421204683 -:10619000FCF7C0FF33E035B30871301D88613078FB -:1061A000400908777078C0F340004877287800F0FD -:1061B0000102887F62F301008877A27FD20962F32F -:1061C00082008877E27F62F3C3008877727862F397 -:1061D00004108877A878C87701F121022846203179 -:1061E000FEF71BFF03E00320087105200876252138 -:1061F0002046FCF78FFFA07F20F04000A07701A988 -:1062000000980CF023FA022801D000B1FFDF3846D5 -:106210003CE72DE9FF4F534A0D4699B09A4607CA0D -:106220000BAB002783E807001998FDF714F9060067 -:1062300006D03078262806D008201DB0BDE8F08FA3 -:1062400043F20200F9E7B07F00F00309B9F1020F51 -:1062500003D00020284302D006E00120FAE71B9873 -:10626000FEF796FE0028E8D1B07F00F00300022878 -:1062700001D11B9979BB022808D0002080F00101D0 -:1062800019980AF0F1FC040003D101E00120F5E7C0 -:10629000FFDF852D28D007DCF5B1812D1ED0822DA2 -:1062A0001ED0832D08D11DE0862D1FD0882D1FD034 -:1062B000892D1FD08A2D1FD00F2020710F281DD0AF -:1062C00003F0ACF8E0B101208DF84000201D1190E2 -:1062D0002079B8B167E111E00020EEE70120ECE79A -:1062E0000220EAE70320E8E70520E6E70620E4E7E6 -:1062F0000820E2E70920E0E70A20DEE707209CE724 -:1063000011209AE7B9F1020F03D0A56F03D1A06F56 -:1063100002E0656FFAE7606F804632D04FF001000F -:1063200000904FF002000190214630461B9AFEF784 -:1063300053FE1B98007800F00101A87861F301007A -:10634000A870B17FC90961F38200A870F17F61F381 -:10635000C300A870617861F30410A870207803E08E -:106360001802002048500200400928706078C0F3ED -:10637000400068701B988078E87000206871287170 -:1063800003E00220009001200190A87898F8021004 -:10639000C0F3C000C1F3C00108405FEA000B2CD07D -:1063A00050460EF00DF990BBDAF80C000EF008F92B -:1063B00068BBDAF81C000EF003F940BBDAF80C00F9 -:1063C000A060DAF81C00E06098F80100617800F045 -:1063D000010041EA4000607098F80210C0B2C1F3B9 -:1063E0000011891E0840607000202077019906F195 -:1063F000170002290CD001210BE098F801106078F9 -:1064000001F00101FD2242EA41010840E3E732E0E8 -:10641000002104EB810148610099701C022901D020 -:10642000012100E0002104EB81014861A87800F01F -:106430000300012858D198F8020000F00300012859 -:1064400052D1B9F1020F04D02A1D691D1B98FEF725 -:10645000E4FD297998F8040001408DF83810687936 -:1064600098F8052010408DF83C0001433CD0504680 -:106470000EF0A6F808B11020DFE60AF11001049131 -:10648000B9F1020F18D008465FF0000104F18C0347 -:10649000CDE9000304F5AE7202920EAB5A462046D7 -:1064A000FEF704FE0028E7D1B9F1020F08D05046EC -:1064B00008D14FF0010107E050464FF00101E5E738 -:1064C0000498F5E74FF0000104F1A403CDE90003BF -:1064D00004F5B072029281F001010FAB5A462046DA -:1064E000FEF7E4FD0028C7D16078800734D4A8788F -:1064F00098F80210C0F38000C1F3800108432BD04C -:10650000297898F800000BAAB9F1020F06D032F8EA -:1065100011204300DA4002F003070AE032F81020AD -:106520004B00DA4012F0030705D0012F0BD0022FE9 -:106530000BD0032F07D0BBF1000F0DD0012906D0DF -:10654000042904D008E00227F5E70127F3E7012832 -:1065500001D0042800D10427B07F40F08000B0773C -:10656000F17F6BF30001F177607881074FF0030052 -:106570000CD5A071BBF1000F15D100BF8DF85C00E8 -:1065800017AA3146199800F0BFFA0CE00221022F39 -:1065900018D0012F18D0042F22D00020A071B07F76 -:1065A00020F08000B07725213046FCF7B3FD10A91C -:1065B00004F1E0000CF02FF810B1022800D0FFDF4A -:1065C00000203AE6A171D9E7A1710D2104F1200064 -:1065D0001EF061FB207840F0020020700420CDE71F -:1065E0000120A071DFE72DE9F04387B0904689468E -:1065F00004460025FCF72FFF060006D03078272838 -:1066000006D0082007B0BDE8F08343F20200F9E7A6 -:10661000B07F00F00300022808D0002080F00101C4 -:1066200020460AF021FB040003D101E00120F5E738 -:10663000FFDFA7795FEA090005D0012821D0B9F171 -:10664000020F26D110E0B8F1000F22D1012F05D0A2 -:10665000022F05D0032F05D0FFDF2DE00C252BE006 -:10666000012529E0022527E040460DF0A9FFB0B939 -:10667000032F0ED11022414604F11D001EF06AFACC -:106680001AE0012F02D0022F03D104E0B8F1000F6D -:1066900012D00720B6E740460DF092FF08B1102057 -:1066A000B0E7102104F11D001EF0D3FA0621404688 -:1066B00007F0B0FCC4F81D002078252140F002004E -:1066C00020703046FCF726FD2078C10713D020F05B -:1066D0000100207002208DF8000004F11D000290DE -:1066E0008DF804506946C3300BF095FF022803D0A3 -:1066F00010B1FFDF00E02577002083E730B587B0D9 -:106700000D460446FCF7A7FEA0B1807F00F0030011 -:10671000022812D05FF0000080F0010120460AF04C -:10672000A3FA04000ED028460DF04AFF38B110201D -:1067300007B030BD43F20200FAE70120ECE7207811 -:10674000400701D40820F3E7294604F13D00202248 -:1067500005461EF0FFF9207840F010002070010778 -:106760000FD520F00800207007208DF80000694642 -:1067700004F1E00001950BF04EFF022801D000B1BA -:10678000FFDF0020D4E770B50D460646FCF763FE38 -:1067900018B10178272921D102E043F2020070BD2F -:1067A000807F00F00300022808D0002080F0010163 -:1067B00030460AF059FA040003D101E00120F5E760 -:1067C000FFDFA079022809D16078C00706D02A46E9 -:1067D00021463046FEF7FAFC10B10FE0082070BDEC -:1067E000B4F860000E280BD204F1620102231022DB -:1067F000081F0AF0C0F8012101704570002070BD2B -:10680000112070BD70B5064614460D4608460DF0C1 -:10681000D7FE18B920460DF0F9FE08B1102070BD62 -:10682000A6F57F40FF380ED03046FCF714FE38B195 -:10683000417822464B08811C1846FCF7DBFD07E037 -:1068400043F2020070BD2046FDF73CFE0028F9D15E -:106850001021E01D0DF08FFBE21D294604F1170009 -:1068600000F089F9002070BD2DE9F04104468AB09E -:1068700015468846002708460DF0EFFE18B9284651 -:106880000DF0EBFE18B110200AB0BDE8F0812046F3 -:10689000FCF7E1FD060003D0307827281BD102E089 -:1068A00043F20200F0E7B07F00F00300022809D0B5 -:1068B0005FF0000080F0010120460AF0D5F90400E5 -:1068C00003D101E00120F5E7FFDF2078400702D582 -:1068D0006078800701D40820D6E7B07F00F003007D -:1068E000022803D0A06F03D1A16F02E0606FFAE726 -:1068F000616F407800B19DB1487810B1B8F1000FD8 -:106900000ED0ADB1EA1D06A8E16800F034F91022FE -:1069100006A905F117001EF0F1F818B1042707E0E9 -:106920000720B1E71022E91D04F12D001EF012F935 -:10693000B8F1000F06D0102208F1070104F11D0084 -:106940001EF008F92078252140F002002070304622 -:10695000FCF7E0FB2078C10715D020F00100207083 -:1069600002208DF8000004F11D0002901030039009 -:106970008DF804706946B3300BF04DFE022803D049 -:1069800010B1FFDF00E0277700207DE7F8B515465E -:106990000E460746FCF75FFD040004D0207822284D -:1069A00004D00820F8BD43F20200F8BDA07F00F03B -:1069B0000300022802D043F20500F8BD30460DF076 -:1069C000FFFD18B928460DF0FBFD08B11020F8BDF9 -:1069D00000953288B31C21463846FEF71AFC112870 -:1069E00015D00028F3D1297C4A08A17F62F3C71192 -:1069F000A177297CE27F61F30002E277297C890894 -:106A000084F82010A17F21F04001A177F8BDA17F7B -:106A10000907FBD4D6F80200C4F83600D6F8060001 -:106A2000C4F83A003088A0861022294604F12400D8 -:106A30001EF090F8287C4108E07F61F34100E07788 -:106A4000297C61F38200E077287C800884F82100AB -:106A5000A07F40F00800A0770020D3E770B50D4676 -:106A600006460BB1072070BDFCF7F5FC040007D00B -:106A70002078222802D3A07F800604D4082070BD8D -:106A800043F2020070BDADB12946304609F0F1F87D -:106A900002F0F0FA297C4A08A17F62F3C711A177BE -:106AA000297CE27F61F30002E277297C890884F87F -:106AB000201004E0304609F004F902F0DBFAA17F6F -:106AC00021F02001A17770BD70B50D46FCF7C3FC25 -:106AD000040005D028460DF099FD20B1102070BDAE -:106AE00043F2020070BD29462046FEF740FB00201D -:106AF00070BD04E010F8012B0AB100207047491E58 -:106B000089B2F7D20120704770B51546064602F0EB -:106B100085FC040000D1FFDF207820F00F00801CEE -:106B200020F0F0002030207066802868A060BDE86A -:106B3000704002F076BC10B5134C94F83000002879 -:106B400008D104F12001A1F110000BF0A6FD0120F5 -:106B500084F8300010BD10B190F8B9202AB10A486D -:106B600090F8350018B1002003E0B83001E0064885 -:106B700034300860704708B50023009313460A4676 -:106B80000AF06DFA08BD00001802002018B18178E3 -:106B9000012938D101E010207047018842F6011226 -:106BA000881A914231D018DC42F60102A1EB0200B2 -:106BB00091422AD00CDC41B3B1F5C05F25D06FF40F -:106BC000C050081821D0A0F57060FF381BD11CE020 -:106BD00001281AD002280AD117E0B0F5807F14D01E -:106BE00008DC012811D002280FD003280DD0FF287F -:106BF00009D10AE0B0F5817F07D0A0F58070033895 -:106C000003D0012801D0002070470F2070470A28C8 -:106C10001ED007DC18D2DFE800F0191B1F1F171F5A -:106C2000231D1F21102815D008DC0B2812D00C289A -:106C300010D00D2816D00F2806D10DE011280BD04A -:106C400084280BD087280FD003207047002070477E -:106C500005207047072070470F20704704207047B9 -:106C6000062070470C20704743F20200704738B589 -:106C70000C46050041D06946FFF7A8F9002819D154 -:106C80009DF80010607861F3020060706946681C2E -:106C9000FFF79CF900280DD19DF80010607861F392 -:106CA000C5006070A978C1F34101012903D0022910 -:106CB00005D0072038BD217821F0200102E021789D -:106CC00041F020012170410704D0A978C90861F37F -:106CD00086106070607810F0380F07D0A978090925 -:106CE00061F3C710607010F0380F02D16078400671 -:106CF00003D5207840F040002070002038BD70B5EA -:106D000004460020088015466068FFF7B0FF0028A1 -:106D100016D12089A189884211D860688078C0077F -:106D20000AD0B1F5007F0AD840F20120B1FBF0F2A1 -:106D300000FB1210288007E0B1F5FF7F01D90C207D -:106D400070BD01F201212980002070BD10B50478CA -:106D5000137864F3000313700478640864F3410348 -:106D600013700478A40864F3820313700478E408B1 -:106D700064F3C30313700478240964F304131370D9 -:106D80000478640964F3451313700078800960F394 -:106D90008613137031B10878C10701D1800701D57E -:106DA000012000E0002060F3C713137010BD42788B -:106DB000530702D002F0070306E012F0380F02D0AA -:106DC000C2F3C20300E001234A7863F302024A706F -:106DD000407810F0380F02D0C0F3C20005E043073E -:106DE00002D000F0070000E0012060F3C5024A7005 -:106DF00070472DE9F04F95B00D00824612D0122158 -:106E000028461DF026FF4FF6FF7B05AA01215846B4 -:106E100006F04BFF0024264637464FF420586FF407 -:106E2000205972E0102015B0BDE8F08F9DF81E00CB -:106E300001280AD1BDF81C1041450BD011EB090007 -:106E40000AD001280CD002280CD0042C0ED0052C1E -:106E50000FD10DE0012400E00224BDF81A6008E023 -:106E6000032406E00424BDF81A7002E0052400E0C3 -:106E70000624BDF81A10514547D12C74BEB34FF00B -:106E8000000810AA4FF0070ACDE90282CDE900A858 -:106E90000DF13C091023CDF810904246314658467A -:106EA00006F0B6FF08BBBDF83C002A46C0B210A9E8 -:106EB0000BF05CFCC8B9AE81CFB1CDE900A80DF1F3 -:106EC000080C0AAE40468CE84102132300223946E2 -:106ED000584606F09DFF40B9BDF83C00F11CC01EAD -:106EE000C0B22A1D0BF042FC10B103209BE70AE060 -:106EF000BDF82900E881062C05D19DF81E00A87276 -:106F0000BDF81C00288100208DE705A806F0D9FEF9 -:106F100000288BD0FFF77BFE85E72DE9F0471C4664 -:106F2000DDE90978DDF8209015460E00824600D193 -:106F3000FFDF0CB1208818B1D5B11120BDE8F08772 -:106F4000022D01D0012100E0002106F1140005F01E -:106F50009BFDA8F8000002463B462946504603F038 -:106F6000BCF8C9F8000008B9A41C3C600020E5E7A3 -:106F70001320E3E7F0B41446DDE904528DB1002399 -:106F800014B1022C09D101E0012306E00D7CEE07CB -:106F900003D025F0010501230D742146F0BC03F058 -:106FA00025BF1A80F0BC70472DE9FE4F91461A8824 -:106FB0001C468A468046FAB102AB494603F08DF87A -:106FC000050019D04046A61C278809F091FF3246DB -:106FD000072629463B46009609F09FFB208823465A -:106FE000CDE900504A4651464046FFF7C3FF002016 -:106FF00020800120BDE8FE8F0020FBE72DE9F0474F -:1070000086B09146DDE90E460F46824603AA05A9E1 -:1070100004A8109D8DE80700984632462146504648 -:10702000FFF77BFF049909B1012200E000222A70DA -:10703000002818D1F94A03AB1060059A009104F1B9 -:107040001400CDE901204A463946504606F0D3F8EF -:10705000A8B1092811D2DFE800F005080510100AD0 -:107060000C0C0E00002006B068E71120FBE707209B -:10707000F9E70820F7E70D20F5E70320F3E7BDF86F -:107080000C100498CDE90001434632462146504693 -:10709000FFF770FFE6E72DE9F04389B00D46DDE923 -:1070A000108781461C461646142103A81DF0F3FDE7 -:1070B000012002218DF810108DF80C008DF8117050 -:1070C000ADF8146064B1A278D20709D08DF816002B -:1070D000E088ADF81A00A088ADF81800A068079005 -:1070E00008A80095CDE90110424603A948466B68FF -:1070F000FFF784FF09B0BDE8F083F0B58BB0002442 -:107100000646069407940727089405A80994019455 -:1071100000970294CDE903400D46102322463046E5 -:1071200006F076FE78B90AA806A9019400970294A1 -:10713000CDE90310BDF8143000222946304606F090 -:107140003DFC002801D0FFF762FD0BB0F0BD06F05A -:10715000DDBA2DE9FC410C468046002602F05EF9BE -:10716000054620780D287DD2DFE800F0BC0713B378 -:1071700025BD49496383AF959B00A848006820B1AD -:10718000417841F010014170ADE0404602F076F9DF -:10719000A9E00421404609F067FD070000D1FFDFA8 -:1071A00007F11401404605F003FCA5BB132140463E -:1071B000FDF746FC97E00421404609F055FD070025 -:1071C00000D1FFDFE088ADF800000020B8819DF815 -:1071D0000000010704D5C00602D5A088B88105E0EB -:1071E0009DF8010040067ED5A088F88105B9FFDF33 -:1071F00022462946404601F063FC022673E0E188FE -:10720000ADF800109DF8011009060FD5072803D02E -:1072100006280AD00AE024E00421404609F024FDB3 -:10722000060000D1FFDFA088F0810226CDB9FFDF84 -:1072300017E00421404609F017FD070000D1FFDFE9 -:1072400007F1140006F099FA90F0010F02D1E079ED -:10725000000648D5387C022640F00200387405B993 -:10726000FFDF00E03EE022462946404601F028FCD0 -:1072700039E00421404609F0F7FC017C002D01F0C3 -:107280000206C1F340016171017C21F00201017429 -:10729000E7D1FFDFE5E702260121404602F020F9B1 -:1072A00021E00421404609F0DFFC054660680090BB -:1072B0002089ADF8040001226946404602F031F908 -:1072C000287C20F0020028740DE0002DC9D1FFDFDA -:1072D000C7E7022600214046FBF784F8002DC0D105 -:1072E000FFDFBEE7FFDF3046BDE8FC813EB50C00A6 -:1072F00009D001466B4601AA002006F00BFE20B122 -:10730000FFF785FC3EBD10203EBD00202080A07010 -:107310009DF8050002A900F00700FEF773FE50B9C2 -:107320009DF8080020709DF8050002A9C0F3C20076 -:10733000FEF768FE08B103203EBD9DF808006070AE -:107340009DF80500C109A07861F30410A0709DF8B4 -:107350000510890961F3C300A0709DF80410890627 -:1073600001D5022100E0012161F342009DF80010E7 -:1073700061F30000A07000203EBD70B514460646C3 -:107380000D4651EA040005D075B108460DF05CF9D0 -:1073900078B901E0072070BD2946304606F01BFE93 -:1073A00010B1BDE8704032E454B120460DF04CF904 -:1073B00008B1102070BD21463046BDE8704095E709 -:1073C000002070BD2DE9FC5F0C4690460546002765 -:1073D00001780822007A3E46B2EB111F7ED104F1FB -:1073E0000A0100910A31821E4FF0020A04F1080BD3 -:1073F0000191092A73D2DFE802F0ECDF05F42727B8 -:107400007AA9CD006888042109F02EFC060000D17D -:10741000FFDFB08920B152270726C2E07C0200209E -:1074200051271026002C7DD06888A0800120A071F3 -:10743000A88900220099FFF7A0FF002873D1A8892E -:107440002081288AE081D1E0B5F81290072824D164 -:10745000E87B000621D5512709F1140086B2002CE3 -:10746000E1D0A88900220099FFF787FF00285AD1B0 -:107470006888A08084F806A0A88920810120A073D4 -:10748000288A2082A4F81290A88A009068884B4627 -:10749000A969019A01F0F1FAA8E0502709F1120058 -:1074A00086B2002C3ED0A88900225946FFF765FF1E -:1074B000002838D16888A080A889E080287A072829 -:1074C00013D002202073288AE081E87BC009607312 -:1074D000A4F81090A88A0090688801E083E080E01A -:1074E0004B4604F11202A969D4E70120EAE7B5F896 -:1074F0001290512709F1140086B2002C66D06888DA -:10750000042109F0B1FB83466888A080A889002285 -:107510000099FFF732FF00286ED184F806A0A889F1 -:10752000208101E052E067E00420A073288A2082D5 -:10753000A4F81290A88A009068884B46A969019A1D -:1075400001F09BFAA989ABF80E104FE06888FBF7B1 -:1075500082FF07466888042109F086FB064607B9C2 -:10756000FFDF06B9FFDF687BC00702D05127142672 -:1075700001E0502712264CB36888A080502F06D017 -:1075800084F806A0287B594601F087FA2EE0287B74 -:10759000A11DF9E7FE49A8894989814205D15427EF -:1075A00006269CB16888A08020E053270BE06888FD -:1075B000A080A889E08019E06888042109F054FBC4 -:1075C00000B9FFDF55270826002CF0D1A8F800608D -:1075D00011E056270726002CF8D06888A0800020EC -:1075E00013E0FFDF02E0012808D0FFDFA8F8006009 -:1075F0000CB1278066800020BDE8FC9F5727072636 -:10760000002CE3D06888A080687AA071EEE7401D66 -:1076100020F0030009B14143091D01EB4000704710 -:1076200013B5DB4A00201071009848B10024684669 -:1076300009F037F9002C02D1D64A009911601CBD1F -:1076400001240020F4E770B50D46064686B01446C6 -:107650005C2128461DF01FFB04B9FFDFA078687489 -:10766000A2782188284601F042FA0020A881E8810A -:10767000228805F11401304605F07FF96A460121A0 -:10768000304606F012FB19E09DF80300000715D5FF -:10769000BDF806103046FFF730FD9DF80300BDF839 -:1076A000061040F010008DF80300BDF80300ADF89F -:1076B0001400FF233046059A06F058FC684606F091 -:1076C00000FB0028E0D006B070BD10B50C4601F1FB -:1076D000140005F089F90146627C2046BDE810409F -:1076E00001F03ABA70B50546042109F0BDFA04006C -:1076F00000D1FFDF04F114010C46284605F058F9CB -:1077000021462846BDE8704005F059B970B58AB0E9 -:107710000C460646FBF79FFE050014D02878222869 -:1077200027D30CB1A08890B101208DF80C00032064 -:107730008DF8100000208DF8110054B1A088ADF82C -:107740001800206807E043F202000AB070BD09206B -:10775000FBE7ADF8180005900421304609F084FAE3 -:10776000040000D1FFDF04F1140005F054F9000714 -:1077700001D40820E9E701F051FE60B108A8022118 -:107780000094CDE9011095F8232003A930466368E1 -:10779000FFF734FCD9E71120D7E72DE9F04FB2F815 -:1077A00002A0834689B0154689465046FBF753FE32 -:1077B00007460421504609F057FA0026044605966C -:1077C0004FF002080696ADF81C6007B9FFDF04B958 -:1077D000FFDF4146504603F070FE50B907AA06A9E4 -:1077E00005A88DE807004246214650466368FFF72A -:1077F00094FB674807AB0660DDE9051204F114004D -:10780000CDF80090CDE90320CDE9013197F8232090 -:10781000594650466B6805F047F906000AD0022E1B -:1078200004D0032E14D0042E00D0FFDF09B0304660 -:10783000BDE8F08FBDF81C000028F7D00599CDE910 -:1078400000104246214650466368FFF793FBEDE780 -:10785000687840F008006870E8E72DE9F04F9BB0C9 -:1078600004464FF000084A48ADF85480ADF8308027 -:10787000ADF85080A0F80880ADF81480ADF81880FD -:10788000ADF82080ADF81C80007916460D464746BD -:10789000012808D0022806D0032804D0042802D0EA -:1078A00008201BB0C4E720460CF08AFED0BB284657 -:1078B0000CF086FEB0BB60680CF0CFFE90BB606839 -:1078C00048B160892189884202D8B1F5007F01D989 -:1078D0000C20E6E780460BAA06A92846FFF70FFA18 -:1078E0000028DED168688078C0F34100022808D102 -:1078F0009DF8190010F0380F03D028690CF0A4FE91 -:1079000080B905A92069FFF7B2F90028C9D120691B -:1079100050B1607880079DF8150000F0380002D55E -:10792000D0B301E011E0B8BB9DF8140080060ED57D -:107930009DF8150010F0380F03D060680CF084FE3D -:1079400018B960680CF089FE08B11020A9E707A9F2 -:107950006069FFF78CF90028A3D1606940B19DF8F8 -:107960001D0000F0070101293FD110F0380F3CD075 -:1079700008A9A069FFF77BF9002892D19DF81C00A7 -:10798000800632D49DF8200080062ED4A06904E041 -:107990007C0200201400002027E040B19DF8210067 -:1079A00000F00701012920D110F0380F1DD0E06848 -:1079B00018B10078C8B11C2817D20EAA611C204645 -:1079C000FFF7C4F90120B94660F30F27BA4607460E -:1079D0008DF84E0042F60300ADF84C000DF13B026D -:1079E00017A928680AF0E1FE08B1072059E79DF8B9 -:1079F0005C0016A9CDF80090C01CCDE9019100F003 -:107A0000FF0B00230BF20122514613A806F090F859 -:107A1000F0BBBDF858000990FE482A8929690092F8 -:107A2000CDE901106B89BDF82C202868069906F075 -:107A30007FF801007ED120784FF0020AC10601D400 -:107A400080062BD5ADF80C90606950B907A906A83F -:107A5000FFF7ADF99DF81D0020F00700401C8DF8E0 -:107A60001D009DF81C008DF84E7040F0C8008DF888 -:107A70001C0042F60210ADF84C000CA903AACDF888 -:107A800000A0CDE90121002340F2032213A800E069 -:107A90001EE0079906F04CF801004BD1DD484D4639 -:107AA00008385B460089ADF839000EA8CDE9029090 -:107AB000CDF80490CDF810904FF007090022CDF8D2 -:107AC0000090BDF858104FF6FF7005F077FF10B129 -:107AD000FFF79DF8E5E69DF83800000625D5294614 -:107AE000012060F30F218DF84E704FF42450ADF853 -:107AF0004C00ADF8105062789DF81000002362F33E -:107B000000008DF810006278CDF800A0520862F3F2 -:107B100041008DF8100004AACDE9012540F20322AE -:107B200013A806F005F8010004D1606888B3206945 -:107B3000A8B900E086E005A906A8FFF738F9607843 -:107B4000800706D49DF8150020F038008DF8150048 -:107B500005E09DF8140040F040008DF814008DF809 -:107B60004E7042F60110ADF84C00208940F2012120 -:107B7000B0FBF1F201FB1202606814ABCDF800809B -:107B8000CDE90103002313A8059905F0D1FF0100F9 -:107B900058D12078C00729D0ADF80C50A06950B951 -:107BA00008A906A8FFF703F99DF8210020F00700B7 -:107BB000401C8DF821009DF820008DF84E7040F09B -:107BC00040008DF8200042F60310ADF84C0015A9D6 -:107BD00003AACDF800A0CDE90121002340F2032241 -:107BE00013A8089905F0A4FF01002BD1E06868B341 -:107BF0002946012060F30F218DF84E7042F60410E3 -:107C0000ADF84C00E068002302788DF860204078E1 -:107C10008DF86100E06818AA4088ADF86200E0685D -:107C200000798DF86400E068C088ADF86500CDF893 -:107C30000090CDE901254FF4027213A805F078FFFA -:107C4000010003D0099800F0B3FF2AE67148032130 -:107C50000838017156B100893080BDF8500070803D -:107C6000BDF83000B080BDF85400F080002018E668 -:107C700070B501258AB016460B46012802D00228AD -:107C800016D104E08DF80E504FF4205003E08DF82B -:107C90000E5042F60100ADF80C005BB10024601CF0 -:107CA00060F30F2404AA08A918460AF07EFD18B153 -:107CB00007204AE5102048E504A99DF820205548F2 -:107CC000CDE90021801E02900023214603A802F284 -:107CD000012205F02DFF10B1FEF799FF35E54D4863 -:107CE00008380EB1C1883180057100202DE5F0B54E -:107CF00093B0074601268DF83E6041F60100ADF8CD -:107D00003C0012AA0FA93046FFF7B2FF002848D165 -:107D1000404C0025083CE7B31C2102A81CF0BBFF27 -:107D20009DF808008DF83E6040F020008DF80800B6 -:107D300042F60520ADF83C000E959DF83A001195ED -:107D400020F00600801C8DF83A009DF838006A4645 -:107D500020F0FF008DF838009DF8390009A920F0C7 -:107D6000FF008DF839000420ADF82C00ADF830008C -:107D70000EA80A9011A80D900FA80990ADF82E50EA -:107D800002A8FFF76AFD00280BD1BDF80000608152 -:107D900000E008E0BDF80400A081401CE0812571EE -:107DA000002013B0F0BD6581A581BDF84800F4E75F -:107DB0002DE9F74F1749A0B00024083917940A7924 -:107DC000A146012A04D0022A02D0082023B02FE5C0 -:107DD000CA88824201D00620F8E721988A4682426A -:107DE00001D10720F2E701202146ADF848004FF607 -:107DF000FF7860F30F21ADF84A808DF86E0042F6EF -:107E0000020B06918DF87240ADF86CB0ADF8704081 -:107E10001CA901E0840200201391ADF8508012A843 -:107E200005F073FF00252E462F460DAB072212A941 -:107E3000404605F06DFF78B10A285DD195B38EB349 -:107E4000ADF86450ADF866609DF85E008DF81440A2 -:107E500019AC012864D06BE09DF83A001FB30128EB -:107E600059D1BDF8381059451FD118A809A9019456 -:107E70000294CDE9031007200090BDF836101023BE -:107E80000022404605F0C4FFB0BBBDF860000428E6 -:107E900001D006284AD1BDF82410219881423AD158 -:107EA0000F2093E73AE0012835D1BDF83800B0F54E -:107EB000205F03D042F6010188422CD1BAF80600B7 -:107EC000BDF83610884201D1012700E0002705B136 -:107ED0009EB1219881421ED118A809AA019402944A -:107EE000CDE90320072000900D46102300224046D4 -:107EF00005F08EFF00B902E02DE04E460BE0BDF824 -:107F00006000022801D0102810D1C0B217AA09A918 -:107F10000AF02CFC50B9BDF8369086E7052055E7ED -:107F200005A917A8221D0AF040FC08B103204DE75F -:107F30009DF814000023001DC2B28DF81420229871 -:107F40000092CDE901401BA8069905F0F1FD10B99A -:107F500002228AF80420FEF75AFE37E710B50B46D6 -:107F6000401E88B084B205AA00211846FEF7EEFE36 -:107F700000200DF1080C06AA05A901908CE8070065 -:107F8000072000900123002221464FF6FF7005F0E4 -:107F900015FD0446BDF81800012800D0FFDF20467B -:107FA000FEF735FE08B010BDF0B5FF4F044687B0B0 -:107FB00038790E46032804D0042802D0082007B0E0 -:107FC000F0BD04AA03A92046FEF799FE0500F6D1EC -:107FD00060688078C0F3410002280AD19DF80D0046 -:107FE00010F0380F05D020690CF02EFB08B11020DE -:107FF000E5E7208905AA21698DE807006389BDF8B6 -:1080000010202068039905F093FD10B1FEF7FFFDE5 -:10801000D5E716B1BDF81400308004203871284629 -:10802000CDE7F8B50C0006460BD001464FF6FF75BC -:1080300000236A46284605F06DFF20B1FEF7E7FDF4 -:10804000F8BD1020F8BD69462046FEF710FE002856 -:10805000F8D1A078314600F001032846009A05F0D7 -:1080600085FFEBE730B587B0144600220DF1080C10 -:1080700005AD01928CE82C00072200920A460146C9 -:1080800023884FF6FF7005F099FCBDF8141021808D -:10809000FEF7BDFD07B030BD70B50D46042108F0F8 -:1080A000E3FD040000D1FFDF294604F11400BDE820 -:1080B000704004F0A9BC70B50D46042108F0D4FD51 -:1080C000040000D1FFDF294604F11400BDE8704030 -:1080D00004F0BDBC70B50D46042108F0C5FD0400D8 -:1080E00000D1FFDF294604F11400BDE8704004F020 -:1080F000D5BC70B50546042108F0B6FD040000D1DA -:10810000FFDF214628462368BDE870400122FEF7C4 -:108110004BBF70B50646042108F0A6FD040000D14F -:10812000FFDF04F1140004F05FFC401D20F00305A4 -:1081300011E0011D00880022431821463046FEF759 -:1081400033FF00280BD0607CABB2684382B2A068DA -:10815000011D08F046FCA06841880029E9D170BDE6 -:1081600070B50546042108F07FFD040000D1FFDF53 -:10817000214628466368BDE870400222FEF714BF1E -:1081800070B50E46054601F049F9040000D1FFDF45 -:108190000120207266726580207820F00F00001D9B -:1081A00020F0F00040302070BDE8704001F039B997 -:1081B00010B50446012900D0FFDF2046BDE810407D -:1081C0000121FAF70FB92DE9F04F97B04FF0000AEF -:1081D0000C008346ADF814A0D04619D0E06830B149 -:1081E000A068A8B10188ADF81410A0F800A0584606 -:1081F000FBF731F9070043F2020961D038782228F1 -:108200005CD30421584608F02FFD050005D103E09A -:10821000102017B0BDE8F08FFFDF05F1140004F067 -:10822000E3FB401D20F00306A078012803D00228BC -:1082300001D00720EDE7218807AA584605F035FD53 -:1082400030BB07A805F03DFD10BB07A805F039FDC0 -:1082500048B99DF82600012805D1BDF82400A0F5F5 -:108260002451023902D04FF45050D2E7E068B0B147 -:10827000CDE902A00720009005AACDF804A0049241 -:10828000A2882188BDF81430584605F097FB10B13C -:10829000FEF7BDFCBDE7A168BDF8140008809DF89D -:1082A0001F00C00602D543F20140B2E70B9838B177 -:1082B000A1780078012905D080071AD40820A8E702 -:1082C0004846A6E7C007F9D002208DF83C00A86810 -:1082D0004FF00009A0B1697C4288714391420FD9E7 -:1082E0008AB2B3B2011D08F032FB8046A0F800A0AC -:1082F00006E003208DF83C00D5F800804FF001091E -:108300009DF8200010F0380F00D1FFDF9DF820000D -:108310002649C0F3C200084497F8231010F8010C56 -:10832000884201D90F2074E72088ADF8400014A9D5 -:108330000095CDE90191434607220FA95846FEF763 -:108340005DFE002891D19DF8500050B9A078012819 -:1083500007D1687CB3B2704382B2A868011D08F0EF -:108360000AFB002055E770B5064615460C46084640 -:10837000FEF70CFC002805D12A4621463046BDE810 -:10838000704075E470BD13E570B51E4614460D00CF -:108390000ED06CB1616859B160B10349C98881429E -:1083A00008D0072070BD00007C020020FA2F0000DA -:1083B0001020F7E72068FEF7E9FB0028F2D13246EB -:1083C00021462846BDE87040FFF747BA70B515460C -:1083D0000C0006D038B1FE490989814203D007203C -:1083E000E0E71020DEE72068FEF7D0FB0028D9D1B7 -:1083F00029462046BDE87040D6E570B5064686B0F1 -:108400000D46144610460CF001F9D0BB60680CF024 -:1084100024F9B0BBA6F57F40FF3803D03046FBF708 -:108420001AF880B128466946FEF7E3FC00280CD113 -:108430009DF810100F2008293CD2DFE801F0080653 -:108440000606060A0A0843F2020006B0AAE703205D -:10845000FBE79DF80210012908D1BDF80010B1F525 -:10846000C05FF2D06FF4C052D142EED09DF806103A -:1084700001290DD1BDF80410A1F52851062907D214 -:1084800000E028E0DFE801F0030304030303DCE776 -:108490009DF80A1001290ED1BDF80810B1F5245F2E -:1084A000D3D0A1F524510239CFD00129CDD0022952 -:1084B00001D1CAE7FFDF606878B9002305AA294621 -:1084C000304605F027FD10B1FEF7A1FBBDE79DF892 -:1084D0001400800601D41020B7E7618822462846A0 -:1084E0006368FFF7BFFDB0E72DE9F043814687B031 -:1084F0008846144610460CF089F818B1102007B0D1 -:10850000BDE8F083002306AA4146484605F002FD77 -:1085100018B100BFFEF77BFBF1E79DF81800C0061D -:1085200002D543F20140EAE70025072705A8019597 -:1085300000970295CDE9035062884FF6FF734146DC -:10854000484605F065FC060013D160680CF05EF843 -:1085500060B960680195CDE90250009704952388C1 -:1085600062884146484605F053FC0646BDF81400B3 -:1085700020803046CEE739B1954B0A889B899A42D4 -:1085800002D843F2030070471DE610B586B0904C48 -:108590000423ADF81430638943B1A4898C4201D21D -:1085A000914205D943F2030006B010BD0620FBE757 -:1085B000ADF81010002100910191ADF800300221BA -:1085C0008DF8021005A9029104A90391ADF81220BB -:1085D0006946FFF7F8FDE7E72DE9FC4781460E46BF -:1085E00008460BF0EDFF88BB4846FAF734FF5FEA18 -:1085F00000080AD098F80000222829D30421484610 -:1086000008F032FB070005D103E043F20200BDE8A9 -:10861000FC87FFDF07F1140004F0FDF90546307810 -:10862000012803D0022804D00720F0E7A8070FD5BF -:1086300002E015F01C0F0BD0B079341DC00709D033 -:10864000E08838B1A0680BF0BBFF18B11020DEE75E -:108650000820DCE732782088002628B3A0F2011336 -:108660000721112B18D20CD2DFE803F00B090D0BF8 -:108670001D0B121D100B0B1D1D1D1D0B1D00022AB5 -:1086800011D10846C3E7012AFBD00CE02A0700E01D -:10869000EA06002AF5DA06E0A0F5C0721F2A02D920 -:1086A0007D3A022AEDD8C6B200F0B8FE50B198F873 -:1086B0002300CDE90006FA89234639464846FEF7ED -:1086C000EAFCA4E71120A2E72DE9F04F8BB01F468A -:1086D00015460C4683460026FAF7BDFE28B1007801 -:1086E000222805D208200BB094E543F20200FAE7F5 -:1086F000B80801D00720F6E7032F00D100274FF676 -:10870000FF79CCB1022D73D320460BF0A6FF30B910 -:1087100004EB0508A8F101000BF09FFF08B1102041 -:10872000E1E7AD1EAAB22146484605F09DFC38F8A7 -:10873000021C88425CD1ADB22549B80702D58889B0 -:10874000401C00E001201FFA80F8F80701D08F8953 -:1087500000E04F4605AA4146584605F0A6FA4FF0FC -:10876000070A4FF00009ACB3204608E04088102803 -:108770003ED8361D304486B2AE4239D2A0190288A6 -:108780004245F3D354E000BF9DF8170002074FD5D0 -:1087900084B304EB0608361DB8F80230B6B2102BCD -:1087A00026D89A19AA4223D8B8F8002091421FD19E -:1087B000C00620D5CDE900A90DF1080C0AAAA1191F -:1087C00048468CE80700B8F800100022584603E03D -:1087D0007C0200202CE00BE005F0F0F810B1FEF771 -:1087E00016FA80E7B8F80200BDF82810884202D0D7 -:1087F0000B2078E704E0B8F80200304486B206E0C7 -:10880000C00604D55846FEF778FC002888D19DF8AC -:108810001700BDF81A1020F010008DF81700BDF8F1 -:108820001700ADF80000FF235846009A05F09EFBA4 -:1088300005A805F046FA18B9BDF81A10B942A3D92F -:108840000421584608F010FA040000D1FFDFA28985 -:108850005AB1CDE900A94D46002321465846FEF7FE -:108860001AFC0028BDD1A5813DE700203BE72DE99A -:10887000FF4F8BB01E4617000D464FF0000412D07C -:10888000B00802D007200FB0C4E4032E00D10026A8 -:108890005DB108460BF0D8FE28B93888691E084437 -:1088A0000BF0D2FE08B11020EDE7C74AB00701D5A2 -:1088B000D18900E00121F0074FF6FF7802D0D0897E -:1088C000401E00E0404686B206AA0B9805F0EDF97E -:1088D0004FF000094FF0070B0DF1140A39E000BF0B -:1088E0009DF81B00000734D5CDF80490CDF800B0FA -:1088F000CDF80890CDE9039A434600220B9805F085 -:1089000087FA60BB05B3BDF814103A8821442819D2 -:10891000091D8A4230D3BDF81E2020F8022BBDF875 -:10892000142020F8022BCDE900B9CDE90290CDF852 -:1089300010A0BDF81E10BDF8143000220B9805F0F1 -:1089400067FA08B103209EE7BDF814002044001D1B -:1089500084B206A805F0B5F920B10A2806D0FEF7C2 -:1089600056F990E7BDF81E10B142B9D934B17DB1C6 -:108970003888A11C884203D20C2084E7052082E7B6 -:1089800022462946404605F06FFB01462819018022 -:10899000A41C3C80002076E710B504460BF036FEA0 -:1089A00008B1102010BD8848C0892080002010BD6B -:1089B000F0B58BB00D460646142103A81CF06BF9E8 -:1089C00001208DF80C008DF8100000208DF81100AA -:1089D000ADF814503046FAF73EFD48B10078222831 -:1089E00012D30421304608F03FF9040005D103E01A -:1089F00043F202000BB0F0BDFFDF04F114000746A4 -:108A000004F009F8800601D40820F3E7207C022155 -:108A100040F00100207409A80094CDE9011007225C -:108A200003A930466368FEF7E9FA20B1217C21F002 -:108A300001012174DEE729463046F9F7C4FC08A994 -:108A4000384603F0D7FF00B1FFDFBDF82040172CF8 -:108A500001D2172000E02046A84201D92C4602E0AE -:108A6000172C00D2172421463046FFF724FB21465D -:108A70003046F9F7CEF90020BCE7F8B51C4615469C -:108A80000E46069F08F022FA2346FF1DBCB231466F -:108A90002A46009407F00DFEF8BD70B50C46054659 -:108AA0000E2120461CF0D5F8002020802DB1012D8C -:108AB00001D0FFDF76E4062000E00520A07171E41C -:108AC00010B548800878134620F00F00001D20F0F4 -:108AD000F00080300C4608701422194604F108009A -:108AE0001CF07DF800F09DFC3748046010BD2DE9B6 -:108AF000F047DFF8D890491D064621F003011746DC -:108B00000C46D9F8000007F0EAFE050000D1FFDFAF -:108B10004FF000083560A5F800802146D9F8000024 -:108B200007F0DDFE050000D1FFDF7560A5F80080CD -:108B30007FB104FB07F1091D0BD0D9F8000007F045 -:108B4000CEFE040000D1FFDFB460C4F80080BDE8B1 -:108B5000F087C6F80880FAE72DE9F0411746491D6D -:108B600021F00302194D064601681446286807F0F3 -:108B7000E1FE22467168286807F0DCFE3FB104FB85 -:108B800007F2121D03D0B168286807F0D3FE042055 -:108B900008F012F80446042008F016F8201A0128FC -:108BA00004D12868BDE8F04107F08EBEBDE8F08131 -:108BB00010B50C4605F045F800B1FFDF2046BDE8D2 -:108BC0001040FEF724B800007C02002014000020B2 -:108BD00038B50C468288817B19B14189914200D910 -:108BE0000A462280C188121D90B26A4607F06DF9CC -:108BF000BDF80000032800D30320C1B2208800F094 -:108C0000A3FF38BD38B50C468288817B19B1018934 -:108C1000914200D90A462280C188121D90B26A464C -:108C200007F053F9BDF80000022800D30220C1B2BA -:108C3000208800F089FF401CC0B238BD2DE9FE4FEE -:108C40000C46FD4981464022D1E90201CDE90101EE -:108C500009F1030020F00301C91C21F00301009178 -:108C60006846114607F01DFEF44E002C02D1F44A6E -:108C700000999160009901440091357F05F101054B -:108C800004D1E8B209F018FD00B1FFDF009800EB55 -:108C90000510C01C20F0030100915CB9707AB27A13 -:108CA0001044C2B200200870308C80B204F051FE33 -:108CB00000B1FFDF0098316A084400902146684601 -:108CC00000F00DFF0098C01C20F003000090B37A64 -:108CD000F27A717A04B1002007F0D9FE00990844B5 -:108CE00000902146684600F03AFF00273D46B24614 -:108CF00096F801800CE0284600F0D4FE0646817804 -:108D00008088F9F71DF971786D1C00FB0177EDB2D1 -:108D10004545F0D10098C01C20F00300009004B13C -:108D200000203946F9F717F9009900270844009008 -:108D30003D469AF801800CE0284600F0B3FE064656 -:108D4000C1788088FEF763FC71786D1C00FB0177A9 -:108D5000EDB24545F0D10098C01C20F00300009012 -:108D600004B100203946FEF75BFC00994FF0000883 -:108D70000844009045469AF801700EE0284600F03D -:108D800091FE0646807B30B106F1080001F0DDFE61 -:108D9000727800FB02886D1CEDB2BD42EED10098E6 -:108DA000C01C20F00300009004B10020414601F0F7 -:108DB000D0FE0099084400902146684600F049FE24 -:108DC0000098C01D20F0070200922CBB9D49002096 -:108DD000FAF743F8FBF713FB984801AA002110307B -:108DE000F8F7CAFA00B1FFDF9AF81D00FEF77FFF1F -:108DF00000B1FFDF91484FF4F67144301BF04BFF98 -:108E00008E480421443080F8E91180F8EA110621E7 -:108E100080F8EB11032101710099A1EB0900BDE875 -:108E2000FE8F70B5854C06464434207804EB40151F -:108E3000E078083590B9A01990F8E80100280ED024 -:108E4000A0780F2800D3FFDF202128461BF023FF46 -:108E5000687866F3020068700120E070284670BDF3 -:108E60002DE9F04105460C46002700780521904683 -:108E70003E46B1EB101F00D0FFDF287A50B1012829 -:108E80000ED0FFDFA8F800600CB1278066800020BC -:108E9000BDE8F0810127092674B16888A08008E048 -:108EA0000227142644B16888A0802869E060A88A57 -:108EB0002082287B2072E5E7A8F80060E7E710B57C -:108EC0005F4C6068C11D21F00701814200D0FFDFC7 -:108ED0005A4801210022017042700172417203233D -:108EE0008372C17202730274052202831F224283BD -:108EF000417455A242610A22027741774FF4B06172 -:108F000001626168416010BD30B54D4C1568636801 -:108F100010339D4202D20420136030BD474B5D7870 -:108F20005A6802EB0512107051700320D080172090 -:108F300090800120D0709070002090735878401C71 -:108F40005870606810306060002030BD70B5064613 -:108F50003A480024457807E0204600F0A3FD017858 -:108F6000B14204D0641CE4B2AC42F5D1002070BD23 -:108F7000F7B5074608780C4610B3FFF7E7FF05463C -:108F8000A7F12006202F06D0052E19D2DFE806F023 -:108F90000F2B2B151A0000F090FD0DB1697800E041 -:108FA0000021401AA17880B20844FF2808D8A07890 -:108FB00030B1A088022824D202E06088172820D28D -:108FC0000720FEBD207AE0B161881729F8D3A18877 -:108FD0001729F5D3A1790029F2D0E1790029EFD042 -:108FE000402804D9ECE7242F0BD1207A48B16188BE -:108FF0004FF6FB70814202D8A188814201D904203A -:10900000FEBD65B9207802AA0121FFF77DFF002887 -:10901000F6D12078FFF79AFF050000D1FFDF052E7B -:1090200025D2DFE806F003181B151E00A078687033 -:10903000A088E8801CE00000545002009803002043 -:109040001C000020000000206E5246357800000011 -:109050006088A8800CE0A078A87009E0A078E8708B -:1090600006E054F8020FA8606068E86000E0FFDFE7 -:109070000020FEBD1A2835D00DDC132832D2DFE8DF -:1090800000F01B31203131272723252D31312931A3 -:109090003131312F0F00302802D003DC1E2821D1BE -:1090A000072070473A3809281CD2DFE800F0151B6A -:1090B0000F1B1B1B1B1B07000020704743F2040003 -:1090C000704743F202007047042070470D2070473C -:1090D0000F207047082070471120704713207047F9 -:1090E000062070470320704710B5007800F001009B -:1090F00006F0E2FEBDE81040BCE70EB5017801F0D5 -:1091000001018DF80010417801F001018DF8011086 -:109110000178C1F340018DF802104178C1F340019C -:109120008DF80310017889088DF8041041788908BA -:109130008DF8051081788DF80610C1788DF807102C -:1091400000798DF80800684605F0DDFAFFF792FF18 -:109150000EBD2DE9F84FDFF8F883FE4C00261FE026 -:10916000012000F03FFD0120FFF75BFE0546402196 -:109170004746D8F8080007F0B2FB686000B9FFDF87 -:10918000686805F06EF8A8B12846FAF758FC28463A -:1091900000F02EFD20B940226968B86807F0CAFBCC -:1091A00094F9E9010428DBDA022007F005FD0746FF -:1091B0000025A6E040226968D8F8080007F0BAFB4D -:1091C000F2E7B8F802104046491C89B2A8F802102C -:1091D000B94201D3002141800221B8F8020007F012 -:1091E00043FD002865D0B8F80200694606F0CBFDC3 -:1091F000FFF740FF00B1FFDF9DF8000078B1B8F83D -:10920000020007F075FE5FEA000900D1FFDF484663 -:1092100007F0E3F818B1B8F8020002F03DF9B8F829 -:10922000020007F053FE5FEA000900D1FFDF484665 -:1092300007F0CBF8E8BB0321B8F8020007F014FDF3 -:109240005FEA000B48D1FFDF46E000BFDBF810000B -:1092500010B10078FF2849D0022000F0C3FC0220A2 -:10926000FFF7DFFD8246484607F0BBF9CAF8040065 -:1092700000B9FFDFDAF8040007F083FA002100905C -:109280000170B8F802105046AAF8021001F00AFE68 -:10929000484607F078FA00B9FFDF504600F0A8FC16 -:1092A00018B99AF80100000704D50099CBF81010FE -:1092B00012E024E0DBF8100038B10178491C11F00D -:1092C000FF01017008D1FFDF06E000221146484689 -:1092D00000F0BDFB00B9FFDF94F9EA01022805DBCD -:1092E000B8F8020001F0A3FD0028AFD194F9E9011C -:1092F000042804DB484607F0AAFA00B101266D1CD9 -:10930000EDB2BD4204D294F9EA010228BFF659AF8A -:10931000002E7FF423AFBDE8F84F032000F062BCBD -:1093200010B58B4CE06008682061AFF2D91002F0F4 -:1093300042FD607010BD87480021443801708448A8 -:10934000017085494160704770B505464FF0805007 -:109350000C46D0F8A410491C05D1D0F8A810C94378 -:109360000904090C0BD050F8A01F01F0010129706D -:10937000416821608068A080287830B970BD0621DE -:1093800020460AF0F8FD01202870607940F0C00006 -:10939000607170BD70B54FF080540D46D4F88010E8 -:1093A000491C0BD1D4F88410491C07D1D4F888107B -:1093B000491C03D1D4F88C10491C0CD0D4F880106F -:1093C0000160D4F884104160D4F888108160D4F82A -:1093D0008C10C16002E010210AF0CDFDD4F890009D -:1093E000401C0BD1D4F89400401C07D1D4F898004D -:1093F000401C03D1D4F89C00401C09D054F8900FB5 -:10940000286060686860A068A860E068E86070BD77 -:109410002846BDE8704010210AF0ADBD4D480079E6 -:10942000FFE470B54B4CE07830B3207804EB40108B -:10943000407A00F00700204490F9E801002800DCA1 -:10944000FFDF2078002504EB4010407A00F0070091 -:10945000011991F8E801401E81F8E8012078401CCC -:10946000C0B220700F2800D12570A078401CA070D9 -:109470000AF0E4FCE57070BDFFDF70BD3EB5054647 -:10948000032107F0F1FB0446284607F01FFD0546BF -:1094900004B9FFDF206918B10078FF2800D1FFDF91 -:1094A00001AA6946284600F0D2FA60B9FFDF0AE057 -:1094B000002202A9284600F0CAFA00B9FFDF9DF891 -:1094C000080000B1FFDF9DF80000411E8DF800107C -:1094D000EED220690199884201D1002020613EBD71 -:1094E00070B50546A0F57F400C46FF3800D1FFDF80 -:1094F000012C01D0FFDF70BDFFF790FF040000D109 -:10950000FFDF207820F00F00401D20F0F0005030E9 -:10951000207065800020207201202073BDE870401B -:109520007FE72DE9F04116460D460746FFF776FF27 -:10953000040000D1FFDF207820F00F00401D20F054 -:10954000F00050302070678001202072286805E00C -:109550001C000020DC030020C81400202061A88823 -:10956000A0822673BDE8F0415BE77FB5FFF7EEFC14 -:10957000040000D1FFDF02A92046FFF729FB0546C2 -:1095800003A92046FFF73EFB8DF800508DF801003F -:10959000BDF80800001DADF80200BDF80C00001D6C -:1095A000ADF80400E088ADF80600684606F066FCF9 -:1095B000002800D0FFDF7FBD2DE9F047DFF8FC93E6 -:1095C0000546002799F8000010B10820BDE8F08793 -:1095D00028460BF01BF808B11020F7E7F84C20786C -:1095E00008B9FFF76CFCA07A617A0844C6B200F0B3 -:1095F00064FAB04207D2301AC1B22A460020FFF7FF -:1096000083FC0700E2D1D9F804004E46C01C20F0CC -:109610000300C9F8040000F040FB716800EB01088A -:1096200001214046FFF70AFB06462968404488426C -:1096300002D8B6F5803F15D328600020FFF786FCDE -:1096400005000DD005F11300D9F8041020F0030037 -:109650004E46884200D0FFDF6078401E6070756023 -:109660000420B3E700214046FFF7E8FA0446A6428B -:1096700000D0FFDF04EB0801C9F8041029604FF6A1 -:10968000FF71A9F80210012189F8001038469DE702 -:109690002DE9F0410446C94817460E46007810B13E -:1096A0000820BDE8F08108460AF08AFF08B11020C2 -:1096B000F7E7C34D287808B9FFF701FC601E1E28A4 -:1096C00007D8012C22D13078FE281FD82877002017 -:1096D000E7E7A4F120001F2805D8E0B23A4631465A -:1096E000BDE8F04144E4A4F140001F2805D831460C -:1096F0002046BDE8F04100F0A3BAA4F1A0001F2865 -:1097000004D80020A02C03D0A12C06D00720C8E745 -:10971000317801F001016977C3E731680922F8293E -:1097200001D38B0701D01046BBE76B7C03F003032A -:10973000012B04D16B8BD7339CB28C42F3D82962B6 -:10974000AFE72DE9F04781460E4608460AF05EFF76 -:1097500048B948460AF078FF28B909F1030020F01B -:109760000301494501D0102030E795484FF0000A29 -:109770004430817869B14178804600EB4114083467 -:10978000378832460021204600F040FA050004D018 -:1097900027E0A6F800A0052018E7B9F1000F24D0B3 -:1097A0003088B84201D90C251FE0607800F0070529 -:1097B000284600F017FA08EB0507324697F8E8014B -:1097C0004946401C87F8E801204607F5F47700F089 -:1097D0001DFA05463878401E3870032000F002FA62 -:1097E0002DB10C2D01D0A6F800A02846EEE6607839 -:1097F000724E00F00701012923D002290CD0032961 -:1098000033D0FFDF98F801104046491CC9B288F8F0 -:1098100001100F2934D035E0616821B1000702D46E -:109820006088FFF72BFE98F8EA014746012802D12D -:10983000707802F0DFFA97F9EA010428E2DBFFDF33 -:10984000E0E7616819B14022B06807F073F898F852 -:10985000E9014746032802D1707802F0CBFA97F964 -:10986000E9010428CEDBFFDFCCE7C00602D5608823 -:10987000FFF704FE98F9EB010628C3DBFFDFC1E721 -:1098800080F801A08178491E8170617801F007019C -:1098900001EB080090F8E811491C80F8E811A4E7F2 -:1098A00070B50D4604460AF08BFE18B928460AF03A -:1098B000ADFE08B1102070BD29462046BDE87040BD -:1098C00008F031BF70B5044615460E4608460AF04A -:1098D00077FE18B928460AF099FE08B1102070BD2D -:1098E000022C03D0102C01D0092070BD2A4631462D -:1098F000204608F03BFF0028F7D0052070BD70B56A -:1099000014460D4606460AF05BFE38B928460AF0B2 -:109910007DFE18B920460AF097FE08B1102070BDF0 -:1099200022462946304608F040FF0028F7D007209D -:1099300070BD3EB504460AF069FE08B110203EBD78 -:10994000684604F03FFEFFF795FB0028F7D19DF82D -:1099500006002070BDF808006080BDF80A00A080F5 -:1099600000203EBD70B505460C4608460AF06CFE68 -:1099700020B93CB120680AF049FE08B1102070BD42 -:10998000A08828B121462846BDE87040FDF7BEBE3C -:10999000092070BD70B504460D4608460AF010FE59 -:1099A00030B9601E1E2818D828460AF009FE08B1F2 -:1099B000102070BD022C05D9072070BD1C000020AE -:1099C0009803002004B9FFDFF94800EB840050F849 -:1099D000041C2846BDE870400847A4F120001F2859 -:1099E00005D829462046BDE87040FAF790BCF02C17 -:1099F000E2D1A8680AF0E4FD0028D9D1284606F093 -:109A0000A6FABDE87040FFF735BB70B504460D46B9 -:109A100008460AF0FBFD30B9601E1E280DD8284606 -:109A20000AF0CEFD08B11020C7E7012C01D0022CAE -:109A300001D10620C1E70720BFE7A4F120001F28BD -:109A4000F9D829462046BDE87040FAF7B8BC06F0C0 -:109A50008BBC38B50446D748007B00F00105D9B966 -:109A6000F9F787FA0DB1226800E00022D248417868 -:109A7000C06804F09EFBD0481030C0788DF800001C -:109A800010B1012802D004E0012000E000208DF890 -:109A90000000684604F010FE002D02D02068283037 -:109AA000206038BD30B5C34D04466878A04200D868 -:109AB000FFDF686800EB041030BD70B5BD480025BD -:109AC0002C46467807E02046FFF7ECFF4078641C00 -:109AD0002844C5B2E4B2B442F5D128466DE72DE979 -:109AE000F0410C46064600F006F907463068C01CF7 -:109AF00020F00302326014BBAE483B4608212430FC -:109B00000AF038FC002409E0082C10D2DFE804F049 -:109B1000060408080A040406A84804E0A84802E06D -:109B2000A84800E0A8480AF045FC054600E0FFDF31 -:109B3000A54200D0FFDF641CE4B2082CE4D33068F7 -:109B400000EB07103060ACE5021D5143452900D2FF -:109B500045210844C01CB0FBF2F0C0B270472DE9AB -:109B6000FC5F064693484FF000088B464746444644 -:109B700090F8019022E02046FFF794FF050000D105 -:109B8000FFDF687869463844C7B22846FFF720F8F7 -:109B9000824601A92846FFF735F80346BDF80400C0 -:109BA0005246001D81B2BDF80000001D80B207F0D2 -:109BB000D9F86A78641C00FB0288E4B24C45DAD11B -:109BC0003068C01C20F003003060BBF1000F00D0F3 -:109BD00000204246394607F0D3F831680844306027 -:109BE000BDE8FC9F7349443108710020C87070477C -:109BF00070494431CA782AB10A7801EB4211083120 -:109C0000814201D001207047002070472DE9F041CA -:109C100006460078154600F00F0400201080601EF4 -:109C20000F46052800D3FFDF61482A46103000EBBD -:109C30008400394650F8043C3046BDE8F0411847EE -:109C400070B50C46402802D0412806D120E0A0780B -:109C500061780D18E178814201D90720ADE62078BE -:109C6000012801D91320A8E6FF2D08D808F008FF25 -:109C700006460AF09CF8301A801EA84201DA12202B -:109C80009BE64C482168816021790173002094E6AD -:109C9000BDE87040084600F05EB82DE9F0470027A7 -:109CA000DFF810A13E463D46B9463C469AF8018091 -:109CB0000AE02046FFF7F6FE4178807B0E4410FB59 -:109CC0000155641CE4B27F1C4445F2D109EB8700C6 -:109CD000C6EBC60100EB81009AF8092000EB850174 -:109CE00001EBC2019AF80A209AF80B0001EBC201BD -:109CF00001EB80006AE42DE9F047DFF8B890002618 -:109D0000344699F8090099F80A2099F8017002443C -:109D1000D5B299F80B20104400F0FF0808E0204667 -:109D2000FFF7C0FE817B407811FB0066641CE4B243 -:109D3000BC42F4D199F8090099F80A102844284443 -:109D40004044401C01B1012108448419FF2C00D972 -:109D5000FFDFE0B23AE438B50446407800F0030093 -:109D6000012803D002280BD0072038BD606858B105 -:109D70000AF073FCD0B960680AF066FC20B915E0FF -:109D800060680AF01DFC88B969462046FCF71EF998 -:109D90000028EAD1607800F00300022816D19DF86F -:109DA000000098B160680AF04FFC78B1102038BD0F -:109DB00054500200980300201C000020BD41000008 -:109DC0001FAC00005D2F0000AB2401006189F82961 -:109DD0000DD8208988420AD8607800F003020A482A -:109DE000012A06D1D731026A89B28A4201D20920FA -:109DF000DDE794E80E0000F1100585E80E000AB9D1 -:109E0000002101830020D2E7980300202DE9F041D2 -:109E1000074614468846084601F01CFD064608EB36 -:109E200088001C22796802EBC0000D18688C58B1BC -:109E30004146384601F016FD014678680078C200B8 -:109E4000082305F120000CE0E88CA8B14146384613 -:109E500001F00FFD0146786808234078C20005F143 -:109E6000240006F0BEFD38B1062121726681D0E9DA -:109E70000010C4E9031009E0287809280BD0052058 -:109E8000207266816868E060002028702046BDE886 -:109E9000F04101F0D5BC072020726681F4E72DE97E -:109EA000F04116460D460746406801EB85011C222D -:109EB00002EBC1014418204601F0FDFC40B1002135 -:109EC000708865F30F2160F31F4107200AF02CFB17 -:109ED00009202070324629463846BDE8F04195E712 -:109EE0002DE9F0410E46074600241C21F07816E0CB -:109EF00004EB8403726801EBC303D25C6AB1FFF721 -:109F00008DFA050000D1FFDF6F802A4621463046DA -:109F1000FFF7C5FF0120BDE8F081641CE4B2A04258 -:109F2000E6D80020F7E770B5064600241C21C0786B -:109F30000AE000BF04EB8403726801EBC303D51889 -:109F40002A782AB1641CE4B2A042F3D8402070BD44 -:109F5000282128461AF07DFE7068808928812046D5 -:109F600070BD70B5034600201C25DC780DE000BFF5 -:109F700000EB80065A6805EBC6063244167816B127 -:109F8000128A8A4204D0401CC0B28442F0D84020D9 -:109F900070BDF0B5044600201C26E5780EE000BF39 -:109FA00000EB8007636806EBC7073B441F788F42CE -:109FB00002D15B78934204D0401CC0B28542EFD8F6 -:109FC0004020F0BD0078032801D000207047012018 -:109FD00070470078022801D00020704701207047A8 -:109FE0000078072801D000207047012070472DE934 -:109FF000F041064688461078F1781546884200D32D -:10A00000FFDF2C781C27641CF078E4B2A04201D852 -:10A01000201AC4B204EB8401706807EBC101084444 -:10A02000017821B14146884708B12C7073E7287840 -:10A03000A042E8D1402028706DE770B514460B8827 -:10A040000122A240134207D113430B8001230A22AD -:10A05000011D06F090FC047070BD2DE9FF4F81B02A -:10A060000878DDE90E7B9A4691460E4640072CD4CF -:10A07000019806F03DFF040000D1FFDF07F104085E -:10A0800020461FFA88F106F07CF8050000D1FFDFBA -:10A09000204629466A4606F0C6FA0098A0F80370E2 -:10A0A000A0F805A0284606F06CFB017869F30601CC -:10A0B0006BF3C711017020461FFA88F106F0A4F86F -:10A0C00000B9FFDF019803F0E9FF06EB0900017F0B -:10A0D000491C017705B0BDE8F08F2DE9F84F0E4619 -:10A0E0009A4691460746032106F0BEFD0446008DC0 -:10A0F000DFF8B485002518B198F80000B0421ED1F1 -:10A10000384606F0F5FE070000D1FFDF09F1040133 -:10A11000384689B206F035F8050010D03846294691 -:10A120006A4606F080FA009800210A460180817094 -:10A1300004F084F80098C01DCAF8000021E098F8E7 -:10A140000000B04216D104F1260734F8341F012074 -:10A1500000FA06F911EA090F00D0FFDF2088012379 -:10A1600040EA090020800A22391D384606F01EFC0C -:10A17000067006E0324604F1340104F12600FFF7D0 -:10A180005CFF0A2188F800102846BDE8F88FFEB56C -:10A1900014460D46064602AB0C220621FFF79DFF32 -:10A1A000002826D00299687812220A70801C487014 -:10A1B00008224A80A870208888806088C880A0888B -:10A1C0000881E088488100240C20CDE900040523A3 -:10A1D000062229463046FFF740FF2146002266F35B -:10A1E0001F41F02310460AF0F5F86878801C68706B -:10A1F0000120FEBDFEB514460D460622064602AB02 -:10A200001146FFF76AFF002812D0029B132000219D -:10A210001870A8785870022058809C800620CDE9DC -:10A2200000010246052329463046FFF716FF0120AC -:10A23000FEBD2DE9FE430C46804644E002AB0E22F3 -:10A2400007214046FFF749FF002841D060681C22E3 -:10A2500067788678BF1C06EB860102EBC1014518C2 -:10A2600002981421017047700A214180698A018196 -:10A27000E98A4181A9888180A9898181304601F0DC -:10A28000E9FA029905230722C8806F70042028701C -:10A2900000250E20CDE9000521464046FFF7DDFEF2 -:10A2A000294666F30F2168F31F41F023002207209F -:10A2B0000AF090F86078FD49801C60706268204662 -:10A2C000921CFFF794FE606880784028B6D1012088 -:10A2D000BDE8FE83FEB50D46064638E002AB0E2211 -:10A2E00007213046FFF7F9FE002835D068681C23A7 -:10A2F000C17801EB810203EBC20284180298152297 -:10A300000270627842700A224280A2894281A28849 -:10A310008281084601F09EFA014602988180618A96 -:10A32000C180E18A0181A088B8B10020207000219D -:10A330000E20CDE900010523072229463046FFF70C -:10A340008CFE6A68DA492846D21CFFF750FE68681E -:10A35000C0784028C2D10120FEBD0620E6E72DE9E5 -:10A36000FE430C46814644E0204601F08EFAD0B30D -:10A3700002AB082207214846FFF7AFFE0028A7D00E -:10A3800060681C2265780679AD1C06EB860102EB3D -:10A39000C10147180298B7F8108006210170457076 -:10A3A00004214180304601F055FA01460298052308 -:10A3B0000722C180A0F804807D7008203870002535 -:10A3C000CDE9000521464846FFF747FE294666F3DA -:10A3D0000F2169F31F41F0230022072009F0FAFF43 -:10A3E0006078801C60706268B2492046121DFFF7D9 -:10A3F000FEFD606801794029B6D1012068E72DE9AA -:10A40000F34F83B00E4680E0304601F03EFA00285C -:10A4100075D071681C2091F8068008EB880200EB6B -:10A42000C2000C184146304601F023FA0146A078DC -:10A43000C30070684078C20004F1240006F0EDFA11 -:10A4400007468088E18B401A80B2002581B3AA4676 -:10A45000218B814200D808468146024602AB072183 -:10A460000398FFF73AFE010028D0BAF1000F03D09D -:10A47000029AB888022510808B46E28B3968A9EBD6 -:10A4800005001FFA80FA0A440398009206F030FD96 -:10A49000ED1D009A59465346009506F03EF9E08BB3 -:10A4A000504480B2E083B988884209D1012508E090 -:10A4B000FFE7801C4FF0010A80B2C9E7002009E6DF -:10A4C0000025CDE90095238A072231460398FFF73E -:10A4D000C4FDE089401EE0818DB1A078401CA070D1 -:10A4E0007068F178427811FB02F1CAB281690123E8 -:10A4F0000E3006F040FA80F800800020E083726899 -:10A500006D493046921DFFF772FD706881794029D0 -:10A510007FF47AAF0120DDE570B5064648680D4648 -:10A5200014468179402910D104EB84011C2202EBEE -:10A53000C101084401F0E0F9002806D06868294606 -:10A5400084713046BDE8704059E770BDFEB50C46D9 -:10A550000746002645E0204601F097F9D8B3606829 -:10A560001C22417901EB810102EBC1014518688988 -:10A5700000B9FFDF02AB082207213846FFF7ADFD27 -:10A58000002833D00299607816220A70801C487027 -:10A59000042048806068407901F05CF90146029827 -:10A5A0000523072281806989C1800820CDE9000642 -:10A5B00021463846FFF751FD6078801C6070A889FD -:10A5C00069890844B0F5803F00D3FFDFA889698915 -:10A5D0000844A8816E81626838492046521DFFF701 -:10A5E00006FD606841794029B5D10120FEBD30B536 -:10A5F000438C458BC3F3C704002345B1838B641E92 -:10A60000ED1AC38A6D1E1D4495FBF3F3E4B22CB121 -:10A61000008918B1A04200D8204603444FF6FF70CD -:10A62000834200D3034613800C7030BD2DE9FC41FA -:10A63000074616460D46486802EB86011C2202EBCF -:10A64000C10144186A4601A92046FFF7D0FFA0893E -:10A65000618901448AB2BDF80010914212D0081AF3 -:10A6600000D5002060816868407940280AD12046E2 -:10A6700001F038F9002805D0686829464671384647 -:10A68000FFF764FFBDE8FC812DE9FE4F8946804657 -:10A6900015465088032106F0E7FA8346B8F8020011 -:10A6A00040280DD240200CE030000020C59F000063 -:10A6B000D39F0000E19F0000F9B80000E5B800005A -:10A6C000403880B282460146584601F0DEF8002844 -:10A6D0007ED00AEB8A001C22DBF8041002EBC000DB -:10A6E0000C18204601F0E7F8002877D1B8F80000F0 -:10A6F000E18A88423CD8A189D1B348456ED1002671 -:10A700005146584601F0AEF8218C0F18608B48B9BD -:10A71000B9F1020F62D3B8F804006083618A8842FD -:10A7200026D80226A9EB06001FFA80F9B888A28B6A -:10A73000801A002814DD4946814500DA084683B2B4 -:10A7400068886968029139680A44CDE9003206F0E8 -:10A75000BDFBDDE90121F61D009B009605F0A9FF78 -:10A76000A18B01EB090080B2A083618B884207D9DD -:10A77000688803B052465946BDE8F04F01F0D9B899 -:10A780001FD14FF009002872B8F802006881D7E99C -:10A790000001C5E90401608BA881284601F050F84A -:10A7A0005146584601F05EF80146DBF804000823E4 -:10A7B0000078C20004F1200006F013F90020A08305 -:10A7C0006083A0890AF0FF02401EA081688800E033 -:10A7D00004E003B05946BDE8F04F27E7BDE8FE8F1F -:10A7E0002DE9F041064615460F461C46184609F06D -:10A7F000E7FE18B9206809F009FF08B1102015E438 -:10A800007168688C0978B0EBC10F01D313200DE497 -:10A810003946304601F026F8014670680823007872 -:10A82000C20005F1200006F0A6F8D4E90012C0E944 -:10A8300000120020E3E710B50446032106F014FAE5 -:10A840000146007800F00300022805D02046BDE84C -:10A85000104001F114029AE48A8A2046BDE81040B3 -:10A86000C8E470B50446032106F0FEF9054601462A -:10A870002046FFF774FD002816D029462046FFF732 -:10A8800065FE002810D029462046FFF723FD00284A -:10A890000AD029462046FFF7CCFC002804D02946E0 -:10A8A0002046BDE87040AAE570BD2DE9F0410C4698 -:10A8B00080461EE0E178427811FB02F1CAB281695C -:10A8C00001230E3006F08DF8077860681C22C179EC -:10A8D000491EC17107EB8701606802EBC101461890 -:10A8E0003946204600F0D1FF18B1304600F0DCFFB9 -:10A8F00020B16068C1790029DCD180E7FEF78EFDC8 -:10A90000050000D1FFDF0A202872384600F0A2FFC0 -:10A9100068813946204600F0ACFF01466068082394 -:10A920004078C20006F1240006F05BF8D0E9001080 -:10A93000C5E90310A5F80280284600F081FFB07831 -:10A9400000B9FFDFB078401EB07058E770B50C4614 -:10A950000546032106F088F901464068C279224481 -:10A96000C2712846BDE870409FE72DE9FE4F824640 -:10A97000507814460F464FF0000800284FD00128A9 -:10A9800007D0022822D0FFDF2068B8606068F86036 -:10A9900024E702AB0E2208215046FFF79EFB002859 -:10A9A000F2D00298152105230170217841700A2107 -:10A9B0004180C0F80480C0F80880A0F80C8062884C -:10A9C00082810E20CDE90008082221E0A6783046D9 -:10A9D00000F040FF054606EB86012C22786802EB6A -:10A9E000C1010822465A02AB11465046FFF775FBDB -:10A9F0000028C9D0029807210170217841700421F4 -:10AA0000418008218580C680CDE9001805230A46CB -:10AA100039465046FFF721FB87F80880DEE6A67826 -:10AA2000022516B1022E13D0FFDF2A1D914602AB7C -:10AA300008215046FFF751FB0028A5D002980121BC -:10AA4000022E0170217841704580868002D005E099 -:10AA50000625EAE7A188C180E1880181CDE9009857 -:10AA60000523082239465046D4E710B50446032191 -:10AA700006F0FAF8014600F108022046BDE8104051 -:10AA800073E72DE9F05F0C4601281DD0957992F807 -:10AA90000480567905EB85011F2202EBC10121F0EC -:10AAA000030B08EB060111FB05F14FF6FF7202EAFA -:10AAB000C10909F1030115FB0611F94F21F0031A31 -:10AAC00040B101283DD124E06168E57891F800802B -:10AAD0004E78DFE75946786805F001FF606000B9FD -:10AAE000FFDF594660681AF0D6F8E570514678687D -:10AAF00005F0F5FE6168486100B9FFDF60684269F2 -:10AB000002EB09018161606880F80080606846702E -:10AB100017E0606852464169786805F00BFF5A46B5 -:10AB20006168786805F006FF032006F045F80446E2 -:10AB3000032006F049F8201A012802D1786805F0B0 -:10AB4000C3FE0BEB0A00BDE8F09F02460021022085 -:10AB500097E773B5D24D0A202870009848B10024B9 -:10AB60004FEA0D0005F09DFE002C01D100996960AF -:10AB70007CBD01240020F5E770B50C461546382150 -:10AB800020461AF088F8012666700A2104F11C009C -:10AB90001AF081F805B9FFDF297A207861F3010006 -:10ABA0002070A879002817D02A4621460020FFF7F8 -:10ABB00068FF6168402088706168C87061680871CA -:10ABC0006168487161688871616828880881616876 -:10ABD000688848816068868170BDC878002802D086 -:10ABE000002201204DE7704770B50546002165F34E -:10ABF0001F41002009F098FC0321284606F034F894 -:10AC0000040000D1FFDF21462846FFF769F900283C -:10AC100004D0207840F010002070012070BD2DE994 -:10AC2000FF4180460E460F0CFEF7F8FB050007D0EB -:10AC30006F800321384606F017F8040008D106E0BB -:10AC400004B03846BDE8F0411321F9F7F9BEFFDF43 -:10AC50005FEA080005D0B8F1070F18D0FFDFBDE8A4 -:10AC6000FF8120782A4620F0080020700020ADF8EF -:10AC7000020002208DF800004FF6FF70ADF80400CE -:10AC8000ADF8060069463846F9F7EDFAE7E7C6F38E -:10AC9000072101EB81021C23606803EBC202805C88 -:10ACA000042803D008280AD0FFDFD8E7012000904D -:10ACB0004FF440432A46204600F004FECFE704B09C -:10ACC0002A462046BDE8F041FFF7E9B82DE9F05FDC -:10ACD0000027B0F80A9090460C4605463E46B9F16A -:10ACE000400F01D2402001E0A9F140001FFA80FA94 -:10ACF000287AC01E08286BD2DFE800F00D04192066 -:10AD000058363C4772271026002C6CD0D5E9030139 -:10AD1000C4E902015CE070271226002C63D00A22ED -:10AD200005F10C0104F1080019F059FF50E07127FA -:10AD30000C26002C57D0E868A06049E07427102644 -:10AD40009CB3D5E90301C4E902016888032105F039 -:10AD50008BFF8346FEF762FB0246688850805146AF -:10AD60005846FFF753F833E075270A26ECB1A88957 -:10AD700020812DE076271426BCB105F10C0004F1EA -:10AD8000080307C883E8070022E07727102664B18C -:10AD9000D5E90301C4E902016888032105F064FFD5 -:10ADA00001466888FFF781FD12E01CE07327082642 -:10ADB000CCB16888032105F057FF01460078C00632 -:10ADC00006D56888FFF78CF810B96888F8F71BFE7D -:10ADD000A8F800602CB12780A4F8069066806888E7 -:10ADE000A0800020AFE6A8F80060FAE72DE9FC415A -:10ADF0000C461E4617468046032105F035FF0546E2 -:10AE00000A2C0AD2DFE804F0050505050505090945 -:10AE10000907042303E0062301E0FFDF0023CDE957 -:10AE20000076224629464046FFF717F92AE438B54E -:10AE30000546A0F57F40FF3830D0284606F046F89A -:10AE4000040000D1FFDF204605F0CBFB002815D021 -:10AE500001466A46204605F0E6FB00980321B0F85B -:10AE60000540284605F000FF0546052C03D0402C80 -:10AE700005D2402404E0007A80B1002038BD403C77 -:10AE8000A4B2214600F001FD40B1686804EB8401E2 -:10AE90003E2202EBC101405A0028EFD0012038BD0C -:10AEA000300000202DE9F04F044689B0408806F0BC -:10AEB0000DF8050000D1FFDF06AA2846616800F002 -:10AEC000BDFC069D001F81B235F8032F6B888A42B6 -:10AED00005D1042B0AD0052B1DD0062B15D02246F8 -:10AEE0002846FFF7D1FB09B0BDE8F08F16462D1DAF -:10AEF000224629463046F7F750FA0828F3D1224671 -:10AF000029463046FCF749FCEDE76088291D636857 -:10AF1000FAF7C8FCE7E717466088032105F0A4FEAE -:10AF20004FF000088DF804800646ADF80680042F27 -:10AF3000D9D36A79002AD6D028794FF6FF794FF015 -:10AF40001C0A13282CD008DC012878D0062847D00A -:10AF5000072875D0122874D106E0142872D015285D -:10AF600071D016286DD1ACE10C2F6AD1307800F089 -:10AF70000301022965D140F0080030706879B07093 -:10AF800001208DF804002889ADF808006889ADF823 -:10AF90000A00A889ADF80C00E889ADF80E0019E0A8 -:10AFA000B07890429FD1307801079CD5062F9AD176 -:10AFB00020F0080030706088414660F31F41002097 -:10AFC00009F0B2FA02208DF80400ADF80890288943 -:10AFD000ADF80A006088224601A9F9F744F982E732 -:10AFE000082F80D12F89B5F80A90402F01D2402038 -:10AFF00001E0A7F1400080B280460146304600F0F3 -:10B0000044FC08B3716808EB88002C2202EBC000F6 -:10B01000095A4945E3D1FE4807AAD0E90210CDE913 -:10B02000071068798DF81C0008F0FF058DF81E5098 -:10B0300060883146FFF799FC2246294639E0B6E0A0 -:10B0400014E03CE039E0E6E0F148D0E90010CDE959 -:10B0500007106879ADF820708DF81C00ADF82290CB -:10B06000608807AA3146FFF780FC3CE7082FB6D17D -:10B070006889B5F80880402801D2402000E04038B7 -:10B0800087B23946304600F000FC0028A7D007EB15 -:10B09000870271680AEBC2000844028A42459ED1C9 -:10B0A000017808299BD140786979884297D1F9B213 -:10B0B00022463046FEF7F3FE15E70E2F07D0CDF8F7 -:10B0C0001C80CDF8208068798DF81C00C8E769895C -:10B0D000EF898B46B5F80C903046FEF742FFABF196 -:10B0E0004001402901D309204AE0B9F1170F01D3EB -:10B0F000172F01D20B2043E040280ED000EB800236 -:10B1000071680AEBC20008440178012903D1407834 -:10B1100069798842A9D00A2032E03046FEF703FF61 -:10B12000014640282BD001EB810372680AEBC30073 -:10B1300002EB0008012288F800206A7988F80120D3 -:10B1400070682A894089B84200D938462D8A03237D -:10B150002372A282E7812082A4F80C9065820846BF -:10B1600000F078FB6081A8F81490A8F81870A8F88F -:10B170000E50A8F810B0204600F062FBB3E60420A1 -:10B1800005212172A4F80A80E08101212173A049E0 -:10B19000D1E90421CDE9072169798DF81C10ADF8BA -:10B1A0001E00608807AA3146FFF7DFFBE3E7062FA2 -:10B1B000E4D3B078904215D13078010712D520F051 -:10B1C000080030706088414660F31F41002009F09C -:10B1D000ABF902208DF804002889ADF80800ADF81D -:10B1E0000A90F7E604213046FEF7D3FE05464028D4 -:10B1F000C4D002208303009022462946304600F046 -:10B2000061FB4146608865F30F2160F31F41072011 -:10B2100009F08AF967E60E2FB0D104213046FEF717 -:10B22000B8FE81464028A9D04146608869F30F21C5 -:10B2300060F31F41072009F077F9288A0790E88911 -:10B2400000907068AF894089B84200D9384683467B -:10B25000B5F80A8028890590484600F0FBFA60811D -:10B26000079840B10220079B00902246494630468D -:10B2700000F028FB37E6B8F1170F1ED3172F1CD3A9 -:10B280000420207200986082E781A4F810B0A4F82E -:10B290000C8009EB890271680AEBC2000D18009955 -:10B2A0000598A5F81480A5F818B0E98128822046F1 -:10B2B00000F0C6FA0620287015E601200B23009046 -:10B2C000D3E7082FA6D129893046FEF74AFE074664 -:10B2D00040289FD007EB870271680AEBC200084440 -:10B2E000804600F0E8FA002894D16D89B8F80E0085 -:10B2F0002844B0F5803F05D360883A46314600F0D7 -:10B3000018FBF0E5002D85D0A8F80E0060883A46BD -:10B310003146FFF701F908202072384600F09AFA0A -:10B320006081A58127E770B50D460646032105F02B -:10B330009BFC040004D02078000704D5112070BDC8 -:10B3400043F2020070BD2A4621463046FEF71FFF39 -:10B3500018B9286860616868A061207840F008002A -:10B360002070002070BD70B50D460646032105F023 -:10B370007BFC040004D02078000704D4082070BDB2 -:10B3800043F2020070BD2A4621463046FEF732FFE6 -:10B3900000B9A582207820F008002070002070BD40 -:10B3A0002DE9F04F0E4691B08046032105F05CFC7C -:10B3B0000446404605F09CFD074600200790089093 -:10B3C0000990ADF830000A9002900390049004B9FF -:10B3D000FFDF0DF1080917BBFFDF20E038460BA99E -:10B3E000002204F0C1FF9DF82C0000F07F050A2D1B -:10B3F00000D3FFDF6019017F491E01779DF82C0003 -:10B4000000060CD52A460CA907A8FEF716FE01E097 -:10B410007C50020019F80510491C09F80510761E29 -:10B42000F6B2DBD204F13400FA4D04F1260BDFF85A -:10B43000E8A304F12A07069010E05846069900F0A8 -:10B440006AFA064628700A2800D3FFDF5AF8261049 -:10B4500040468847E08CC05DB04202D0208D002875 -:10B46000EBD10A202870EC4D4E4628350EE00CA991 -:10B4700007A800F050FA0446375D55F8240000B9DB -:10B48000FFDF55F82420394640469047BDF81E009E -:10B490000028ECD111B027E510B5032105F0E4FB3D -:10B4A000040000D1FFDF0A2104F11C0019F0F3FBB6 -:10B4B000207840F00400207010BD10B50C46032128 -:10B4C00005F0D2FB2044007F002800D0012010BDF1 -:10B4D0002DE9F84F894615468246032105F0C4FB45 -:10B4E000070004D0284609F06BF840B903E043F2A6 -:10B4F0000200BDE8F88F484609F088F808B110202E -:10B50000F7E7786828B169880089814201D9092064 -:10B51000EFE7B9F800001C2418B1402809D24020F8 -:10B5200008E03846FEF7FFFC8046402819D113207A -:10B53000DFE7403880B280460146384600F0A5F982 -:10B5400048B108EB8800796804EBC000085C01286A -:10B5500003D00820CDE70520CBE7FDF75FFF06000D -:10B560000BD008EB8800796804EBC0000C18B9F820 -:10B57000000020B1E88910B113E01120B9E7288854 -:10B58000172802D36888172801D20720B1E7686816 -:10B5900038B12B1D224641463846FFF721F90028D5 -:10B5A000A7D104F10C0269462046FFF720F828884D -:10B5B00060826888E082B9F8000030B10220207013 -:10B5C000E889A080E889A0B12BE003202070A88939 -:10B5D000A08078688178402905D180F802803946BA -:10B5E0005046FEF726FE404600F034F9A9F8000068 -:10B5F00021E07868218B4089884200D90846208361 -:10B60000A6F802A004203072B9F800007081E08929 -:10B610007082F181208B3082A08AB081304600F0A8 -:10B620000FF97868C178402905D180F80380394640 -:10B630005046FEF74FFE00205BE770B50D4606460C -:10B64000032105F011FB040003D0402D04D2402556 -:10B6500003E043F2020070BD403DADB2294600F068 -:10B6600014F958B105EB85011C22606802EBC10199 -:10B67000084400F020F918B1082070BD052070BD05 -:10B680002A462146304600F054F9002070BD2DE9CD -:10B69000F0410D4616468046032105F0E5FA0446C2 -:10B6A000402D01D2402500E0403DADB28CB129468D -:10B6B00000F0EBF880B105EB85011C22606802EB1D -:10B6C000C1014718384600F0F6F838B10820BDE847 -:10B6D000F08143F20200FAE70520F8E733463A46E4 -:10B6E00029462046FFF77CF80028F0D1EAB221462F -:10B6F0004046FEF79BFF0020E9E72DE9F0410D46AB -:10B7000016468046032105F0AFFA0446402D01D2CB -:10B71000402500E0403DAFB224B1304608F050FF74 -:10B7200038B902E043F20200D1E7306808F048FF80 -:10B7300008B11020CBE73946204600F0A6F860B1EA -:10B7400007EB87011C22606802EBC10145182846FF -:10B7500000F0B1F818B10820B9E70520B7E7B088C4 -:10B76000A98A884201D90C20B1E76168E88C497840 -:10B77000B0EBC10F01D31320A9E73946204600F0F2 -:10B7800078F80146606808234078C20005F124007B -:10B7900005F0F1F8D6E90012C0E90012FAB221462C -:10B7A0004046FEF7B9FE002091E72DE9F0470D462F -:10B7B0001F4690468146032105F056FA0446402D67 -:10B7C00001D2402001E0A5F1400086B23CB14DB16C -:10B7D000384608F039FF50B11020BDE8F08743F239 -:10B7E0000200FAE76068C8B1A0F80C8024E0314696 -:10B7F000204600F04AF888B106EB86011C226068FA -:10B8000002EBC1014518284600F055F840B1082068 -:10B81000E3E7000030000020945002000520DCE740 -:10B82000A5F80880F2B221464846FEF7FFFE1FB198 -:10B83000A8896989084438800020CEE704F0F3BE67 -:10B84000017821F00F01491C21F0F0011031017045 -:10B85000FDF7E7BD10B50446402800D9FFDF4034AE -:10B86000A0B210BD406842690078484302EBC000B6 -:10B870007047C2784068037812FB03F2437840694E -:10B8800001FB032100EBC1007047C2788A4209D94D -:10B89000406801EB81011C2202EBC101405C08B150 -:10B8A00001207047002070470078062801D9012048 -:10B8B0007047002070470078062801D001207047AB -:10B8C00000207047F0B401EB81061C27446807EBA9 -:10B8D000C6063444049D05262670E3802571F0BC1D -:10B8E000FEF794BA10B5418911B1FFF7DDFF08B139 -:10B8F000002010BD012010BD10B5C18C8278B1EBC5 -:10B90000C20F04D9C18911B1FFF7CEFF08B10020E1 -:10B9100010BD012010BD10B50C4601230A22011DE7 -:10B9200005F05FF800782188012282409143218050 -:10B9300010BDF0B402EB82051C264C6806EBC50571 -:10B94000072363554B681C79402C03D11A71F0BC56 -:10B95000FEF705BDF0BC704710B5EFF3108000F0A6 -:10B96000010472B6F7484178491C417040780128BB -:10B9700001D1F7F709FB002C00D162B610BD70B5FC -:10B98000F04CE07848B90125E570FFF7E5FFF7F7DF -:10B9900003FB20B1002008F058FA002070BD4FF0E2 -:10B9A00080406571C0F80453F7E770B5EFF310807D -:10B9B00000F0010572B6E34C607800B9FFDF6078F3 -:10B9C000401E6070607808B9F7F7E2FA002D00D1E8 -:10B9D00062B670BDDB4810B5C17821B1002141715C -:10B9E000C170FFF7E2FF002010BD10B50446F7F765 -:10B9F000D3FAD449C978084000D001202060002043 -:10BA000010BD2DE9F05FDFF83C934278817889F82A -:10BA10000620002589F80710064689F808500078A6 -:10BA20002F4620B101280FD002280FD0FFDFF7F7F3 -:10BA3000C0FA98B1F7F7C4FAA8420FD12846F7F731 -:10BA4000C3FA0028FAD047E00125F0E7FFF784FFAA -:10BA5000F7F7A2FA0028FBD00225E8E701208407C7 -:10BA6000E060C4F80471B8490D600107D1F84412D0 -:10BA7000B54AC1F3423124321160B3493431086010 -:10BA80004FF0020BC4F804B3A060DFF8C0A2DAF8EC -:10BA90000010C94341F3001101F10108DAF8001068 -:10BAA00041F01001CAF8001000E020BFD4F80401F2 -:10BAB0000028FAD02846F7F787FA0028FAD0B8F11C -:10BAC000000F05D1DAF8001021F01001CAF80010BB -:10BAD000C4F808B3C4F8047199F807004C4670B173 -:10BAE000307860B9F7F758FA064608F00BFB6FF0AC -:10BAF000004116B1C4E9031001E0C4E9030115B126 -:10BB00002771BDE8F09F01202071BDE8F05F00F0D3 -:10BB1000D9B870B5050000D1FFDF4FF080424FF07B -:10BB2000FF30C2F808030021C2F80011C2F8041166 -:10BB3000C2F80C11C2F81011824C6170F7F732FA9A -:10BB400010B10120E07060702846BDE8704058E7F1 -:10BB50002DE9FE4F7E4800687D4A7E49083211601B -:10BB60008C070290D4F8080108B1012600E00026F5 -:10BB7000D4F8240100B101208146D4F81C0100B1A1 -:10BB800001208346D4F8200100B101200190D4F8AF -:10BB9000000110B14FF0010801E04FF00008D4F8A7 -:10BBA000040108B1012700E00027D4F80C0100B11E -:10BBB00001200090D4F8100108B1012100E000211B -:10BBC0008A4646EA080127EA01000099884320EAEC -:10BBD0000A0020EA090030EA0B0000D0FFDF002550 -:10BBE00026B1C4F80851012008F02FF9B9F1000F6F -:10BBF00004D0C4F82451092008F027F9BBF1000F44 -:10BC000004D0C4F81C510A2008F01FF9019820B193 -:10BC1000C4F820510B2008F018F9DFF83C91494E88 -:10BC20004FF0010BB8F1000F11D0C4F8005170793A -:10BC300018B17571002008F008F9307838B1357006 -:10BC400086F802B00222C9F80020C4F810B00FB183 -:10BC5000C4F80451009858B1C4F80C51B07800B938 -:10BC6000FFDFC9F80050B570C4F814B0FFF79DFEAF -:10BC7000BAF1000F05D0C4F81051307908B100F0C6 -:10BC800045F833490298091D0860BDE8FE8F70B57C -:10BC90002C4DE87808B9F7F77BF901208407A061FB -:10BCA000A87850B1D4F80C0120B90020F7F78CF92E -:10BCB0000028F7D10020C4F80C014FF0FF30C4F881 -:10BCC000080370BD2DE9F0411926B407C4F80863D4 -:10BCD0000125A5610020C4F80001C4F80C01C4F8D6 -:10BCE0001001F7F759F9174F28B11B49BD70022011 -:10BCF0000860256100E03D70FFF72EFE1249B8791B -:10BD000020310860C4F80463BDE8F0812DE9F041FA -:10BD10000C4C4FF080470125E07940B3012803D057 -:10BD2000217A401E814224DAF7F736F9064608F0F8 -:10BD3000E9F9E179012902D9217A491C21726EB110 -:10BD400021690CE03C0000201805004010ED00E0E7 -:10BD50001005024001000001340C0040E168411A66 -:10BD6000022902DA11F1020F0EDC0EB1206100E0AF -:10BD7000E060FFF7F1FDF7F70FF938B10549022050 -:10BD800008603D61A57002E07D61BDE7257000207F -:10BD90002072B9E7340C00404FF0E0214FF0007002 -:10BDA000C1F88001C1F88002384B802283F800245A -:10BDB000C1F80001704700B502460420344903E091 -:10BDC00001EBC0031B792BB1401EC0B2F8D2FFDFDC -:10BDD000FF2000BD41F8302001EBC00100224A7174 -:10BDE0008A7101220A7100BD294A002102EBC000BC -:10BDF0000171704710B50446042800D3FFDF2448C2 -:10BE000000EBC4042079012800D0FFDF6079A1791C -:10BE1000401CC0B2814200D060714FF0E0214FF071 -:10BE20000070C1F8000210BD2DE9F0411948056805 -:10BE300018491948083108601448042690F800048D -:10BE4000134F4009154C042818D0FFDF16E0217865 -:10BE500007EBC1000279012A08D1427983799A421D -:10BE600004D04279827157F8310080472078401C15 -:10BE7000C0B22070042801D300202070761EF6B2D4 -:10BE8000E5D20448001D0560BDE8F08119E000E03E -:10BE9000C8050020100502400100000150000020EC -:10BEA000F8B51D46DDE906470E000AD005F020F87A -:10BEB0002346FF1DBCB231462A46009404F02DFCF7 -:10BEC000F8BDD0192246194618F044FE2046F8BDA8 -:10BED00070B50D460446102118F0BBFE25811720D1 -:10BEE0006081A07B40F00A00A07370BD4FF6FF7226 -:10BEF0000A800146022008F017BB7047008970478E -:10BF0000827BD30701D1920703D480890880002067 -:10BF1000704705207047827B920700D5818170476A -:10BF200001460020098841F6FE52114200D001204E -:10BF3000704700B50346807BC00701D0052000BDD7 -:10BF400059811846FFF7ECFFC00703D0987B40F0FB -:10BF500004009873987B40F001009873002000BDA6 -:10BF6000827B520700D509B140897047172070477E -:10BF7000827B61F3C302827370472DE9FC5F0E463A -:10BF8000044601789646012000FA01F14DF6FF5271 -:10BF900001EA020962684FF6FF7B1188594502D118 -:10BFA0000920BDE8FC9FB9F1000F05D041F6FE5510 -:10BFB000294201D00120F4E741EA090111801D0066 -:10BFC00014D04FF0000C85F800C02378052103221F -:10BFD00067464FF0020A0E2B74D2DFE803F0F8092F -:10BFE000252F47626974479092B3D0D70420D8E7D1 -:10BFF000616820898B7B9B077DD5172848D30B89E7 -:10C00000834245D38989172901D3814240D185F8DC -:10C0100000A0A5F801003280616888816068817B9A -:10C0200021F002018173C5E0042028702089A5F861 -:10C0300001006089A5F803003180BBE0208A3188C7 -:10C04000C01D1FFA80F8414522D3062028702089A0 -:10C05000A5F801006089A5F80300A089A5F80500EE -:10C060000721208ACDE9000163693EE0082B10D04A -:10C07000082028702089A5F801006089A5F8030030 -:10C0800031806A1D694604F10C0006F08EFB10B188 -:10C090005FE01020EDE730889DF800100844308004 -:10C0A00088E00A2028702089A5F80100328045E048 -:10C0B0000C2028702089A5F801006089A5F80300EC -:10C0C00031803BE083E02189338800EB41021FFA95 -:10C0D00082F843453DD3B8F1050F3AD30E222A70BA -:10C0E0000BEA4101CDE90010E36860882A467146F9 -:10C0F000FFF7D6FE00E04DE0A6F800805AE04020B1 -:10C10000287060893188C01C1FFA80F8414520D30F -:10C110002878714620F03F00123028702089A5F859 -:10C1200001006089CDE9000260882A46E368FFF7D4 -:10C13000B7FEA6F80080287840063BD461682089C5 -:10C14000888037E0A0893288401D1FFA80F8424578 -:10C1500001D204273EE0162028702089A5F80100AE -:10C160006089A5F80300A089CDE9000160882A460E -:10C1700071462369FFF794FEA6F80080DEE71820D9 -:10C180002870207A6870A6F800A013E061680A8819 -:10C19000920401D405271DE0C9882289914201D06B -:10C1A000062717E01E21297030806068018821F47D -:10C1B00000510180B9F1000F0CD061887823002272 -:10C1C000022008F007F961682078887007E0A6F877 -:10C1D00000C003276068018821EA09010180384610 -:10C1E000DFE62DE9FF4F85B01746129C0D001E4675 -:10C1F0001CD03078C10703D000F03F00192801D9C6 -:10C20000012100E000212046FFF7AAFEA8420DD33D -:10C210002088A0F57F41FF3908D03078410601D44D -:10C22000000605D5082009B0BDE8F08F0720FAE721 -:10C2300000208DF800008DF8010030786B1E00F0B2 -:10C240003F0C0121A81E4FF0050A4FF002094FF0E4 -:10C25000030B9AB2BCF1200F75D2DFE80CF08B1003 -:10C26000745E7468748C749C74B674BB74C974D531 -:10C2700074E2747474F274F074EF74EE748B052DC0 -:10C2800078D18DF80090A0788DF804007088ADF812 -:10C29000060030798DF80100707800F03F000C281E -:10C2A00029D00ADCA0F10200092863D2DFE800F0FF -:10C2B000126215621A621D622000122824D004DC6A -:10C2C0000E281BD01028DBD11BE016281FD0182801 -:10C2D000D6D11FE02078800701E0207840070028B1 -:10C2E00048DAEFE020780007F9E72078C006F6E7A3 -:10C2F00020788006F3E720784006F0E720780006F3 -:10C30000EDE72088C005EAE720884005E7E72088B8 -:10C310000005E4E72088C004E1E72078800729D5FC -:10C32000032D27D18DF800B0B6F8010082E0217806 -:10C3300049071FD5062D1DD381B27078012803D07F -:10C34000022817D102E0CAE0022000E010200422F7 -:10C350008DF8002072788DF80420801CB1FBF0F27B -:10C36000ADF8062092B242438A4203D10397ADF85A -:10C370000890A7E07AE02078000777D598B2820885 -:10C380008DF800A0ADF80420B0EB820F6ED10297BB -:10C39000ADF8061096E02178C90667D5022D65D361 -:10C3A00081B206208DF80000707802285ED300BFAD -:10C3B000B1FBF0F28DF80400ADF8062092B24243D2 -:10C3C0008A4253D1ADF808907BE0207880064DD5A5 -:10C3D000072003E0207840067FD508208DF8000074 -:10C3E000A088ADF80400ADF80620ADF8081068E0AC -:10C3F0002078000671D50920ADF804208DF80000E2 -:10C40000ADF8061002975DE02188C90565D5022DBB -:10C4100063D381B20A208DF80000707804285CD3C1 -:10C42000C6E72088400558D5012D56D10B208DF840 -:10C430000000A088ADF8040044E021E026E016E00A -:10C44000FFE72088000548D5052D46D30C208DF840 -:10C450000000A088ADF80400B6F803006D1FADF829 -:10C460000850ADF80600ADF80AA02AE035E02088B3 -:10C47000C00432D5012D30D10D208DF8000021E00F -:10C480002088800429D4B6F80100E080A07B000752 -:10C4900023D5032D21D3307800F03F001B2818D07E -:10C4A0000F208DF80000208840F40050A4F8000010 -:10C4B000B6F80100ADF80400ED1EADF80650ADF879 -:10C4C00008B0039769460598F5F7B2FC050008D057 -:10C4D00016E00E208DF80000EAE7072510E0082599 -:10C4E0000EE0307800F03F001B2809D01D2807D04F -:10C4F0000220059908F018F8208800F400502080E8 -:10C50000A07B400708D52046FFF70AFDC00703D1EE -:10C51000A07B20F00400A073284684E61FB5022803 -:10C5200006D101208DF8000088B26946F5F780FC3D -:10C530001FBD0000F8B51D46DDE906470E000AD014 -:10C5400004F0D6FC2346FF1DBCB231462A460094B7 -:10C5500004F0E3F8F8BDD0192246194618F0FAFAAB -:10C560002046F8BD2DE9FF4F8DB09B46DDE91B57F6 -:10C57000DDF87CA00C46082B05D0E06901F002F93B -:10C5800050B11020D2E02888092140F01000288006 -:10C590008AF80010022617E0E16901208871E2693B -:10C5A0004FF420519180E1698872E06942F60101FF -:10C5B0000181E069002181732888112140F0200069 -:10C5C00028808AF80010042638780A900A203870EB -:10C5D0004FF0020904F118004D460C9001F095FB54 -:10C5E000B04681E0BBF1100F0ED1022D0CD0A9EBAB -:10C5F0000800801C80B20221CDE9001005AB524634 -:10C600001E990D98FFF796FFBDF816101A988142F3 -:10C6100003D9F74800790F9004E003D10A9808B1D4 -:10C6200038702FE04FF00201CDE900190DF116032B -:10C6300052461E990D98FFF77DFF1D980088401BFC -:10C64000801B83B2C6F1FF00984200D203461E99B8 -:10C650000BA8D9B15FF00002DDF878C0CDE9032066 -:10C6600009EB060189B2CDE901C10F980090BDF830 -:10C67000161000220D9801F0CBFB387070B1C0B2DB -:10C68000832807D0BDF8160020833AE00AEB0901A1 -:10C690008A19E1E7022011B0BDE8F08FBDF82C0047 -:10C6A000811901F0FF08022D0DD09AF801204245B2 -:10C6B00006D1BDF82010814207D0B8F1FF0F04D099 -:10C6C0009AF801801FE08AF80180C9480068017863 -:10C6D000052902D1BDF81610818009EB08001FFA68 -:10C6E00080F905EB080085B2DDE90C1005AB0F9A67 -:10C6F00001F00EFB28B91D980088411B4145BFF68B -:10C7000071AF022D13D0BBF1100F0CD1A9EB0800B3 -:10C71000801C81B20220CDE9000105AB52461E9972 -:10C720000D98FFF707FF1D98058000203870002046 -:10C73000B1E72DE9F8439C46089E13460027B26BEB -:10C740009AB3491F8CB2F18FA1F57F45FF3D05D00B -:10C750005518AD882944891D8DB200E0002529199E -:10C76000B6F83C800831414520D82A44BCF8011075 -:10C7700022F8021BBCF8031022F8021B984622F88C -:10C78000024B914604F0A2FB4FF00C0C41464A4686 -:10C790002346CDF800C003F08CFFF587B16B002075 -:10C7A0002944A41D2144088003E001E0092700E09A -:10C7B00083273846BDE8F88310B50B88848F9C42E8 -:10C7C0000CD9846BE018048844B1848824F40044B4 -:10C7D000A41D23440B801060002010BD0A2010BD52 -:10C7E0002DE9F0478AB00025904689468246ADF88B -:10C7F000185007274BE0059806888088000446D427 -:10C80000A8F8006007A8019500970295CDE90350AC -:10C810004FF4007300223146504601F0F9FA04004B -:10C820003CD1BDF81800ADF8200005980488818837 -:10C83000B44216D10A0414D401950295039521F44B -:10C8400000410097049541F48043428821465046B8 -:10C8500001F0B4F804000BD10598818841F400413F -:10C86000818005AA08A94846FFF7A6FF0400DCD08E -:10C870000097059802950195039504950188BDF8E8 -:10C880001C300022504601F099F80A2C06D105AA66 -:10C8900006A94846FFF790FF0400ACD0ADF8185049 -:10C8A00004E00598818821F40041818005AA06A949 -:10C8B0004846FFF781FF0028F3D00A2C03D020461A -:10C8C0000AB0BDE8F0870020FAE710B50C46896B86 -:10C8D00086B051B10C218DF80010A18FADF8081071 -:10C8E000A16B01916946FAF734FC00204FF6FF7105 -:10C8F000A063E187A08706B010BD2DE9F0410D4689 -:10C900000746896B0020069E1446002911D0012B92 -:10C910000FD1324629463846FFF762FF002808D17A -:10C92000002C06D0324629463846BDE8F04100F0DA -:10C9300038BFBDE8F0812DE9FC411446DDE9087CF3 -:10C940000E46DDE90A15521DBCF800E092B296458C -:10C9500002D20720BDE8FC81ACF8002017222A7023 -:10C96000A5F80160A5F803300522CDE900423B4659 -:10C970002A46FFF7DFFD0020ECE770B50C461546B0 -:10C980004821204618F087F904F1080044F81C0FEC -:10C9900000204FF6FF71E06161842084A584172098 -:10C9A000E08494F82A0040F00A0084F82A0070BD60 -:10C9B0004FF6FF720A800146032007F0B5BD30B57F -:10C9C00085B00C460546FFF780FFA18E284629B1A9 -:10C9D00001218DF800106946FAF7BBFB0020E062E8 -:10C9E0002063606305B030BDB0F8400070470000C0 -:10C9F0005400002090F84620920703D44088088015 -:10CA00000020F3E70620F1E790F846209207EDD5E5 -:10CA1000A0F84410EAE70146002009880A0700D57B -:10CA2000012011F0F00F01D040F00200CA0501D53D -:10CA300040F004008A0501D540F008004A0501D500 -:10CA400040F010000905D1D540F02000CEE700B538 -:10CA5000034690F84600C00701D0062000BDA3F8A9 -:10CA600042101846FFF7D7FF10F03E0F05D093F89D -:10CA7000460040F0040083F8460013F8460F40F0EB -:10CA800001001870002000BD90F84620520700D524 -:10CA900011B1B0F84200A9E71720A7E710F8462F18 -:10CAA00061F3C3020270A1E72DE9FF4F9BB00E00B6 -:10CAB000DDE92B34DDE92978289D24D02878C107C9 -:10CAC00003D000F03F00192801D9012100E0002126 -:10CAD0002046FFF7D9FFB04215D32878410600F071 -:10CAE0003F010CD41E290CD0218811F47F6F0AD18C -:10CAF0003A8842B1A1F57F42FF3A04D001E0122901 -:10CB000001D1000602D504201FB0C5E5F9491D98E2 -:10CB10004FF0000A08718DF818A08DF83CA00FAAFC -:10CB20000A60ADF81CA0ADF850A02978994601F034 -:10CB30003F02701F5B1C04F1180C4FF0060E4FF003 -:10CB4000040BCDF858C01F2A7ED2DFE802F07D7DAD -:10CB5000107D267DAC7DF47DF37DF27DF17DF47D4D -:10CB6000F07D7D7DEF7DEE7D7D7D7D7DED0094F81A -:10CB70004610B5F80100890701D5032E02D08DF8C3 -:10CB800018B022E34FF40061ADF85010608003212B -:10CB90008DF83C10ADF84000D8E2052EEFD1B5F885 -:10CBA00001002083ADF81C00B5F80310618308B1C3 -:10CBB000884201D901207FE10020A07220814FF638 -:10CBC000FF702084169801F0A0F8052089F8000075 -:10CBD0000220029083460AAB1D9A16991B9801F019 -:10CBE00097F890BB9DF82E00012804D0022089F808 -:10CBF0000100102003E0012089F8010002200590C7 -:10CC0000002203A90BA805F0D0FDE8BB9DF80C009D -:10CC1000059981423DD13A88801CA2EB0B018142EB -:10CC200037DB02990220CDE900010DF12A034A46C3 -:10CC300041461B98FFF77EFC02980BF1020B801C0B -:10CC400080B217AA03A901E0A0E228E002900BA895 -:10CC500005F0ABFD02999DF80C00CDE9000117AB82 -:10CC60004A4641461B98FFF765FC9DF80C100AAB3D -:10CC70000BEB01001FFA80FB02981D9A084480B25A -:10CC8000029016991B9800E003E001F041F800289B -:10CC9000B6D0BBF1020F02D0A7F800B053E20A20D1 -:10CCA0008DF818004FE200210391072EFFF467AFC3 -:10CCB000B5F801002083ADF81C00B5F803206283AD -:10CCC00000283FF477AF90423FF674AF0120A07286 -:10CCD000B5F8050020810020A073E06900F052FD46 -:10CCE00078B9E16901208871E2694FF4205191809F -:10CCF000E1698872E06942F601010181E069002181 -:10CD00008173F01F20841E9860620720608416984B -:10CD100000F0FBFF072089F800000120049002903A -:10CD20000020ADF82A0028E01DE2A3E13AE1EAE0A4 -:10CD300016E2AEE086E049E00298012814D0E069EE -:10CD40008079012803D1BDF82800ADF80E000498C1 -:10CD500003ABCDE900B04A4641461B98FFF7EAFB1A -:10CD60000498001D80B20490BDF82A00ADF80C00B4 -:10CD7000ADF80E00059880B202900AAB1D9A169984 -:10CD80001B9800F0C5FF28B902983988001D05904E -:10CD90008142D1D20298012881D0E06980790128AE -:10CDA00005D0BDF82810A1F57F40FF3803D1BDF8AC -:10CDB0002800ADF80E00049803ABCDE900B04A4658 -:10CDC00041461B98FFF7B6FB0298BBE1072E02D045 -:10CDD000152E7FF4D4AEB5F801102183ADF81C10E8 -:10CDE000B5F80320628300293FF4E4AE91423FF698 -:10CDF000E1AE0121A1724FF0000BA4F808B084F855 -:10CE00000EB0052E07D0C0B2691DE26905F0AEFC78 -:10CE100000287FF444AF4FF6FF70208401A906AAD2 -:10CE200014A8CDF800B081E885032878214600F0E9 -:10CE30003F031D9A1B98FFF795FB8246208BADF8A8 -:10CE40001C0080E10120032EC3D14021ADF8501019 -:10CE5000B5F801102183ADF81C100AAAB8F1000F33 -:10CE600000D00023CDE9020304921D98CDF8048080 -:10CE7000009038880022401E83B21B9800F0C8FF43 -:10CE80008DF8180090BB0B2089F80000BDF8280031 -:10CE900037E04FF0010C052E9BD18020ADF85000FB -:10CEA000B5F801102183B5F803002084ADF81C10FB -:10CEB000B0F5007F03D907208DF8180085E140F414 -:10CEC0007C4222840CA8B8F1000F00D00023CDE9E9 -:10CED0000330CDE9018C1D9800903888401E83B244 -:10CEE0001B9800F095FF8DF8180028B18328A8D171 -:10CEF0000220BDE0540000200D2189F80010BDF88B -:10CF00003000401C1EE1032E04D248067FF537AEE8 -:10CF1000002017E1B5F80110ADF81C102878400684 -:10CF200002D58DF83CE002E007208DF83C004FF080 -:10CF300000080320CDE902081E9BCDF810801D9843 -:10CF40000193A6F1030B00901FFA8BF342461B9846 -:10CF500000F034FD8DF818008DF83C8029784906E2 -:10CF60000DD52088C00506D5208BBDF81C10884241 -:10CF700001D1C4F8248040468DF81880E2E083286F -:10CF800001D14FF0020A4FF48070ADF85000BDF8A7 -:10CF90001C002083A4F820B01E98606203206084E7 -:10CFA0001321CCE0052EFFF4EAADB5F80110ADF881 -:10CFB0001C10A28F62B3A2F57F43FE3B28D008224B -:10CFC0008DF83C204FF0000B0523CDE9023BDDF846 -:10CFD00078C0CDF810B01D9A80B2CDF804C040F4EE -:10CFE00000430092B5F803201B9800F0E7FC8DF891 -:10CFF0003CB04FF400718DF81800ADF85010832844 -:10D0000010D0F8B1A18FA1F57F40FE3807D0DCE049 -:10D010000B228DF83C204FF6FE72A287D2E7A4F8CF -:10D020003CB0D2E000942B4631461E9A1B98FFF785 -:10D0300080FB8DF8180008B183284BD1BDF81C0087 -:10D04000208355E700942B4631461E9A1B98FFF724 -:10D0500070FB8DF81800E8BBE18FA06B0844811DC0 -:10D060008DE882034388828801881B98FFF763FC60 -:10D07000824668E095F80180022E70D15FEA0800D0 -:10D0800002D0B8F1010F6AD109208DF83C0007A841 -:10D0900000908DF840804346002221461B98FFF700 -:10D0A0002CFC8DF842004FF0000B8DF843B050B9C6 -:10D0B000B8F1010F12D0B8F1000F04D1A18FA1F582 -:10D0C0007F40FF380AD0A08F40B18DF83CB04FF4BC -:10D0D000806000E037E0ADF850000DE00FA91B982C -:10D0E000FAF737F882468DF83CB04FF48060ADF81F -:10D0F0005000BAF1020F06D0FC480068C07928B190 -:10D100008DF8180027E0A4F8188044E0BAF1000F69 -:10D1100003D081208DF818003DE007A80090434619 -:10D12000012221461B98FFF7E8FB8DF818002146E5 -:10D130001B98FFF7CAFB9DF8180020B9192189F840 -:10D140000010012038809DF83C0020B10FA91B98E9 -:10D15000F9F7FFFF8246BAF1000F33D01BE018E069 -:10D160008DF818E031E02078000712D5012E10D19B -:10D170000A208DF83C00E088ADF8400003201B99A0 -:10D1800007F0D2F90820ADF85000C1E648067FF557 -:10D19000F6AC4FF0040A2088BDF8501008432080F8 -:10D1A000BDF8500080050BD5A18FA1F57F40FE385A -:10D1B00006D11E98E06228982063A6864FF0030AE5 -:10D1C0005046A1E49DF8180078B1012089F80000CC -:10D1D000297889F80110BDF81C10A9F802109DF8F3 -:10D1E000181089F80410052038802088BDF85010E8 -:10D1F00088432080E4E72DE9FF4F8846087895B002 -:10D20000012181404FF20900249C0140ADF820101B -:10D210002088DDF88890A0F57F424FF0000AFF3AA1 -:10D2200006D039B1000705D5012019B0BDE8F08F4F -:10D230000820FAE7239E4FF0000B0EA886F800B0F6 -:10D2400018995D460988ADF83410A8498DF81CB0CE -:10D25000179A0A718DF838B0086098F80000012814 -:10D260003BD0022809D003286FD1307820F03F004E -:10D270001D303070B8F80400E08098F800100320EA -:10D28000022904D1317821F03F011B31317094F82B -:10D290004610090759D505ABB9F1000F13D000218D -:10D2A00002AA82E80B000720CDE90009BDF834008E -:10D2B000B8F80410C01E83B20022159800F0A8FD33 -:10D2C0000028D1D101E0F11CEAE7B8F80400A6F883 -:10D2D0000100BDF81400C01C04E198F805108DF899 -:10D2E0001C1098F80400012806D04FF4007A022898 -:10D2F0002CD00328B8D16CE12188B8F8080011F4CB -:10D300000061ADF8201020D017281CD3B4F84010CD -:10D31000814218D3B4F84410172901D3814212D1A5 -:10D32000317821F03F01C91C3170A6F801000321BA -:10D33000ADF83410A4F8440094F8460020F0020040 -:10D3400084F8460065E105257EE177E1208808F153 -:10D35000080700F4FE60ADF8200010F0F00F1BD0BD -:10D3600010F0C00F03D03888228B9042EBD199B9CE -:10D37000B878C00710D0B9680720CDE902B1CDF860 -:10D3800004B00090CDF810B0FB88BA8839881598A1 -:10D3900000F014FB0028D6D12398BDF82010401CC3 -:10D3A00080294ED006DC10290DD020290BD0402931 -:10D3B00087D124E0B1F5807F6ED051457ED0B1F5A4 -:10D3C000806F97D1DEE0C80601D5082000E010206C -:10D3D00082460DA907AA0520CDE902218DF8380063 -:10D3E000ADF83CB0CDE9049608A93888CDE9000134 -:10D3F0005346072221461598FFF7B4F8A8E09DF898 -:10D400001C2001214FF00A0A002A9BD105ABB9F17B -:10D41000000F00D00020CDE902100720CDE900095F -:10D42000BDF834000493401E83B2218B002215986E -:10D4300000F0EEFC8DF81C000B203070BDF81400DD -:10D4400020E09DF81C2001214FF00C0A002A22D177 -:10D4500013ABB9F1000F00D00020CDE90210072076 -:10D46000CDE900090493BDF83400228C401E83B23C -:10D47000218B159800F0CCFC8DF81C000D2030702D -:10D48000BDF84C00401CADF8340005208DF8380084 -:10D49000208BADF83C00BCE03888218B88427FF4BB -:10D4A00052AF9DF81C004FF0120A00281CD1606A90 -:10D4B000A8B1B878C0073FF446AF00E018E0BA68FA -:10D4C0000720CDE902B2CDF804B00090CDF810B03D -:10D4D000FB88BA88159800F071FA8DF81C001320AB -:10D4E00030700120ADF8340093E0000054000020BB -:10D4F0003988208B8142D2D19DF81C004FF0160A4A -:10D500000028A06B08D0E0B34FF6FF7000215F4603 -:10D51000ADF808B0019027E068B1B978C907BED16D -:10D52000E18F0DAB0844821D03968DE80C02438801 -:10D530008288018809E0B878C007BCD0BA680DAB12 -:10D5400003968DE80C02BB88FA881598FFF7F3F96B -:10D5500005005ED0072D72D076E0019005AA02A9E1 -:10D560002046FFF729F90146E28FBDF80800824204 -:10D5700001D00029F1D0E08FA16B08440780019809 -:10D58000E08746E09DF81C004FF0180A40B1208B60 -:10D59000C8B13888208321461598FFF796F938E0FE -:10D5A00004F118000090237E012221461598FFF710 -:10D5B000A4F98DF81C000028EDD11920307001204D -:10D5C000ADF83400E7E7052521461598FFF77DF90A -:10D5D0003AE0208800F40070ADF8200050452DD1CD -:10D5E000A08FA0F57F41FE3901D006252CE0D8F8A8 -:10D5F00008004FF0160A48B1A063B8F80C10A187D4 -:10D600004FF6FF71E187A0F800B002E04FF6FF701F -:10D61000A087BDF8200030F47F611AD07823002263 -:10D620000320159906F0D6FE98F800002071208896 -:10D63000BDF82010084320800EE000E00725208878 -:10D64000BDF8201088432080208810F47F6F1CD004 -:10D650003AE02188814321809DF8380020B10EA94D -:10D660001598F9F776FD05469DF81C000028EBD0CB -:10D6700086F801A001203070208B70809DF81C007E -:10D6800030710520ADF83400DEE7A18EE1B11898C5 -:10D690000DAB0088ADF834002398CDE90304CDE943 -:10D6A0000139206B0090E36A179A1598FFF7FCF98F -:10D6B000054601208DF838000EA91598F9F749FDA7 -:10D6C00000B10546A4F834B094F8460040070AD5E6 -:10D6D0002046FFF7A0F910F03E0F04D114F8460FD2 -:10D6E00020F0040020701898BDF8341001802846FE -:10D6F0009BE500B585B0032806D102208DF8000017 -:10D7000088B26946F9F725FD05B000BD10B5384C63 -:10D710000B782268012B02D0022B2AD111E013785A -:10D720000BB1052B01D10423137023688A889A80DA -:10D730002268CB88D38022680B8913814989518163 -:10D740000DE08B8893802268CB88D38022680B8978 -:10D7500013814B8953818B899381096911612168F8 -:10D76000F9F7F7FC226800210228117003D0002885 -:10D7700000D0812010BD832010BD806B002800D018 -:10D78000012070478178012909D10088B0F5205F18 -:10D7900003D042F60101884201D1002070470720E2 -:10D7A0007047F0B587B0002415460E460746ADF821 -:10D7B000144010E0069801882980811DCDE90241BE -:10D7C0000721019404940091838842880188384697 -:10D7D00000F0F4F830B906AA05A93046FEF7ECFFD0 -:10D7E0000028E7D00A2800D1002007B0F0BD0000D3 -:10D7F0005400002010B58B7883B102789A4205D18D -:10D800000B885BB102E08B79091D4BB18B789A4292 -:10D81000F9D1B0F801300C88A342F4D1002010BD3A -:10D82000812010BD072826D012B1012A27D103E09C -:10D83000497801F0070102E04978C1F3C2010529E6 -:10D840001DD2DFE801F00318080C12000AB1032012 -:10D8500070470220704704280DD250B10DE0052812 -:10D8600009D2801E022808D303E0062803D003282B -:10D8700003D005207047002070470F20704781209B -:10D880007047C0B282060BD4000607D5FE48807AE6 -:10D890004143C01D01EBD00080B27047084670477D -:10D8A0000020704770B513880B800B781C0625D5B7 -:10D8B000F54CA47A844204D843F01000087000208C -:10D8C00070BD956800F0070605EBD0052D78F54092 -:10D8D00065F304130B701378D17803F0030341EA66 -:10D8E000032140F20123B1FBF3F503FB151192680C -:10D8F000E41D00FB012000EBD40070BD906870BDFA -:10D9000037B51446BDF8041011809DF804100A06BE -:10D910001ED5C1F30013DC49A568897A814208D875 -:10D92000FE2811D1C91DC9085A42284617F089F9A5 -:10D930000AE005EBD00100F00702012508789540C8 -:10D94000A843934018430870207820F010002070FE -:10D950003EBD2DE9F0410746C81C0E4620F00300ED -:10D96000B04202D08620BDE8F081C74D0020344689 -:10D970002E60AF802881AA72E8801AE0E988491CED -:10D98000E980810614D4E17800F0030041EA002028 -:10D9900040F20121B0FBF1F201FB12012068FFF718 -:10D9A00070FF2989084480B22881381A3044A06069 -:10D9B0000C3420784107E1D40020D4E72DE9FF4F53 -:10D9C00089B01646DDE9168A0F46994623F440458C -:10D9D000084600F00DFB04000FD0099803F00AF987 -:10D9E0000290207800060AD5A748817A02988142E1 -:10D9F00005D887200DB0BDE8F08F0120FAE7224658 -:10DA000001A90298FFF74EFF834600208DF80C0015 -:10DA10004046B8F1070F1AD001222146FFF702FF56 -:10DA20000028E7D12078400611D502208DF80C009F -:10DA3000ADF81070BDF80400ADF81200ADF8146038 -:10DA40001898ADF81650CDF81CA0ADF818005FEA94 -:10DA5000094004D500252E46A84601270CE0217870 -:10DA6000E07801F0030140EA012040F20121B0FB1F -:10DA7000F1F2804601FB12875FEA494009D5B845BB -:10DA800007D1A178207901F0030140EA0120B042DA -:10DA900001D3BE4201D90720ACE7A8191FFA80F9CB -:10DAA000B94501D90D20A5E79DF80C0028B103A9BF -:10DAB0000998F9F74CFB00289CD1B84507D1A0780C -:10DAC0004FEA192161F30100A07084F804901A98BC -:10DAD00000B10580199850EA0A0027D0199830B192 -:10DAE0000BEB06002A46199917F034F80EE00BEB01 -:10DAF00006085746189E099803F0E8F92B46F61DCC -:10DB0000B5B239464246009502F0D3FD224601A93E -:10DB10000298FFF7C7FE9DF80400224620F010008F -:10DB20008DF80400DDE90110FFF7EAFE002061E74F -:10DB30002DE9FF4FDFF8509182461746B9F80610DD -:10DB4000D9F8000001EB410100EB810440F2012013 -:10DB5000B2FBF0F185B000FB11764D46DDF84C804C -:10DB600031460698FFF78DFE29682A898B46611A8F -:10DB70000C3101441144AB8889B28B4202D8842015 -:10DB800009B038E70699CDB2290603D5A90601D513 -:10DB90000620F5E7B9F806C00CF1010C1FFA8CFC61 -:10DBA000A9F806C0149909B1A1F800C0A90602D5C8 -:10DBB000C4F8088007E0104480B2A9F80800191AD8 -:10DBC00001EB0B00A0602246FE200699FFF798FEAD -:10DBD000E77026712078390A61F30100320AA178D2 -:10DBE00040F0040062F30101A17020709AF8020075 -:10DBF0006071BAF80000E08000262673280602D57E -:10DC000099F80A7000E00127A80601D54FF0000836 -:10DC10004D4600244FF007090FE0CDE90268019658 -:10DC2000CDF800900496E9882046129B089AFFF7E9 -:10DC3000C5FE0028A4D1641CE4B2BC42EDD3002090 -:10DC40009EE72DE9F047804600F0D2F9070005D0A5 -:10DC5000002644460C4D40F2012919E00120BDE8A0 -:10DC6000F087204600F0C4F90278C17802F0030280 -:10DC700041EA0222B2FBF9F309FB13210068FFF726 -:10DC800000FE304486B201E0E8050020641CA4B226 -:10DC9000E988601E8142E4DCA8F10100E88028895F -:10DCA000801B288100203870D9E710B5144631B1A7 -:10DCB000491E218002F09EFFA070002010BD0120AF -:10DCC00010BD10B5D24904460088CA88904201D3DD -:10DCD0000A2010BD096800EB400001EB800250797A -:10DCE000A072D08820819178107901F0030140EA78 -:10DCF0000120A081A078E11CFFF7D4FD20612088DD -:10DD0000401C2080E080002010BD0121018270476E -:10DD10002DE9FF4F85B04FF6FF788246A3F80080CB -:10DD200048681F460D4680788DF8060048680088D0 -:10DD3000ADF8040000208DF80A00088A0C88A04283 -:10DD400000D304462C8241E0288A401C2882701DA2 -:10DD50006968FFF74FFDB8BB3988414501D1601EA6 -:10DD600038806888A04236D3B178307901F0030159 -:10DD700040EA012901A9701DFFF73CFD20BB29895C -:10DD800041452CD0002231460798FFF74BFDD8B90A -:10DD90002989494518D1E9680391B5F80AC0D6F830 -:10DDA00008B05046CDF800C003F090F8DDF800C090 -:10DDB0005A460CF1070C1FFA8CFC4B460399CDF820 -:10DDC00000C002F040FC50B1641CA4B2204600F038 -:10DDD0000FF90600B8D1641E2C820A20D0E67C80A0 -:10DDE0007079B871F088B8803178F07801F003016B -:10DDF00040EA01207881A7F80C90504602F0FAFE24 -:10DE0000324607F10801FFF74DFD38610020B7E603 -:10DE10002DE9FF4F87B081461C469246DDF860B081 -:10DE2000DDF85480089800F0E3F805000CD048466F -:10DE300002F0E0FE2978090608D57549897A814201 -:10DE400004D887200BB0D6E50120FBE7CAF309060A -:10DE50002A4601A9FFF726FD0746149807281CD07B -:10DE600000222946FFF7DEFC0028EBD12878400687 -:10DE700013D501208DF808000898ADF80C00BDF806 -:10DE80000400ADF80E00ADF81060ADF8124002A924 -:10DE90004846F9F75CF90028D4D12978E87801F0F0 -:10DEA000030140EA0121AA78287902F0030240EA3E -:10DEB0000220564507D0B1F5007F04D9611E81428A -:10DEC00001DD0B20BEE7864201D90720BAE7801B9F -:10DED00085B2A54200D92546BBF1000F01D0ABF8B1 -:10DEE0000050179818B1B9192A4616F033FEB8F148 -:10DEF000000F0DD03E4448464446169F02F0F8FFFE -:10DF00002146FF1DBCB232462B46009402F005FCB0 -:10DF1000002097E72DE9F04107461D4616460846C2 -:10DF200000F066F804000BD0384602F063FE21785A -:10DF3000090607D53649897A814203D8872012E538 -:10DF4000012010E522463146FFF7ACFC65B121788F -:10DF5000E07801F0030140EA0120B0F5007F01D82C -:10DF6000012000E0002028700020FCE42DE9F041B1 -:10DF700007461D461646084600F03AF804000BD046 -:10DF8000384602F037FE2178090607D52049897AFC -:10DF9000814203D88720E6E40120E4E422463146AA -:10DFA000FFF7AEFCFF2D14D02178E07801F00302DA -:10DFB00040EA022040F20122B0FBF2F302FB130020 -:10DFC00015B900F2012080B2E070000A60F301018F -:10DFD00021700020C7E410B50C4600F009F828B104 -:10DFE000C18821804079A070002010BD012010BDA3 -:10DFF0000749CA88824209D340B1096800EB400052 -:10E000006FF00B0202EB800008447047002070475D -:10E01000E805002070B50346002002466FF02F058A -:10E020000EE09C5CA4F130060A2E02D34FF0FF30C4 -:10E0300070BD00EB800005EB4000521C2044D2B2C2 -:10E040008A42EED370BD30B50A240AE0B0FBF4F387 -:10E0500004FB13008D18303005F8010C521E1846D1 -:10E06000D2B2002AF2D130BD30B500234FF6FF7591 -:10E0700010E0040A44EA002084B2C85C6040C0F3A7 -:10E080000314604005EA00344440E0B25B1C84EABB -:10E0900040109BB29342ECD330BD000010B582B06B -:10E0A000694601F07CFF002818BFFFDF9DF80000E3 -:10E0B000002448B1019890F8DD0028B1019880F85B -:10E0C000DD4001980AF0F1FAF8488068A0F8D240E3 -:10E0D00002B010BD2DE9F04704460D46062002F0BF -:10E0E0006BFD0646072002F067FD304400F0FF0894 -:10E0F000002718EB050618BF4FF000091DD0208837 -:10E10000401C80B22080B04228BFA4F8009025882F -:10E11000454501D3B54209D30621284602F0A4FDA6 -:10E1200020B90721284602F09FFD10B10020BDE86C -:10E13000F087781CC7B2BE42E1D84FF6FF7020804E -:10E140001220BDE8F08770B582B007F057FC0DF0E3 -:10E150007FFBD74C4FF6FF7600256683A683D5A1BB -:10E160002570D1E90001CDE9000165706946A01C68 -:10E1700016F0A6FEA11C601C14F073FC25721B2077 -:10E1800060814FF4A471A181E08121820321A174F7 -:10E190000422E274A082E082A4F13E002183057093 -:10E1A0004680C6480570A4F110000570468002B094 -:10E1B00070BDF8B5BD4D17460E466860297007F072 -:10E1C00097FB4FF6FF70ADF8000000216846FFF79F -:10E1D00081FFA0B90621BDF8000002F057FD0446FA -:10E1E0000721BDF8000002F051FD002C1CBF0028E3 -:10E1F000FFDF00216846FFF76DFF0028EAD0FFF738 -:10E20000A2FF287812F03CFC10F034F829786868F6 -:10E2100014F039FB28780CF01FFD30460AF051F954 -:10E2200007F004FD297868680BF094FB39462878DC -:10E2300015F0F5F9BDE8F8400DF00ABB10B5012462 -:10E24000002A1CBF002010BD002908BF022105D0F4 -:10E25000012918BF002401D0204610BD0FF02EF96F -:10E26000FAE72DE9F04F8BB0040008BFFFDF022171 -:10E270008F4E06F11C00FFF72DFF002818BFFFDFAF -:10E28000B6F81CA0062002F097FC0546072002F015 -:10E2900093FC284400F0FF0808F1010000F0FF099A -:10E2A0004FF0000BB78B474525D120460FF0C8FA39 -:10E2B000002840F0CE803078002800F0CE8084F82E -:10E2C00001B014202070C4F804B0C4F808B0C4F839 -:10E2D0000CB0C4F810B0C4F814B0C4F818B0C4F846 -:10E2E0001CB00220C4F820B0207186F800B00BB03A -:10E2F0000120BDE8F08F4F4520D1204607F030FCCB -:10E3000000287DD008F032F8002859D0207817284E -:10E3100056D12079002853D0E088072102F0A4FCD0 -:10E32000050008BFFFDF288807F0FBFAE088072117 -:10E3300002F0ACFC002818BFFFDF8AE004A93846D1 -:10E3400001F02DFE00285BD19DF8100048B107F0C8 -:10E3500062FCB84254D0214638460BF004FA80B330 -:10E3600077E00FF000FBB84277D02146384614F032 -:10E37000ABF900286DD1059800F1580590F8D00050 -:10E3800018B9E87E08B1012000E00020079095F858 -:10E39000370000281CBF95F8380010F0020F1CD081 -:10E3A00084F801B00120207084F804B0E78095F86B -:10E3B00039002072688F6081A88FA08185F837B0FE -:10E3C00047E0FFE7059800F1580590F80C01002898 -:10E3D000DBD1E87E0028D8D0D5E7384602F088FDAA -:10E3E0000290002808BFFFDF029801F097FF50B1AC -:10E3F00084F801B00F212170E7802081012000E026 -:10E400002BE0207125E0384602F060FD02900028E4 -:10E4100008BFFFDF079800B3029801F0D6FFE0B114 -:10E420009DF8100038B90598D0F8F8004188B94235 -:10E4300008BF80F800B0384607F073FA84F801B0DE -:10E440000C20207084F804B0E780287F207285F8C3 -:10E450001BB00BB00120BDE8F08F022106F11C00BB -:10E46000FFF738FE18B9B08B50457FF41BAF0BB0E7 -:10E470002046BDE8F04F15F018B910B513F08CF830 -:10E48000042803D013F088F8052802D110F00FF902 -:10E4900028B90AF0EBFA20B107F08AFD08B10C2088 -:10E4A00010BD0DF021FA002010BD00005C0000201E -:10E4B00032060020FFFFFFFF1F0000006800002061 -:10E4C00010B50446007800281EBF0128122010BD98 -:10E4D00013F062F8042806D013F05EF8052802D085 -:10E4E0000AF0C4FA28B10DF04EFB00281CBF0C2026 -:10E4F00010BD2078002816BF02280020012004F15A -:10E500001703E21D611CBDE810400DF045BA10B5BF -:10E510000446007800281EBF0128122010BD13F009 -:10E520003BF8042803D013F037F8052802D110F087 -:10E53000BEF828B90AF09AFA20B107F039FD08B1FF -:10E540000C2010BD2078002816BF022800200120D2 -:10E55000611C0DF08FF9002814BF0020072010BDAA -:10E5600010B50DF013FB002814BF0020302010BDA3 -:10E5700010B5044613F010F8042806D013F00CF878 -:10E58000052802D00AF072FA08B10C2010BD20460E -:10E590000DF0F6FA002010BD10B512F0FDFF0428B2 -:10E5A00006D012F0F9FF052802D00AF05FFA28B170 -:10E5B0000DF0E9FA00281CBF0C2010BD0DF045FA43 -:10E5C000002010BDFF2181704FF6FF718180FE4950 -:10E5D00049680A7882718A880281498841810121CB -:10E5E00041700020704710B5002482B0022A18D074 -:10E5F00014DC12F10C0F14D008DC12F1280F1CBF30 -:10E6000012F1140F12F1100F11D10AE012F1080FDC -:10E610001CBF12F1040F002A09D102E0D31E052B02 -:10E6200005D8012807D0022809D003280BD01224CE -:10E6300002B0204610BD104607F093FEF8E71046E2 -:10E640000FF0D4FDF4E708461446694601F0A7FC34 -:10E65000002818BF0224EBD19DF80000019880F833 -:10E6600057400024E4E710B5134601220EF029F9C3 -:10E67000002010BD10B5044612F08EFF052804BF1F -:10E680000C2010BD204612F0E9F9002010BD10B595 -:10E69000044612F081FF042806D012F07DFF052801 -:10E6A00002D00AF0E3F908B10C2010BD2146002089 -:10E6B00007F0A5F9002010BD10B5044612F078FA55 -:10E6C00050B10AF0C6F938B1207809F01EFF207861 -:10E6D00010F026F8002010BD0C2010BD10B5044627 -:10E6E00012F05AFF042806D012F056FF052802D077 -:10E6F0000AF0BCF908B10C2010BD2146012007F03A -:10E700007EF9002010BD38B504464FF6FF70ADF815 -:10E710000000A079E179884213D021791F299CBF9C -:10E7200061791F290DD80022114615F0B1FB40B9BF -:10E730000022E079114615F0ABFB10B9207A0728CA -:10E7400001D9122038BD0AF091F960B912F024FF06 -:10E7500048B900216846FFF7BDFC20B1204606F00D -:10E760007CF9002038BD0C2038BD70B50446807897 -:10E77000002582B01A2825D00EDC162844D2DFE806 -:10E7800000F0434343434321434343434343434311 -:10E7900043434343432121212A2835D00BDCA0F1F8 -:10E7A0001E000C2830D2DFE800F02F2F2F2F2F2F44 -:10E7B0002F2F2F2F2F0D3A38042825D2DFE800F015 -:10E7C000240224022088B0F5706F1DD2012669460C -:10E7D00001F0E5FB00281EBF022002B070BD9DF8CD -:10E7E0000000002801980BBF00F1F40100F5B8719A -:10E7F00000F1F50300F27113024612D192F8D00035 -:10E8000092F8732052B903E002B04FF0120070BDCD -:10E81000002818BF042801D0087868B102B00C2085 -:10E8200070BD92F80C0192F87320002AF6D10028EE -:10E8300018BF0428F0D1F1E70E70A07818709DF889 -:10E84000000048B1019890F8DD0028B1019880F8E7 -:10E85000DD50019809F029FF02B0002070BDF0B52D -:10E8600083B00C46694601F09AFB28B1204616F0A9 -:10E8700011FB03B00220F0BD0198002700F15805FC -:10E8800000F1080685F840703146204616F018FB66 -:10E8900095F840000028F5D103B0F0BD2DE9F04116 -:10E8A000044691F8550091F856300D4610F00C0FC3 -:10E8B0004FF0000608BF00232189A0880EF068F9F8 -:10E8C000696A814228BFBDE8F081401A401C4108B6 -:10E8D000A0886FF00E07401A80B2A08022896FF0E6 -:10E8E0000D0C511A8BB2238195F85410628811F0E7 -:10E8F0000C0F28D0B0F5747F38BF304606D350389F -:10E90000C11700EB91600CEBA01080B2824238BFBF -:10E910001046608095F85510E08811F00C0F1BD060 -:10E92000B3F5747F38BF324607D3A3F15001CA173D -:10E9300001EB92610CEBA1118AB2904228BF104604 -:10E94000E080BDE8F08102291ABF0CEBD00080B254 -:10E9500007EB9000DAD1D8E702291ABF0CEBD301FC -:10E960008AB207EB9301E8D1E6E7F0B587B00C4631 -:10E97000054604A901F013FB00281CBF07B0F0BD39 -:10E980009DF81000002814BF002201220599B1F85B -:10E990004A30FB2B28BFFB23B1F84CC0BCF1FB0F66 -:10E9A00028BF4FF0FB0C094FD7E90006BF68009065 -:10E9B00001960297ADF80230ADF806C06846FFF741 -:10E9C0006DFF658004E000005C000020E450020060 -:10E9D000BDF80400E080BDF808006081BDF80200C9 -:10E9E000A080BDF80600208107B00020F0BD2DE911 -:10E9F000F04788B004460088694601F0D0FA070065 -:10EA00001CBF08B0BDE8F087B4F806C02289ACF19D -:10EA10001B011220E12924BF08B0BDE8F087B2F540 -:10EA2000A47F3CBF08B0BDE8F08744F29025AA421D -:10EA300084BF08B0BDE8F08700266388A188A3F1F1 -:10EA40001B08B8F1E10F24BF08B0BDE8F087B1F5AD -:10EA5000A47F27BF8846454508B0BDE8F087112050 -:10EA6000BCF1FB0F92BFB2F5296F08B0BDE8F0878B -:10EA7000FB2B92BFB1F5296F08B0BDE8F087208865 -:10EA800006A901F08CFA002818BFFFDF35D19DF8E8 -:10EA9000180000280CBF012200220799B1F84A0093 -:10EAA000FB2828BFFB20B1F84C30FB2B28BFFB23F1 -:10EAB000DFF834AADAF800C0DAF80490DAF808A02F -:10EAC000CDF808C0CDF80C90CDF810A0ADF80A0034 -:10EAD000ADF80E3002A8FFF7E1FEBDF80C0060F3C0 -:10EAE0001F45BDF8100060F31F48BDF80A0060F331 -:10EAF0000F05BDF80E0060F30F0862881FFA88F159 -:10EB0000092091423CBF08B0BDE8F087A9B2E28875 -:10EB100091423CBF08B0BDE8F0874FEA1841A28897 -:10EB2000238901EB15411A4491423CBF08B0BDE86E -:10EB3000F0879DF800004FF001090028019840F689 -:10EB4000480808D000F5CD7580F89B91019890F8A1 -:10EB5000DE0140B307E000F5827580F80591019869 -:10EB600090F8280108B13A2718E0E08868806088AA -:10EB7000E8802089A880A088288101222846019960 -:10EB8000FFF78CFEA888404528BF40F64800A880C3 -:10EB9000288940451DD2288185F800906E7008B004 -:10EBA0003846BDE8F087E08868806088E880208982 -:10EBB000A880A0882881002228460199FFF76EFED0 -:10EBC000A888404528BF40F64800A88028894045CD -:10EBD000E1D340F64800DEE709E710B5044612F03D -:10EBE000DBFC042806D012F0D7FC052802D009F07F -:10EBF0003DFF28B10CF0C7FF00281CBF0C2010BD42 -:10EC00002078002816BF022800200120E279611C2C -:10EC10000DF03DF9002814BF0020022010BD2DE9A1 -:10EC2000F04383B006460088694601F0B8F9070052 -:10EC30001CBF03B0BDE8F083B088002818BF0128CE -:10EC400005D002281EBF122003B0BDE8F083E946BC -:10EC5000B17800290CBF07250D46F07800280CBFBD -:10EC60000724044615F0040F16BF002900210121D6 -:10EC700014F0040F16BF00280020012001424FF0BD -:10EC800009080AD001221146484601F0A0F90028DF -:10EC900038D003B04046BDE8F08381B100220121A5 -:10ECA000484601F094F90028F3D114F0040F29D05C -:10ECB00001221146484601F08AF918B343E080B1B9 -:10ECC00001220021484601F082F90028E1D115F027 -:10ECD000040F17D001221146484601F078F988B197 -:10ECE00025E015F0040F04F0040023D0C0B1012288 -:10ECF0001146484601F06BF900281CBF25F00405B9 -:10ED000024F0040400219DF800200120002A019A2B -:10ED10001CD082F8A501019A92F8F221BAB33FE023 -:10ED200000220121484601F052F90028EAD025F0DE -:10ED30000405E7E70028E5D001220021484601F05C -:10ED400046F90028DED024F00404DBE782F80F0146 -:10ED5000019A92F834213AB9019A92F80E211AB91F -:10ED6000019A92F87D200AB13A270CE0019A82F8C4 -:10ED70000E01019880F81051019880F81141019A14 -:10ED8000B088A2F81201019880F80F111AE0FFE78D -:10ED9000019A92F8A4211AB9019A92F87D200AB139 -:10EDA0003A270CE0019A82F8A401019880F8A65154 -:10EDB000019880F8A741019AB088A2F8A8010198AB -:10EDC00080F8A51103B03846BDE8F083817831F0B2 -:10EDD000070107BFC17831F00701122070471EE715 -:10EDE00002781221012A18BF002A05D0022A18BF72 -:10EDF000032A01D0084670474278002A18BF012A2A -:10EE000003D0022A18BF032AF4D1C27B12B9827838 -:10EE1000012AEFD1837833F00502EBD113F0050F0F -:10EE2000E8D030B4C278C488B0F80AC0002A18BF4D -:10EE3000012A04D1042C28BFBCF1040F02D230BC3B -:10EE400008467047052B07D0827B002AF7D0072A97 -:10EE5000F5D830BC01F0D6B80279B0F808C0838983 -:10EE6000002A18BF012AEAD1BCF1040F28BF042BE5 -:10EE7000E5D3E9E710B5044602781220012A0FD045 -:10EE8000002A18BF10BD012A26D012F085FB0528E4 -:10EE900004D011F01AFD002808BF10BD0C2010BDD1 -:10EEA0006178002918BF012906D0022918BF10BDBA -:10EEB000A188002908BF10BD6388002B1CBFA18852 -:10EEC0000029E0D003EB83035B0001EB8101B3EB8E -:10EED000012F28BF10BDD6E70FF015FB002804BF97 -:10EEE000122010BD0FF035FB00200FF0CEFB0028E4 -:10EEF00018BF10BD60780FF0BAFB002818BF10BD16 -:10EF0000A1886088BDE8104011F0A0BE427A12F0DE -:10EF1000070F0FD032F007030CD1012A18BF022AC5 -:10EF200003D0042A1CBF1120704790F83A301BB957 -:10EF3000012A01D0122070472DE9F00F4FF0000C8C -:10EF400012F0010F40F6774640F67B4337D069B1A7 -:10EF50004489B0F810C0271F43F6FD75AF423CBF8F -:10EF6000ACF10407AF4226D2644524D3C78AB0F877 -:10EF70001CC0458C048DB0F82E80B0F83490A7F1F9 -:10EF8000060A9A453CBFACF1060A9A4513D267457A -:10EF900098BFB5F5FA7F3CBFA4F10A07B7420AD281 -:10EFA0006D1C05FB0CFCBCEB840F04DAC84598BF54 -:10EFB0004FF0010C03D9BDE8F00F3020704712F07C -:10EFC000020F27D000EB4C04B4F81690A58BB4F8D0 -:10EFD0002280278DB4F82EA0A48EA9F1060B5B45E4 -:10EFE00084BFA5F1060B5B45E5D9A94598BFB8F5E7 -:10EFF000FA7F3CBFA7F10A09B145DCD208F101084C -:10F0000008FB05F5B5EB870FD5DAA24598BF0CF1E3 -:10F01000010CD0D812F0040F22D000EB4C02D78A9A -:10F02000B2F81CC0558C148DB2F82E80928EA7F1C8 -:10F0300006094B4584BFACF106094B45BBD9674572 -:10F0400098BFB5F5FA7F3CBFA4F10A03B342B2D230 -:10F050006B1C03FB0CF3B3EB840FACDA9045AAD81E -:10F0600002782AB1012A13D0BDE8F00F12207047B0 -:10F070000029817808D0002918BF012908D0022969 -:10F0800018BF032904D0EFE7002918BF0129EBD1ED -:10F090004078002818BF012803D0022818BF032891 -:10F0A000E2D1BDE8F00F0020704700212EE7017883 -:10F0B00011F0010F02D0406814F0CABA14F097BAE8 -:10F0C0002DE9F04F91B00D460246AFF61841D1E957 -:10F0D0000001CDE90E0111462846FFF717FF060093 -:10F0E0001CBF11B0BDE8F08F12F056FA04280CD006 -:10F0F00012F052FA052808D0FC4F387828B90EF0E3 -:10F1000032FCA0F57F41FF3903D011B00C20BDE8DF -:10F11000F08FF7480B90F7480C90F7480D900BAA2A -:10F12000062110A801F06EFD040002BF092011B0F5 -:10F13000BDE8F08F03210DF02EF9EC48818AA4F888 -:10F140004A10C28AA4F84C20C37C0093837C208898 -:10F1500001F045FE002818BFFFDF208806F0E0FB25 -:10F16000278804F10E094FF0000B4FF00A0A042122 -:10F17000484604F000FF48460DF0DFFA062001F093 -:10F180001BFD80461DE005A9062001F0F6FC05A840 -:10F1900001F0D1FC5FEA000B11D100BFBDF81800EF -:10F1A000B84206D00798042249460E3015F0A6FC56 -:10F1B00070B105A801F0BFFC5FEA000BEED0A8F12A -:10F1C0000108B8F1000F07DDBBF1000FDBD007E04D -:10F1D00048460DF0BBFAF2E7BBF1000F08BFFFDFB6 -:10F1E000D9F800000DF0CDFABAF1010A01D00028DB -:10F1F000BDD0C2A004F1120700680190032101A84C -:10F2000004F090FE002001A90A5C3A54401CC0B2F0 -:10F210000328F9D3A88B6080688CA080288DE080BB -:10F22000687A10F0040F18BF08277CD0DFF8BC8282 -:10F230003A461146B8F8180011F071FD0146A06277 -:10F24000204611F0AFFD17F00C0F09D001231A462C -:10F25000214600200DF0A5FC616A884288BF09267E -:10F260004FF0000984F85E9084F85F90A878002839 -:10F2700016BF0228002001206076D5F80300C4F8EC -:10F280001A00B5F80700E0830EA904F1080015F094 -:10F2900017FE4FF0010A84F800A1CDF81CA0B4F8C5 -:10F2A0004C0004F58277FB2828BFFB20B8F80A1031 -:10F2B000814238BF084694F855104FF4747C11F021 -:10F2C0000C0F1CBF0CEB80118AB26BD0B8F80C107D -:10F2D000914238BF0A46B4F84A10FB2928BFFB21E7 -:10F2E000B8F80E308B4238BF194694F854B01BF072 -:10F2F0000C0F1CBF0CEB81139BB25BD0B8F810C095 -:10F300009C4538BF63461B2918BFB3F5A47F5AD06C -:10F31000F8803A817980BB8021463846079AFFF70A -:10F32000BDFAB88800E031E040F64801884228BFC5 -:10F3300040F64800B8803889884228BF40F6480027 -:10F34000388187F800A000BF8DF800900121684641 -:10F3500004F0E8FD9DF8000000F00701C0F3C102D1 -:10F360001144C0F3401008448DF80000401D207681 -:10F3700009283CBF08302076002120460DF00BF80C -:10F3800068780FF0CBF8002E74D122E010F0010F56 -:10F3900018BF01277FF44AAF10F0020F14BF0227F5 -:10F3A000002743E7022907BF81003C31C1007031CB -:10F3B0008AB28BE7BBF1020F07BF8B003C33CB0057 -:10F3C00070339BB29AE71B2818BFB2F5A47F9FD178 -:10F3D000BAE7A9782878EA1C0FF073F8002808BF6C -:10F3E000122647D00FF0B5F8A9782878EA1C0FF05C -:10F3F00018F906003ED1687A10F0040F14BF0820F7 -:10F4000001200FF053F8060034D1214603200FF0FD -:10F4100032F906002ED1697A8DF80010697A11F060 -:10F42000010F06D06889ADF80200288AADF8040003 -:10F430000120697A11F0020F18BF401C11F0040F6F -:10F4400007D005EB40004189ADF80610008AADF801 -:10F450000800684611F0B9FB064695F83A00002806 -:10F4600018BF01200FF028F826B9204611F047FBFD -:10F47000060009D0208806F054FA2088062101F001 -:10F4800005FC002818BFFFDF304611B0BDE8F08F43 -:10F490000146002014E638B5144C207870B912F0FB -:10F4A0007BF8052805D00EF05EFAA0F57F41FF3904 -:10F4B00004D0684611F005FC10B113E00C2038BDF3 -:10F4C0000098008806F02DFA00980621008801F0C7 -:10F4D000DDFB002818BFFFDF0120207008480078FE -:10F4E000FCF788FC002038BDE45002003206002002 -:10F4F000F4050020680000202206002011223300BD -:10F500005C00002070B4B0F802C08188C388028912 -:10F5100044898089ACF1060640F67B45AE423CBF8B -:10F520008E1FAE4214D28C4598BFB3F5FA7F3EBF12 -:10F53000A2F10A0CFE4D15EB0C0509D25B1C5943D8 -:10F54000B1EB820F04DA84429EBF002070BC70478A -:10F55000302070BC70472DE9F047B0F802C0044677 -:10F560008188C388028947898689ACF1060940F6FB -:10F570007B4830200025C1453ABFA1F10609C145AD -:10F58000BDE8F0878C4598BFB3F5FA7F3DBFA2F187 -:10F590000A0CDFF89C8318EB0C08BDE8F0875B1CB5 -:10F5A0005943B1EB820FA8BFBDE8F087B74288BFCF -:10F5B000BDE8F0872088062101F056FB68B190F87D -:10F5C000D01090F8732042B9002918BF042904D044 -:10F5D000D0F8F8100A781AB106E00220BDE8F087EA -:10F5E000D0F84421127812B13A20BDE8F087052204 -:10F5F0008A71D0F8F8100D81D0F8F820A1885181D7 -:10F60000D0F8F820E1889181D0F8F8202189D181C3 -:10F61000D0F8F8100A894B899A429EBF8A79082A45 -:10F620009A4224BF1220BDE8F08722884A80D0F891 -:10F63000F800022101700020BDE8F087F0B583B02A -:10F6400005460DF0D9F8002802BF122003B0F0BD26 -:10F650000026B84F012429467C70B81C15F030FCF8 -:10F660007E706946062001F088FA002818BFFFDF87 -:10F67000684601F060FA002808BFBDF804500AD1BE -:10F68000029880F80041684601F055FA18B9BDF8B3 -:10F690000400A842F4D103B00020F0BD10B5044628 -:10F6A0000088062101F0E0FA68B190F8D01090F8D7 -:10F6B000732042B9002918BF042904D0D0F8F810EB -:10F6C0000A7812B105E0022010BDD0F8442112786A -:10F6D0000AB13A2010BD90F8962012F0010F04BF35 -:10F6E0000C2010BDD4F80220D4F806304A608B609C -:10F6F000D0F8F81062898A81D0F8F810E268C1F871 -:10F700000E202269C1F812206269C1F81620A26990 -:10F71000C1F81A20D0F8F82003211170D0F8F800B1 -:10F7200021884180002010BDF8B516460F460446DA -:10F7300009F09CF900281CBF0C20F8BD207812238A -:10F74000EF2801D91846F8BD6088ADF8000010F028 -:10F75000100F4FF000050CD010F0010F00F0020167 -:10F760001BD0B1B110F0080F08BF10F0040F1ED06D -:10F770001AE010F0080FE5D110F0200F18BF10F0BC -:10F78000030FDFD110F0010F18BF10F0020FD9D115 -:10F790000DE010F0040F0AD106E029B110F0080FB7 -:10F7A00008BF10F0040F02D010F00F0FCAD1B4F848 -:10F7B00002C01CF0080F08D1D4E90110884228BF0C -:10F7C0002029BFD3B0F1807FBCD2207B0028B9D0E4 -:10F7D0000728B7D8607B002818BF012803D002286B -:10F7E00018BF0328AED11CF0040F03D1022818BFA4 -:10F7F000032807D1A07B002818BF0128A2D11CF044 -:10F80000040F08D1607D002818BF012803D002280A -:10F8100018BF032896D1E07D1CF0100F02D00128FC -:10F8200011D08FE7012818BF03288BD11CF0100FCF -:10F8300009D1607E01281CBF0228032882D1A07E46 -:10F840000F283FF67FAFE07E002818BF01287FF425 -:10F8500079AF1CF0400F1CBF1120F8BD3D70A5759D -:10F8600056B9FF208DF800006946002006F065FDBE -:10F870006946002006F04CFD2046BDE8F84006F041 -:10F8800074BC002250E72DE9F0470446C0780F46CB -:10F89000122510B106F0DBFC50B1607804280AD0C4 -:10F8A00094F8038094F800906678B8F1FB0F12D9B1 -:10F8B0002846BDE8F08709F0D9F80028F8D006F00E -:10F8C0001EFD0028F4D106F0EEF9002804BFE07810 -:10F8D0000028EDD1E4E71FB1B8F11F0F23D9E7E706 -:10F8E00006F0E1F928B1B8F11F0F98BF032E07D039 -:10F8F000DEE7032E18BF042E02D0B8F1000FD7D0D8 -:10F9000009F0B4F8002818BF032E04D0042E1CBF41 -:10F910000C20BDE8F087484606F0BDF9002804BF7A -:10F920004220BDE8F087E07861781F2804E00000FD -:10F9300089F3FFFF3206002098BF03291CBF112066 -:10F94000BDE8F087211D06F0F8FC0020BDE8F08737 -:10F95000002198E72DE9F0470446C0788846122731 -:10F9600010B106F00AFD38B16578042D04D0E678B0 -:10F9700094F80090FB2E02D93846BDE8F087B8F124 -:10F98000000F02D01F2E21D9F6E706F08CF920B126 -:10F990001F2E98BF032D06D0EEE7032D18BF042DB0 -:10F9A00001D0002EE8D009F061F8002818BF032D1F -:10F9B00004D0042D1CBF0C20BDE8F087484606F09B -:10F9C0006AF9002804BF4220BDE8F087E07861783A -:10F9D0001F2898BF03291CBF1120BDE8F087211DF7 -:10F9E00006F096FC0020BDE8F0870021B2E72DE983 -:10F9F000F04304464078422583B0012808D8A07817 -:10FA000006F049F920B120781225012804D0A0B1D0 -:10FA100003B02846BDE8F08306F0C3FC20B1A088FF -:10FA20000028F5D08028F3D806F0C2FC68B16078D1 -:10FA30000028EDD0207801280BD007F077FE04468F -:10FA400008F08CFC002800F0038103B00C20BDE816 -:10FA5000F08306F0B5FA38B906F09CFC002802BF26 -:10FA6000122003B0BDE8F08309F000F80028ECD1C3 -:10FA700006F0D1F8A0F57F41FF39E6D106F0BFFAD4 -:10FA8000A08842F2107100FB01F6A079314606F021 -:10FA9000EFFB06F06BFCF8B10022072101A801F092 -:10FAA000B1F8040049D0FE480321846020460CF0E0 -:10FAB00079FB204607F067F8FA4DA88AA4F84A00B7 -:10FAC000E88AA4F84C0006F0EEF870B1288B01210A -:10FAD00008F0C8FDA06210E03146002008F018FDD3 -:10FAE000002818BFFFDF00F0BEB806F063FC2A8BC9 -:10FAF0000146104608F0B6FDA062014600222046ED -:10FB000007F017FE06F0CFF84FF00108C8B906F06D -:10FB100051FC10F00C0F14D001231A462146184650 -:10FB20000DF03FF8616A88420BD90721BDF8040047 -:10FB300001F0ACF8002818BFFFDF092003B0BDE8D2 -:10FB4000F083E87C0090AB7CEA8AA98A208801F0E7 -:10FB500046F9002818BFFFDF208805F0E1FE314696 -:10FB6000204608F0D5FC002818BFFFDF2146B4F876 -:10FB70004C00002204F5CD76FB2828BFFB206B89C2 -:10FB8000834238BF184691F855304FF4747413F01F -:10FB90000C0F1CBF04EB80131FFA83FC3BD000BF8B -:10FBA000B5F80C90E14528BFE146B1F84A30FB2B8F -:10FBB00028BFFB23B5F80EC09C4538BF634691F8BB -:10FBC00054C01CF00C0F1CBF04EB831C1FFA8CF7F5 -:10FBD0002AD02C8ABC4228BF3C461B2B18BFB4F548 -:10FBE000A47F2FD0F080A6F808907380B4803046B0 -:10FBF000FEF754FEB08840F64801884228BF40F620 -:10FC00004800B0803089884228BF40F648003081E3 -:10FC100086F8008027E0022B07BF83003C33C30037 -:10FC200070331FFA83FCBBE7BCF1020F07BF4FEA3A -:10FC3000830C0CF13C0C4FEAC30C0CF1700C1FFA56 -:10FC40008CF7C6E71B2818BFB9F5A47FCAD10AE014 -:10FC50004CB1208805F065FE2088072101F016F8D8 -:10FC6000002818BFFFDF002003B0BDE8F0830021AB -:10FC7000BDE610B50C46072100F0F6FF002804BFD2 -:10FC8000022010BD90F8731109B10C2010BD90F83E -:10FC90006510142912BF152990F8C0110029F4D15C -:10FCA0002168C0F874116168C0F87811A168C0F8C3 -:10FCB0007C11E168C0F88011012180F873110020E7 -:10FCC00010BD10B5072100F0CFFF002804BF0220AF -:10FCD00010BD90F8731109B10C2010BD90F865109B -:10FCE000142918BF1529F7D1022180F873110020BB -:10FCF00010BDF0B50E464BF68032122183B096420D -:10FD000017D8B6B1694600F04AF900281CBF03B005 -:10FD1000F0BD019800F15807841C25883246294619 -:10FD200038460CF035FA2088A842F6D103B00020FE -:10FD3000F0BD03B00846F0BD10B582B0044600889F -:10FD4000694600F02CF900281CBF02B010BD0198D4 -:10FD5000A37800F1580190F82C209A4202BF0C20A1 -:10FD600002B010BD7F220A728A720022CA72E17844 -:10FD700080F82D10217980F82E10A17880F82C10B1 -:10FD800002B0104610BD10B582B00C46694600F0B6 -:10FD900006F900281CBF02B010BD019890F873004E -:10FDA000002818BF0120207002B0002010BD30B51F -:10FDB00083B00D461446694600F0F1F800281CBFD8 -:10FDC00003B030BD019890F82C0001281EBF0C2014 -:10FDD00003B030BD019890F86010297090F8610070 -:10FDE000207003B0002030BD70B50D4616460721C7 -:10FDF00000F03AFF002804BF022070BD83884FF056 -:10FE0000010CC28841880CEB430C65451AD342F2C1 -:10FE1000107C02FB0CF240F6C41C01FB0CF1B2FB9F -:10FE2000F1F1491E8CB2B4F5FA7F88BF4FF4FA7431 -:10FE3000A54238BF2C46621C591CB2FBF1F251435B -:10FE4000491E8BB290F8AC11002908BF038433809F -:10FE5000002070BD10B50C46072100F005FF0028FA -:10FE600004BF022010BD80F8DF40002C1EBF90F8B8 -:10FE7000DD10002908F019FC002010BD01780029D0 -:10FE80001CBF4178002915D041881B2921BF8188DA -:10FE90001B29C18802290DD302680349406805E087 -:10FEA0005C00002032060020F40500200A65486549 -:10FEB000002070471220704710B5044610F02CFF48 -:10FEC000204608F09AFB002010BD2DE9F0411646AF -:10FED0000F46044601221146384610F020FF054621 -:10FEE0000121384608F0BEFB854228BF2846012381 -:10FEF000E100503189B2E631884206D901F196021B -:10FF0000401AB0FBF2F0401C83B233800020BDE801 -:10FF1000F08110B5044611F03FFB042806D011F023 -:10FF20003BFB052802D008F0A1FD08B10C2010BD54 -:10FF3000601C0BF082FF207800F0010006F05AF8F8 -:10FF4000207800F001000EF0FFFA002010BD10B57F -:10FF50000446072000F022FE00281CBF0C2010BD24 -:10FF6000207810F0010F11D000226078114613F0B4 -:10FF70008FFF00281CBF122010BDA0680AF0E9F90D -:10FF8000607861680AF0EEF9002010BD00200AF0E8 -:10FF9000E0F9002108460AF0E5F9002010BD70B52F -:10FFA0000C460546062100F05FFE606010B100209F -:10FFB000207070BD0721284600F056FE60600028C2 -:10FFC00004BF022070BD01202070002070BD10B55C -:10FFD00004468C46007813466168624638B10120B9 -:10FFE0000CF0DFFD6168496A884209D906E000200B -:10FFF0000CF0D7FD6168496A884201D9012010BD23 -:020000040001F9 -:10000000002010BD10B586B0044611F0C5FA0428D2 -:1000100041D011F0C1FA05283DD0A0788DF8080034 -:10002000A0788DF8000060788DF8040020788DF8B5 -:100030000300A07B8DF80500E07B002818BF01209D -:100040008DF80600A07810F0010F27D0E078012885 -:1000500008BF022003D000280CBF012000208DF82B -:100060000100E088ADF80A006089ADF80C00A078C6 -:1000700010F0040F26D02079012808BF022003D0F9 -:1000800000280CBF012000208DF802002089ADF867 -:100090000E00A08914E006B00C2010BD10F0040F73 -:1000A00010D0E078012808BF022003D000280CBF40 -:1000B000012000208DF80200E088ADF80E00608974 -:1000C000ADF8100002A810F080FD002804BF6846BB -:1000D0000EF02BFB06B010BD30B5058825F40044AA -:1000E00021448CB24FF4004194420AD2121B92B2C6 -:1000F0001B339A4201D2A94307E005F40041214392 -:1001000003E0A21A92B2A9431143018030BD084412 -:10011000083050434A31084480B2704770B51D46DC -:1001200016460B46044629463046049AFFF7EFFF71 -:100130000646B34200D2FFDF2821204614F0ABFD73 -:100140004FF6FF70A082283EB0B265776080B0F5B0 -:10015000004F00D9FFDF618805F13C00814200D2E9 -:10016000FFDF60880835401B343880B220801B28B0 -:1001700000D21B2020800020A07770BD81618861A3 -:1001800070472DE9F05F0D46C188044600F128094B -:10019000008921F4004620F4004800F062FB10B111 -:1001A0000020BDE8F09F4FF0000A4FF0010BB04572 -:1001B0000CD9617FA8EB0600401A0838854219DC8B -:1001C00009EB06000021058041801AE06088617F0C -:1001D000801B471A083F0DD41B2F00DAFFDFBD42FA -:1001E00001DC294600E0B9B2681A0204120C04D0FE -:1001F000424502DD84F817A0D2E709EB0600018032 -:10020000428084F817B0CCE770B5044600F12802AC -:10021000C088E37D20F400402BB11044028843885D -:1002200013448B4201D2002070BD00258A4202D3C4 -:100230000180458008E0891A0904090C418003D037 -:10024000A01D00F01EFB08E0637F008808331844FF -:1002500081B26288A01DFFF73FFFE575012070BDE8 -:1002600070B5034600F12804C588808820F4004654 -:100270002644A84202D10020188270BD9889358892 -:10028000A84206D3401B75882D1A2044ADB2C01E6B -:1002900005E02C1AA5B25C7F20443044401D0C8838 -:1002A000AC4200D90D809C8924B1002414700988C7 -:1002B000198270BD0124F9E770B5044600F12801E8 -:1002C000808820F400404518208A002825D0A18984 -:1002D000084480B2A08129886A881144814200D2F2 -:1002E000FFDF2888698800260844A189884212D146 -:1002F000A069807F2871698819B1201D00F0C1FABA -:1003000008E0637F28880833184481B26288201D82 -:10031000FFF7E2FEA6812682012070BD2DE9F041A3 -:10032000418987880026044600F12805B94218D083 -:1003300004F10A0821F400402844418819B14046DC -:1003400000F09FFA08E0637F00880833184481B208 -:1003500062884046FFF7C0FE761C6189B6B2B9429A -:10036000E8D13046BDE8F0812DE9F04104460B4666 -:1003700027892830A68827F40041B4F80A80014470 -:100380000D46B74201D10020ECE70AB1481D1060CC -:1003900023B1627F691D184614F0DCFB2E88698842 -:1003A00004F1080021B18A1996B200F06AFA06E059 -:1003B000637F62880833991989B2FFF78DFE47453C -:1003C00001D1208960813046CCE78188C088814294 -:1003D00001D1012070470020704701898088814247 -:1003E00001D1012070470020704770B58588C3880F -:1003F00000F1280425F4004223F4004114449D42F6 -:100400001AD08389058A5E1925886388EC18A6426C -:1004100014D313B18B4211D30EE0437F08325C1921 -:100420002244408892B2801A80B22333984201D28B -:1004300011B103E08A4201D1002070BD012070BDDE -:100440002DE9F0478846C1880446008921F400461A -:1004500004F1280720F4004507EB060900F001FA33 -:10046000002178BBB54204D9627FA81B801A002501 -:1004700003E06088627F801B801A083823D4E289F9 -:1004800062B1B9F80020B9F802303BB1E81A21771F -:10049000404518DBE0893844801A09E0801A21774A -:1004A00040450ADB607FE189083030443944084424 -:1004B000C01EA4F81280BDE8F087454503DB01208B -:1004C0002077E7E7FFE761820020F4E72DE9F74FA7 -:1004D000044600F12805C088884620F4004A608A56 -:1004E00005EB0A0608B1404502D20020BDE8FE8FA8 -:1004F000E08978B13788B6F8029007EB09018842A5 -:1005000000D0FFDF207F4FF0000B50EA090106D03A -:1005100088B33BE00027A07FB9463071F2E7E1895C -:1005200059B1607F2944083050440844B4F81F1082 -:1005300020F8031D94F821108170E28907EB080070 -:1005400002EB0801E1813080A6F802B002985F4614 -:1005500050B1637F30880833184481B26288A01D8F -:10056000FFF7BAFDE78121E0607FE1890830504460 -:10057000294408442DE0FFE7E089B4F81F1028441F -:10058000C01B20F8031D94F82110817009EB0800AE -:10059000E28981B202EB0800E08137807180029825 -:1005A000A0B1A01D00F06DF9A4F80EB0A07F401C12 -:1005B000A077A07D08B1E088A08284F816B000BFC3 -:1005C000A4F812B084F817B001208FE7E08928441E -:1005D000C01B30F8031DA4F81F10807884F8210098 -:1005E000EEE710B5818800F1280321F4004423448C -:1005F000848AC288A14212D0914210D0818971B9F7 -:10060000826972B11046FFF7E8FE50B910892832AE -:1006100020F40040104419790079884201D100206B -:1006200010BD184610BD00F12803407F0830084473 -:10063000C01E1060088808B9DB1E1360088849884E -:10064000084480B270472DE9F04100F12806407F50 -:100650001C4608309046431808884D88069ADB1ED1 -:10066000A0B1C01C80B2904214D9801AA04200DB15 -:10067000204687B298183A46414614F03FFA0028BF -:1006800016D1E01B84B2B844002005E0ED1CADB2E9 -:10069000F61EE8E7101A80B20119A94206D83044C4 -:1006A00022464146BDE8F04114F028BA4FF0FF3031 -:1006B00058E62DE9F04100F12804407F1E4608303D -:1006C00090464318002508884F88069ADB1E90B193 -:1006D000C01C80B2904212D9801AB04200DB304672 -:1006E00085B299182A46404614F034FA701B86B237 -:1006F000A844002005E0FF1CBFB2E41EEAE7101A80 -:1007000080B28119B94206D821183246404614F009 -:1007100021FAA81985B2284624E62DE9F04100F116 -:100720002804407F1E46083090464318002508885C -:100730004F88069ADB1E90B1C01C80B2904212D93D -:10074000801AB04200DB304685B298182A464146EE -:1007500014F000FA701B86B2A844002005E0FF1CCC -:10076000BFB2E41EEAE7101A80B28119B94206D876 -:1007700020443246414614F0EDF9A81985B22846C6 -:10078000F0E5401D704710B5044600F12801C2880D -:10079000808820F400431944904206D0A28922B9EF -:1007A000228A12B9A28A904201D1002010BD088885 -:1007B000498831B1201D00F064F80020208201201A -:1007C00010BD637F62880833184481B2201DFFF793 -:1007D00083FCF2E70021C18101774182C1758175F7 -:1007E000704703881380C28942B1C28822F4004353 -:1007F00000F128021A440A60C0897047002070473F -:1008000010B50446808AA0F57F41FF3900D0FFDF94 -:10081000E088A082E08900B10120A07510BD4FF6EC -:10082000FF71818200218175704710B50446808A6E -:10083000A0F57F41FF3900D1FFDFA07D28B9A08856 -:10084000A18A884201D1002010BD012010BD8188FD -:10085000828A914201D1807D08B100207047012039 -:10086000704720F4004221F400439A4207D100F47B -:10087000004001F40041884201D00120704700206F -:10088000704730B5044600880D4620F40040A84269 -:1008900000D2FFDF21884FF40040884328432080A6 -:1008A00030BD70B50C00054609D0082C00D2FFDF22 -:1008B0001DB1A1B2286800F044F8201D70BD0DB133 -:1008C00000202860002070BD0021026803E09388AA -:1008D0001268194489B2002AF9D100F032B870B513 -:1008E00000260D460446082900D2FFDF206808B91B -:1008F0001EE0044620688188A94202D001680029D0 -:10090000F7D181880646A94201D100680DE005F1C2 -:10091000080293B20022994209D32844491B02607D -:1009200081802168096821600160206000E0002664 -:10093000304670BD00230B608A8002680A60016047 -:10094000704700234360021D018102607047F0B5CB -:100950000F460188408815460C181E46AC4200D34D -:10096000641B3044A84200D9FFDFA019A84200D977 -:10097000FFDF3819F0BD2DE9F041884606460188B1 -:10098000408815460C181F46AC4200D3641B3844FF -:10099000A84200D9FFDFE019A84200D9FFDF708824 -:1009A0003844708008EB0400BDE8F0812DE9F04187 -:1009B000054600881E461746841B8846BC4200D365 -:1009C0003C442C8068883044B84200D9FFDFA0192D -:1009D000B84200D9FFDF68883044688008EB040023 -:1009E000E2E72DE9F04106881D460446701980B201 -:1009F000174688462080B84201D3C01B20806088FB -:100A0000A84200D2FFDF7019B84200D9FFDF60882A -:100A1000401B608008EB0600C6E730B50D46018834 -:100A2000CC18944200D3A41A4088984200D8FFDF23 -:100A3000281930BD2DE9F041C84D04469046A878EC -:100A40000E46A04200D8FFDF05EB8607B86A50F8D3 -:100A5000240000B1FFDFB868002816D0304600F04F -:100A600044F90146B868FFF73AFF05000CD0B86AB0 -:100A7000082E40F8245000D3FFDFB94842462946EB -:100A800050F82630204698472846BDE8F0812DE9E9 -:100A9000F8431E468C1991460F460546FF2C00D997 -:100AA000FFDFB14500D9FFDFE4B200954DB3002070 -:100AB0008046E81C20F00300A84200D0FFDF494632 -:100AC000DFF89892684689F8001089F8017089F873 -:100AD000024089F8034089F8044089F8054089F804 -:100AE000066089F80770414600F008F90021424687 -:100AF0000F464B460098C01C20F00300009012B136 -:100B00000EE00120D4E703EB8106B062002005E08F -:100B1000D6F828C04CF82070401CC0B2A042F7D3D1 -:100B20000098491C00EB8400C9B200900829E1D369 -:100B3000401BBDE8F88310B5044603F067FD08B11B -:100B4000102010BD2078854A618802EB80009278E1 -:100B50000EE0836A53F8213043B14A1C6280A180C1 -:100B6000806A50F82100A060002010BD491C89B2A5 -:100B70008A42EED86180052010BD70B505460C464E -:100B8000084603F043FD08B1102070BD082D01D3C5 -:100B9000072070BD25700020608070BD0EB56946CD -:100BA000FFF7EBFF00B1FFDF6846FFF7C4FF08B1B6 -:100BB00000200EBD01200EBD10B50446082800D34C -:100BC000FFDF6648005D10BD3EB50546002469465E -:100BD000FFF7D3FF18B1FFDF01E0641CE4B2684601 -:100BE000FFF7A9FF0028F8D02846FFF7E5FF001B14 -:100BF000C0B23EBD59498978814201D9C0B270471F -:100C0000FF2070472DE9F041544B062903D00729F6 -:100C10001CD19D7900E0002500244FF6FF7603EB00 -:100C2000810713F801C00AE06319D7F828E09BB2E6 -:100C30005EF823E0BEF1000F04D0641CA4B2A4450A -:100C4000F2D8334603801846B34201D100201CE796 -:100C5000BDE8F041EEE6A0F57F43FF3B01D0082957 -:100C600001D300207047E5E6A0F57F42FF3A0BD0A4 -:100C7000082909D2394A9378834205D902EB8101C8 -:100C8000896A51F820007047002070472DE9F04133 -:100C900004460D46A4F57F4143F20200FF3902D01D -:100CA000082D01D30720F0E62C494FF000088A7880 -:100CB000A242F8D901EB8506B26A52F82470002FDF -:100CC000F1D027483946203050F82520204690475B -:100CD000B16A284641F8248000F007F802463946F8 -:100CE000B068FFF727FE0020CFE61D49403131F8FC -:100CF00010004FF6FC71C01C084070472DE9F84306 -:100D0000164E8846054600242868C01C20F00300C3 -:100D100028602046FFF7E9FF315D4843B8F1000F36 -:100D200001D0002200E02A680146009232B100277B -:100D30004FEA0D00FFF7B5FD1FB106E001270020C7 -:100D4000F8E706EB8401009A8A602968641C08446D -:100D5000E4B22860082CD7D3EBE600005006002050 -:100D6000F050020070B50E461D46114600F0D4F852 -:100D700004462946304600F0D8F82044001D70BDD6 -:100D80002DE9F04190460D4604004FF0000610D0CA -:100D90000027E01C20F00300A04200D0FFDFDDB1FF -:100DA00041460020FFF77DFD0C3000EB850617B1B2 -:100DB00012E00127EDE7614F04F10C00A9003C604F -:100DC0002572606000EB85002060606813F063FFAF -:100DD00041463868FFF765FD3046BDE8F0812DE9F2 -:100DE000FF4F564C804681B020689A46934600B922 -:100DF000FFDF2068027A424503D9416851F8280094 -:100E000020B143F2020005B0BDE8F08F51460298D0 -:100E100000F082F886B258460E9900F086F885B246 -:100E20007019001D87B22068A14639460068FFF797 -:100E300056FD04001FD0678025802946201D0E9D89 -:100E400007465A4601230095FFF768F92088314686 -:100E500038440123029ACDF800A0FFF75FF92088FB -:100E6000C1193846FFF78AF9D9F800004168002017 -:100E700041F82840C7E70420C5E770B52F4C054668 -:100E8000206800B9FFDF2068017AA9420ED94268C4 -:100E900052F8251051B1002342F825304A880068E5 -:100EA000FFF748FD216800200A7A08E043F20200BB -:100EB00070BD4B6853F8203033B9401CC0B2824239 -:100EC000F7D80868FFF700FD002070BD70B51B4E15 -:100ED00005460024306800B9FFDF3068017AA94276 -:100EE00004D9406850F8250000B1041D204670BDAB -:100EF00070B5124E05460024306800B9FFDF306837 -:100F0000017AA94206D9406850F8251011B131F88C -:100F1000040B4418204670BD10B50A460121FFF7A6 -:100F2000F6F8C01C20F0030010BD10B50A460121E0 -:100F3000FFF7EDF8C01C20F0030010BD700000208A -:100F400070B50446C2F11005281913F003FE15F020 -:100F5000FF0108D0491EC9B2802060542046BDE878 -:100F6000704013F076BE70BD30B505E05B1EDBB29D -:100F7000CC5CD55C6C40C454002BF7D130BD10B5AF -:100F8000002409E00B78521E44EA430300F8013BB9 -:100F900011F8013BD2B2DC09002AF3D110BD2DE9D2 -:100FA000F04389B01E46DDE9107990460D000446F5 -:100FB00022D002460846F949FDF755FB102221468A -:100FC0003846FFF7DCFFE07B000606D5F34A3946DA -:100FD000102310320846FFF7C7FF10223946484653 -:100FE000FFF7CDFFF87B000606D5EC4A49461023F3 -:100FF00010320846FFF7B8FF1021204613F029FEF3 -:101000000DE0103EB6B208EB0601102322466846FA -:10101000FFF7AAFF224628466946FDF724FB102E5B -:10102000EFD818D0F2B241466846FFF789FF102387 -:101030004A46694604A8FFF797FF1023224604A9F1 -:101040006846FFF791FF224628466946FDF70BFBED -:1010500009B0BDE8F08310233A464146EAE770B58F -:101060009CB01E460546134620980C468DF8080095 -:10107000202219460DF1090013F06CFD20222146B3 -:101080000DF1290013F066FD17A913A8CDE90001A1 -:10109000412302AA31462846FFF781FF1CB070BDEC -:1010A0002DE9FF4F9FB014AEDDE92D5410AFBB49C1 -:1010B000CDE90076202320311AA8FFF770FF4FF00A -:1010C00000088DF808804FF001098DF8099054F858 -:1010D000010FCDF80A00A088ADF80E0014F8010C3D -:1010E0001022C0F340008DF8100055F8010FCDF824 -:1010F0001100A888ADF8150015F8010C2C99C0F363 -:1011000040008DF8170006A8824613F023FD0AA8B8 -:1011100083461022229913F01DFDA048352308387C -:1011200002AA40688DF83C80CDE900760E901AA99D -:101130001F98FFF734FF8DF808808DF8099020681C -:10114000CDF80A00A088ADF80E0014F8010C1022AA -:10115000C0F340008DF810002868CDF81100A88871 -:10116000ADF8150015F8010C2C99C0F340008DF86E -:101170001700504613F0EEFC58461022229913F047 -:10118000E9FC86483523083802AA40688DF83C906F -:10119000CDE900760E901AA92098FFF700FF23B042 -:1011A000BDE8F08FF0B59BB00C460546DDE9221096 -:1011B0001E461746DDE92032D0F801C0CDF808C040 -:1011C000B0F805C0ADF80CC00078C0F340008DF851 -:1011D0000E00D1F80100CDF80F00B1F80500ADF810 -:1011E000130008781946C0F340008DF815001088E8 -:1011F000ADF8160090788DF818000DF11900102246 -:1012000013F0A8FC0DF129001022314613F0A2FCC6 -:101210000DF139001022394613F09CFC17A913A8D0 -:10122000CDE90001412302AA21462846FFF7B7FE77 -:101230001BB0F0BDF0B5A3B017460D4604461E46E0 -:10124000102202A8289913F085FC06A8202239460E -:1012500013F080FC0EA82022294613F07BFC1EA967 -:101260001AA8CDE90001502302AA314616A8FFF7BB -:1012700096FE1698206023B0F0BDF0B589B0044604 -:10128000DDE90E070D463978109EC1F340018DF857 -:10129000001031789446C1F340018DF801101968AF -:1012A000CDF802109988ADF8061099798DF80810DC -:1012B0000168CDF809108188ADF80D1080798DF89E -:1012C0000F0010236A46614604A8FFF74DFE224630 -:1012D000284604A9FDF7C7F9D6F801000090B6F832 -:1012E0000500ADF80400D7F80100CDF80600B7F806 -:1012F0000500ADF80A000020039010236A4621463D -:1013000004A8FFF731FE2246284604A9FDF7ABF9F1 -:1013100009B0F0BD1FB51C6800945B6801931368A9 -:10132000029352680392024608466946FDF79BF90C -:101330001FBD10B588B00446106804905068059031 -:1013400000200690079008466A4604A9FDF78BF92D -:10135000BDF80000208008B010BD1FB51288ADF8A0 -:1013600000201A88ADF80220002201920292039216 -:10137000024608466946FDF776F91FBD7FB5074B63 -:1013800014460546083B9A1C6846FFF7E6FF2246CE -:1013900069462846FFF7CDFF7FBD00004851020097 -:1013A00070B5044600780E46012813D0052802D0F7 -:1013B000092813D10EE0A06861690578042003F0C4 -:1013C000B3F8052D0AD0782300220420616903F0C8 -:1013D00001F803E00420616903F0A6F831462046D5 -:1013E000BDE8704001F086B810B500F12D02C37958 -:1013F0009478411D64F003042340C371DB070DD0D2 -:101400004B79547923404B710B79127913400B714E -:101410008278C9788A4200D9817010BD00224A7151 -:101420000A71F5E74178012900D00C21017070475D -:101430002DE9F04F93B04FF0000B0C690D468DF87D -:1014400020B0097801260C2017464FF00D084FF008 -:10145000110A4FF008091B2975D2DFE811F01B00B3 -:10146000C30206031E035D037003A203B703F80360 -:10147000190461049304A004EC042A053405520500 -:101480005D05EE053106340663067F06F9061D0785 -:10149000E606EB0614B120781D282AD0D5F808807E -:1014A0005FEA08004FD001208DF82000686A022210 -:1014B0000D908DF824200A208DF82500A8690A9047 -:1014C000A8880028EED098F8001091B10F2910D20A -:1014D0007ED2DFE801F07D1349DEFEFDFCFBFAF968 -:1014E00038089CF8F70002282DD124B120780C2868 -:1014F00001D00026EFE38DF82020CBE10420696ABB -:1015000003F012F8A8880728EED1204600F0EDFF7E -:10151000022809D0204600F0E8FF032807D920461A -:1015200000F0E3FF072802D20120207004E0002C25 -:10153000B8D020780128D7D198F80400C11F0A2913 -:1015400002D30A2061E0C4E1A070D8F80010E16283 -:10155000B8F80410218698F8060084F832000120BB -:1015600028700320207044E00728BDD1002C99D0BA -:1015700020780D28B8D198F8031094F82F20C1F3E3 -:10158000C000C2F3C002104201D0062000E00720D4 -:10159000890707D198F805100142D2D198F80610B2 -:1015A0000142CED194F8312098F8051020EA0202C9 -:1015B0001142C6D194F8322098F8061090430142A7 -:1015C000BFD198F80400C11F0A29BAD2617D00E09A -:1015D00006E281427ED8D8F800106160B8F80410A5 -:1015E000218198F80600A072012028700E2020703A -:1015F00003208DF82000686A0D9004F12D000990F9 -:10160000601D0A900F300B9022E12875FDE3412800 -:1016100091D1204600F069FF042802D1E078C0078C -:1016200004D1204600F061FF0F2884D1A88CD5F8A2 -:101630000C8080B24FF0400BE669FFF747FC324662 -:1016400041465B464E46CDF80090FFF732F80B203E -:101650008DF82000686A0D90E0690990002108A8C3 -:10166000FFF79EFE2078042806D0A07D58B10128FF -:1016700009D003280AD049E30520207003202870F0 -:101680008DF82060CDE184F800A032E712202070B0 -:10169000E9E11128BCD1204600F027FF042802D13F -:1016A000E078C00719D0204600F01FFF062805D1BA -:1016B000E078C00711D1A07D02280ED0204600F0AE -:1016C00014FF08E0CAE081E06FE14EE121E101E1B1 -:1016D000E7E017E0ADE111289AD1102208F10101ED -:1016E00004F13C0013F036FA607801287ED0122015 -:1016F0002070E078C00760D0A07D0028C8D0012805 -:10170000C6D05AE0112890D1204600F0EEFE0828FD -:1017100004D0204600F0E9FE132886D104F16C00C5 -:10172000102208F10101064613F014FA2078082867 -:101730000DD014202070E178C8070DD0A07D0228BC -:101740000AD06278022A04D00328A1D035E009200B -:10175000F0E708B1012837D1C80713D0A07D0228CF -:101760001DD000200090D4E9062133460EA8FFF7D3 -:1017700076FC10220EA904F13C0013F0BFF9C8B1A9 -:10178000042042E7D4E90912201D8DE8070004F186 -:101790002C0332460EA8616BFFF76FFDE9E7606B23 -:1017A000C1F34401491E0068C84000F0010040F048 -:1017B0008000D7E72078092806D185F800908DF8B9 -:1017C000209033E32870ECE30920FBE711289AD13D -:1017D000204600F08AFE0A2802D1E078C00704D132 -:1017E000204600F082FE15288DD100E08DE104F145 -:1017F0003C00102208F10101064613F0ABF92078F5 -:101800000A2816D016202070D4E90932606B611DB9 -:101810008DE80F0004F15C0304F16C0247310EA85F -:10182000FFF7C0FC10220EA9304613F067F918B17B -:10183000F5E20B20207071E22046FFF7D5FDA0787D -:10184000216A0A18C0F11001104613F002FA23E3CE -:10185000394608A8FFF7A4FD06463BE20228B6D1A8 -:10186000204600F042FE042804D3204600F03DFE4E -:10187000082809D3204600F038FE0E2829D3204638 -:1018800000F033FE122824D2A07D02289FD10E2022 -:101890008DF82000686A0D9098F801008DF82400FA -:1018A000F0E3022893D1204600F01FFE002810D05C -:1018B000204600F01AFE0128F9D0204600F015FE5F -:1018C0000C28F4D004208DF8240098F801008DF83D -:1018D00025005EE21128FCD1002CFAD020781728D0 -:1018E000F7D16178606A022911D0002101EB410132 -:1018F000182606EBC1011022405808F1010113F02F -:1019000029F90420696A00F0E3FD2670F1E5012160 -:10191000ECE70B28DDD1002CDBD020781828D8D1BB -:101920006078616A02281CD05FF0000000EB400282 -:10193000102000EBC2000958B8F801000880607858 -:10194000616A02280FD0002000EB4002142000EB57 -:10195000C2000958404650F8032F0A6040684860AA -:1019600039E00120E2E70120EEE71128B1D1002C97 -:10197000AFD020781928ACD16178606A022912D0E2 -:101980005FF0000101EB41011C2202EBC1011022BA -:10199000405808F1010113F0DDF80420696A00F0F5 -:1019A00097FD1A20B6E00121ECE7082891D1002C20 -:1019B0008FD020781A288CD1606A98F8012001789D -:1019C00062F347010170616AD8F8022041F8012FE3 -:1019D000B8F8060088800420696A00F079FD8EE27C -:1019E000072012E63878012894D1182204F1140057 -:1019F000796813F0F4F8E079C10894F82F0001EA4F -:101A0000D001E07861F30000E070217D002974D1FD -:101A10002178032909D0C00725D0032028708DF82C -:101A20002090686A0D90412004E3607DA17888428F -:101A300001D90620E9E502262671E179204621F048 -:101A4000E001E171617A21F0F0016172A17A21F087 -:101A5000F001A172FFF7C8FC2E708DF82090686A23 -:101A60000D900720E6E20420ACE6387805289DD1E9 -:101A70008DF82000686A0D90B8680A900720ADF8CC -:101A800024000A988DF830B0616801602189818056 -:101A9000A17A817104202070F4E23978052985D17A -:101AA0008DF82010696A0D91391D09AE0EC986E8BE -:101AB0000E004121ADF824108DF830B01070A88CC4 -:101AC000D7F80C8080B24026A769FFF711FA41468B -:101AD0003A463346C846CDF80090FEF71EFE002178 -:101AE00008A8FFF75DFCE07820F03E00801CE07065 -:101AF0002078052802D00F200CE049E1A07D20B11C -:101B0000012802D0032802D002E10720BFE584F8B3 -:101B10000080EEE42070ECE4102104F15C0002F09F -:101B20002AFA606BB0BBA07D18B1012801D0052056 -:101B3000FDE006202870F7486063A063BEE23878B5 -:101B4000022894D1387908B12875B3E3A07D022822 -:101B500002D0032805D022E0B8680028F5D06063E1 -:101B60001CE06078012806D0A07994F82E10012896 -:101B700005D0E84806E0A17994F82E00F7E7B868A8 -:101B80000028E2D06063E078C00701D0012902D0CC -:101B9000E04803E003E0F8680028D6D0A063062000 -:101BA00010E68DF82090696A0D91E1784846C907E2 -:101BB00009D06178022903D1A17D29B1012903D07F -:101BC000A17D032900D00720287031E1387805284D -:101BD000BBD1207807281ED084F800A005208DF8FE -:101BE0002000686A0D90B8680A90ADF824A08DF8BE -:101BF00030B003210170E178CA070FD0A27D022A1C -:101C00001AD000210091D4E9061204F15C03401CB3 -:101C1000FFF725FA67E384F80090DFE7D4E90923AA -:101C2000211D8DE80E0004F12C0304F15C02401C20 -:101C3000616BFFF722FB56E3626BC1F34401491E5F -:101C40001268CA4002F0010141F08001DAE73878F9 -:101C50000528BDD18DF82000686A0D90B8680A90FB -:101C6000ADF824A08DF830B0042100F8011B10223B -:101C700004F15C0112F06EFF002108A8FFF790FB51 -:101C80002078092801D0132044E70A2020709BE522 -:101C9000E078C10742D0A17D012902D0022927D0D6 -:101CA00038E0617808A8012916D004F16C01009190 -:101CB000D4E9061204F15C03001DFFF7BBFA0A2009 -:101CC000287003268DF82080686A0D90002108A8EE -:101CD000FFF766FBDDE2C3E204F15C010091D4E9A9 -:101CE000062104F16C03001DFFF7A4FA0026E9E7C2 -:101CF000C0F3440114290DD24FF0006101EBB01084 -:101D00004FEAB060E0706078012801D01020BEE496 -:101D10000620FFE6607801283FF4B7AC0A2051E5C1 -:101D2000E178C90708D0A17D012903D10B202870D3 -:101D300004202FE028702DE00E2028706078616B61 -:101D4000012817D004F15C0304F16C020EA8FFF720 -:101D5000E1FA2046FFF748FBA0780EAEC0F1100173 -:101D6000304412F076FF06208DF82000686A09964C -:101D70000D909AE004F16C0304F15C020EA8FFF7E9 -:101D8000C9FAE9E73978022903D139790029D1D094 -:101D900029758FE28DF82000686A0D9058E5387833 -:101DA0000728F6D1D4E909216078012808D004F188 -:101DB0006C00CDE90002029105D104F16C0304E04E -:101DC00004F15C00F5E704F15C0304F14C007A686F -:101DD0000646216AFFF764F96078012821D1A078CE -:101DE000216A0A18C0F11001104612F032FFD4E93E -:101DF0000923606B04F12D018DE80F0004F15C03F1 -:101E000004F16C0231460EA800E055E2FFF7CAF972 -:101E100010220EA904F13C0012F070FE08B10B2054 -:101E2000AFE485F8008000BF8DF82090686A0D90BF -:101E30008DF824A00CE538780528AAD18DF820006B -:101E4000686A0D90B8680A90ADF824A08DF830B09B -:101E500080F80080617801291AD0D4E9093204F1B0 -:101E60002D01A66B03920096CDE9011304F16C03DA -:101E700004F15C0204F14C01401CFFF793F90021CE -:101E800008A8FFF78DFA6078012805D0152041E6F3 -:101E9000D4E90923611DE4E70E20287006208DF89F -:101EA0002000686ACDF824B00D90A0788DF8280045 -:101EB000CEE438780328C0D1E079C00770D00F2075 -:101EC0002870072066E7387804286BD11422391D62 -:101ED00004F1140012F083FE616A208CA1F809005D -:101EE000616AA078C871E179626A01F00301117238 -:101EF000616A627A0A73616AA07A81F82400162006 -:101F000060E485F800A08DF82090696A50460D9134 -:101F100090E00000485102003878052842D1B868A6 -:101F2000A8616178606A022901D0012100E00021E6 -:101F300001EB4101142606EBC1014058082102F0D3 -:101F40001AF86178606A022901D0012100E00021BD -:101F500001EB410106EBC101425802A8E169FFF71C -:101F60000DFA6078626A022801D0012000E00020AA -:101F700000EB4001102000EBC1000223105802A921 -:101F80000932FEF7F1FF626AFD4B0EA80932A16922 -:101F9000FFF7E3F96178606A022904D0012103E0C8 -:101FA00042E18BE0BDE0002101EB4101182606EB88 -:101FB000C101A27840580EA912F0CCFD6178606A88 -:101FC000022901D0012100E0002101EB410106EBD3 -:101FD000C1014058A1780844C1F1100112F039FE46 -:101FE00005208DF82000686A0D90A8690A90ADF868 -:101FF00024A08DF830B0062101706278616A022A4F -:1020000001D0012200E0002202EB420206EBC202F4 -:10201000401C8958102212F09DFD002108A8FFF7EE -:10202000BFF91220C5F818B028708DF82090686AA2 -:102030000D900B208DF824000AE43878052870D123 -:102040008DF82000686A0D90B8680A900B20ADF8F2 -:1020500024000A98072101706178626A022901D080 -:10206000012100E0002101EB4103102101EBC3013C -:1020700051580988A0F801106178626A022902D0DB -:10208000012101E02FE1002101EB4103142101EBCB -:10209000C30151580A6840F8032F4968416059E06C -:1020A0001920287001208DF8300077E6162028705E -:1020B0008DF830B0002108A8FFF772F9032617E168 -:1020C00014202870B0E6387805282AD18DF8200031 -:1020D000686A0D90B8680A90ADF824A08DF830B009 -:1020E00080F800906278616A4E46022A01D001228F -:1020F00000E0002202EB42021C2303EBC202401C60 -:102100008958102212F026FD002108A8FFF748F98F -:10211000152028708DF82060686A0D908DF8246075 -:102120003CE680E0387805287DD18DF82000686A8B -:102130000D90B8680A90ADF824900921017061698A -:10214000097849084170616951F8012FC0F80220EF -:102150008988C18020781C28A8D1A1E7E078C00731 -:1021600002D04FF0060C01E04FF0070C6078022817 -:102170000AD04FF0000000BF00EB040101F109019B -:1021800005D04FF0010004E04FF00100F4E74FF0FC -:1021900000000B78204413EA0C030B7010F8092F91 -:1021A00002EA0C02027004D14FF01B0C84F800C04C -:1021B000D2B394F801C0BCF1010F00D09BB990F8E4 -:1021C00000C0E0465FEACC7C04D028F0010606702F -:1021D000102606E05FEA887C05D528F00206067026 -:1021E00013262E70032694F801C0BCF1020F00D014 -:1021F00092B991F800C05FEACC7804D02CF00106C7 -:102200000E70172106E05FEA8C7805D52CF00206E7 -:102210000E701921217000260078D0BBCAB3C3BB51 -:102220001C20207035E012E002E03878062841D109 -:102230001A2019E4207801283CD00C283AD02046F6 -:10224000FFF7F0F809208DF82000686A0D9031E062 -:102250003878052805D00620387003261820287005 -:1022600046E005218DF82010686A0D90B8680A9044 -:102270000220ADF8240001208DF830000A9801708A -:10228000297D4170394608A8FFF78AF806461820CC -:102290002870012E0ED02BE001208DF82000686AF6 -:1022A0000D9003208DF82400287D8DF8250085F8F9 -:1022B00014B012E0287D80B11D20207017202870F6 -:1022C0008DF82090686A0D9002208DF82400394620 -:1022D00008A8FFF765F806460AE00CB1FE2020705A -:1022E0009DF8200020B1002108A8FFF759F810E45C -:1022F00013B03046BDE8F08F2DE9F04387B00C46AF -:102300004E6900218DF8041001202578034602272C -:102310004FF007094FF0050C85B1012D53D0022D68 -:1023200039D1FE2030708DF80030606A05900320AE -:102330008DF80400207E8DF8050063E021790129E5 -:1023400025D002292DD0032928D0042923D1B17DFD -:10235000022920D131780D1F042D04D30A3D032D0D -:1023600001D31D2917D12189022914D38DF80470B6 -:10237000237020899DF8041088421BD2082001E0B8 -:10238000405102008DF80000606A059057E07078B7 -:102390000128EBD0052007B0BDE8F0831D20307088 -:1023A000E4E771780229F5D131780C29F3D18DF861 -:1023B0000490DDE7083402F804CB94E80B0082E8CF -:1023C0000B000320E7E71578052DE4D18DF800C058 -:1023D000656A0595956802958DF8101094F804804B -:1023E000B8F1010F13D0B8F1020F2DD0B8F1030FDF -:1023F0001CD0B8F1040FCED1ADF804700E202870B7 -:10240000207E687000216846FEF7CAFF0CE0ADF838 -:1024100004700B202870207E002100F01F006870DF -:102420006846FEF7BDFF37700020B4E7ADF80470D2 -:102430008DF8103085F800C0207E68702770114636 -:102440006846FEF7ADFFA6E7ADF804902B70207F3D -:102450006870607F00F00100A870A07F00F01F008E -:10246000E870E27F2A71C0071CD094F8200000F0C9 -:102470000700687194F8210000F00700A87100219E -:102480006846FEF78DFF2868F062A8883086A87934 -:1024900086F83200A069407870752879B0700D20F8 -:1024A0003070C1E7A9716971E9E700B587B0042808 -:1024B0000CD101208DF800008DF80400002005915A -:1024C0008DF8050001466846FEF76AFF07B000BDBB -:1024D00070B50C46054602F027F821462846BDE8AF -:1024E00070407823002201F075BF08B10078704772 -:1024F0000C20704770B50C0005784FF000010CD02F -:1025000021702146F2F7A9FE69482178405D884292 -:1025100001D1032070BD022070BDF2F79EFE0020A5 -:1025200070BD0279012A05D000220A704B78012B78 -:1025300002D003E0042070470A758A610279930093 -:10254000521C0271C15003207047F0B587B00F468E -:1025500005460124287905EB800050F8046C70785A -:10256000411E02290AD252493A46083901EB80003D -:10257000314650F8043C2846984704460CB1012CDB -:1025800011D12879401E10F0FF00287101D00324DA -:10259000E0E70A208DF80000706A0590002101969E -:1025A0006846FFF7A7FF032CD4D007B02046F0BD44 -:1025B00070B515460A46044629461046FFF7C5FF82 -:1025C000064674B12078FE280BD1207C30B1002063 -:1025D0002870294604F10C00FFF7B7FF2046FEF7EC -:1025E00021FF304670BD704770B50E4604467C2111 -:1025F00012F051FB0225012E03D0022E04D005203B -:1026000070BD0120607000E065702046FEF70AFF93 -:10261000A575002070BD28B1027C1AB10A4600F1F0 -:102620000C01C5E70120704710B5044686B00420B0 -:1026300001F07AFF2078FE2806D000208DF80000F7 -:1026400069462046FFF7E7FF06B010BD7CB50E4691 -:1026500000218DF804104178012903D0022903D00C -:10266000002405E0046900E044690CB1217C89B1D3 -:102670006D4601462846FFF754FF032809D132462C -:1026800029462046FFF794FF9DF80410002900D04A -:1026900004207CBD04F10C05EBE730B40C46014688 -:1026A000034A204630BC034B0C3AFEF756BE0000EE -:1026B000845102004051020070B50D46040011D053 -:1026C00085B12101284612F0C4FA10224E4928464D -:1026D00012F040FA4C4801210838018044804560DE -:1026E000002070BD012070BD70B5474E0024054626 -:1026F000083E10E07068AA7B00EB0410817B9142D9 -:1027000008D1C17BEA7B914204D10C22294612F008 -:10271000F5F930B1641C30888442EBDB4FF0FF30B8 -:1027200070BD204670BD70B50D46060006D02DB1B7 -:10273000FFF7DAFF002803DB401C14E0102070BD17 -:10274000314C083C20886288411C914201D9042008 -:1027500070BD6168102201EB0010314612F0FAF9E9 -:102760002088401C20802870002070BD70B5144661 -:102770000D0018D0BCB10021A170022802D0102891 -:1027800011D105E0288870B10121A170108008E006 -:102790002846FFF7A9FF002805DB401CA070A88988 -:1027A0002080002070BD012070BD70B50546144624 -:1027B0000E000BD000203070A878012808D005D971 -:1027C0001149A1F108010A8890420AD9012070BD7F -:1027D00024B1287820702888000A507002200870E0 -:1027E0000FE064B14968102201EB00112046103956 -:1027F00012F0B0F9287820732888000A607310203E -:102800003070002070BD00007C0000202DE9F041F8 -:1028100090460C4607460025FE48072F00EB881619 -:1028200007D2DFE807F007070707040404000125C3 -:1028300000E0FFDF06F81470002D13D0F54880305B -:1028400000EB880191F82700202803D006EB400018 -:10285000447001E081F8264006EB440220205070CD -:1028600081F82740BDE8F081F0B51F4614460E46BA -:102870000546202A00D1FFDFE649E648803100EB1B -:10288000871C0CEB440001EB8702202E07D00CEBD9 -:10289000460140784B784870184620210AE092F8AB -:1028A0002530407882F82500F6E701460CEB410020 -:1028B00005704078A142F8D192F82740202C03D02F -:1028C0000CEB4404637001E082F826300CEB410409 -:1028D0002023637082F82710F0BD30B50D46CE4B33 -:1028E00044190022181A72EB020100D2FFDFCB4814 -:1028F000854200DDFFDFC9484042854200DAFFDF44 -:10290000C548401C844207DA002C01DB204630BD5C -:10291000C148401C201830BDBF48C043FAE710B57D -:1029200004460168407ABE4A52F82020114450B152 -:102930000220084420F07F40F0F71DF994F90810B8 -:10294000BDE81040C9E70420F3E72DE9F047B14E98 -:10295000803696F82D50DFF8BC9206EB850090F893 -:10296000264034E009EB85174FF0070817F81400EC -:10297000012806D004282ED005282ED0062800D005 -:10298000FFDF01F0E3F8014607EB4400427806EB75 -:10299000850080F8262090F82720A24202D120222C -:1029A00080F82720084601F0DCF82A46214601205D -:1029B000FFF72CFF9B48414600EB041002682046BD -:1029C000904796F82D5006EB850090F82640202C75 -:1029D000C8D1BDE8F087022000E003208046D0E7A0 -:1029E00010B58C4C2021803484F8251084F82610F2 -:1029F00084F82710002084F8280084F82D0084F83B -:102A00002E10411EA16044F8100B207460742073D6 -:102A10006073A0738449E0772075087048700021C6 -:102A20007C4A103C02F81100491CC9B22029F9D394 -:102A30000120EFF78EFF0020EFF78BFF012084F8D5 -:102A40002200F9F7A9F97948F9F7B5F9764CA41EEF -:102A500020707748F9F7AFF96070BDE81040EFF7E4 -:102A600005BF10B5EFF727FF6F4CA41E2078F9F7CC -:102A7000BBF96078F9F7B8F9BDE8104001F09EB8ED -:102A8000202070472DE9F34F624E0025803606EB7B -:102A9000810A89B09AF82500202822D0691E029167 -:102AA0006049009501EB00108146D0E90112C06831 -:102AB0000391CDE90420B08BADF81C00B07F8DF8F8 -:102AC0001E009DF81500C8B10227554951F8204055 -:102AD0000399E219114421F07F41019184B102214F -:102AE0000FE00120EFF735FF0020EFF732FFEFF79F -:102AF00000FF01F063F886F82F50A0E00427E4E718 -:102B000000218DF81810022801D0012820D1039847 -:102B1000391901440998081A9DF81C1020F07F40CB -:102B200001B10221333181420BD203208DF815000F -:102B30000398C4F13201401A20F07F403224039000 -:102B40000CE096F8240018B9F0F726FA00284CD0CB -:102B5000322C03D214B101F025F801E001F02EF877 -:102B6000314A107818B393465278039B121B002108 -:102B70009DF81840984601281AD0032818D0002044 -:102B80008DF81E00002A04DD981A039001208DF8AC -:102B900018009DF81C0000B102210398254A20F07E -:102BA0007F40039003AB099801F014F810B110E0D6 -:102BB0000120E5E79DF81D0018B99BF800000328E7 -:102BC00012D08DF81C50CDF80C808DF818408DF87F -:102BD0001E509DF8180058B103980123C119002216 -:102BE0001846EFF709FF06E000200BB0BDE8F08FB4 -:102BF0000120EFF7AEFE99F90C2001230020019986 -:102C0000EFF7FAFE012086F82F008AF828502022DC -:102C1000694611E098080020FF7F841E0020A1076C -:102C200094510200980600208E000020834201008B -:102C30004B290100FFFF3F00F94811F0D0FF0120B0 -:102C4000D3E72DE9F05FDFF8D883064608EB86006E -:102C500090F82550202D1FD0A8F180002C4600EBC5 -:102C60008617A0F50079DFF8BCB305E0A24607EBB4 -:102C70004A004478202C0AD0EFF70AFF09EB04132E -:102C80005A4601211B1D00F0A5FF0028EED0AC42E2 -:102C900002D0334652461EE0E34808B1AFF300804D -:102CA000EFF7F6FE98F82F206AB1D8F80C20411CF7 -:102CB000891A0902CA1701EB12610912002902DD03 -:102CC0000020BDE8F09F3146FFF7DCFE08B101208F -:102CD000F7E733462A4620210420FFF7C5FDEFE73A -:102CE0002DE9F041CE4C2569EFF7D2FE401B0002E2 -:102CF000C11700EB1160001200D4FFDF94F822002E -:102D000000B1FFDF012784F8227094F82E002028FC -:102D100000D1FFDF94F82E60202084F82E000025DB -:102D200084F82F5084F8205084F82150BF48256043 -:102D30000078022833D0032831D000202077A06803 -:102D4000401C05D04FF0FF30A0600120EFF701FEDE -:102D50000020EFF7FEFDEFF7FCFEEFF7F4FEEFF7D4 -:102D6000C8FD11F031F9B248056005604FF0E0216F -:102D70004FF40040B846C1F88002EFF784FF94F8A2 -:102D80002D703846FFF75DFF0028FAD0A448803840 -:102D900000EB871010F81600022802D006E0012090 -:102DA000CCE73A4631460620FFF730FD84F8238011 -:102DB00004EB870090F82600202804D09B48801E52 -:102DC0004078F9F717F8207F002803D0EFF7B1FE1D -:102DD0002577657746E50146914810B590F82D2096 -:102DE0000024803800EB821010F814302BB1641CE2 -:102DF000E4B2202CF8D3202010BD8E4800EB041044 -:102E0000016021460120FFF701FD204610BD10B5ED -:102E1000012801D0032800D171B3814A92F82D30E6 -:102E20007F4C0022803C04EB831300BF13F8124058 -:102E30000CB1082010BD521CD2B2202AF6D37B4A16 -:102E400048B1022807D0072916D2DFE801F015069D -:102E5000080A0C0E100000210AE01B2108E03A21AC -:102E600006E0582104E0772102E0962100E0B52138 -:102E700051701070002010BD072010BD6B4810B5B8 -:102E80004078EFF778FE80B210BD10B5202811D23F -:102E9000634991F82D30A1F1800202EB831414F8FC -:102EA00010303BB191F82D3002EB831212F8102054 -:102EB000012A01D0002010BD91F82D2001460020EC -:102EC000FFF7A4FC012010BD10B5EFF7E1FDBDE850 -:102ED0001040EFF750BE2DE9F0410E46504F0178FB -:102EE0002025803F0C4607EB831303E0254603EBC8 -:102EF00045046478944202D0202CF7D108E0202CBD -:102F000006D0A14206D103EB41014978017007E0E8 -:102F10000020A7E403EB440003EB45014078487030 -:102F2000454F7EB127B1002140F2DA30AFF3008087 -:102F30003078A04206D127B1002140F2DD30AFF356 -:102F40000080357027B1002140F2E230AFF30080FD -:102F5000012087E410B542680B689A1A1202D41750 -:102F600002EB1462121216D4497A91B1427A82B9F4 -:102F7000324A006852F82110126819441044001DAA -:102F8000891C081A0002C11700EB116000123228D8 -:102F900001DB012010BD002010BD2DE9F047814666 -:102FA0001F48244E00EB8100984690F825402020D1 -:102FB000107006F50070154600EB81170BE000BF9E -:102FC00006EB04104946001DFFF7C4FF28B107EBCC -:102FD00044002C704478202CF2D1297888F8001015 -:102FE00013E000BF06EB0415291D4846FFF7B2FFAA -:102FF00068B988F80040A97B99F80A00814201D895 -:103000000020E6E407EB44004478202CEAD10120BC -:10301000DFE42DE9FC410E4607460024054D18E08B -:1030200018090020FFFF3F00000000008E00002074 -:1030300000F50040980600200000000094510200B6 -:103040009DF8000005EB00108168384600F0D6FDC1 -:1030500001246B4601AA31463846FFF79EFF00283F -:10306000EED02046BDE8FC8170B50446FF4801253E -:10307000A54300EB841100EB8510402211F06AFD9E -:10308000FB4E26B1002140F25C40AFF30080F748D0 -:10309000803000EB850100EB8400D0F82500C1F8FA -:1030A000250026B100214FF48C60AFF30080284644 -:1030B00070BD2DE9FC418446EC481546089C00EBA8 -:1030C00085170E4617F81400012803D0022801D0F6 -:1030D0000020C7E70B46E74A0121604600F07AFD71 -:1030E000A8B101AB6A4629463046FFF756FF70B1DA -:1030F000DE489DF804209DF80010803000EB850626 -:103100008A4208D02B460520FFF7AEFB0BE02A468B -:103110002146042014E0202903D007EB4100407829 -:1031200001E096F8250007EB440148709DF8000087 -:10313000202809D007EB400044702A46214603208E -:10314000FFF764FB01208DE706F8254F0120F070A2 -:10315000F3E7C94901EB0010001DFFF7E0BB7CB5A8 -:103160001D46134604460E4600F108022146184645 -:10317000EFF70EFD94F908000F2804DD1F382072C8 -:103180002068401C206096B10220BC4951F82610EE -:10319000461820686946801B20F07F40206094F923 -:1031A00008002844C01C1F2803DA012009E004207D -:1031B000EBE701AAEFF7ECFC9DF8040010B10098D2 -:1031C000401C00900099206831440844C01C20F045 -:1031D0007F4060607CBD2DE9FE430C4606460978C1 -:1031E00060799072207998461546507241B19F4897 -:1031F000803090F82E1020290AD00069401D0BE085 -:10320000D4E90223217903B02846BDE8F043A6E7BC -:103210009B484178701D084420F07F4721790022A7 -:103220002846A368FFF79BFF3946284600F0E6FCD6 -:10323000D4E9023221796846FFF791FF41462846DA -:10324000019CFFF7E6FE2B4622460021304600F0A7 -:10325000C1FC002803D13146284600F0CFFCBDE870 -:10326000FE832DE9FE4F814600F084FC30B100273B -:1032700099F8000020B10020BDE8FE8F0127F7E794 -:103280007A4D7B4C4FF0000A803524B1002140F28A -:10329000D340AFF3008095F82D8085F823A0002659 -:1032A00024B100214FF49B60AFF300801FB940466A -:1032B000FFF7DAFE804624B100214FF49C60AFF3A3 -:1032C0000080EFF7E5FB43466A464946FFF783FF78 -:1032D00024B1002140F2E640AFF3008095F82E00C3 -:1032E00020280CD029690098401A0002C21700EB70 -:1032F0001260001203D5684600F080FC012624B15C -:1033000000214FF49E60AFF3008095F82300002861 -:10331000BBD124B1002140F2F640AFF30080EFF7BB -:10332000B7FB6B46534A002100F054FC0028A3D0A1 -:1033300027B941466846FFF76CFE064326B168464A -:10334000FFF7EDFAC9F8080024B1002140F2095056 -:10335000AFF3008001208FE72DE9FF5F8A468146A9 -:1033600000F008FC414C803410B39AF800000027AC -:1033700010B1012800D0FFDF3D4D25B1002140F202 -:103380007F50AFF300800120A84600905FEA080656 -:1033900004D0002140F28750AFF30080009800F085 -:1033A000E0FB94F82D50002084F8230067B119E069 -:1033B00094F82E000127202800D1FFDF9AF80000A2 -:1033C0000028D9D0FFDFD7E72846FFF74DFE054696 -:1033D00026B1002140F29150AFF3008094F8230011 -:1033E0000028D3D126B1002140F29B50AFF30080DA -:1033F000EFF74EFB83462B4601AA5146FFF7EBFE43 -:103400005FEA060804D0002140F2A250AFF300802A -:103410003B462A4601A95846CDF80090FFF749FEE1 -:10342000064604EB850090F828B0B8F1000F04D0F0 -:10343000002140F2A950AFF3008000F087FB00901C -:10344000B8F1000F04D0002140F2AF50AFF300807C -:1034500094F82300002899D1B8F1000F04D000217E -:1034600040F2B750AFF3008003490BE0980800200A -:1034700000000000FFFF3F0098060020945102006A -:103480008E00002001EB09100DF1040C00F1040086 -:103490009CE80E0080E80E004EB35FEA080604D0F8 -:1034A000002140F2C450AFF300803BEA070012D085 -:1034B00094F82E0020280ED126B1002140F2C950E8 -:1034C000AFF300802846FFF7BCFB20B99AF8000054 -:1034D000D8B3012849D0B8F1000F04D0002140F240 -:1034E000E650AFF30080284600F029FB01265FEA92 -:1034F000080504D0002140F2EF50AFF3008000989F -:1035000000F02FFB25B1002140F2F350AFF3008013 -:103510008EB194F82D0004EB800090F8260020284E -:1035200009D025B1002140F2FA50AFF30080F948EC -:103530004078F8F75FFC25B1002140F2FF50AFF36F -:10354000008004B03046BDE8F09FFFE7B8F1000FFF -:1035500004D0002140F2D150AFF3008094F82D2028 -:1035600049460420FFF752F9C0E7002E3FF40EAFA2 -:10357000002140F2DC50AFF3008007E72DE9F84F5F -:10358000E54D814695F82D004FF00008E34C4FF0D3 -:10359000010B474624B1002140F20D60AFF30080DB -:1035A000584600F0DEFA85F8237024B1002140F27D -:1035B0001260AFF3008095F82D00FFF755FD064629 -:1035C00095F8230028B1002CE4D000214FF4C3600B -:1035D0004BE024B1002140F21C60AFF30080CE48E4 -:1035E000803800EB861111F81900032856D13346B4 -:1035F00005EB830A4A469AF82500904201D1012042 -:1036000000E0002000900AF125000021FFF763FC94 -:1036100001460098014203D001228AF82820AF77A2 -:10362000E1B324B1002140F22160AFF300803246C3 -:1036300049460120FFF7EAF89AF828A024B10021B2 -:1036400040F22C60AFF3008000F080FA834624B192 -:10365000002140F23160AFF3008095F8230038B1CB -:10366000002C97D0002140F23560AFF3008091E745 -:10367000BAF1000F07D095F82E00202803D130466C -:10368000FFF7DFFAE0B124B1002140F24960AFF367 -:103690000080304600F053FA4FF0010824B10021B9 -:1036A00040F25260AFF30080584600F05AFA24B15D -:1036B000002140F25660AFF300804046BDE8F88F2D -:1036C000002CF1D0002140F24460AFF30080E6E727 -:1036D0000020EFF717B90120EFF714B98D480078F3 -:1036E00070472DE9F0418C4C94F82E0020281FD112 -:1036F00094F82D6004EB860797F82550202D00D113 -:10370000FFDF8549803901EB861000EB45004078EA -:1037100007F8250F0120F87084F82300294684F863 -:103720002E50324602202234FFF770F8002020701D -:103730000FE42DE9F0417A4E774C012538B101288C -:1037400021D0022879D003287DD0FFDFF0E700F0F8 -:1037500029FAFFF7C6FF207E00B1FFDF84F8215071 -:103760000020EFF7F6F8A168481C04D001230022DE -:103770001846EFF741F914F82E0F217806EB0111E6 -:103780000A68012154E0FFF7ACFF0120EFF7E1F8F0 -:1037900094F8210050B1A068401C07D014F82E0FF7 -:1037A000217806EB01110A68062141E0207EDFF84E -:1037B0006481002708F10208012803D002281ED0E6 -:1037C000FFDFB5E7A777EFF7B4F998F80000032813 -:1037D00001D165772577607D524951F8200094F832 -:1037E000201051B948B161680123091A0022184616 -:1037F000EFF702F9022020769AE7277698E784F817 -:10380000205000F0CFF9A07F50B198F80100616816 -:103810000123091A00221846EFF7EEF8257600E09A -:10382000277614F82E0F217806EB01110A68002183 -:10383000BDE8F041104700E005E036480078BDE8FB -:10384000F041F8F7D7BAFFF74CFF14F82E0F2178A4 -:1038500006EB01110A680521EAE710B52E4C94F831 -:103860002E00202800D1FFDF14F82E0F21782C4ADB -:1038700002EB01110A68BDE81040042110477CB535 -:10388000254C054694F82E00202800D1FFDFA068C3 -:10389000401C00D0FFDF94F82E00214901AA01EB63 -:1038A0000010694690F90C002844EFF771F99DF972 -:1038B00004000F2801DD012000E0002000990844E9 -:1038C0006168084420F07F41A16094F8210000283D -:1038D00007D002B00123BDE8704000221846EFF780 -:1038E0008BB87CBD30B5104A0B1A541CB3EB940F47 -:1038F0001ED3451AB5EB940F1AD3934203D9101A6D -:1039000043185B1C14E0954210D9511A0844401C1E -:1039100043420DE08C000020180900200000000048 -:103920009806002094510200FF7F841EFFDF0023D1 -:10393000184630BD0123002201460220EFF75CB893 -:103940000220EFF706B8EFF7A3B82DE9FC47B14C1A -:10395000054694F82E00202800D1FFDF642D58D3AF -:10396000AD4A0021521B71EB010052D394F82E2076 -:10397000A0462046DFF8A49290F82D7009EB0214BF -:10398000D8F8000001AA28446946EFF701F99DF92B -:103990000400002802DD0098401C0090A0680099F7 -:1039A00062684618B21A22F07F42B2F5800F30D218 -:1039B00008EB8702444692F82520202A0AD009EB1A -:1039C00002125268101A0002C21700EB12600012B5 -:1039D00088421EDBA068401C10D0EFF759F8A168A0 -:1039E000081A0002C11700EB11600012022810DD56 -:1039F0000120EEF7AEFF4FF0FF30A06020682844B2 -:103A0000206026F07F402061012084F82300BDE87B -:103A1000FC870020FBE72DE9F0477E4C074694F831 -:103A20002D00A4F1800606EB801010F8170000B9F5 -:103A3000FFDF94F82D50A046794C24B1002140F6C8 -:103A40006500AFF3008040F6710940F67A0A06EB94 -:103A5000851600BF16F81700012818D0042810D0CA -:103A600005280ED006280CD01CB100214846AFF323 -:103A7000008020BF002CEDD000215046AFF3008025 -:103A8000E8E72A4639460120FEF7C0FEF2E74FF08C -:103A9000010A4FF00009454624B1002140F681009B -:103AA000AFF30080504600F05CF885F8239024B115 -:103AB000002140F68600AFF3008095F82D00FFF757 -:103AC000D3FA064695F8230028B1002CE4D0002153 -:103AD00040F68C001FE024B100214FF40960AFF3E1 -:103AE000008005EB860000F1270133463A46263078 -:103AF000FFF7F1F924B1002140F69400AFF3008004 -:103B000000F024F8824695F8230038B1002CC3D089 -:103B1000002140F69A00AFF30080BDE785F82D60E4 -:103B2000012085F82300504600F01BF8002C04D03B -:103B3000002140F6A700AFF30080BDE8F0873549CB -:103B400081F82D00012081F82300704710B5354819 -:103B500008B1AFF30080EFF3108000F0010072B6FF -:103B600010BD10B5002804D12F4808B1AFF3008074 -:103B700062B610BD2D480068C005C00D10D01038C9 -:103B800040B2002806DA00F00F0000F1E02090F8C3 -:103B9000140D03E000F1E02090F8000440097047A4 -:103BA0000820704710B51B4C94F82400002804D15D -:103BB000F7F7D2FE012084F8240010BD10B5154C93 -:103BC00094F82400002804D0F7F7EFFE002084F8D2 -:103BD000240010BD10B51C685B68241A181A24F064 -:103BE0007F4420F07F40A14206D8B4F5800F03D275 -:103BF000904201D8012010BD002010BDD0E9003254 -:103C0000D21A21F07F43114421F07F41C0E90031F5 -:103C10007047000018090020FF1FA1079806002028 -:103C200000000000000000000000000004ED00E0C3 -:103C30002DE9F041044680074FF000054FF00106E2 -:103C400004D55C480560066024F00204E0044FF0EF -:103C5000FF3705D558484660C0F8087324F48054EF -:103C6000600003D55548056024F08044E0050FD579 -:103C70005348C0F80052C0F8087352490D60091D3E -:103C80000D60504A04210C321160066124F48074E6 -:103C9000A00409D54C484660C0F80052C0F808732B -:103CA0004A48056024F40054C4F38030C4F3C031A2 -:103CB000884200D0FFDF14F4404F14D044484660DF -:103CC000C0F8087343488660C0F80052C0F8087313 -:103CD00041490D600A1D16608660C0F808730D60CA -:103CE000166024F4404420050AD53C4846608660AE -:103CF000C0F80873C0F848733948056024F40064BC -:103D000010F03CF93748044200D0FFDFBDE8F081F5 -:103D100070B520250022134620FA02F1C90719D0F8 -:103D200051B201F01F060124B4404E09B60006F15D -:103D3000E026C6F88041C6F88042002906DA01F084 -:103D40000F0101F1E02181F8143D03E001F1E021D0 -:103D500081F80034521CAA42DED370BD70B5224CEB -:103D60000D462060FFF764FF2068FFF7D1FF28466B -:103D7000F7F7CFFE0FF022FD00F0ADF810F0FEF8DF -:103D800010F041F8F8F708F8BDE870400FF0C4BD36 -:103D900010B5154C2068FFF74BFF2068FFF7B8FF00 -:103DA00010F0ECF8F7F773FF0020206010BD0A2038 -:103DB00070470000FC1F004000C0004004E50140C7 -:103DC000008000400485004000D0004004D5004041 -:103DD00000E0004000F0004000F5004000B000406E -:103DE00008B50040FEFF0FFD9000002070B5264989 -:103DF0000A680AB30022154601244B685B1C4B601D -:103E00000C2B00D34D600E7904FA06F30E681E42A7 -:103E10000FD0EFF3108212F0010272B600D001222F -:103E20000C689C430C6002B962B6496801600020CE -:103E300070BD521C0C2AE0D3052070BD4FF0E0216C -:103E40004FF48000C1F800027047EFF3108111F0C9 -:103E5000010F72B64FF0010202FA00F20A4803683D -:103E600042EA0302026000D162B6E7E70648002199 -:103E700001604160704701218140034800680840AB -:103E800000D0012070470000940000202DE9F0418F -:103E900015460E460446002700F0E7F8A84215D361 -:103EA000002341200FE000BF94F84220A25CF254AE -:103EB00094F84210491CB1FBF0F200FB12115B1C9C -:103EC00084F84210DBB2AB42EED3012700F0D9F800 -:103ED0003846BDE8F081704910B5802081F80004B3 -:103EE0006E49002081F8420081F84100433181F899 -:103EF000420081F84100433181F8420081F84100DD -:103F000067480FF071FE6648401C0FF06DFEEEF73B -:103F1000C9FEBDE8104000F0B4B8402070475F48CB -:103F200000F0A3B80A4601465C48AFE7402070475E -:103F30005A48433000F099B80A4601465748433082 -:103F4000A4E7402101700020704710B50446534893 -:103F5000863000F08AF82070002010BD0A46014625 -:103F60004E4810B58630FFF791FF08B1002010BD14 -:103F700042F2070010BD70B50C460546412900D934 -:103F8000FFDF48480068103840B200F050F8C6B271 -:103F90000D2000F04CF8C0B2864203D2FFDF01E0F2 -:103FA000EEF7D0FE224629463C48FFF76FFF002877 -:103FB000F6D070BD2DE9F041394F002506463F1D72 -:103FC00057F82540204600F041F810B36D1CEDB2C3 -:103FD000032DF5D33148433000F038F8002825D0C0 -:103FE0002E4800F033F8002820D02C48863000F00E -:103FF0002DF800281AD0EEF77BFE29480FF0FCFDC3 -:10400000B0F5005F00D0FFDFBDE8F04124480FF0BD -:1040100009BE94F841004121265414F8410F401C78 -:10402000B0FBF1F201FB12002070D3E751E700284A -:1040300006DA00F00F0000F1E02090F8140D03E024 -:1040400000F1E02090F800044009704710F8411F8B -:104050004122491CB1FBF2F302FB1311407881426B -:1040600001D1012070470020704710F8411F4078AF -:10407000814201D3081A02E0C0F141000844C0B2F5 -:10408000704710B506480FF0B7FD002803D1BDE812 -:104090001040EEF718BE10BD0DE000E0480900200A -:1040A0009C00002004ED00E070B5154D2878401C00 -:1040B000C4B26878844202D0EEF7D5FE2C7070BD91 -:1040C0002DE9F0410E4C4FF0E02600BFEEF7C0FEA8 -:1040D00020BF40BF20BF677820786070D6F80052BC -:1040E000EDF71CF9854305D1D6F8040210B9207804 -:1040F000B842EBD0EEF7A7FE0020BDE8F08100004B -:10410000AC0000202DE9F041012528034FF0E0210B -:104110000026C1F880011E4CC4F800610C2000F09C -:104120002CF81C4801680268C94341F3001142F0B1 -:1041300010020260C4F804532560491C00E020BF4F -:10414000D4F80021002AFAD019B9016821F0100131 -:104150000160114807686560C4F80853C4F800613D -:104160000C2000F00AF83846BDE8F08110B504468E -:10417000FFF7C8FF2060002010BD00F01F020121E2 -:1041800091404009800000F1E020C0F880127047A3 -:1041900000C0004010ED00E008C500402DE9F047E8 -:1041A000FF4C0646FF21A06800EB06121170217833 -:1041B000FF2910D04FF0080909EB011109EB061790 -:1041C0004158C05900F0F4F9002807DDA1682078B3 -:1041D00001EB061108702670BDE8F08794F80080A6 -:1041E00045460DE0A06809EB05114158C05900F0A3 -:1041F000DFF9002806DCA068A84600EB0810057867 -:10420000FF2DEFD1A06800EB061100EB08100D7038 -:104210000670E1E7F0B5E24B0446002001259A68FC -:104220000C269B780CE000BF05EB0017D75DA7427A -:1042300004D106EB0017D7598F4204D0401CC0B2FE -:104240008342F1D8FF20F0BD70B5FFF77CFBD44C62 -:1042500008252278A16805EB0212895800F0A8F918 -:10426000012808DD2178A06805EB01114058BDE860 -:104270007040FFF75FBBFFF731FABDE87040F7F71A -:10428000B9BD2DE9F041C64C2578FFF75CFBFF2D49 -:104290006ED04FF00808A26808EB0516915900F09F -:1042A00087F90228A06801DD80595DE000EB051167 -:1042B00009782170022101EB0511425C5AB1521EAE -:1042C0004254815901F5800121F07F4181512846F6 -:1042D000FFF764FF34E00423012203EB051302EB34 -:1042E000051250F803C0875CBCF1000F10D0BCF57C -:1042F000007F10D9CCF3080250F806C00CEB423C0A -:104300002CF07F4C40F806C0C3589A1A520A09E0B4 -:10431000FF2181540AE0825902EB4C3222F07F42A5 -:104320008251002242542846FFF738FF0C21A06832 -:1043300001EB05114158E06850F8272038469047B6 -:104340002078FF2814D0FFF7FEFA2278A16808EB46 -:1043500002124546895800F02BF9012893DD217897 -:10436000A06805EB01114058BDE8F041FFF7E2BA43 -:10437000BDE8F081F0B51D4614460E460746FF2BFA -:1043800000D3FFDFA00700D0FFDF8548FF21002218 -:10439000C0E90247C5700671017042708270104614 -:1043A000012204E002EB0013401CE154C0B2A84219 -:1043B000F8D3F0BD70B57A4C064665782079854211 -:1043C00000D3FFDFE06840F825606078401C607033 -:1043D000284670BD2DE9FF5F1D468B460746FF242A -:1043E000FFF7B1FADFF8B891064699F80100B84234 -:1043F00000D8FFDF00214FF001084FF00C0A99F8B8 -:104400000220D9F808000EE008EB0113C35CFF2B73 -:104410000ED0BB4205D10AEB011350F803C0DC45B6 -:104420000CD0491CC9B28A42EED8FF2C02D00DE054 -:104430000C46F6E799F803108A4203D1FF2004B036 -:10444000BDE8F09F1446521C89F8022008EB0411C5 -:104450000AEB0412475440F802B00421029B0022E8 -:10446000012B01EB04110CD040F801204FF400782F -:1044700008234FF0020C454513D9E905C90D02D0B8 -:1044800002E04550F2E7414606EB413203EB0413EC -:1044900022F07F42C250691A0CEB0412490A81547F -:1044A0000BE005B9012506EB453103EB041321F0C0 -:1044B0007F41C1500CEB0411425499F80050204642 -:1044C000FFF76CFE99F80000A84201D0FFF7BCFE90 -:1044D0003846B4E770B50C460546FFF734FA064691 -:1044E00021462846FFF796FE0446FF281AD02C4D99 -:1044F000082101EB0411A8684158304600F058F833 -:1045000000F58050C11700EBD14040130221AA688A -:1045100001EB0411515C09B100EB4120002800DCE3 -:10452000012070BD002070BD2DE9F047884681460E -:10453000FFF770FE0746FF281BD0194D2E78A8689C -:104540003146344605E0BC4206D0264600EB061252 -:104550001478FF2CF7D10CE0FF2C0AD0A6420CD126 -:1045600000EB011000782870FF2804D0FFF76CFEE4 -:1045700003E0002030E6FFF7E3F941464846FFF745 -:10458000A9FF0123A968024603EB0413FF20C854C6 -:10459000A878401EB84200D1A87001EB041001E0D9 -:1045A000140A002001EB061100780870104613E68B -:1045B000081A0002C11700EB1160001270470000DA -:1045C00070B50446A0F500002D4EB0F1786F02D210 -:1045D0003444A4F500042B48844201D2012500E0B4 -:1045E000002500F043F848B125B9B44204D3264869 -:1045F000006808E0012070BD002070BD002DF9D1D9 -:10460000B442F9D321488442F6D2F3E710B5044608 -:10461000A0F50000B0F1786F03D219480444A4F566 -:10462000000400F023F84FF0804130B116480068D4 -:1046300004E08C4204D2012003E014488442F8D202 -:10464000002080F0010010BD10B520B1FFF7DEFFA3 -:1046500008B1012010BD002010BD10B520B1FFF73A -:10466000AFFF08B1012010BD002010BD0848094966 -:104670000068884201D10120704700207047000087 -:104680000000002000600200200000200800002040 -:10469000B0000020BEBAFECA0548064A0168914231 -:1046A00001D1002101600449012008607047000029 -:1046B000B0000020BEBAFECA40E5014053480021C8 -:1046C0000170417010218170704770B50546164623 -:1046D0000C460220EEF785F84C49012008704C4941 -:1046E000F01E08604B480560001F046070BD10B5E7 -:1046F0000220EEF776F8454901200870464800216F -:10470000C0F80011C0F80411C0F8081143494FF473 -:104710000000086010BD3D480178C9B1404A4FF41F -:10472000000111603C49D1F800310022002B1CBF70 -:10473000D1F80431002B02D0D1F8081111B1427028 -:10474000102103E00121417036490968817002702F -:104750000020EEF746B82D480178002904BF4078C4 -:1047600070472D48D0F80011002904BF022070477F -:10477000D0F8001100291CBFD0F80411002905D081 -:10478000D0F80801002804BF0120704700207047BE -:104790001E4800B50278204B4078C821491EC9B296 -:1047A00082B1D3F800C1BCF1000F10D0D3F80001E2 -:1047B00000281CBFD3F8040100280BD0D3F808014F -:1047C00050B107E0022802D0012805D002E00029FC -:1047D000E4D1FFDF002000BD012000BD0B480178BF -:1047E000002904BF807870470B48D0F800110029D9 -:1047F0001CBFD0F80411002902D0D0F8080108B17C -:104800001020704707480068C0B27047B40000200D -:1048100010F5004008F5004000F0004004F50140AC -:1048200008F5014000F40040524800210170417039 -:10483000704770B5064614460D460120EDF7D1FFCE -:104840004D480660001D0460001D05604B490020B6 -:10485000C1F850014A49032008604B4949480860A3 -:10486000091D4A48086070BD70B5424B012540EAF9 -:1048700002421D70464B42F080721A60454A116038 -:10488000454C0026C4F80461454A4449116000289B -:1048900002BFC4F80052256070BD012818BFFFDFB9 -:1048A000C4F80062256040493E48086070BD314848 -:1048B000017871B13A4A394911603749D1F8042178 -:1048C0000021002A08BF417002D0384A12684270A5 -:1048D00001700020EDF785BF26480178002904BF4C -:1048E000407870472C48D0F80401002808BF704772 -:1048F0002E480068C0B27047002808BF704730B526 -:104900001C480078002808BFFFDF2348D0F80411B6 -:10491000002918BF30BD0224C0F80443DFF890C05E -:10492000DCF80010C1F30015DCF8001041F01001B4 -:10493000CCF80010D0F80411002904BF4FF4004156 -:104940004FF0E02207D100BFC2F8801220BFD0F89C -:104950000431002BF8D02DB9DCF8001021F0100143 -:10496000CCF80010C0F8084330BD0B490120886026 -:1049700070470000B700002008F50040001000401C -:104980001CF500405011004098F501400CF000402B -:1049900004F5004018F5004000F00040000002035C -:1049A00008F501400000020204F5014000F4004057 -:1049B00010ED00E010B5FF480024012144700470A0 -:1049C00044728472C17280F821408462446314305E -:1049D00010F068FAF849601E0860091D0860091D9A -:1049E0000C60091D0860091D0C60091D0860091D87 -:1049F0000860091D0860091D0860091D0860091D7F -:104A00000860091D0860091D0860091D086010BDC7 -:104A1000EA48016801F00F01032904BF0120704733 -:104A2000016801F00F01042904BF022070470168EA -:104A300001F00F01052904D0006800F00F000628DE -:104A400007D1DF48006810F0060F0CBF08200420D3 -:104A5000704700B5FFDF012000BD30B4D5490268C2 -:104A6000DFF864C34A6142688A61007A08770A7D88 -:104A7000D44BACF1040401204AB10A7E00FA02F2E0 -:104A80001A608D7D002D0CBF2260CCF800204A7D7D -:104A9000002A04BF30BC70474A7E90401860C97D30 -:104AA00000290CBF2060CCF8000030BC704730B546 -:104AB0000024054601290AD0022908BF4FF080745E -:104AC00005D0042916BF08294FF0C744FFDF44F47E -:104AD000847040F48010BD49086045F44030091DE1 -:104AE00040F00070086030BD30B500240546012953 -:104AF0000AD0022908BF4FF0807405D0042916BFE0 -:104B000008294FF0C744FFDF44F4847040F480105C -:104B1000AE49086045F44030091D40F0007008605F -:104B2000AB48D0F80001002818BFFFDF30BD0221DC -:104B300010B44FF0E02301200022C3F88011DFF809 -:104B400094C2CCF80020CCF80000DFF88CC2DCF86E -:104B5000004024F07044CCF80040A04C40F25B6C64 -:104B6000C4F800C0241F40F2031CC4F800C0A4F124 -:104B7000040CCCF80000DFF844C20320CCF800009D -:104B8000DFF85CC29620CCF80000DFF85CC29548E4 -:104B9000CCF80000DFF858C29448CCF80000ACF123 -:104BA000040C9448CCF80000C3F880128849102007 -:104BB000C1F804037F4880F82D2010BC70477D4A5F -:104BC0000368C2F802308088D08011727047794B38 -:104BD00010B51A7A8A4208D101460622981C0FF0B5 -:104BE0008DFF002804BF012010BD002010BD7148BA -:104BF00090F8210070476F4A517010707047F0B5FF -:104C00000546800000F1804000F580508B88C0F898 -:104C100020360B78D1F8011043EA0121C0F80016C4 -:104C200005F10800012707FA00F6734C002A04BFBB -:104C30002068B04304D0012A18BFFFDF206830434A -:104C40002060206807FA05F108432060F0BD0FF0EE -:104C5000DDBA584890F82E007047564890F830005A -:104C60007047664AC17811600068654900020860B3 -:104C70007047252808BF02210ED0262808BF1A2118 -:104C80000AD0272808BF502106D00A2894BF042242 -:104C9000062202EB4001C9B25A4A11605A49086023 -:104CA0007047F0B4434B9D7A012D62D0022D1CBF9A -:104CB000F0BC704793F815C0BCF1000F04BFF0BC06 -:104CC000704700BF514C524F4FF47A7C012D57D0A2 -:104CD000DE7D5D7E002E18BF0126012908BF292137 -:104CE0000CD0022A0CBF4B4C012A03D0042A0CBF63 -:104CF0003C46494C04F2E141B1FBFCF1491F084438 -:104D00004649086046490020C1F84C01280286F057 -:104D1000010140EA015040F00311187F820002F1C6 -:104D2000804202F5C042C2F810153E4901EB8002F4 -:104D3000997EC80000F1804000F5F830C0F81425D5 -:104D4000DFF8E4C0C0F810C5D87EC30003F180438B -:104D500003F5F833C3F81425264AC3F810250122B9 -:104D600002FA01F102FA00F0084330490860F0BC91 -:104D7000704793F814C0BCF1000FA3D1F0BC70478A -:104D80009E7D1D7E002E18BF012601295DD0022ABE -:104D900004BF274C4FF47A7151D0012A08BF4FF459 -:104DA000C8614CD0042A06BF3C4640F69801214C0D -:104DB00042E00000240A0020000E004010150040D0 -:104DC00014140040180500500C0500501415004044 -:104DD00000100040FC1F00407817004038150040CC -:104DE0004415004000000C0408F5014040800040DC -:104DF000A4F5014010110040401600402415004069 -:104E00001C1500400815004054150040A224020063 -:104E1000D0FB010004360200C0D401004C850040E4 -:104E200000800040006000404C81004004F50140DB -:104E30006836020030D3010018BF40F6E441214437 -:104E400001F5FA71B1FBFCF158E7022A08BF4FF4F3 -:104E50007A710AD0012A08BF4FF4C86105D0042A2C -:104E60000CBF40F6980140F6E44149F6FC6211445B -:104E7000E8E72DE9F047FC4D0446032090468946BB -:104E8000C5F80002FA49F948086048460FF011FADF -:104E900040460FF0F9F9F74F0126002C04BFBE720F -:104EA0002E6007D0012C05D140460FF051FB0220A7 -:104EB000B8726E60F048C664F048006842464946E1 -:104EC000BDE8F047EDE62DE9F0410F46E64905461D -:104ED00003201646C1F80002E54CE448206038463D -:104EE0000FF0E7F930460FF0CFF930460FF030FB06 -:104EF000E04815B1012D09D011E001218172416B0B -:104F000041F4801141634FF4801007E00221817267 -:104F1000416B41F4001141634FF4001020603246B0 -:104F20003946BDE8F0410020BBE62DE9FF4FCE4CED -:104F30008246002581B003208946C4F80002CC4F88 -:104F4000CA48386003980FF0B4F904980FF09CF940 -:104F5000DFF82CB3C74E4FF00108BAF1000F03D0B1 -:104F6000BAF1010F21D035E0CBF8004096F82D00C2 -:104F7000012806D0022818BFFFDF0CD086F80A806F -:104F800028E0DDE9031396F82C2048460FF012FACA -:104F9000B16A4518F2E7DDE9031296F82C3048466D -:104FA0000FF096F9B16A4518E8E704980FF0D0FAC7 -:104FB000B448CBF8000096F82D00DDE90313012872 -:104FC00096F82C20484624D00FF03EFAB16A4518D6 -:104FD0000220B072AC480560AD49AC480860706B07 -:104FE00040F400207063D4F800924FF0100AC4F827 -:104FF00008A30026C4F80062A6484FF4802BC0F82E -:1050000000B0FF208DF80000C4F81061C4F81080D3 -:1050100009E00FF09BF9B16A4518D9E79DF8000047 -:10502000401E8DF800009DF8000018B1D4F8100162 -:105030000028F3D09DF80000002808BFFFDFC4F867 -:105040000061C4F80C61C4F81061C4F80461C4F8CC -:105050001461C4F81861904800680090C4F8009288 -:10506000C7F800B0C4F804A34FF4002038608248A9 -:10507000C0F84C8081480068A84228BFFFDF28465E -:10508000DDE9031205B0BDE8F04F0AE62DE9F84767 -:10509000754CD4F8000220F00B09D4F804034FF04B -:1050A000100AC0F30018C4F808A30026C4F8006270 -:1050B00078497A4808606F4D0127A87A012802D004 -:1050C000022803D014E0287D10B911E0687D78B182 -:1050D000A87EEA7E07FA00F007FA02F210430860A1 -:1050E000287F800000F1804000F5C040C0F81065C6 -:1050F000FF208DF80000C4F81061276105E000BFB3 -:105100009DF80000401E8DF800009DF8000018B1C9 -:10511000D4F810010028F3D09DF80000002808BF43 -:10512000FFDFC4F810616E72AE72EF72C4F80092C5 -:10513000B8F1000F18BFC4F804A3BDE8F8870068F1 -:10514000574920F07F40086070474FF0E02002216F -:10515000C0F88011C0F8801270474FF0E0210220A3 -:10516000C1F8000170474F49087070474E49086008 -:10517000704730B53F4C0546A06AA84228BFFFDF04 -:105180000120207300203C492561C1F844014748B3 -:105190000560606B40F480006063C80134490860BA -:1051A00030BD70B5334C0546414A0220207310686B -:1051B0000E4600F00F00032808BF012213D010682C -:1051C00000F00F00042808BF02220CD0106800F085 -:1051D0000F0005281BD0106800F00F0006281CBF28 -:1051E000FFDF012213D094F82D0094F82C10012831 -:1051F00015D028460FF086F91F4920610020C1F81C -:1052000044012169A06A08442849086070BD294802 -:10521000006810F0060F0CBF08220422E3E73346B3 -:1052200028460FF038F9E7E71A494FF48000086084 -:105230001048416B21F480014163002101737047E4 -:10524000C20002F1804202F5F8321B4BC2F8103561 -:10525000C2F8141501218140054801600548426BE0 -:105260001143416370470000001000400000040437 -:1052700004F50140240A0020008000404C850040D5 -:10528000ACF50140041000404885004048810040D2 -:10529000A8F5014008F501401811004000000C0479 -:1052A0003C150040B9000020041500404485004032 -:1052B000101500401414004004110040FB48012167 -:1052C0004160C1600021C0F84411F9480160F9480B -:1052D00081627047F8490860F848D0F8001241F040 -:1052E0004001C0F800127047F448D0F8001221F0D5 -:1052F0004001C0F80012F049002008607047EF48F4 -:10530000D0F8001221F01001C0F8001201218161D3 -:105310007047EA480021C0F81C11D0F8001241F093 -:105320001001C0F800127047E44981B0D1F81C2187 -:10533000012A1EBF002001B07047E14A126802F046 -:105340007F02524202700020C1F81C01DD48006853 -:105350000090012001B0704730B50C00054608BF31 -:10536000FFDF14F0010F1CBF012CFFDF002D0CBF6D -:1053700001200220CF4901284872CC72CF4904BFD6 -:10538000D1F8000240F0040007D0022807BFD1F88E -:10539000000240F00800FFDF30BDC1F8000230BD60 -:1053A0002DE9F84FDFF8209399F80000042828BF72 -:1053B000FFDFDFF8F8A2DAF84C11C448BD4C002634 -:1053C0004FF00108D1B1A17A012902D0022903D0FE -:1053D00014E0217D11B911E0617D79B1A17EE27EF9 -:1053E00008FA01F108FA02F211430160217F8900F5 -:1053F00001F1804101F5C041C1F81065B348616B0E -:1054000001606663217B002019B1DAF8441101299B -:1054100000D00021A27AA94D012A71D0022A76D0AB -:10542000D5F8101101290CBF1021002141EA000715 -:10543000A748016811F0FF0F03D0D5F81411012916 -:1054400000D0002184F82E10006810F0FF0F03D068 -:10545000D5F81801012800D0002084F82F009D48BD -:10546000006884F83000FFF776F9012818BF0020A3 -:1054700084F83100C5F80061C5F80C61C5F8106109 -:10548000C5F80461C5F81461C5F818619248006850 -:1054900000908648C0F8446190480068DFF810A288 -:1054A0000090DAF800006062AAF104000068A062CF -:1054B0008B48016801F00F01032908BF012013D0B8 -:1054C000016801F00F01042908BF02200CD0016817 -:1054D00001F00F01052929D0006800F00F0006280F -:1054E0001CBFFFDF012021D084F82C00A07ADFF858 -:1054F000F4B184F82D0002282DD11FE000E006E071 -:10550000D5F80C01012814BF0020082088E7D5F841 -:105510000C01012814BF00200220734A1268012ADE -:1055200014BF042200221043084379E76F48006843 -:1055300010F0060F0CBF08200420D5E7607850B1AA -:10554000DBF8001009780840217831EA000008BF34 -:1055500084F8208001D084F8206017F0020F07D073 -:1055600099F80010624A4908606A52F82110884789 -:1055700017F0010F18BF00210CD05E4A99F80030D7 -:10558000A06A52F82320904799F8000010F0010F0C -:105590002AD10AE017F0020F18BF0121EDD117F050 -:1055A000080F18BF0221E8D1EEE7DBF80000007811 -:1055B00000F00F00072828BF84F8216014D2DBF820 -:1055C0000000062200F10901A01C0FF097FA40B973 -:1055D000207ADBF800100978B0EBD11F08BF01205A -:1055E00000D0002084F82100E17A002011F0020FA1 -:1055F0001CBF17F0020F17F0040F19D111F0100F94 -:105600001CBF94F82F20002A02D094F831207AB1E0 -:1056100011F0080F1CBF94F82020002A08D111F0C7 -:10562000040F02D094F8211011B117F0010F00D02F -:105630000120617A19B170B1FFF728FD19E0234804 -:105640002D490160D5F8000220F00300C5F80002E2 -:1056500084F80B800DE04FF0000B012913D00229D4 -:1056600018BFFFDF4CD0A06A012258440021FFF789 -:1056700018FB17F0010F56D0204899F8001050F889 -:105680002100804770E0D5F8000220F00400C5F842 -:105690000002667284F80B80012384F80A801A469F -:1056A000002196200EF014FE3BE000000080004038 -:1056B00044850040240A002060150040001000408E -:1056C000481500401C110040B900002008F50140B9 -:1056D0004016004010140040181100404481004062 -:1056E0001015004004150040001400401414004040 -:1056F000AC510200F451020000000404B451020055 -:10570000D5F8000220F00800C5F80002667284F89F -:105710000B800220A07201231A46002196200EF071 -:1057200015FE83469FE717F0020F08D0624999F8EB -:10573000002028EA970051F82210884714E017F05B -:10574000080F06D05D4899F8001050F821008047F6 -:105750000AE017F0100F08BFFFDF05D0584899F88E -:10576000001050F821008047A07A022818BFBDE839 -:10577000F88F207B002808BFBDE8F88F5149C1F899 -:105780004461022814D0012818BFFFDFA16A2069F4 -:10579000884298BFFFDF2069CAF80000606B4A4961 -:1057A00040F4800060634FF480000860BDE8F88F2B -:1057B0002169A06A0844EFE70021444A81B000282B -:1057C00018BFC2F80012C2F80011C2F80C11C2F8DA -:1057D0001011C2F80411C2F81411C2F818113C4893 -:1057E0000068009001B07047012804BF282070476E -:1057F000022804BF18207047042812BF08284FF45D -:10580000A870704700B5FFDF282000BD012804BF45 -:1058100041F6A4707047022804BF41F288307047F7 -:10582000042804BF45F63C207047082804BF47F20F -:10583000AC10704700B5FFDF41F6A47000BD012831 -:1058400004BF41F2D4707047022804BF41F2040043 -:105850007047042812BF082842F6A000704700B520 -:10586000FFDF41F2D47000BD012812BF02280020E2 -:105870007047042812BF08284FF4C870704700B55D -:10588000FFDF002000BD11490820C1F800021249C5 -:1058900010480860124911480860091D1148086045 -:1058A000091D11480860091D1048086006494FF499 -:1058B0004020086070470000C4510200D45102002B -:1058C000E45102000080004004F501400010004057 -:1058D000181100400000040408F5014000110040C8 -:1058E000A0F50140141000401C11004010100040B1 -:1058F00010B53F4822210FF0ACF93D48017821F066 -:1059000010010170012107F0D9FD3A49002081F80A -:1059100022004FF6FF70888437490880488010BD08 -:10592000704734498A8C824218BF7047002081F842 -:1059300022004FF6FF70888470472D490160704740 -:105940002D49088070472B498A8CA2F57F43FF3B85 -:1059500003D0002101600846704791F822202549B4 -:10596000012A1ABF0160012000207047214901F17E -:10597000220091F82220012A04BF00207047012252 -:1059800002701D4800888884104670471A49488074 -:1059900070471849184B8A8C5B889A4206D191F857 -:1059A0002220002A1EBF016001207047002070479E -:1059B0001048114A818C5288914209D14FF6FF71EB -:1059C000818410F8221F19B1002101700120704755 -:1059D000002070470748084A818C5288914205D1BF -:1059E00090F8220000281CBF00207047012070475B -:1059F000820A00205C0A0020BA0000207047574A43 -:105A0000012340B1012818BF7047137008689060E7 -:105A100088889081704753700868C2F802008888AF -:105A2000D08070474D4A10B1012807D00EE0507861 -:105A300060B1D2F802000860D08804E0107828B184 -:105A40009068086090898880012070470020704726 -:105A5000424910B1012803D006E0487810B903E0AC -:105A6000087808B1012070470020704730B58DB02C -:105A70000C4605460D2104A80FF00DF9E0788DF8CD -:105A80001F0020798DF81E0060798DF81D002868B0 -:105A9000009068680190A8680290E86803906846E2 -:105AA0000DF026FF20789DF82F1088420CD16078E9 -:105AB0009DF82E10884207D1A0789DF82D108842BD -:105AC00002BF01200DB030BD00200DB030BD30B59B -:105AD0000C4605468DB04FF0030104F1030012B1EE -:105AE000FEF72AFA01E0FEF746FA60790D2120F070 -:105AF000C00040F04000607104A80FF0CCF8E078DE -:105B00008DF81F0020798DF81E0060798DF81D003A -:105B10002868009068680190A8680290E86803907F -:105B200068460DF0E5FE9DF82F0020709DF82E00D0 -:105B300060709DF82D00A0700DB030BD10B500292B -:105B400004464FF0060102D0FEF7F6F901E0FEF739 -:105B500012FA607920F0C000607110BDBE00002014 -:105B600070B5FF4E0446306890F8001100250129F9 -:105B700019D090F8FA10012924D090F8D0100129FA -:105B80002AD090F8F21001291CBF002070BD65706A -:105B900017212170D0F8F4106160B0F8F81021815D -:105BA00080F8F25016E065701C212170D0F80111C8 -:105BB0006160D0F80511A16090F80911217380F897 -:105BC000005107E0657007212170D0F8FC1061607A -:105BD00080F8FA50012070BD65701421217000F129 -:105BE000D2012022201D0EF0B5FF01212172306864 -:105BF00080F8D050DB48B0F8D420A0F8FC207268C0 -:105C0000537B80F8FE3080F8FA101088FBF75EF9BD -:105C1000FAF705FEDEE7D248006890F8D0100029B8 -:105C200014BFB0F8D4004FF6FF70704770B5CC4C7D -:105C30002068002808BFFFDF002520684570002885 -:105C400008BFFFDF2068417800291CBFFFDF70BD5F -:105C50004FF486710FF01FF82068FF2101707F213B -:105C600080F8361013214184282180F8CC100121BE -:105C700080F8B81080F8BD50FFF736FBFEF74BFDFB -:105C8000B94807F0A7F9B94807F0A4F9BDE8704092 -:105C9000B74807F09FB9B2490968097881420CBF3B -:105CA000012000207047AE48006890F82200C0F341 -:105CB000001070472DE9F04FA948D0F800C09CF8BB -:105CC0002400C0F38001C0F34002114400F0010041 -:105CD0000B18BCF822000025C0F3001139B31328BB -:105CE0001DD009DC102802BFA24830F81300BDE81F -:105CF000F08F122813D006E0152808D01D2804BF05 -:105D00009D48BDE8F08FFFDF2846BDE8F08F9B4936 -:105D1000002031F8131013FB0010BDE8F08F9849F4 -:105D2000002031F8131013FB0010BDE8F08F0024A1 -:105D30009CF8BA209CF8BB10924EDFF84CA2DFF81A -:105D40004CB210F0030F4FF4C8774FF4BF784FF404 -:105D5000A8797CD010F0010F17D0082904BF3C4669 -:105D600040200CD0042904BF4446102007D002294B -:105D700007BF05F11804042005F12804082000EBF2 -:105D8000400E0EEB0010204417E0082904BF3846EF -:105D900040240CD0042904BF4046102407D0022917 -:105DA00007BF05F11800042405F12800082404EBBE -:105DB000C40404EB440400EB44009CF8CCC0022A69 -:105DC00008BF4FF47A740DD0012A04BF56464FF431 -:105DD000C86407D0042A07BF5E4640F698046C4E9C -:105DE00040F6E444344404F2E7364FF47A74B6FBE8 -:105DF000F4F4C3EB031606EB860604EB8604082ACC -:105E000052D0042A4BD0022A0CBF05F1180605F126 -:105E100028064FF019020CBF4FF0040A4FF0080A91 -:105E200012FB0A6212FB0342082908BF40230BD071 -:105E3000042908BF102307D0022907BF4FF0180913 -:105E400004234FF028090823C3EBC30300E030E02C -:105E500003EB430309EB43031A4411F00C0F08BF93 -:105E60004FF0000C6244082908BF40210CD00429DF -:105E700004BF4746102107D0022907BF05F11807C4 -:105E8000042105F128070821C1EBC10101EB410103 -:105E900007EB41011144084400F526740EE0464624 -:105EA00014224FF0100ABBE73E4614224FF0400A7E -:105EB000B6E710F0020F18BFFFDF02D02046BDE8A2 -:105EC000F08F022A08BF4FF47A700DD0012A04BF68 -:105ED00056464FF4C86007D0042A07BF5E4640F616 -:105EE00098002B4E40F6E440304400F2E73C4FF47B -:105EF0007A70BCFBF0F0C3EB031C0CEB8C0C00EBDA -:105F00008C0C082A04BF142040220CD0042A44D050 -:105F1000022A0CBF05F1180705F128074FF01900F8 -:105F20000CBF0422082210FB027010FB03C00829DA -:105F300008BF40210BD0042908BF102107D0022937 -:105F400007BF4FF0180904214FF028090821C1EBC1 -:105F5000C10101EB410109EB410108441AE00000D5 -:105F6000CC000020A40A0020B00B0020D80B002099 -:105F7000000C002018520200F18913002052020088 -:105F80001052020068360200A2240200D0FB010079 -:105F900030D3010000F5B27490E714204746102278 -:105FA000C1E7F94840F271210068806A48437047B0 -:105FB000F548006890F83500002818BF01207047A8 -:105FC00010B5F24C207B022818BF032808D1207D91 -:105FD00004F1150105F0E8FD08281CBF012010BDE3 -:105FE000207B002816BF022800200120BDE81040B9 -:105FF000FFF72EBDE449096881F8300070472DE9AC -:10600000F047E14D2968087B002816BF02280020D0 -:10601000012048730E31FFF705FD2968087B02282F -:1060200016BF03280122002281F82F20082081F8C2 -:106030002D00487B0126002701F10E03012804BF33 -:106040005B7913F0C00F0AD001F10E03012804D1CF -:10605000587900F0C000402801D0002000E0012065 -:1060600081F82E00002A04BF91F8220010F0040FDE -:1060700006D0087D153105F097FD296881F82D00BF -:1060800028684760FCF720FF2968C04C4FF00009E2 -:10609000886094F82D0005F0A3FD804694F82F0049 -:1060A000002818BFB8F1000F04D01021404606F0B8 -:1060B000D4FB68B194F8300000281CBF94F82E007F -:1060C00000281DD0607B04F10E0101280ED012E0E3 -:1060D00066734A4604F10E014046FFF7F8FC94F857 -:1060E0002D1004F10E0005F074FE09E0487900F06F -:1060F000C000402831D0394604F10E00FFF71EFDE4 -:106100002868C77690F8220010F0040F08BFBDE899 -:10611000F087002794F82D0005F06BFD040008BF00 -:10612000BDE8F087102106F098FB002818BFBDE8F5 -:10613000F08728683A4600F11C01C6762046FFF732 -:10614000C6FC286800F11C01914806F07AFFBDE802 -:10615000F04701218E4806F08FBF05F073FE4A46D6 -:1061600004F10E01FFF7B3FCCAE778B5874904468E -:10617000854D407B08732968207808706088ADF8E9 -:10618000000080B200F00102C0F3400342EA430283 -:10619000C0F3800342EA8302C0F3C00342EAC302B1 -:1061A000C0F3001342EA0312C0F3401342EA431261 -:1061B000C0F3801042EA80104884E07D012808BFC7 -:1061C000012607D0022808BF022603D0032814BFE7 -:1061D000FFDF0826286880F8BA60607E012808BFC3 -:1061E000012607D0022808BF022603D0032814BFC7 -:1061F000FFDF0826286880F8BB60217B80F8241028 -:10620000418C1D290CBF002161688162617D80F88D -:106210003510A17B002916BF02290021012101753B -:10622000D4F80F10C0F81510B4F81310A0F8191016 -:10623000A17EB0F8CE2061F30302A0F8CE20E17E6B -:10624000012918BF002180F83410002078BD4E4885 -:106250000068408CC0F3001119B110F0040F05D094 -:1062600002E010F0020F01D00020704701207047BB -:10627000454A00231268C2F8C030B2F822C0BCF10F -:106280001D0F02BFC2F8C83082F8C4307047002921 -:1062900008BFC2F8C8300AD0936A40F2712C03FBE1 -:1062A0000CF31944491EB1FBF3F1C2F8C81082F88F -:1062B000C40070470346344810B50168D1F8C820BF -:1062C000002A1ABFD1F8C0C0BCF1000F012405D0CC -:1062D0009A4205D90124D01AC1F8C800204610BD41 -:1062E00091F82210002411F0010F1CBF40680088B3 -:1062F0004FF0430108BF002001F017F9EEE72248F4 -:10630000006890F8B70000280CBF012000207047FB -:1063100070B51F2834BF04461F2400221A4D286878 -:1063200080F8B920224678300EF014FC286801214C -:1063300080F8974080F8B91070BD10B51F2828BFAD -:106340001F20C2B2104C0023206880F8B83080F8BB -:10635000B72098300EF0FEFB2168012081F8B800CC -:1063600010BD0949096881F8BD00704706480068FA -:1063700090F8220000F0010070470348006890F890 -:106380002200C0F340007047CC000020A40A002087 -:10639000B00B0020FE48006890F82200C0F34010C7 -:1063A0007047FB48006890F82200C0F3C0007047B7 -:1063B00001207047F648006890F8BB00704770B540 -:1063C000FEF77CFFFEF730FFFEF760FEFEF7BDFE36 -:1063D000EF4C2068D0F8C010491CC0F8C01090F8ED -:1063E0003300002530B1FEF77FFFFEF794F92068F7 -:1063F00080F833502068457090F8C410F9B1D0F897 -:10640000C02091421BD8042002F08AFA206890F83C -:10641000220010F0010F0CD060684321008801F0C9 -:1064200084F860680088FAF751FDBDE87040FAF71B -:10643000E7B9BDE870404321002001F076B8D0F8FC -:10644000C81019B1D0F8C020914202D990F8370095 -:10645000D8B1042002F064FA206890F8220010F00D -:10646000010F0CD060683C21008801F05EF8606884 -:106470000088FAF72BFDBDE87040FAF7C1B9BDE816 -:1064800070403C21002001F050B8BDE87040002071 -:1064900002F046BA2DE9F84FBD4E804617463068E7 -:1064A0008B464FF0000A458C15F0030F10D015F005 -:1064B000010F05F0020005D0002808BF4FF0010AC7 -:1064C00006D004E0002818BF4FF0020A00D1FFDF19 -:1064D0004FF000094C4615F0010F05F002000BD0FB -:1064E00070B915F0040F0BD049F00800002F18BF49 -:1064F00040F0030440D090E010B115F0040F0DD02F -:1065000015F0070F10D015F0010F05F0020036D07E -:10651000002808BF15F0040F27D03DE0002F18BF5A -:1065200049F0090479D134E02FB149F0080415F09D -:10653000200F14D071E0316805F0200291F8770047 -:10654000104308BF49F0010467D049F0180415F062 -:10655000200F62D191F8BA1008295AD156E031685B -:1065600091F8BA10082951D153E049F00800002FE2 -:1065700018BF40F0010450D140F010044DE0002855 -:1065800018BF15F0040F07D0002F18BF49F00B04F7 -:1065900043D149F0180440E015F0030F3CD115F049 -:1065A000040F39D077B1316849F0080091F8BA107A -:1065B00008290CBF40F0020420F0020415F0200F5F -:1065C00022D02AE0316805F0200291F877001043CC -:1065D00008BF49F0030420D049F0180015F0200F3F -:1065E00009D000BF91F8BA10082914BF40F0020486 -:1065F00020F0020411E091F8BA20082A14BF40F0FC -:10660000010020F00100EDE7082902D024F0010488 -:1066100003E044F0010400E0FFDF15F0400F18BF75 -:10662000FFDFA8F8009098F80000072120F0200074 -:1066300088F80000404606F0D2FC5146404606F07D -:10664000D1FE2146404606F0D6FE14F0010F0CD0D4 -:106650003068062300F10E010022404606F0A8FE35 -:106660003068417B404606F0FAFC14F0020F1BD064 -:106670003068BBF1000F0BD000F11C010623012292 -:10668000404606F095FE0121404606F0F5FC0BE081 -:1066900000F1150106230122404606F089FE30680C -:1066A000017D404606F0E8FC14F0040F18BFFFDF40 -:1066B00014F0080F17D0CDF800903068BDF8001026 -:1066C0000223B0F8CE00020962F30B01ADF800100E -:1066D0009DF80110032260F307118DF8011069463F -:1066E000404606F065FE012F16D1306890F877001D -:1066F00090B1404606F072FE3368401CC0B293F879 -:106700007710C0F125008142B8BF084682B203F17C -:106710005801404606F09DFE0020002818BFFFDF0C -:106720000020002818BFFFDF0020002818BFFFDF6F -:10673000BDE8F88F2DE9F843154C2068002808BF04 -:10674000FFDF2068417811BB0178FF2926D00027A0 -:1067500080F83170877080F837703846FEF703FD97 -:10676000FEF7E5F9206890F9BD00FEF770FA0948D8 -:10677000FEF777FA0848FEF7E2FC206890F824005C -:1067800010F0010F0DD02520FEF773FA10E005E0A0 -:10679000CC0000200C520200095202000C20BDE87F -:1067A000F88310F0020F18BF262067D0FEF761FAB9 -:1067B000206890F8BA102520FEF779F9206880F853 -:1067C0002C70FEF7CAFC2068002190F8BA20084619 -:1067D000FEF779FB0F210520FEF70DFA2068FF4D2B -:1067E000012690F82E10002901BF90F82F100029E3 -:1067F00090F8220010F0040F70D0FCF765FB804683 -:10680000206841468068FDF76DF8F54990FBF1F985 -:1068100001FB190041424046FCF75FF80146206841 -:10682000816041684944416005F0BBF90146206838 -:10683000426891426DD8C0E901784FF0010895F89F -:106840002D0005F0CDF9814695F82F00002818BFDE -:10685000B9F1000F04D01021484605F0FEFFA0B1A9 -:1068600095F8300000281CBF95F82E00002824D091 -:10687000687B05F10E01012815D019E010F0040F16 -:1068800014BF2720FFDF91D192E732466E7305F1E6 -:106890000E014846FFF71BF995F82D1005F10E0083 -:1068A00005F097FA09E0487900F0C000402816D0BA -:1068B000414605F10E00FFF741F9206890F82200EB -:1068C00010F0040F25D095F82D0005F092F95FEA3D -:1068D00000081ED0102105F0C0FF40B119E005F0FE -:1068E000B1FA324605F10E01FFF7F1F8E5E720684D -:1068F000324600F11C01C6764046FFF7E8F82068F2 -:1069000000F11C01B74806F09CFB0121B54806F0D8 -:10691000B3FB2068417B0E30FEF751F9206890F8F8 -:10692000B81079B390F8B72080F8772000F198017B -:1069300058300EF054F9206890F82210C1F300117D -:10694000E9B9B0F8CE0002210609ADF8006068464A -:10695000FDF7F2FA28B1BDF80000C0F30B00B04219 -:1069600004D1BDF80000401CADF800002168BDF85E -:106970000000B1F8CE2060F30F12A1F8CE202068FD -:1069800080F8B870206890F8B91059B190F8972045 -:1069900080F8572000F1780138300EF020F9206897 -:1069A00080F8B9702068B0F8CE10D0F8C02009097E -:1069B00051FA82F190F8BC20DFF82CC211446346F2 -:1069C0000022E1FB0C3212096FF0240302FB0311D9 -:1069D00080F8BC1090F82210824E90F81B80C1F312 -:1069E000001106F1280900295DD03780317821F0A7 -:1069F00020013170408C132837D01CDC10284DD07A -:106A0000122846D0FFDF00BF05F10E01754806F0E1 -:106A10000AFB697B734806F022FB2068418C1D2924 -:106A200018BF15297ED090F8772000F15801304624 -:106A300006F04BFB7EE0152818BF1D28E2D101218E -:106A4000304606F0CCFA3078B8F1000F40F0200064 -:106A50003070206812D000F11C01304606F0F1FAC7 -:106A60000121304606F008FBCEE70021304606F053 -:106A7000B6FA307840F020003070C5E700F115011B -:106A8000304606F0DEFA2068017D304606F0F4FA62 -:106A9000BAE70621304606F0A2FAB5E702213046F1 -:106AA00006F09DFAB0E7002241463046FFF7F2FCBF -:106AB000206890F87710002904BF408C10F0010F77 -:106AC00005D110F0020F08BF10F0200F04D00122F2 -:106AD00041464846FFF7DEFCF07810F03F0F1CBF40 -:106AE000307910F0100F25D0304606F076FA226883 -:106AF000014692F82400C0F38003C0F3400C6344C5 -:106B000000F00100034492F82C00C0F38002C0F3AF -:106B1000400C624400F001001044181AC0B200F0AA -:106B200018FD00E006E00090032304226946304689 -:106B300006F03EFC206890F82200C0F30010B0B1CF -:106B40002A4E04213046378006F049FA05F10E013D -:106B5000304606F068FA697B304606F080FA206815 -:106B600000F1380190F85720304606F0D2FA05F0CF -:106B70008DF803211E4805F01CF9216881F83300C7 -:106B80000020BDE8F8831B49486070472DE9F843B1 -:106B9000184C8046206890F8312032B1408C1D2876 -:106BA00008BFFFDFBDE8F84309E4012631B390F8E0 -:106BB000BC00FEF75EF8206890F8BB102520FDF7BA -:106BC00076FF206801224FF4967190F8BB300020C8 -:106BD000FEF7ABF90848FEF7C9FA10E0A40A002056 -:106BE00040420F00B00B002053E4B36E000C0020B5 -:106BF000280C0020CC000020D80B002006E02068E4 -:106C00004670867080F83160BDE8F883F948FEF779 -:106C1000ADFA2068002590F8241090F82C0021EAA5 -:106C2000000212F0010F18BF01250ED111F0020F62 -:106C300004D010F0020F08BF022506D011F0040F97 -:106C400003D010F0040F08BF04250027B8F1000F8F -:106C50005CD0012D1CD0022D08BF26201CD0042D95 -:106C600014BFFFDF272017D0206890F8BA10252026 -:106C7000FDF71DFF206890F82210C1F3001171B1DB -:106C8000002201234FF496711046FEF74EF93DE0C5 -:106C90002520FDF7EEFFE7E7FDF7EBFFE4E790F8CF -:106CA000BA3001224FF496710020FEF73EF9D14828 -:106CB000C17811F03F0F1CBF007910F0100F25D0E4 -:106CC000CC4806F08AF92368014693F82420C2F3E1 -:106CD0008000C2F3400C604402F0010200EB020CA1 -:106CE00093F82C20C2F38000C2F34003184402F052 -:106CF00001020244ACEB0200C0B200F02AFC00909A -:106D0000032304226946BB4806F052FB206890F832 -:106D10002C10294380F82C1090F8242032EA01012D -:106D200011D04670408C132820D01BDC102808BFDF -:106D3000BDE8F883122819D0C0F30010002818BF4E -:106D4000FFDFBDE8F883418C1D2908BF80F82C7057 -:106D5000E7D0C1F30011002914BF80F8316080F83A -:106D60003170DEE7152818BF1D28E5D1BDE8F843CE -:106D700001210846FEF7F0BA9F4810B50068417837 -:106D800041B90078FF2805D000210846FFF7FEFE34 -:106D9000002010BDFEF792FAFEF746FAFEF776F9EC -:106DA000FEF7D3F90C2010BD93490120096881F842 -:106DB000370070479049096881F83200704770B514 -:106DC000002601F01DFC002800F0C4808A4C2068D9 -:106DD000417801220025012905D0022901D003298B -:106DE00070D0FFDF70BD81780225B1B390F822002A -:106DF00010F0030F67D08148FEF7B8F92068012230 -:106E0000962190F8BB301046FEF78FF8216891F874 -:106E1000BB0091F8CC1010F00C0F08BF0021962099 -:106E2000FEF7BFF92068457090F8330058B1FDF7C0 -:106E30005EFC206890F8BB0010F00C0F0CBF4020E7 -:106E40004520FEF747FA206890F83400002808BF74 -:106E500070BDBDE87040FEF75CBA418CC1F3001212 -:106E60009AB1102929D090F8330020B1FDF73FFCEA -:106E70004020FEF72FFA6148FEF778F9206890F875 -:106E8000221011F0040F1FD029E090F8242090F870 -:106E90002C309A4211D190F87700002808BF11F0E9 -:106EA000010F05D111F0020F08BF11F0200F51D0D2 -:106EB000BDE870400121084668E6BDE87040002149 -:106EC000012063E619E045E090F83500012814BF81 -:106ED0000328102646F00E010020FEF73DFA206838 -:106EE00090F83400002818BFFEF713FA002196200E -:106EF000FEF757F92068457070BD817801B3418C69 -:106F000011F0010F21D080F8D02090F8D210B0F805 -:106F1000D40000F00AFB60680088F9F7D7FFF9F7A2 -:106F20006FFC20684570FEF7C9F9FEF77DF9FEF7A2 -:106F3000ADF8FEF70AF9BDE87040032001F0F0BC9F -:106F40008178BDE87040012020E611F0020F04BFF7 -:106F5000FFDF70BDBDE87040FFF731BAFFF72FBA11 -:106F600010B5254C206890F8341049B13630FEF742 -:106F7000DBF918B921687F2081F83600FEF7BFF9E8 -:106F8000206890F8330018B1FEF7AEF9FDF7C3FBA7 -:106F900001F036FBA8B1206890F82210C1F300116F -:106FA00079B14078022818BFFFDF00210120FFF7E8 -:106FB000EDFD2068417800291EBF40780128FFDFE1 -:106FC00010BDBDE81040FFF7FAB92DE9F0470A4FB0 -:106FD0000E4603283A68518C12D092F8320001F024 -:106FE000010410F1000918BF4FF001094FF001082A -:106FF0000CE00000B00B0020CC000020280C00208A -:10700000C1F340044FF000094FF00208FDF721FEE4 -:10701000054634EA090008BFBDE8F0873868FF4C30 -:1070200090F8330060B104F016FE30700146FF287E -:1070300006D0E01C04F004FE307804F017FE05438F -:107040002078C0F380113868027D914209D100F1A7 -:1070500015010622E01C0DF051FD002808BF01209B -:1070600000D000203178FF2906D0C0B9386890F8E8 -:107070002D00884215D112E098B12078E11CC0F3B0 -:10708000801004F091FD064604F0F4FE38B130465D -:1070900004F0AFFD18B1102105F0DFFB08B10120AD -:1070A00000E00020396891F8221011F0040F01D09F -:1070B000F0B11AE0CDB9DA4890F83500002818BFD1 -:1070C000404515D114F8030B2146C0F3801004F09D -:1070D0006BFD044604F0CEFE38B1204604F089FD75 -:1070E00018B1102105F0B9FB10B10120BDE8F087FF -:1070F0000020BDE8F0872DE9F04FCA4D804683B0EF -:10710000286800274078022818BFFFDF28687F24FE -:1071100090F8341049B13630FEF706F9002804BF64 -:10712000286880F83640FEF7EAF8BC4805F077FF9B -:107130000646B8F1000F00F0B081B84806F008F933 -:10714000002800F0AA81FDF752FD002800F0A5817B -:107150003046B24EFF21DFF8D0A24FF000084FF0CA -:10716000030B4FF00109062880F0B881DFE800F03A -:10717000FEFEFE03FE8F8DF8001069460320FFF728 -:1071800024FF002828687CD090F8341011B190F8C2 -:10719000001159B12868807801283ED0A348FDF736 -:1071A000E5FF286880F801B000F07BB99DF8003059 -:1071B00080F80091017880F80111FF2B10D000F2C7 -:1071C0000312511E184604F01DFD002808BFFFDF02 -:1071D000286890F8021141F0020180F802110DE0D8 -:1071E0003178C1F3801180F802118D49D1F88721DF -:1071F000C0F80321B1F88B11A0F80711286800F23C -:10720000091690F836007F2808BFFFDF286890F83D -:107210003610317080F83640BCE7844CDAF80490C0 -:1072200004F12806A4F800800721204605F0D7FEC7 -:107230000021204606F0D6F84946204606F0DBF845 -:107240000623002206F10901204606F0B1F828685D -:10725000417B204605F003FF286800F1380190F8D3 -:107260005720204606F0F5F82046FDF77FFF2868F6 -:107270000122962190F8BB300020FDF756FE90E7E2 -:10728000FFE78078002840F00A8100F006B98DF809 -:10729000081002A90520FFF798FE0028286800F0D2 -:1072A000F78082786249002A7ED0A1F11F066C68BF -:1072B00090F8BB90D6F80F00C4F80E00B6F8130093 -:1072C0006082707D2075B07D6075B6F81700E08231 -:1072D000B6F819006080B6F81B00A080B6F81D0053 -:1072E000E08004F108000DF0EBFD96F8240000F0BA -:1072F0001F00207696F82400400984F86C0184F879 -:10730000549084F85590286890F8CC1084F8561062 -:1073100090F8BD0084F857009DF80810686800F0E8 -:1073200081F9022001F0FCFAA6F12804DAF80090B5 -:10733000A4F800800821204605F051FE00212046D7 -:1073400006F050F84946204606F055F869463046A2 -:1073500005F07EFE304605F098FE0146204605F019 -:107360007EFE062300226946204600E0B6E006F0D5 -:107370001FF86946304605F05DFE304605F078FEA0 -:107380000146204605F078FE062301226946204684 -:1073900006F00EF82046FDF7E9FE28680122962146 -:1073A00090F8BB30002000E005E0FDF7BEFD286846 -:1073B00080F801B075E06C683278184E607BC2F3DB -:1073C000401210406073D6F80F00C4F80E00B6F8F3 -:1073D00013006082707D2075B07D6075B6F817006F -:1073E000E082B6F819006080B6F81B00A080B6F8FD -:1073F0001D00E0804FF0010A04F108000DF060FD6F -:1074000096F8240000F01F00207696F8240040092A -:1074100084F86C0184F854A00CE00000280C0020D3 -:10742000A40A0020CC00002004520200000C00201E -:10743000470C002084F855A0286890F8CC1084F8F8 -:10744000561090F8BD0084F857009DF80810686841 -:1074500000F0E8F8286880F8D09090F8D210B0F8E2 -:10746000D40000F062F868680088F9F72FFDF9F79A -:10747000C7F9286880F80180FDF720FFFDF7D4FEEA -:10748000FDF704FEFDF761FE012001F049FA08E076 -:1074900090F82200C0F3001008B1012701E0FEF7C8 -:1074A0008EFF286890F8330018B1FDF71DFFFDF737 -:1074B00032F91FB100210120FFF768FB28684178ED -:1074C000002919BF4178012903B0BDE8F08F407849 -:1074D000032818BFFFDF03B0BDE8F08F286890F8DD -:1074E0002200C0F300100028D9D0D6E770B58A4C2E -:1074F00006460D462068807858B1FDF789FA216864 -:107500000346304691F8BB202946BDE8704001F0A3 -:1075100074BAFDF77DFA21680346304691F8BA2027 -:107520002946BDE8704001F068BA7C4A137882F8B9 -:10753000F530A2F8F60082F8F410012082F8F2008B -:1075400092F8C400002818BF92F8C00082F8F80032 -:10755000704778B50446704800230093006890F89F -:10756000BA20082A04BF4FF4C87240230DD0042A61 -:1075700004BF4FF4BF72102307D0022A07BF03F1E4 -:107580001802042303F128020823491D01FB0326E6 -:1075900090F8BC209DF8001062F3050141F0400511 -:1075A0008DF8005090F8BB00012826D002282BD07F -:1075B000082818BFFFDF2DD025F080008DF80000CF -:1075C000C4EB041106FB04F001EB810100EB810424 -:1075D0005348844228BFFFDF5248A0FB0410BDF887 -:1075E0000110000960F30C01ADF80110BDF80000B6 -:1075F0009DF8021040EA014078BD9DF8020020F09D -:10760000E0008DF80200D7E79DF8020020F0E000CE -:10761000203004E09DF8020020F0E00040308DF8BA -:107620000200C9E72DE9F0413B4D04460E462868AB -:1076300090F8D000002818BFFFDF0027286880F8E6 -:10764000D2702188A0F8D4106188A0F8EA10A1882F -:10765000A0F8EC10E188A0F8EE1094F86C1180F816 -:10766000F01090F82F1049B1427B00F10E01012A71 -:1076700004D1497901F0C001402935D090F830108B -:1076800041B1427B00F10E01012A04BF497911F09A -:10769000C00F29D0DE300DF001FC2348FF2E00780A -:1076A000C0F3801060761D48D0F88711C4F81A1016 -:1076B000B0F88B01E08328681ED0C0F8E410E18B9D -:1076C000A0F8E81000F1D802511E304604F09AFAF2 -:1076D000002808BFFFDF286890F8D71041F00201AA -:1076E00080F8D710BDE8F081D0F80E10C0F8DE1099 -:1076F000418AA0F8E210D0E7C0F8E470A0F8E87082 -:10770000617E80F8D710D4F81A10C0F8D810E18B39 -:10771000A0F8DC10BDE8F081CC000020A40A002015 -:10772000C4BF030089888888280C0020FE48406870 -:1077300070472DE9F0410F460646014614460120E8 -:1077400005F082FA054696F85500FEF75FF8014607 -:1077500096F85500022808BFF44807D0012808BF52 -:10776000F34803D004280CBFF248F34808444FF410 -:107770007A7100F2E140B0FBF1F0718840F27122C1 -:107780005143C0EB4100001BA0F5597402F0E4FD29 -:10779000002818BF1E3CAF4234BF28463846A042DE -:1077A00003D2AF422CBF3C462C467462BDE8F08148 -:1077B0002DE9FF4F8FB0044690F855601C9899460C -:1077C00040EA0900019094F86500002790460D28D2 -:1077D0000CBF012000200990B9F1000F04BF94F8FC -:1077E0000C0103282BD1099848B3B4F88E01404509 -:1077F00025D1D4F81401C4F80001608840F2E241B8 -:107800004843C4F80401B4F85A11B4F8E600084437 -:10781000C4F80801204602F0A9FDB4F89201E08204 -:1078200094F890016075B4F894016080B4F8960102 -:10783000A080B4F89801E080022084F80C01D4F80C -:1078400064010C90B4F8E6A0B4F85801D4F860B123 -:10785000D4F854110891B9F1000F03D094F8201115 -:1078600049B193E004F1E001059174310A9104F506 -:10787000A075091D07E004F59A710591091D0A918B -:1078800004F59275091D0B91B4F85810A8EB00008F -:10789000A8EB010109B200B20391002805DAD4F87F -:1078A0005001089001200190084694F80C1100291D -:1078B00071D0012900F04482022900F0658103297A -:1078C00018BFFFDF00F0848239460898FBF705F8FF -:1078D0000A99012640F2712208600B98A0F80080F6 -:1078E000002028702E710A980068A8606188D4F87A -:1078F00014015143C0EB41009049A0F54D708861DF -:107900004969814287BF059908600598016005981B -:10791000616A0068084400F5D270E86002F01CFD5E -:1079200010B1E8681E30E8606E71B4F8D000A0EBCA -:10793000080000B20028C4BF03206871099800281D -:107940001C9800F0C282C0B1B4F8F81000290CBF36 -:107950000020B4F8FA00A4F8FA0094F8FC20401CC7 -:107960005043884209D26879401E002805DD6E71B7 -:10797000B4F8FA00401CA4F8FA00B9F1000F00F0C6 -:10798000C78294F82001002800F0BE8213B00220C4 -:10799000BDE8F08FFFE7BBF1000F08BFFFDF94F8F1 -:1079A0005510614890F8280005F0FBFA0790E08A2E -:1079B00040F271214143079800EB410210980021E9 -:1079C000002806D000FB02F15D48B1FBF0F000F1A9 -:1079D0000101C4F81011608840F2E24100FB01F29D -:1079E00010994FF0000006D0554801FB02F1B1FBA1 -:1079F000F0F000F10100C4F8140186B221464FF006 -:107A00000100D4F828A005F01FF9074694F85500A6 -:107A1000FDF7FCFE014694F85500022808BF4348D4 -:107A200007D0012808BF424803D004280CBF4148B2 -:107A30004148084400F2E1414FF47A70B1FBF0F1A3 -:107A4000608840F271225043C1EB4000801BA0F5DA -:107A5000597602F081FC002818BF1E3EBA4534BF9B -:107A600038465046B04203D2BA452CBF56463E4631 -:107A7000666294F85500FDF7F7FE4FF47A7600F24F -:107A8000E140B0FBF6F000EB0B0794F85500FDF772 -:107A9000EBFE024694F85500022808BF234907D0A0 -:107AA000012808BF224903D004280CBF21492249DC -:107AB00002EB010AFDF7AAFE504400F2DB514FF43D -:107AC0007A70B1FBF0F0E18A40F271224A430799E3 -:107AD000D4F810A101EB4201081AA0EB0A003844C7 -:107AE000A0F12007607D40F2E24110FB01F0079019 -:107AF00094F8556016F00C0F18BF4DF6883103D17D -:107B00003046FDF783FE0146022E08BF074807D026 -:107B1000012E08BF064803D0042E0CBF05480648B6 -:107B2000084400F2E1410DE0500C00200436020050 -:107B3000A2240200D0FB0100C0D40100D400002028 -:107B400040420F004FF47A70B1FBF0F000EB4A01B5 -:107B5000079801EB000A3046FDF746FE504400F15D -:107B60006201FD48416194F85500FDF77DFE00F289 -:107B7000E1414FF47A70B1FBF0F05844381AB0F597 -:107B80003D7F38BFFFDF9FE6E28A40F27121D4F8E3 -:107B90000401514300EB410210980021002806D057 -:107BA00000FB02F1ED48B1FBF0F000F10101C4F877 -:107BB0001011618840F2E24001FB00F210994FF091 -:107BC000000006D0E54801FB02F1B1FBF0F000F146 -:107BD0000100C4F8140186B221464FF00100D4F828 -:107BE00028B005F031F8074694F85500FDF70EFE71 -:107BF000014694F85500022808BFD94807D001284B -:107C000008BFD84803D004280CBFD748D748084439 -:107C100000F2E1414FF47A70B1FBF0F0618840F27C -:107C200071225143C0EB4100801BA0F5597602F050 -:107C300093FB002818BF1E3EBB4534BF384658464C -:107C4000B04203D2BB452CBF5E463E466662BAF1E7 -:107C5000000F2FD11C9868B394F855603046FDF79B -:107C6000D5FD0146022E08BFBD4807D0012E08BF32 -:107C7000BC4803D0042E0CBFBB48BC48084400F2EB -:107C8000E1414FF47A70B1FBF0F0D4F81011E38ABF -:107C9000014440F27122D4F804015A4300EB42003F -:107CA000471A3046FDF7A0FD0C99081A3844A0F198 -:107CB00020070AE0E28A40F27121D4F8040151431E -:107CC00000EB4101D4F810010F1AD4F80821D4F8C0 -:107CD0001011D4F8000100FB021B607D40F2E2416C -:107CE00010FB01FA94F8556016F00C0F18BF4DF612 -:107CF000883103D13046FDF789FD0146022E08BFC9 -:107D0000974807D0012E08BF964803D0042E0CBF19 -:107D100095489648084400F2E1414FF47A70B1FB6F -:107D2000F0F000EB4B0082443046FDF75DFD50441F -:107D300000F1600188484161012084F80C01C3E52D -:107D4000618840F271235943D4F81421D4F800C15A -:107D5000C2EB410101FB00F70398D4F8081150442D -:107D6000401AD4F81031401E0CFB013100FB021BFD -:107D7000607D40F2E24110FB01FA94F8556016F084 -:107D80000C0F18BF4DF6883103D13046FDF73EFD8C -:107D90000146022E08BF724807D0012E08BF714865 -:107DA00003D0042E0CBF70487048084400F2E14133 -:107DB0004FF47A70B1FBF0F000EB4B008244304698 -:107DC000FDF712FD504400F16001634841617BE51D -:107DD000628840F27123D4F814115A43C1EB420176 -:107DE00001FB00F794F8640024281CBF94F8650098 -:107DF00024280BD1B4F88E01A8EB000000B20028B3 -:107E000004DB94F89101002818BF0646019870B36E -:107E1000BAF1000F2BD10C98002814BFBBF1000F52 -:107E2000FFDF94F8550010F00C0F14BF4DF68830AA -:107E3000FDF7ECFC022E08BF494907D0012E08BF10 -:107E4000484903D0042E0CBF47494849084400F272 -:107E5000E1414FF47A70B1FBF0F03F1A94F855000D -:107E6000FDF7C2FC0C99081A3844A0F120070398CA -:107E7000D4F81411504400FB01FA16F00C0F18BF8F -:107E80004DF6883103D13046FDF7C0FC0146022E85 -:107E900008BF334807D0012E08BF324803D0042E54 -:107EA0000CBF31483148084400F2E1414FF47A7088 -:107EB000B1FBF0F000EB4A0A3046FDF795FC504468 -:107EC00000F1600124484161FEE400287FF43CADEC -:107ED00094F80C0100283FF450AD618840F2712203 -:107EE000D4F814015143C0EB4101284604F0D7FDFA -:107EF0000004000C3FF441AD1D99002918BF088013 -:107F0000012013B0BDE8F08F94F85C01FBF736FB5D -:107F100094F85C012946FBF71FFA00281CBF89F082 -:107F2000010084F82101002013B0BDE8F08F2DE995 -:107F3000F04F0F4C074683B020788946064E002547 -:107F40004FF00208032804BF207BB8427DD160684F -:107F50003061207803280DE0D400002040420F005B -:107F600004360200A2240200D0FB0100C0D40100AC -:107F7000500C002018BFFFDF0327B9F1080F78D29B -:107F8000DFE809F0040E1B1B167777726562FEF7B7 -:107F9000D1FB002818BFFFDFB77003B0BDE8F08F3A -:107FA000FEF7EAFE002818BFFFDF03B0BDE8F08F40 -:107FB00003B0BDE8F04FFDF7F3B92775257494F8C9 -:107FC0002C00012658B14FF47A71A069FAF785FCAC -:107FD000A061002104F1100004F061FD1AE001210C -:107FE0006846FBF79FFF9DF8000042F21071000207 -:107FF000B0FBF1F201FB1205FDF7D3FF0544294662 -:10800000A069FAF76AFCA061294604F1100004F0A7 -:1080100046FD461C208C411C0A293CBF304420846C -:10802000606830B1208C401C0A2828BF84F8158075 -:1080300000D267753046FEF73DF9002804BF03B053 -:10804000BDE8F08F607A002801E014E011E01CBF69 -:1080500003B0BDE8F08F207B04F11001FBF77CF941 -:10806000002808BFFFDFA0E7207BFAF70EFF25708E -:108070009BE7FFDF99E7202F28BFFFDFDFF804A48D -:1080800007213AF81700F8F7EFFD040008BFFFDFFB -:10809000202F28BFFFDFFB48218830F817008842D7 -:1080A00018BFFFDF01273461B9F1080F80F0548158 -:1080B000DFE809F0049EA6A6A1F0F0EFC4F8605135 -:1080C000F580C4F8645194F8210138B9FAF7FCFE40 -:1080D000D4F82C11FBF706FC00281BDCB4F81E11A9 -:1080E000B4F85800814206D1B4F8D410081AA4F8A4 -:1080F000D600204605E0081AA4F8D600B4F81E11F0 -:108100002046A4F85810D4F84811C4F82C11C0F82F -:1081100050111DE0B4F81C11B4F85800091AA4F865 -:10812000D610B4F81C112046A4F85810D4F82C111D -:10813000C4F84811C4F85011D4F83411C4F8E01050 -:10814000D4F83811C4F85411B4F83C11A4F85811FB -:1081500001F0B6FFFAF792FE94F855A0814650461A -:10816000FDF754FBBAF1020F08BFC74909D0BAF1B5 -:10817000010F08BFC54904D0BAF1040F0CBFC449B0 -:10818000C44908444FF47A7100F2E140B0FBF1F1C8 -:10819000D4F8140140F27122014460885043C1EBCD -:1081A0004000A0F1300AB9F1B70F98BF4FF0B709FE -:1081B0002146012004F048FD4844AAEB0000A0F24B -:1081C0001939A2462146012004F03EFDDAF82410B8 -:1081D0009C30814288BF0D1AC6F80C904D4538BFBF -:1081E000A946C6F8089084F8207186F80280DCE67B -:1081F00002F0ADF801E0FDF7D3F884F82071D4E681 -:10820000FAF762FED4F8502101461046FBF76AFBEC -:1082100048B1628840F27123D4F814115A43C1EB7B -:108220004201B0FBF1F094F865100D290FD0B4F8BD -:108230005820B4F81E1113189942AEBF481C401CB8 -:108240001044A4F81E0194F8220178B905E0B4F8AE -:108250001E01401CA4F81E0108E0B4F81E01B4F889 -:10826000D410884204BF401CA4F81E01B4F85A017F -:10827000DFF82492401CA4F85A01B4F88000B4F846 -:108280007E10401AB4F85810401E08441FFA80FBB4 -:1082900024E053E060E000BF96F80080B8F10C0FD6 -:1082A00028BFFFDF39F8188094F86CA1BAF10C0FE1 -:1082B00028BFFFDF39F81A000023404481B202A82A -:1082C000CDE90050B4F81E212046FFF771FA0028CE -:1082D0003FF46BAE012818BFFFDF27D0B4F81E01B2 -:1082E000ABEB000000B20028D6DA082084F8740056 -:1082F00084F87370204601F034FB84F80C5194F834 -:108300005C514FF6FF77202D00D3FFDF5D4820F84A -:10831000157094F85C01FAF7B8FD202084F85C0130 -:10832000307903B0BDE8F04FF3F764BDB4F81E0137 -:10833000BDF808100844A4F81E01CFE794F80C011A -:10834000042818BFFFDF84F80C5194F85C514FF6F5 -:10835000FF77202DDAD3D8E7FFDF26E610B54F4CA4 -:10836000207850B101206072FEF724FD20780328A8 -:1083700005D0207A002808BF10BD0C2010BD207B3E -:10838000FBF7FCF8207BFBF746FB207BFAF77DFD33 -:10839000002808BFFFDF0020207010BD2DE9F04F3E -:1083A0003E4F83B0387801244FF0000840B17C7212 -:1083B0000120FEF7FFFC3878032818BF387A0DD06B -:1083C000DFF8DC9089F8034069460720F8F7D5FB11 -:1083D000002818BFFFDF4FF6FF7440E0387BFBF743 -:1083E000CDF8387BFBF717FB387BFAF74EFD0028FA -:1083F00008BFFFDF87F80080E2E7029800281CBF73 -:1084000090F80C1100292AD00088A0421CBFDFF888 -:1084100074A04FF0200B4AD00721F8F725FC040088 -:1084200008BFFFDF94F85C01FBF7F5FA84F80C81D4 -:1084300094F85C514FF6FF76202D28BFFFDF2AF815 -:10844000156094F85C01FAF720FD84F85CB1694688 -:108450000720F8F792FB002818BFFFDF22E06846EC -:10846000F8F769FB0028C8D021E0029800281CBF5B -:1084700090F80C11002915D00088A0F57F41FF3934 -:10848000CAD114E0840C002004360200A2240200A9 -:10849000D0FB0100C0D4010028520200500C002083 -:1084A000D40000206846F8F746FB0028DDD089F8A4 -:1084B000038087F82C8087F80B8003B00020BDE88C -:1084C000F08F70B50446FD4890F80004FC4D40095B -:1084D00095F800144909884218BFFFDF95F8140D7C -:1084E0004009F84991F800144909884218BFFFDF94 -:1084F000F549002001220C7188700A704870C8701C -:10850000F2490870BDE8704048E7EF4908707047CD -:108510002DE9F843ED4C06468846207800285CD1CA -:10852000EB48FAF758FC2073202856D003276660E2 -:108530002770002565722572AEB1012106F1FC009D -:10854000FBF719FD0620F8F737FB81460720F8F7FF -:1085500033FB96F8FC104844B1FBF0F200FB12101C -:10856000401C86F8FC00FAF789FCDA49091838BF84 -:1085700040F2F65000F23D1086B2FDF79BFBE06141 -:10858000FDF70FFD4FF0010950B384F80A90012167 -:108590006846FBF7C7FC9DF8000042F2107100022C -:1085A000B0FBF1F201FB12000644FAF78DFC3146F4 -:1085B000FAF793F9A061277567752574207B04F19C -:1085C0001001FAF7C9FE002808BFFFDF258400204C -:1085D000FEF7F0FB0020BDE8F8830C20BDE8F8832F -:1085E000FAF772FC3146FAF778F9A061A57284F8BF -:1085F0002C90A8F226502063DDE7B34948707047FD -:10860000B24810B5417A0124002918BF002409D1CD -:1086100090F82C1031B1416A006B814284BF002474 -:10862000FEF7C2FB204610BD70B5A74C0546E0889A -:10863000401CE080D4E902016278D5F86061002A2C -:108640001CBF324604F053FAA060864208D895F861 -:108650000C01012804D0E078002804BF012070BD7F -:10866000002070BD70B50C4640F2E24100FB01F500 -:108670002046FDF7CBF8022C08BF974907D0012C04 -:1086800008BF964903D0042C0CBF9549954908446E -:108690004FF47A7100F2E140B0FBF1F000F54D705B -:1086A00085428CBF281A002070BD2DE9F04F83B0A1 -:1086B0004FF00009044680F8209190F8DE00002871 -:1086C00007BF94F80C01032803B0BDE8F08FFAF758 -:1086D000FBFBD4F8502101461046FBF703F90028B4 -:1086E000DCBF03B0BDE8F08F628840F27123D4F89C -:1086F00014115A43C1EB4201B0FBF1F0411CB4F834 -:1087000058000144A4F81C11B4F8D410B4F81C218A -:10871000891A09B20029DCBF03B0BDE8F08F01213E -:1087200084F82211B4F88010B4F87E206E4F891AB4 -:10873000491E084485B2DFF890A10DF1080B25E031 -:108740009AF800600C2E28BFFFDF37F8166094F807 -:108750006C81B8F10C0F28BFFFDF37F81800CDE9A6 -:10876000009B3044B4F81C2181B201232046FFF75E -:108770001FF8002804BF03B0BDE8F08F01280FD018 -:10878000022812BFFFDF03B0BDE8F08FB4F81C0170 -:10879000281A00B20028BCBF03B0BDE8F08FCFE7B5 -:1087A000B4F81C01BDF808100844A4F81C01EDE75A -:1087B0002DE9F0430422002583B006297DD2DFE8AD -:1087C00001F0074B03191951044680F80C2107E00A -:1087D00004463D48C178002918BF84F80C210CD00C -:1087E000FAF77EFAA4F85A51B4F85800A4F81E011A -:1087F00084F8225103B0BDE8F08306780C2E28BF20 -:10880000FFDF394F94F80C0137F816604FF001097B -:10881000032807D00128E3D194F86C81B8F10C0F3C -:108820000AD308E0C4F80851C4F8005194F86C81E8 -:10883000B8F10C0F00D3FFDF37F81800CDE9009531 -:10884000304481B2B4F8D42000232046FEF7B0FFB4 -:10885000002818BFFFDFC3E7032180F80C1103B025 -:10886000BDE8F0830546876AB0F81401294686B250 -:10887000012004F0E9F9044695F85500FCF7C6FF1D -:1088800095F85510022908BF134907D0012908BFE0 -:10889000124903D004290CBF1149124908444FF46E -:1088A0007A7100F2E140B0FBF1F0698840F2712288 -:1088B0005143C0EB4100801B18E02DE001E000E0D7 -:1088C0000BE000E019E000E0D4000020500C002094 -:1088D0002F7F01000AFAFFFF04360200A2240200E3 -:1088E000D0FB0100C0D4010028520200A0F5597647 -:1088F00001F032FD002818BF1E3EA74234BF2046BB -:108900003846B04228BF344602D2A74228BF3C4670 -:108910006C6203B0BDE8F083FFDF03B0BDE8F08315 -:10892000F8B5894C0246874F00256168606A052AC0 -:1089300048D2DFE802F0032F34373E00A07A002649 -:1089400060B101216846FBF7F7FA9DF8000042F29A -:1089500010710002B0FBF1F201FB1206FDF721FBE2 -:108960008119A069F9F7B9FFA0612574032060752A -:10897000607A38B9207B04F11001FAF7EDFC002889 -:1089800008BFFFDF2584FAF7ABF93879BDE8F84076 -:10899000F3F730BABDE8F840002100F06DB8C1F837 -:1089A0006001F8BDD1F86001BDE8F840012100F098 -:1089B00063B884F82C50FAF793F93879BDE8F84099 -:1089C000F3F718BAFFDFF8BD70B55E4CA178022945 -:1089D00006BFE188002970BD2569C5F8640195F8D6 -:1089E0005500FCF701FFD5F86411081AA16801448D -:1089F000A160E1680844E06070BD70B5054651486B -:108A000090F802C0BCF1020F06BF006900F5B07417 -:108A10004E4C002904BF256070BD4FF47A760129C1 -:108A20000DD002291CBFFFDF70BD1046FCF707FF09 -:108A300000F2E140B0FBF6F0281A206070BD184645 -:108A4000FCF712FF00F2E140B0FBF6F0281A2060BC -:108A500070BD3D48007800281CBF0020704710B54D -:108A60000720F8F79BF880F0010010BD3648007829 -:108A7000002818BF012070472DE9F047324C82B022 -:108A8000002584F82C50D4F8188084F82810E5725A -:108A900081462570012727722946606803F082FB12 -:108AA0006168C1F85081267B81F85C61C1F86091F2 -:108AB000C1F85481B1F80080202E28BFFFDF244880 -:108AC00020F81680646884F80C51DFF87880A4F8E8 -:108AD000585198F800600C2E28BFFFDFDFF8749023 -:108AE00039F816A094F86C610C2E28BFFFDF39F816 -:108AF00016000023504481B200951A462046019585 -:108B0000FEF756FE002818BFFFDFC4F80851C4F86E -:108B1000005184F80C71A4F81E51A4F81C5184F87B -:108B20002251B4F85800401EA4F85800A4F85A5135 -:108B3000FAF7D6F898F8040002B0BDE8F047F3F76A -:108B400059B90000D4000020500C0020740C002003 -:108B5000840C00202852020070B5FE4C21690A885E -:108B6000A1F8FC2181F8FA0191F85400012808BF0E -:108B7000012508D0022808BF022504D0042816BF0A -:108B800008280325FFDF206980F8FE5190F8550082 -:108B9000012808BF012508D0022808BF022504D0FB -:108BA000042816BF08280325FFDF2069012180F86B -:108BB000FF5180F8F811002180F8A4112079BDE858 -:108BC0007040F3F717B92DE9F04FE24C83B0A0796C -:108BD00010F0010F04BF03B0BDE8F08FA0690123BE -:108BE0000521C578206990F86520583003F0EDFE26 -:108BF00068B1A81E0A2806D2DFE800F009090505B9 -:108C0000090905050909A07840F00800A070A078BE -:108C100000281CBF03B0BDE8F08FA0694FF0200909 -:108C20004FF00208C778002F1CBF012F162F1DD14F -:108C3000206990F8640003F0B1FEB8B1216991F8A1 -:108C400064001F2812D0202808D0162F0CBF84F8EB -:108C5000029084F8028003B0BDE8F08F262081F8EE -:108C60006400162F1CBF2A20FFF776FF47F6FE7A16 -:108C7000012600254FF0280B0C2F00F03B8109DC6A -:108C800080F05F84DFE807F05A3923CCFDFDFCFB60 -:108C9000FAFD9CC3152F00F046820DDC112F00F069 -:108CA000C783122F00F0C081132F00F0B081142F62 -:108CB00000F0CE8100F045BC162F00F06782182F1F -:108CC00000F0CC82FF2F00F0358400F03ABC206920 -:108CD0000123194690F86720583003F076FE0028EB -:108CE00040F03184A06904F081FC216981F87201AF -:108CF000072081F8670000F026BC206901230021CD -:108D000090F86520583003F060FE002800F0C98319 -:108D1000A06904F068FC2169A1F88E01B1F858201F -:108D2000801A00B28245A8BF002843DD01F5C87152 -:108D3000A06904F053FC0B20216937E0206901236E -:108D4000002190F86520583003F03FFE002800F025 -:108D5000A883A06904F01EFC002800F0F283A0693B -:108D60002169B0F80D20A1F88E21B1F85830D21A3F -:108D700012B29245A8BF002A1CDD027981F8902129 -:108D8000B0F80520A1F8922104F0F7FB2169A1F8C1 -:108D90009401A06904F0F4FB2169A1F89601A0698F -:108DA00004F0F5FB2169A1F898010D2081F8650018 -:108DB00000F0C9BB81F874B081F8736000F0C3BBE8 -:108DC00020690123002190F86520583003F0FDFD53 -:108DD000002820690CD0A0F88A5090F88C10491C0B -:108DE00080F88C105FF0100180F8651000F0ABBBCC -:108DF00090F8652001230521583003F0E6FD002896 -:108E00001CBF0820A07040F09E8300F04ABB206980 -:108E100090F86510112908BF122140F0A082E3E705 -:108E200020690123002190F86520583003F0CDFD22 -:108E300080B9206990F86520122A0BD00123052102 -:108E4000583003F0C2FD002818BF082000F0298325 -:108E500000F099B9206990F88E1031B9A0F88A50C5 -:108E600090F88C10491C80F88C1000F1E801A06982 -:108E700004F0D5FB206900F1C00103E0A4E0F6E2B4 -:108E800023E05EE3A06904F0D5FB206990F8C001FF -:108E9000002818BFFFDF20690188A0F8C21100F583 -:108EA000E271A06904F0A9FB206900F5E671A069F0 -:108EB00004F0ABFB206980F8C061142180F86510D4 -:108EC0002079F2F797FF00F03EBB206990F865101B -:108ED000172940F0448290F88C10491E49B280F85E -:108EE0008C100029B8BFFFDF1B20216981F86500C5 -:108EF00000F029BB206990F8661011F0020F09D02C -:108F000090F8642001230821583003F05EFD00280A -:108F100000F0C782206990F8900010F0020F14D181 -:108F2000A06904F09BFB216981F89100A069B0F869 -:108F30000520A1F89220B0F80700A1F8940091F85C -:108F4000900040F0020081F89000206990F89010A5 -:108F500002E00000F000002011F0010F05D02069B0 -:108F600090F8641006291CD114E090F8660010F007 -:108F7000020F18BFFFDF206990F8661041F0020170 -:108F800080F86610A0F88A5090F88C10491C80F880 -:108F90008C10E4E780F8645080F888502079F2F76C -:108FA00029FF206990F88C11042940F0CC8280F8C8 -:108FB0008C512079F2F71EFF206990F86410002987 -:108FC00040F0C18200F031BA206990F8660010F0DC -:108FD000010F77D16946A06904F047FB9DF80000B6 -:108FE00000F02501206980F896109DF8011001F02D -:108FF000410180F89710A0F88A5090F88C10491C15 -:1090000080F88C1090F8661041F001011CE0206996 -:109010000123092190F86420583003F0D6FC002881 -:1090200040F0378200F03DBA206990F8661011F0E8 -:10903000040F40F03682A0F88A5090F88C2041F05E -:109040000401521C80F88C2080F8661000F07BBA76 -:10905000206990F8660010F0300F33D1A06904F059 -:1090600021FB002800F06D822769A06904F016FB3F -:1090700038872769A06904F00DFB78872769A06904 -:1090800004F00EFBB8872769A06904F005FBF88798 -:10909000A07910F0020F03D06069C078142812D0B4 -:1090A000206990F864101C290DD090F84E10012909 -:1090B0000CD090F89B11002904BF90F89A11002958 -:1090C0000CD003E05CE0206980F84E60206990F8E5 -:1090D000661041F0100180F866101AE090F86610F2 -:1090E00041F0200180F866100288A0F8E021028F8C -:1090F000A0F8E221428FA0F8E421828F00F5D6711A -:10910000A0F8E621C08F888781F832602079F2F7D5 -:1091100071FE2069A0F88A5090F88C10491C80F8E4 -:109120008C1000F010BA206901230A2190F8642005 -:10913000583003F04AFC18B3A06904F0B3FAA8B1A0 -:109140002669A06904F0AAFA30872669A06904F0AC -:10915000A1FA70872669A06904F0A2FAB08726698F -:10916000A06904F099FAF08701F000FB206980F80B -:10917000885080F8645000BF01F0C8FA00F0E3B9ED -:10918000A07840F00100A07000F0DDB92069012353 -:109190000B2190F86520583003F017FC20B100BF78 -:1091A00084F8029000F0CFB920690123002190F8E3 -:1091B0006520583003F009FC002800F07281206916 -:1091C00090F864002428EBD0A06904F086FA002807 -:1091D00000F0B781206990F8961041F0040180F802 -:1091E0009610A1694A7902F0070280F851200979A6 -:1091F00001F0070180F8501090F8A531002B04BF52 -:1092000090F8A431002B1CD190F855C000F1540304 -:109210008C4502BF1978914280F87D6011D000F52D -:10922000D67180F8F2610288A0F8F42190F85020FD -:1092300080F8F62190F8510081F84B002079F2F780 -:10924000D9FD2069212180F86510A0F88A5090F896 -:109250008C10491C80F88C1000F075B9206990F8CA -:109260006410202914BF0027012790F865102229D7 -:1092700008BF00F1650804D0002F18BF00F1640892 -:109280006DD090F8961041F0040180F89610A06916 -:1092900004F045FAF0B3D4F81890484604F033FAD5 -:1092A0000090484604F033FA814603F042FD010085 -:1092B00018D0206990F854208A4213D090F8A43135 -:1092C00023B190F8A63113EA090F4BD0002F04BF49 -:1092D00090F8513013EA090F01D18A4242D890F830 -:1092E000A401B8B1DDF80090484603F022FD78B142 -:1092F000216991F8552082420AD091F8A40120B149 -:1093000091F8A70110EA090F2CD091F8A40108B137 -:109310006A4600E026E0A169206903F019FDE8B380 -:10932000A06904F0FAF92169A1F88E01B1F858207A -:10933000801A00B28245A8BF0028DCBF81F874B053 -:1093400081F873605CDD9DF8000081F890019DF864 -:10935000010081F89101242088F8000050E084F891 -:109360000280F0E0206990F8A40100281CBF1E20B4 -:10937000FFF7F2FBB7B1A0692169C07881F8CA0094 -:1093800006FA00F010F0807F08BFFFDF0A21206995 -:1093900080F8641090F88800002800E014E008BF0E -:1093A000FFDF0DE088F80050206990F88C10491E0E -:1093B00049B280F88C100029B8BFFFDF01F08BF9AB -:1093C000206980F87D50BEE0226992F8A40170B156 -:1093D000B2F8583092F85410B2F8A80102F5C772EA -:1093E00003F0A8FDD8B12169252081F86400206927 -:1093F00000F1650180F87D50884508BF80F8655010 -:10940000206900F1650188450FD190F88C10491E44 -:1094100049B280F88C100029B8BFFFDF93E000202C -:10942000FFF79AFB88F80050E1E780F888508AE05F -:10943000206990F8961041F0040180F89610A06918 -:1094400004F089F916287ED1206990F8640020285C -:1094500002D0262805D076E0A06904F080F9FFF755 -:109460007BFB206980F8645080F888506BE02069AD -:1094700090F864200E2A03D1A1690979122902D03B -:109480001C2A1AD10FE001230921583003F09DFA5C -:1094900038B1206980F87C5080F8885080F864509A -:1094A00051E0A6704FE0A1690979142904BF80F842 -:1094B000645080F888503FF45FAE202A03D1A16940 -:1094C0000979162914D0262A03D1A1690979162908 -:1094D0000ED0A1690979172904BF90F86520222AC6 -:1094E00013D0E2691AB1FF2908BF80F886612AE02B -:1094F00080F8645080F8885090F86500212818BFE3 -:109500001A2020D0FFF728FB1DE080F8655090F866 -:109510008C10491E49B280F88C100029B8BFFFDFBB -:10952000206980F87D5090F8A401002818BF002021 -:1095300009D0E7E7E06900281CBF206980F8866150 -:1095400001D101F0C8F82069D0E92A12491C42F182 -:109550000002C0E92A1203B0BDE8F08F70B5FB4EDF -:1095600005460C46306990F8CB00FE2818BFFFDF97 -:1095700032690020002C82F8CB501CBFA2F88A0070 -:1095800070BDA2F88400012082F8880070BD30B55B -:1095900085B005466846FCF7D6F9002808BFFFDF0E -:1095A000222100980BF055FB0321009803F09AFF4D -:1095B0000098017821F010010170294603F0C0FFE6 -:1095C000E24C0D2D04BF0621009830D00BDCA5F134 -:1095D00002000B2819D2DFE800F0201863191926C1 -:1095E000187018192C00152D7BD008DC112D2DD0EA -:1095F000122D18BF132D09D0142D30D005E0162DD3 -:1096000046D0172D6BD0FF2D6AD0FFDFFCF7AEF9E7 -:10961000002808BFFFDF05B030BD2069009990F831 -:10962000CC000871F2E72169009891F8CC10017123 -:10963000ECE7E26800981178017191884171090A9C -:1096400081715188C171090A0172DFE70321009815 -:1096500004F07FF80621009804F07FF8D6E720692F -:10966000B0F84410009804F005F82069B0F84610EE -:10967000009804F003F82069B0F84010009804F056 -:1096800001F82069B0F84210009803F0FFFFBDE731 -:109690002069009A90F8A611117190F8A7014BE08B -:1096A000206900F1F001009803F0C8FF206900F183 -:1096B000C401009803F0CCFFA8E7A549D1E9000157 -:1096C000CDE90201206902A990F8960000F025007A -:1096D0008DF80800009803F0F6FF97E701E019E025 -:1096E0002CE02069B0F84010009803F0CBFF20690F -:1096F000B0F84210009803F0C9FF2069B0F8441098 -:10970000009803F0B7FF2069B0F84610009803F006 -:10971000B5FF7BE7206990F8A41139B1009990F862 -:10972000A6210A7190F8A70148716FE7009A90F896 -:109730005410117190F85500507167E7206990F846 -:109740008721D0F88811009803F008FF5EE770B514 -:109750000C4605464FF4007120460BF09CFA25801C -:1097600070BDF7F78ABB2DE9F0410D46074607218A -:10977000F7F77AFA040008BFBDE8F08194F8AC016D -:109780000026B8B16E700920287094F8AC0178B149 -:10979000268484F8AC61D4F8AE016860D4F8B201D4 -:1097A000A860B4F8B601A88194F8AC010028EFD104 -:1097B0002E7144E094F8B801002837D094F8B8012D -:1097C0000D2818D00E2818BFFFDF38D12088F7F7F2 -:1097D0007DFB0746F7F729F8A0B96E700E202870B8 -:1097E00094F8BA0128712088E88084F8B861384676 -:1097F000F7F715F823E02088F7F768FB0746F7F737 -:1098000014F810B10020BDE8F0816E700D202870B2 -:1098100094F8BA0128712088E88094F8BE01287273 -:1098200084F8B8613846F6F7FAFF08E094F8F001DA -:1098300040B16E701020287084F8F061AF80012074 -:10984000BDE8F08194F8C00190B16E700A202870D4 -:109850002088A880D4F8C401D4F8C811C5F806003F -:10986000C5F80A10B4F8CC01E88184F8C061E6E7D5 -:1098700094F8CE0140B16E701A202870B4F8D0016F -:10988000A88084F8CE61DAE794F8EA0180B16E70BE -:109890001B20287094F8EA010028D0D084F8EA61EF -:1098A000D4F8EC01686094F8EA010028F6D1C6E724 -:1098B00094F8D2012F1DA0B16E701520287094F875 -:1098C000D201002818BF04F5EA75B8D084F8D26137 -:1098D000294638460BF0EBFA94F8D2010028F5D16E -:1098E000ADE794F8DE0150B16E701D20287084F849 -:1098F000DE6104F5F07138460BF0D9FA9FE794F871 -:10990000F20138B11E20287084F8F261D4F8F40115 -:10991000686094E794F8F801002808BFBDE8F0817A -:109920006E701620287094F8F801002887D000BFC8 -:1099300084F8F861D4F8FA016860B4F8FE0128816F -:1099400094F8F8010028F3D179E70000F000002036 -:1099500040520200FE4AD0600020D06110621171B6 -:109960007047002180F8641080F8651080F8681056 -:1099700090F8DE1011B10221FEF71ABF0321FEF7A5 -:1099800017BF2DE9F047F24C814686B020690D469D -:109990000088F7F7ADFA070008BFFFDFA07828437B -:1099A000A070A0794FF0000510F0200F20691CBFB7 -:1099B000A0F87E5080F8E45004D1B0F87E10491C25 -:1099C000A0F87E102069012690F86A1039B990F845 -:1099D000652001230621583002F0F7FF48B3E088E4 -:1099E00010F4006F07D0206990F86A10002918BFA2 -:1099F000A0F876501DD12069B0F87610491C89B2C4 -:109A0000A0F87610B0F878208A422CBF531A0023B1 -:109A1000B4F808C00CF1050C634598BF80F87C6071 -:109A2000914206D3A0F8765080F8F0612079F2F7E1 -:109A3000E1F9A0794FF0020A10F0600F11D020690F -:109A400090F8681011B1032906D00AE080F8686028 -:109A50000121FEF7ADFE04E080F868A00121FEF7C9 -:109A6000A7FE206990F86810012905D1E18811F45A -:109A7000807F18BF80F868A04FF00808B9F1000F88 -:109A800040F09981E28812F4007F18BFA0F8F850E6 -:109A900004D1B0F8F810491CA0F8F81012F0080F23 -:109AA00050D0A17800294DD190F8CB00FE2808BFF6 -:109AB000FFDFFE21206980F8CB1090F8651019298E -:109AC00007D0206990F864101F2911D027292AD0C7 -:109AD0002FE080F88D5090F88C10491E49B280F824 -:109AE0008C100029B8BFFFDF206980F86550E8E7D7 -:109AF00090F8650002F052FF80B120692621012311 -:109B000080F8641090F865200B21583002F05DFF5A -:109B1000002804BF2A20FFF71FF80AE0216920204F -:109B200081F8640005E080F8856180F8645080F871 -:109B30008850206990F86710082904BF84F800A0B5 -:109B400080F8CBA0FFF73FF8A07910F0040F07D002 -:109B5000A07828B9206990F86700072808BF267008 -:109B600000F038FCA07910F0100F09D0A07838B9B7 -:109B7000206990F865100B2904BF0C2180F865104E -:109B8000E07810F0080F11D020690123052190F82A -:109B90006520583002F019FF28B184F8028020694E -:109BA00080F8B85102E0002001F02AFBE0690028AB -:109BB0005BD000950195029503950495206990F876 -:109BC0005500FBF723FE4FF47A7100F5FA70B0FBF5 -:109BD000F1FA206990F85500FBF706FE5044ADF805 -:109BE000060020690188ADF80010B0F85810ADF8F3 -:109BF00004104188ADF8021090F8860130B1A069D8 -:109C0000C11C039103F058FC8DF81000206990F8F6 -:109C100085018DF80800E16968468847206980F869 -:109C2000865180F885510399F9B190F88411E1B912 -:109C300090F86410272918D09DF81010039AA1B14C -:109C40001378FF2B06D0072B02BF02295178FF297A -:109C500002D00AE01B2908D880F884610399C0F873 -:109C600088119DF8101080F8871100F0CCFD01F0EC -:109C7000BDFA0028206918BFA0F8D85004D1B0F868 -:109C8000D810491CA0F8D81001F0B3FA40B12169EE -:109C900091F8E40002289CBF401C81F8E40004D83D -:109CA000206990F8E400022806D92069A0F8D8506D -:109CB000A0F8DA5080F8E45020690123002190F8E0 -:109CC0006520583002F081FE20B9206990F86500C7 -:109CD0000C285AD120690123002190F864205830C3 -:109CE00002F073FEB0B320690123002190F86720D1 -:109CF000583002F06AFE68B3206990F868100229B3 -:109D000004BF90F8E40000283FD13846F6F75DFB29 -:109D100000B3206990F8CB10FE2936D1B0F8D210EC -:109D2000012932D980F8DD60B0F88010B0F87E20CB -:109D30008B1E9A42AFBF0121891A491E89B2B0F821 -:109D4000D82023899A422EBF01229A1A521C02E07F -:109D5000F000002019E038BF92B2914288BF11464E -:109D6000012908BF80F8DD5090F868218AB1B0F869 -:109D7000DA20B0F86A0182422FBF0120801A401C0D -:109D800080B2814288BF014603E02069012180F84A -:109D9000DD502069B0F85820114489B2A0F8D410E1 -:109DA00090F86830002B18BF012B5DD0022B1CBF30 -:109DB000032BFFDF09D0E088C0F340200028206992 -:109DC00018BFA0F8E65059D151E090F86730082B41 -:109DD00021D0B0F87E10B0F8802000278B1C9A426A -:109DE00006D3511A891E0F043F0C1CBF791E8FB277 -:109DF00090F87C1051B190F864200123092158306B -:109E000002F0E3FD002808BF002729D0206990F860 -:109E10006A1089B908E0B0F87E30032B24D3B0F87B -:109E200080101144491C1FE090F865200123062191 -:109E3000583002F0CAFD78B121690020B1F87820CD -:109E4000B1F876108B1C9A4203D3501A801E18BFAB -:109E5000401EB84238BF87B2002F1CBF781E87B2A1 -:109E60002069B0F8D4103944A0F8D010A3E7B0F8B6 -:109E7000E610B0F8D6201144A0F8E610206990F85A -:109E8000701139B990F8672001231946583002F053 -:109E90009CFD38B12069B0F88210B0F8D62011448A -:109EA000A0F88210206990F8883033B1B0F884109F -:109EB000B0F8D6201144A0F8841090F98C20002A24 -:109EC00006DDB0F88A10B0F8D6C06144A0F88A1058 -:109ED0004FF03D0CB9F1000F18BF80F874C049D1A4 -:109EE0002178022911D0012908BF90F872113FD0C2 -:109EF000A17821B380F8736011F0140F18BF1E21F0 -:109F000009D000BF80F8741050E090F8CC100629FA -:109F100018BF16212CE011F0080F18BF80F874C08C -:109F200044D111F0200F18BF2321EBD111F0030F02 -:109F300008BFFFDF2A20216981F8740032E02BB1CD -:109F4000B0F88410B0F88630994210D2002A05DDAE -:109F5000B0F88A10B0F88620914208D2B0F882207A -:109F6000B0F880108A4208D390F870212AB12221DB -:109F700080F8741080F8736018E090F868203AB1A7 -:109F8000B0F87E208A4228BF80F87480F2D209E0BF -:109F9000B0F87E10062905D33E2180F8741080F8B1 -:109FA000736003E0206990F8731079B1206980F83C -:109FB000645080F8655080F8685090F8DE100029F1 -:109FC00014BF02210321FEF7F3FB02E00021FEF79C -:109FD000EFFB206980F8DE5006B0BDE8F047FBF7E4 -:109FE000E7BCF84902468878CB78184313D1084675 -:109FF00000694AB1897911F0080F03D090F8670021 -:10A00000082808D001207047B0F84810028E91420D -:10A0100001D8FEF709BB0020704770B5E94C054632 -:10A020000E46E0882843E08015F0020F04D015F0BA -:10A03000010F18BFFFDF666115F0010F4FF000023E -:10A040004FF001001AD0A661F178062902D00B2941 -:10A050000BD013E0216991F86530172B0ED1002346 -:10A06000C1E9283381F8690008E0216991F8653079 -:10A07000112B04BF81F8692081F88E0015F0020FC2 -:10A0800018D06169C978052902D00B290BD011E0DD -:10A09000216991F86520152A0CD10022C1E92A22F4 -:10A0A00081F86A0006E0206990F86510102908BF61 -:10A0B00080F86A2015F0800F1CBF0820E07070BD8A -:10A0C0002DE9F84FBF4C00254FF00108E580A57041 -:10A0D000E5702570206168F30709074680F8DE8087 -:10A0E0000088F6F705FF5FEA000A08BFFFDF206976 -:10A0F0000088FBF725FC20690088FBF747FC2069F6 -:10A10000B0F8D21071B190F8CB10FE290FD190F8B1 -:10A11000701189B190F8672001231946583002F078 -:10A1200054FC88B1206990F8CB00FE2804D0206947 -:10A1300090F8CB00FFF72BFA206990F8DF10002988 -:10A1400018BF25811BD10FE02069A0F8825090F83C -:10A15000711180F8CC1000210220FFF7FFF920696F -:10A1600080F8DD500220E5E790F8AC1129B9018CA8 -:10A170008288914288BF218101D881882181B0F8ED -:10A18000D610491E8EB2B0F8D8103144A0F8D810BD -:10A1900090F8DC1000291CBFA0F8DA5080F8DC50E1 -:10A1A00004D1B0F8DA103144A0F8DA10B0F87E101B -:10A1B0003144A0F87E1090F86A1039B990F8652003 -:10A1C00001230621583002F000FC28B12069B0F8C4 -:10A1D00076103144A0F876102069B0F8D210012929 -:10A1E0009CBF491CA0F8D210002E18BF80F8E45084 -:10A1F00090F8DD10A1B1B0F8D800218988420FD2C3 -:10A200005046F6F7E2F858B1206990F8681139B174 -:10A21000B0F8DA10B0F86A01814228BF00F0ECFF14 -:10A22000206980F8DD5090F865100B2918BF0C29C3 -:10A2300016D1B0F85820B0F88E31D21A12B2002AD6 -:10A240000EDBD0F89011816090F894110173022117 -:10A2500001F0A8FF206980F8655080F898804AE0F6 -:10A26000242924D1B0F85810B0F88E21891A09B2E7 -:10A2700000291CDB90F8A42190F89011002908BF58 -:10A2800090F8541080F8541090F89111002908BFEC -:10A2900090F8551080F85510002A1CBF0020FEF7DA -:10A2A0005BFC206980F8655080F87D5023E090F8D1 -:10A2B0006410242918BF25291DD1B0F85810B0F812 -:10A2C0008E21891A09B2002915DB90F89011002916 -:10A2D00008BF90F8541080F8541090F8911100299C -:10A2E00008BF90F8551080F855100020FEF734FC98 -:10A2F000206980F86450216901F15800B1F8D62036 -:10A3000002F026F9206990F86811002918BFA0F81A -:10A31000DA502D4800902D4B2D4A3946484600F022 -:10A32000B3FE216A00291CBF6078FAF789FF206913 -:10A330000123052190F86520583002F046FB0028E3 -:10A3400008BFBDE8F88FBDE8F84F00F08EBC00F004 -:10A3500033BF1C49C86170471A48C069002818BF3C -:10A3600001207047174A50701162704710B50446BB -:10A37000B0F894214388B0F89611B0F898019A4249 -:10A3800001BFA3889942E38898420FD02388A4F89C -:10A39000B031A4F8B221A4F8B411A4F8B601012098 -:10A3A00084F8AC0107480079F1F724FD012120462B -:10A3B00001F0F8FE002084F86500032084F86800AE -:10A3C00010BD0000F000002083990100E39F010010 -:10A3D0001BA0010070B5FE4CA07910F0020F08BF61 -:10A3E00070BDA078002818BF70BD6169F8482722A9 -:10A3F000CB780E26002500690D2B78D00BDCA3F15D -:10A4000002030B2B1FD2DFE803F0201E808B9F2F4F -:10A410001E591E73D100152B00F02A810BDC112B65 -:10A4200065D0122B00F0F480132B00F0FF80142B6A -:10A4300000F00E8107E0162B00F03281172B00F0A0 -:10A440003F81FF2B35D0FFDF70BD90F867200123DF -:10A450001946583002F0B9FA002818BF70BD08201C -:10A46000216981F8670070BD90F8643009790A2B82 -:10A4700001BF90F8CA308B4280F8645080F8885051 -:10A4800008BF70BD90F8663013F0080F0DD023F0B0 -:10A49000080180F8661090F88C10491E49B280F8C7 -:10A4A0008C100029A8BF70BDCFE0FF291CBFFFDFC3 -:10A4B00070BD80F8642080F8845170BD90F866000B -:10A4C00010F0010F08BFFFDF216991F88C00401EDA -:10A4D00040B281F88C000028B8BFFFDF206990F8F7 -:10A4E000661021F0010100BF80F8661070BD21E008 -:10A4F00090F86500102818BFFFDF0121206980F85F -:10A500008D10112180F8651070BD90F86500142839 -:10A5100018BFFFDF0121206980F88D101521F1E7B8 -:10A5200090F86500152818BFFFDF1720216981F812 -:10A53000650070BD90F86500152818BFFFDF192071 -:10A54000216981F8650070BD90F865001B2818BF6F -:10A55000FFDF206980F88D5090F8B801002818BFFF -:10A56000FFDF206990F88E1049B180F88E50018885 -:10A57000A0F8BC1180F8BA5180F8B8610AE00188EF -:10A58000A0F8BC1180F8BA51012180F8BE110D214C -:10A5900080F8B8110088F6F799FCF6F731F92079C0 -:10A5A000F1F728FC206980F8655070BD90F88C1197 -:10A5B000042915D0206990F8661011F0020F08BF29 -:10A5C00070BD90F88C10491E49B280F88C1000299B -:10A5D000B8BFFFDF206990F8661021F0020183E721 -:10A5E00090F8642001230021583002F0EEF9002891 -:10A5F00008BFFFDF206990F8901011F0020F07BF2D -:10A60000062180F8641080F8885080F88C51D1E7DA -:10A6100090F8642001230021583002F0D6F9002878 -:10A6200008BFFFDF206980F8646070BD90F8661095 -:10A6300021F0040180F8661090F88C10491E49B290 -:10A6400080F88C100029A8BF70BDFFDF70BD00BF6F -:10A6500090F8642001230021583002F0B6F9002858 -:10A6600008BFFFDF1C20216981F8640070BD00BFB6 -:10A6700090F8660000F03000102818BFFFDF206956 -:10A6800090F8661021F0100180F8661090F88C1098 -:10A69000491E49B280F88C100029A8BF70BDD4E7CC -:10A6A00090F8642001230021583002F08EF9002830 -:10A6B00008BFFFDF1F20216981F8640070BD00BF63 -:10A6C00090F8650021281CBF0028FFDF22202169A7 -:10A6D00081F8650070BD3E49086990F8662012F067 -:10A6E000080F1EBF01208870704742F0080280F8F2 -:10A6F00066208969C97880F8C9100021A0F88A10FD -:10A7000090F88C10491C80F88C10704710B5304CB4 -:10A7100005212069FEF74CF8206990F84E100129B8 -:10A7200002BF022180F84E1010BD00F5D6710288DC -:10A73000A0F8D421028EA0F8D621828EA0F8D821CC -:10A74000028FB0F844309A4228BF1A46CA85828FD9 -:10A75000B0F84600824238BF10460886012081F8D2 -:10A7600026002079BDE81040F1F744BB184830B40A -:10A77000006990F84E30B0F832C0C48EB0F8401086 -:10A78000428F022B28D08A4238BF11460186C28FE1 -:10A79000B0F842108A4238BF11468186028FB0F865 -:10A7A00044108A4238BF11464186828FB0F8461065 -:10A7B0008A4238BF1146C186418E614588BF8C46AA -:10A7C000A0F832C0C18EA14288BF0C46C48601E009 -:10A7D000F000002030BC7047038E9A4228BF1A4612 -:10A7E000C58F838E9D4238BF2B468A4238BF1146A3 -:10A7F0000186B0F842108B4228BF0B4683860021A9 -:10A8000080F84E10CAE770B5FD4C206990F8CB1067 -:10A81000FE2906BFA178002970BD90F867200123AA -:10A820001946583002F0D1F8002818BF70BD2069D1 -:10A83000002590F8701159B1A0F8825090F871116C -:10A8400080F8CC10BDE8704000210220FEF786BEE3 -:10A8500090F8652001230421583002F0B6F8060074 -:10A860000CD0D4F810C09CF86500102861D01428D2 -:10A8700065D015287BD01B287ED0BEE0216991F8D9 -:10A88000660010F0010F05D0BDE8704001210920DD -:10A89000FEF764BE10F0020F0BD001210C20FEF772 -:10A8A0005DFE206990F8901041F0010180F8901051 -:10A8B00070BD10F0040F05D0BDE8704001211320D9 -:10A8C000FEF74CBE10F0080F09D091F8C90081F8CE -:10A8D000CC00BDE8704001210720FEF73FBE10F01C -:10A8E000100F02D091F89B0120B191F8650021284A -:10A8F00073D179E091F89A0188B1B1F89C01A1F87F -:10A900004000B1F89E01A1F84200B1F8A001A1F801 -:10A910004400B1F8A201A1F8460081F89A51FFF76E -:10A9200025FFFFF7F3FEBDE8704001211520FEF77B -:10A9300015BEBDE8704001210B20FEF70FBEF9F7F0 -:10A94000F7FA0C2838BF70BD08212069F030F9F7FC -:10A95000F3FA28B120690421C430F9F7EDFA00B9FF -:10A96000FFDFBDE8704001210420FEF7F7BD9CF831 -:10A97000730101280DD000E030E0022818BF70BD3F -:10A980009CF88E00D8B106208CF8CC000121022062 -:10A990001DE09CF8B801002818BF70BD0CF1B00391 -:10A9A00000220CF1E8010CF5BA7001F08AFF0121D8 -:10A9B0000520FEF7D3FD206980F8735170BD9CF827 -:10A9C000960010F0040F14BF11200D200121FEF796 -:10A9D000C5FD206980F8735170BD0EE0BDE8704080 -:10A9E00001210620FEF7BABD91F87D00C0B991F8AB -:10A9F000A40110B191F8A50190B1206901230021B3 -:10AA000090F86420583001F0E0FFC8B120690123BC -:10AA1000042190F86520583001F0D7FF30B10FE0E5 -:10AA2000BDE8704001211720FEF798BD206990F81D -:10AA30007C0028B1BDE8704000211220FEF78EBDD9 -:10AA4000206990F864200A2A2BD0002E18BF70BD10 -:10AA500001230021583001F0B8FF48B1206990F877 -:10AA60008C11042904BF90F8900010F0030F22D03D -:10AA700020690123002190F86420583001F0A5FFDF -:10AA800000287DD0206990F89A1111B190F89B119F -:10AA9000E9B190F8A411002972D090F8A511E9B39A -:10AAA000BDE090F8CA1080F8CC10BDE870400021DD -:10AAB0000720FEF753BD00210C20FEF74FFD206953 -:10AAC00090F8901041F0010180F8901070BDB0F83E -:10AAD0009C11A0F84010B0F89E11A0F84210B0F8F8 -:10AAE000A011A0F84410B0F8A211A0F8461080F808 -:10AAF0009A5190F8660010F0200F13D0FFF736FE41 -:10AB0000FFF704FE01211520FEF728FD206990F8CB -:10AB1000661021F0200141F0100100E008E080F80B -:10AB2000661070BDBDE8704000211420FEF716BD10 -:10AB300090F8652001230B21583001F046FFF8B949 -:10AB4000206990F85400012808BF012508D0022888 -:10AB500008BF022504D0042816BF08280325FFDFFC -:10AB6000206990F85500012808BF01260BD0022863 -:10AB700008BF022607D0042814BF0828032600E0D7 -:10AB80004DE018BFFFDFD4F810C0012D9CF8A601DE -:10AB900006D0022D07D0032D08BF042805D014E0ED -:10ABA000012812D101E002280FD19CF8A701012E43 -:10ABB00006D0022E07D0032E08BF04280FD004E0D1 -:10ABC000012802D10BE0022809D09CF8652001235E -:10ABD00003210CF1580001F0F8FE00BB16E0BCF8B0 -:10ABE00058309CF85410BCF8A8010CF5C77202F05C -:10ABF000A1F938B12169252081F8640070BD0000F9 -:10AC0000F00000200020FDF7A7FF08E020690123E5 -:10AC1000022190F86520583001F0D7FEB0B12069CC -:10AC20000123002190F86420583001F0CEFE002866 -:10AC300008BF70BD206990F88401002808BF70BD6E -:10AC40000021BDE87040FF20FEF788BCBDE87040E1 -:10AC500000211620FEF782BC30B5FB4C054620785B -:10AC6000002818BFFFDF657230BDF7490120087268 -:10AC700070472DE9F14FF54F39464D68284695F854 -:10AC8000551001F048FF95F8551080B211F00C0FE7 -:10AC90006FF00D0B7DD0B0F5747F38BF002006D368 -:10ACA0005038C11700EB91600BEBA01080B26E8E94 -:10ACB000864228BF0646E648DFF88C93C9F8240090 -:10ACC000786800F15808044609F13400678E40683E -:10ACD00094F8551090F86AA0204601F01CFF94F8F3 -:10ACE000551080B211F00C0F69D0B0F5747F38BFE9 -:10ACF000002406D35038C21700EB92600BEBA01073 -:10AD000084B2A74238BF3C46BAF1000F1CBF201DD9 -:10AD100084B2E0B2F9F7E8FE98F81200002859D0A2 -:10AD200008F15801CA4891E80E1000F5027484E851 -:10AD30000E10D8F86810C0F82112D8F86C10C0F8BE -:10AD4000251200F58170FAF711FAC0480078002842 -:10AD50000CBF0120002080F00101BE480176D8E937 -:10AD60001412C0E90412A0F58372D9F82410F9F77F -:10AD700060FD95F85500012808BF00220ED002287A -:10AD800008BF01220AD0042808BF032206D00828E1 -:10AD900000E008E01ABFFFDF00220222F1B201202A -:10ADA000F9F762FD1CE0022919BF0BEBD00080B25D -:10ADB0006FF00E0101EB90007FF479AF76E7022986 -:10ADC00019BF0BEBD00084B26FF00E0202EB9000C3 -:10ADD00097D195E7D9F82400FAF7C8F9F9F767FD94 -:10ADE000009850B195F82C00012808BFFAF791FAA5 -:10ADF000022089F80000BDE8F88F012295F855304F -:10AE000096211046FAF791F895F8550095F85610E6 -:10AE100010F00C0F08BF00219620FAF7C2F9E1E705 -:10AE20002DE9F04FDFF8248283B0414681464D681A -:10AE3000A1F11400009095F85D0005F15806012776 -:10AE4000A1F1340470B3012878D0022877D0032808 -:10AE500018BFFFDF74D0206A0823017821F00801B1 -:10AE60000170B27903EAC202114321F004010170BA -:10AE7000F279042303EA8202114321F010010170E8 -:10AE800096F805B0E06AF5F7B0FA8246FAF7A2FD47 -:10AE9000BBF1020F79D0BBF1010F77D0BBF1030FEB -:10AEA00075D089E000F0CAFB0146284601F044FE57 -:10AEB0001FFA80FB00F0C2FB10F00C0F6FF00D01C9 -:10AEC0004FF0000A20D0BBF5747F38BF504607D33F -:10AED000ABF15000C21700EB926001EBA01080B202 -:10AEE000298E814238BF0846ADF80800A5F8480011 -:10AEF0000098FAF74EFD90B1216AA77062694FF48D -:10AF00008060904703202CE0022819BF01EBDB0092 -:10AF100080B26FF00E0000EB9B00E1D1DFE701AAE9 -:10AF200002A9E06AF5F79CF9206210B196F8351095 -:10AF300039B10098FAF701FD77718CE713E016E05C -:10AF400026E09DF8041031B9A0F800A080F802A016 -:10AF5000012102F0C7FABDF80810206A02F001FCD6 -:10AF60000220707177E70098FAF7E7FC73E7B5F80D -:10AF70004800ADF8000001AA6946E06AF5F770F9EB -:10AF80002062002808BFFFDF65E708E00BE00EE065 -:10AF90000098FAF7FEFC002808BFFFDF5BE730EA05 -:10AFA0000A0009D106E030EA0A0005D102E0BAF150 -:10AFB000000F01D0012100E00021206A027842EA5E -:10AFC00001110170717C00291CBF7179012943D0E6 -:10AFD00006F158011E4891E80E1000F5027A8AE841 -:10AFE0000E10B16EC0F82112F16EC0F8251200F5F6 -:10AFF0008170FAF7BBF898F8000000280CBF012117 -:10B00000002114480176D6E91212C0E90412A0F515 -:10B010008371226AF9F70DFC95F85400012808BFE6 -:10B0200000220CD0022808BF012208D0042808BF43 -:10B03000032204D008281ABFFFDF00220222FB21CE -:10B040000020F9F711FC0BE014010020480100205A -:10B05000C80C0020D00E0020FAF788F8F9F727FC7A -:10B06000B9F1000F06D195F8543001229621002045 -:10B07000F9F75BFF6771206A0188E18180782074AD -:10B08000277003B0BDE8F08F2DE9F0471C46174646 -:10B0900081460D46FE4EDDF82080307828B9002F1D -:10B0A0001CBF002CB8F1000F00D1FFDFC6F81C80D8 -:10B0B000C6E90574C6E90D9500243472F471347143 -:10B0C000F4707471B471B470B481F24F05F1580822 -:10B0D0002888F5F70DFFF0622888F5F7F7FE306352 -:10B0E000F9F725FD95F95700F9F7B1FD05F11200C3 -:10B0F000FAF725F805F10E00F9F7B3FD38780028C6 -:10B100000CBF03200120FAF72EF898F81A00F9F77F -:10B11000B0FDFAF722F83878002804BFFF2095F830 -:10B12000545023D098F81260B5F8328095F8551035 -:10B13000284601F0F0FC95F8555080B215F00C0F40 -:10B140006FF00D0126D0B0F5747F06D35038C217CA -:10B1500000EB926001EBA01084B24046A04528BFEE -:10B160002046002E1CBF001D80B2C0B22946F9F750 -:10B17000BBFC38782A464FF00001B0B10120F9F746 -:10B18000A2FE7868D0F8E000F9F7F3FFBDE8F047D9 -:10B1900001206EE5022D19BF01EBD00084B26FF0E3 -:10B1A0000E0101EB9000D8D1D6E70020F9F78BFE15 -:10B1B000BDE8F047012033E6B64800B501783438E1 -:10B1C000007819B1022818BFFFDF00BD012818BFA1 -:10B1D000FFDF00BDAE4810B50078022818BFFFDFC2 -:10B1E000BDE8104000F0CCBA00F0CABAA8484079D7 -:10B1F0007047A74800797047A549012088717047BA -:10B200002DE9F0470600A348A14D406800F158041D -:10B21000686A90F8019018BF012E03D1296B09F0DC -:10B22000BBF96870687800274FF00108A0B10128C9 -:10B230003CD0022860D003281CBFFFDFBDE8F087A8 -:10B24000012E08BFBDE8F087286BF5F7C3FA687ACE -:10B25000BDE8F047F0F7CEBD012E14D0A86A002853 -:10B2600008BFFFDF6889C21CD5E9091009F072FC2C -:10B27000A86A686201224946286BF5F727F9022E71 -:10B2800008BFBDE8F087D4E91401401C41F100017A -:10B29000C4E91401E079012801D1E77101E084F8E3 -:10B2A0000780687ABDE8F047F0F7A4BD012E14D0FE -:10B2B000A86A002808BFFFDF6889C21CD5E9091009 -:10B2C00009F048FCA86A686200224946286BF5F735 -:10B2D000FDF8022E08BFBDE8F087D4E91410491C20 -:10B2E00040F10000C4E91410E07901280CBFE771B7 -:10B2F00084F80780BDE8F087012E06D0286BF5F7AB -:10B3000069FA022E08BFBDE8F087D4E91410491C81 -:10B3100040F10000C4E91410E0790128BFD1BCE776 -:10B320002DE9F0415B4F3846A7F13404406800F145 -:10B3300058052078012818BFFFDFA878012648B1FA -:10B340000021A970A670626904209047387800280F -:10B3500018BF2E71206A0321007831EA000004BF73 -:10B36000E878002805D1EE70216AA6706269022093 -:10B3700090470121002000F022FA18B1BDE8F04109 -:10B3800000F0FEB9BDE8F041002072E42DE9F14F74 -:10B39000404E4FF000083046A6F134054068317841 -:10B3A00000F1580A2878C146022818BFFFDFA88993 -:10B3B00040F40070A88171683078FF2091F8541033 -:10B3C000F9F792FB009800289AF8120000F0FD802F -:10B3D000F9F792FAF9F780FA012788B99AF812007A -:10B3E00070B1686A417859B100789AF80710C0F3D3 -:10B3F000C000884204D1EF70BDE8F84F00F0C0B93A -:10B40000686A41786981002908BFC5F8288003D09F -:10B41000286BF5F715F8A862A88940F02000A881EC -:10B4200085F804803078706800F1580B044690F875 -:10B430002C0001281AD1F9F762FF5946204601F085 -:10B4400080FA98B13078002870680CBF00F58A70D7 -:10B4500000F5F570218841809BF8081001719BF878 -:10B46000091041710770687AF0F7C4FC686A9AF8AD -:10B4700006100078C0F3800088423BD030787068B6 -:10B4800000F1580490F85D0080B302284CD003E02E -:10B49000140100204801002084F80580307800283D -:10B4A0001CBF2079002806D084F80480AF706A6938 -:10B4B000414610209047E07890B184F80380FAF775 -:10B4C00077FA002808BFFFDF0820AF706A69002103 -:10B4D0009047D4E91202411C42F10000C4E9121065 -:10B4E000A07901280CBF84F80680A771A88940F4D0 -:10B4F0008070A881686A9AF807300178C1F3C002A9 -:10B500009A424FD13278726801F0030102F1580477 -:10B51000012918BF022932D003291CBFE87940F065 -:10B52000040012D0E8713DE0E86AF4F7C5FE002897 -:10B5300008BFFFDFD4E91210491C40F10000C4E944 -:10B540001210687AF0F756FCA1E701F0E3FF90B122 -:10B55000A770A989384641F40061A981696AAF7072 -:10B560006A699047E079012803D100BF84F8078019 -:10B5700018E0E77116E0E87940F01000D2E7407873 -:10B58000F8B1A98941F40061A981A96A51B1FB28E8 -:10B59000F1D8287A002808BFB94603D080206A690C -:10B5A000002190470120009900F009F9B0B1B9F1EC -:10B5B000000F1CBF0020FFF723FEBDE8F84F00F08E -:10B5C000DFB8E0790128D4D1D0E7002818BFF9F717 -:10B5D000CCF9A88940F04000A881E3E7B9F1000F59 -:10B5E0001CBF0120FFF70CFE0020FFF719FCB9F18A -:10B5F000000F08BFBDE8F88F0220BDE8F84FFFE557 -:10B6000070B50D4606468E488D4900784C6850B19D -:10B61000F9F7FEF9034694F8542029463046BDE870 -:10B620007040FDF7EAB9F9F7F3F9034694F85420AE -:10B6300029463046BDE8704005F088BF804830B4E8 -:10B6400090F800C04268406802F1580192F86450D6 -:10B6500090F85400242D1CBF4B7B242B24D00821B0 -:10B6600001241F2D18BF202D47D0222B1CBF30BC1A -:10B67000704700BFBCF1000F04BF30BC704792F8A8 -:10B68000A63192F851201A4012F0040F5FD008281A -:10B6900018BF04286ED0082918BF04296AD00128D1 -:10B6A00018BF012969D062E0BCF1000F12D092F8F6 -:10B6B0009011002904BF30BC7047082818BF042827 -:10B6C00058D0082918BF042954D0012818BF0129CF -:10B6D00053D04CE092F8F210002904BF30BC704700 -:10B6E000082818BF042845D0082918BF042941D0CC -:10B6F000012818BF012940D039E0222BBAD0BCF173 -:10B70000000F04BF30BC704792F8A62112F0040F5E -:10B710000CD0082818BF04282CD0082918BF0429E9 -:10B7200028D0012818BF012927D020E012F0010FEE -:10B7300018BF2146EDD112F0020F04BF30BC704794 -:10B74000082818BF042815D0012816D00FE012F0E1 -:10B75000010F18BF21469AD112F0020F04BF30BC6E -:10B760007047082818BF042804D0012805D030BC31 -:10B770000220704730BC0820704730BC0120704761 -:10B780002F4910B54C68F9F799FDF9F74DFDF9F718 -:10B790007DFCF9F7DAFCF9F78AF894F82C00012817 -:10B7A00008BFF9F7ACFD274C00216269A0899047DA -:10B7B000E269E179E07890470020207010BD70B513 -:10B7C000204C0546002908BF012D05D12079401CD9 -:10B7D000C0B22071012831D8A169284688470028C5 -:10B7E0002CD0A179184839B1012D01BF4178002929 -:10B7F000017811F0100F21D0E179F9B910490978D9 -:10B80000002908BF012D05D000290CBF012100210E -:10B81000294311D10D49097811F0100F04BF0078A8 -:10B8200010F0100F0AD0A07840B9A06A20B9608942 -:10B8300010B111F0100F01D0002070BD012070BDBB -:10B840004801002014010020C80C00202201002023 -:10B8500010B540F2C311F74809F0FBF9FF220821A7 -:10B86000F54809F0EEF9F548002141704FF4617197 -:10B87000418010BD2DE9F0410E46054600F046FB23 -:10B88000EC4C102816D004EBC00191F84A0110F0DE -:10B89000010F1CBF0120BDE8F081607808283CBF83 -:10B8A000012081F84A011CD26078401C60700120A0 -:10B8B000BDE8F0816078082813D222780127501C57 -:10B8C000207004EBC2083068C8F84401B088A8F8BA -:10B8D0004801102A28BFFFDF88F8435188F84A71D1 -:10B8E000E2E70020BDE8F081D2480178491E4BB262 -:10B8F000002BB8BF704770B45FF0000500EBC301C8 -:10B9000091F84A1111F0010F3BD04278D9B2521E82 -:10B91000427000EBC10282F84A5190F802C0002246 -:10B92000BCF1000F0BD9841894F803618E4202D148 -:10B93000102A26D103E0521CD2B29445F3D80278E3 -:10B94000521ED2B202708A421BD000EBC20200EB40 -:10B95000C10CD2F84341CCF84341D2F84721CCF88E -:10B960004721847890F800C00022002C09D986185D -:10B9700096F8036166450AD1102A1CBF024482F87A -:10B980000311591E4BB2002BB8DA70BC7047521C21 -:10B99000D2B29442EBD8F4E72DE9F05F1F4690460F -:10B9A0000E46814600F0B2FAA24D0446102830D06F -:10B9B000A878002100280ED96A1892F80331A34212 -:10B9C00005D110291CBF1220BDE8F09F03E0491CDF -:10B9D000C9B28842F0D8082834D2102C1CD0AE78D6 -:10B9E0001022701CA87005EB061909F103004146EE -:10B9F00000F056FF09F183001022394600F050FF95 -:10BA0000A819002180F8034180F83B110846BDE8E1 -:10BA1000F09FA878082815D22C78CA46601C287098 -:10BA200005EBC4093068C9F84401B0884FF0000B39 -:10BA3000A9F84801102C28BFFFDF89F843A189F835 -:10BA40004AB1CCE70720BDE8F09F70B4794881780F -:10BA5000491E4BB2002BBCBF70BC704703F0FF0CFB -:10BA60008178491ECAB2827050FA83F191F80311AD -:10BA700094453ED000EB021500EB0C14D5F80360A2 -:10BA8000C4F80360D5F80760C4F80760D5F80B6008 -:10BA9000C4F80B60D5F80F60C4F80F60D5F8836068 -:10BAA000C4F88360D5F88760C4F88760D5F88B60E8 -:10BAB000C4F88B60D5F88F50C4F88F50851800EB10 -:10BAC0000C0402EB420295F803610CEB4C0C00EB0A -:10BAD000420284F8036100EB4C0CD2F80B61CCF805 -:10BAE0000B61B2F80F21ACF80F2195F83B2184F8D7 -:10BAF0003B2100EBC10292F84A2112F0010F33D131 -:10BB000090F802C00022BCF1000F0BD9841894F801 -:10BB100003518D4202D1102A26D103E0521CD2B229 -:10BB20009445F3D80278521ED2B202708A421BD0DA -:10BB300000EBC20200EBC10CD2F84341CCF8434108 -:10BB4000D2F84721CCF84721847890F800C0002231 -:10BB5000002C09D9851895F8035165450BD1102A99 -:10BB60001CBF024482F80311591E4BB2002BBFF6D2 -:10BB700075AF70BC7047521CD2B29442EAD8F3E75A -:10BB80002E49487070472D484078704738B14AF2C6 -:10BB9000B811884203D82949488001207047002005 -:10BBA000704726484088704710B500F0AFF910285C -:10BBB00014D0204A0146002092F802C0BCF1000FC8 -:10BBC0000CD9131893F803318B4203D1102818BFF6 -:10BBD00010BD03E0401CC0B28445F2D8082010BD5F -:10BBE00014498A78824286BF01EB0010833000201E -:10BBF000704710498A78824286BF01EB0010C01C52 -:10BC0000002070470B4B93F802C084459CBF002076 -:10BC10007047184490F8030103EBC00090F84331DB -:10BC20000B70D0F844111160B0F8480190800120E9 -:10BC300070470000F80E00205A010020500100203B -:10BC4000FE4A114491F80321FD490A7002684A60D6 -:10BC500080880881704710B5F8F79AFD002804BF66 -:10BC6000FF2010BDBDE81040F8F7B8BDF3498A7851 -:10BC700082429CBF00207047084490F8030101EB0A -:10BC8000C00090F84A0100F0010070472DE9F0472C -:10BC9000EA4F0026B0463878002886BF4FF0080AE1 -:10BCA000DFF8A093BDE8F08707EBC80505F5A271A2 -:10BCB00095F8430100F02AF9102808BF544610D027 -:10BCC000B978002400290BD93A1992F8032182424D -:10BCD00002D1102C05D103E0621CD4B2A142F3D8EA -:10BCE0000824B878A04286BF07EB0410C01C0020CF -:10BCF00095F84A1111F0010F16D050B1082C04D25A -:10BD0000391991F83B11012903D0102100F0A5FD4C -:10BD100050B109F806403046731C95F8432105F5EB -:10BD2000A271DEB2F8F76BFF08F1010000F0FF0826 -:10BD300038784045B8D8BDE8F0872DE9F041BF4CD0 -:10BD400000263546A07800288CBFBE4FBDE8F081A4 -:10BD50006119C0B291F80381A84286BF04EB0510B7 -:10BD6000C01C002091F83B11012903D0102100F0E4 -:10BD700074FD58B104EBC800BD5590F8432100F59F -:10BD8000A2713046731CDEB2F8F739FF681CC5B2E9 -:10BD9000A078A842DCD8BDE8F08110B5F8F759FFCB -:10BDA000002804BF082010BDF8F757FFA549085C1C -:10BDB00010BD0A46A24910B5497841B19F4B997808 -:10BDC00029B10244D81CF8F780FC012010BD0020E6 -:10BDD00010BD9A4A01EB410102EB41010268C1F832 -:10BDE0000B218088A1F80F0170472DE9F041934D98 -:10BDF00007460024A878002898BFBDE8F081C0B2AB -:10BE0000A04213D905EB041010F183060ED01021C7 -:10BE1000304600F022FD48B904EB440005EB400039 -:10BE200000F20B113A463046F9F751FE601CC4B2DD -:10BE3000A878A042E3D8BDE8F081014610228248EC -:10BE400000F02EBD8048704770B57C4D0446A87840 -:10BE5000A04206D905EB04101021833000F0FDFC50 -:10BE600008B1002070BD04EB440005EB400000F277 -:10BE70000B1070BD71498A78824206D9084490F847 -:10BE80003B01002804BF01207047002070472DE9C6 -:10BE9000F0410E46074615460621304600F0DDFC0F -:10BEA000664C98B1A17871B104F59D7011F0010F45 -:10BEB00018BF00F8015FA178490804D0457000F868 -:10BEC000025F491EFAD10120BDE8F08138463146B3 -:10BED00000F01CF8102816D0A3780021002B12D9EE -:10BEE000621892F80321824209D1102918BF08294B -:10BEF00009D0601880F83B510120BDE8F081491C51 -:10BF0000C9B28B42ECD80020BDE8F0812DE9F041A8 -:10BF10004A4D0646002428780F46002812D900BF53 -:10BF200005EBC40090F84311B14206D10622394610 -:10BF300000F5A27008F0E2FD38B1601CC4B22878A8 -:10BF4000A042EDD81020BDE8F0812046BDE8F08188 -:10BF50003A4910B44A7801EBC003521E4A700022DD -:10BF600083F84A2191F802C0BCF1000F0DD98B185B -:10BF700093F80341844204D1102A1CBF10BC7047BF -:10BF800003E0521CD2B29445F1D80A78521ED2B2C4 -:10BF90000A70824204BF10BC704701EBC00301EB82 -:10BFA000C202D2F843C1C3F843C1D2F84721C3F853 -:10BFB00047218C7891F800C00022002C9CBF10BC57 -:10BFC00070478B1893F80331634506D1102A1CBFC4 -:10BFD000114481F8030110BC7047521CD2B2944244 -:10BFE000EFD810BC704770B414490D188A78521EEF -:10BFF000D3B28B7095F80321984247D001EB031C14 -:10C0000001EB0014DCF80360C4F80360DCF807609F -:10C01000C4F80760DCF80B60C4F80B60DCF80F6054 -:10C02000C4F80F60DCF88360C4F88360DCF88760D4 -:10C03000C4F88760DCF88B6008E00000F80E002090 -:10C04000500100205A010020BB100020C4F88B6072 -:10C05000DCF88FC0C4F88FC001EB030C03EB430383 -:10C060009CF8034100EB400001EB430385F80341DA -:10C0700001EB4000D3F80B41C0F80B41B3F80F318E -:10C08000A0F80F319CF83B0185F83B0101EBC200A1 -:10C0900090F84A0110F0010F1CBF70BC70470020DF -:10C0A0008C78002C0DD90B1893F803C1944504D15A -:10C0B00010281CBF70BC704703E0401CC0B2844213 -:10C0C000F1D80878401EC0B20870904204BF70BC1E -:10C0D000704701EBC20301EBC000D0F843C1C3F8C5 -:10C0E00043C1D0F84701C3F847018C780B78002092 -:10C0F000002C9CBF70BC704701EB000C9CF803C186 -:10C100009C4506D110281CBF084480F8032170BC50 -:10C110007047401CC0B28442EED870BC704700002B -:10C1200010B50A7B02F01F020A73002202768B18F8 -:10C130001B7A03F0010C5B0803F00104A4445B08C4 -:10C1400003F00104A4445B0803F00104A4445B0869 -:10C1500003F0010464444FEA530C0CF00103234440 -:10C160004FEA5C0C0CF00104234403EB5C0300EB8E -:10C17000020C521C8CF8133090F818C0D2B26344F1 -:10C180000376052AD3D3D8B2252888BFFFDF10BD98 -:10C190000023C383428401EBC202521EB2FBF1F1C1 -:10C1A0000184704770B50025044603290DD04FF473 -:10C1B000FA4200297BD0012978D0022918BF70BD2E -:10C1C0000146BDE870405830AAE704F158067821CE -:10C1D000304608F060FDB571F57135737573F57310 -:10C1E000357475717576B576212086F83E0041204C -:10C1F00086F83F00FE2086F8730084F82C502584D2 -:10C20000012084F8540084F85500282184F8561041 -:10C210001B21218761874FF4A471E187A1871B212E -:10C22000218661864FF4A471E186A1861B21A4F8C2 -:10C230004010A4F844104FF4A471A4F84610A4F8D8 -:10C2400042101B21A4F84A10A4F84C10A4F848107E -:10C2500060734FF448606080A4F8D050A4F8D250C6 -:10C26000A4F8D450A4F8D650A4F8D850A4F8DA50C2 -:10C2700084F8DD5084F8DF50A4F8E65084F8E450E8 -:10C28000A4F8F850A4F8FA5084F89A5184F89B5115 -:10C2900084F8A45184F8A55184F8685184F8705149 -:10C2A00084F8735184F88C5170BD00E041E0A4F82B -:10C2B000E65084F8DE506088FE490144B1FBF0F19D -:10C2C000A4F878104BF68031A4F87A10E388A4F82B -:10C2D0007E50B4F882C0DB000CFB00FCB3FBF0F333 -:10C2E0009CFBF0FC5B1CA4F882C09BB203FB00FC2F -:10C2F00004F15801A4F88030BCF5C84FC4BF5B1EE0 -:10C300000B85B2FBF0F2521CCA8500F5802202F5C3 -:10C31000EE32531EB3FBF0F20A84CB8B03FB00F228 -:10C32000B2FBF0F0C883214604F15800BDE870402C -:10C33000F6E6A4F8E650B4F89411B4F89831B4F8DD -:10C3400002C004F15800A4F87E50B4F88240DB002B -:10C3500004FB0CF4B3FBF1F394FBF1F45B1C448598 -:10C360009BB203FB01F40385B4F5C84FC4BF5B1E49 -:10C370000385B2FBF1F2521CC285428C01EBC20272 -:10C38000521EB2FBF1F20284C28B02FB0CF2B2FB32 -:10C39000F1F1C18370BD70B50025044603290DD0AD -:10C3A0004FF4FA42002963D001297DD0022918BF39 -:10C3B00070BD0146BDE870405830B1E604F1580642 -:10C3C0007821304608F067FCB571F57135737573E7 -:10C3D000F573357475717576B576212086F83E0053 -:10C3E000412086F83F00FE2086F8730084F82C5028 -:10C3F0002584012084F8540084F85500282184F80D -:10C4000056101B21218761874FF4A471E187A18712 -:10C410001B21218661864FF4A471E186A1861B2130 -:10C42000A4F84010A4F844104FF4A471A4F84610E6 -:10C43000A4F842101B21A4F84A10A4F84C10A4F848 -:10C4400048106073A4F8D850202084F8DA0084F8EB -:10C45000D050C4F8D45084F8045184F8055184F8BD -:10C460000E5184F80F5184F8F45084F8005170BDD7 -:10C47000608890490144B1FBF0F1A4F878104BF6C4 -:10C480008031A4F87A10E388A4F87E50B4F882C012 -:10C49000DB000CFB00FC9CFBF0FCB3FBF0F304F1B5 -:10C4A0005801A4F882C000E022E05B1C9BB203FBB1 -:10C4B00000FCA4F88030BCF5C84FC4BF5B1E0B85E0 -:10C4C000B2FBF0F2521CCA8500F5802202F5EE3272 -:10C4D000531EB3FBF0F20A84CB8B03FB00F2B2FBDA -:10C4E000F0F0C883214604F15800BDE8704017E61B -:10C4F000D4F8F830B4F802C004F158005989DB8947 -:10C50000A4F87E50B4F88240DB0004FB0CF4B3FBCB -:10C51000F1F394FBF1F45B1C44859BB203FB01F443 -:10C520000385B4F5C84FC4BF5B1E0385B2FBF1F2AF -:10C53000521CC285428C01EBC202521EB2FBF1F2C8 -:10C540000284C28B02FB0CF2B2FBF1F1C18370BD1D -:10C550002DE9F003047E0CB1252C03D9BDE8F003CE -:10C5600012207047002A02BF0020BDE8F003704788 -:10C5700091F80DC01F2601234F4D4FF00008BCF16C -:10C58000000F73D0BCF1010F1EBF1F20BDE8F003E8 -:10C590007047B0F800C00A7C8F7B91F80F907A400A -:10C5A0004F7C87EA090742EA072282EA0C0C00273F -:10C5B0000CF0FF094FEA1C2C99FAA9F99CFAACFC83 -:10C5C0004FEA19694FEA1C6C49EA0C2C0CEB0C1C65 -:10C5D0007F1C9444FFB21FFA8CFC032FE8D38CEA33 -:10C5E000020C354F0022ECFB057212096FF0240596 -:10C5F00002FB05C2D2B201EBD207427602F0070578 -:10C600003F7A03FA05F52F4218BF82767ED104FBEC -:10C610000CF2120C521CD2B25FF0000400EB040CBE -:10C620009CF813C094453CBFA2EB0C02D2B212D3CB -:10C630000D194FF0000C2D7A03FA0CF73D421CBF88 -:10C64000521ED2B2002A71D00CF1010C0CF0FF0C7A -:10C65000BCF1080FF0D304F1010C0CF0FF04052C21 -:10C66000DCD33046BDE8F0037047FFE790F819C00F -:10C670000C7E474604FB02C20F4C4FF0000CE2FB5D -:10C68000054C4FEA1C1C6FF024040CFB0422D2B2B0 -:10C6900001EBD204427602F0070C247A03FA0CFC78 -:10C6A00014EA0C0F1FBF82764046BDE8F0037047C6 -:10C6B00004E00000FFDB050053E4B36E90F818C0FF -:10C6C000B2FBFCF40CFB1422521CD2B25FF000044B -:10C6D00000EB040C9CF813C094453CBFA2EB0C0289 -:10C6E000D2B212D30D194FF0000C2D7A03FA0CF8C8 -:10C6F00015EA080F1CBF521ED2B27AB10CF1010C20 -:10C700000CF0FF0CBCF1080FF0D300E011E004F1D5 -:10C71000010C0CF0FF04052CDAD3A2E70CEBC401EA -:10C7200081763846BDE8F0037047FFE70CEBC401A3 -:10C7300081764046BDE8F0037047FC4A0168126804 -:10C740001140FB4A126811430160704730B4F94947 -:10C75000F64B00244FF0010C0A78521CD2B20A703A -:10C76000202A08BF0C700D781A680CFA05F52A42C9 -:10C77000F2D0097802680CFA01F15140016030BC36 -:10C78000704770B46FF01F02010C02EA90251F235E -:10C79000A1F5AA4054381CBFA1F5AA40B0F155003C -:10C7A00009D0A1F52850AA381EBFA1F52A40B0F142 -:10C7B000AA00012000D100204FF0000C6246644620 -:10C7C0008CEA0106F6431643B6F1FF3F11D005F09F -:10C7D00001064FEA5C0C4CEAC63C03F00106520825 -:10C7E0006D085B08641C42EAC632162CE8D370BCA4 -:10C7F000704770BC00207047017931F01F0113BFF2 -:10C80000002000221146704710B4435C491C03F01D -:10C81000010C5B0803F00104A4445B0803F001046D -:10C82000A4445B0803F00104A4445B0803F0010482 -:10C83000A4445B0803F001045B08A44403F0010472 -:10C84000A4440CEB53031A44D2B20529DDDB012AC0 -:10C850008CBF0120002010BC704730B40022A1F131 -:10C86000010CBCF1000F11DD431E11F0010F08BFD8 -:10C8700013F8012F5C785FEA6C0C07D013F8025FA5 -:10C8800022435C782A43BCF1010CF7D1491E5CBFFE -:10C89000405C0243002A0CBF0120002030BC7047DE -:10C8A000130008BF704710B401EB030CD41A1CF836 -:10C8B00001CC5B1E00F804C013F0FF03F4D110BCE0 -:10C8C0007047F0B58DB0164610251C466A46AC463A -:10C8D00000EB0C03A5EB0C0713F8013CD355ACF1AE -:10C8E000010313F0FF0CF3D11546103210208446DB -:10C8F0000B18ACEB000713F8013C401ED35510F0A9 -:10C90000FF00F5D1284606F0F3FF86B1102005F1AF -:10C91000200201461318A1EB000C13F8013C401E45 -:10C9200004F80C3010F0FF00F4D10DB0F0BD089801 -:10C930002060099860600A98A0600B98E0600DB0D4 -:10C94000F0BD38B505460C466846F8F7EDFC002802 -:10C9500008BF38BD9DF900202272A07E607294F954 -:10C960000A100020511A48BF494295F82D308B42D9 -:10C97000C8BF38BDFF2B08BF38BDE17A491CC9B21A -:10C98000E17295F82E30994203D8A17A7F2918BF19 -:10C9900038BDA2720020E072012038BD0C2818BFFB -:10C9A0000B2810D00D2818BF1F280CD0202818BF26 -:10C9B000212808D0222818BF232804D024281EBFED -:10C9C000262800207047012070470C2963D2DFE839 -:10C9D00001F006090E13161B323C415C484E002A3A -:10C9E0005BD058E0072A18BF082A56D053E00C2A1B -:10C9F00018BF0B2A51D04EE00D2A4ED04BE0A2F1C9 -:10CA00000F000C2849D946E023B1A2F110000B28F1 -:10CA100043D940E0122A18BF112A3ED090F83600C0 -:10CA200020B1122A37D31A2A37D934E0162A32D342 -:10CA30001A2A32D92FE0A2F10F0103292DD990F83B -:10CA4000360008B31B2A28D925E0002B08BF042A8A -:10CA500021D122E013B1062A1FD01CE0012A1AD1ED -:10CA60001BE01C2A1CBF1D2A1E2A16D013E01F2AF9 -:10CA700018BF202A11D0212A18BF222A0DD0232A1C -:10CA80001CBF242A262A08D005E013B10E2A04D0A0 -:10CA900001E0052A01D000207047012070472DE9F0 -:10CAA000F04187680D4604462046F6F7DAFB98B158 -:10CAB000D5B13846A168F6F715FF002814DD2844E3 -:10CAC000401EB0FBF5F606FB05F13846F5F705FF0D -:10CAD000A0603046BDE8F081F6F7F6F940F2337118 -:10CAE000F5F7FBFEA060DFE70020BDE8F081904293 -:10CAF00028BF704770B50446101B642838BF6420F7 -:10CB000025188D4205D8F6F720FF00281CBF2846BF -:10CB100070BD204670BDC08E11F00C0F08BF70476D -:10CB2000B0F5296F38BF4FF42960704748520200B2 -:10CB30004C520200620100200246808E11F00C0F60 -:10CB400008BF704792F85530D18E13F00C0F04D007 -:10CB5000B1F5296F38BF4FF42961538840F2E24C98 -:10CB600003FB0CF3528E4FF4747C0CEB821C8C454F -:10CB70009CBF910101F57471591AA1F59671884213 -:10CB800028BF0846B0F5296F38BF4FF429607047B9 -:10CB9000084418449830002A14BF04210021084496 -:10CBA0007047F0B4002A14BF08220122002B14BFE2 -:10CBB0000824012412F00C0F8B8ECA8E25D091F818 -:10CBC0005550944615F00C0F04D0BCF5296F38BFB2 -:10CBD0004FF4296C4D8840F2E2466E434D8E4FF47F -:10CBE000747707EB851767459CBF4FEA851C0CF5EA -:10CBF000747CA6EB0C0CACF5967C634528BF6346B1 -:10CC0000B3F5296F38BF4FF4296314F00C0F04D02B -:10CC1000B2F5296F38BF4FF429621FFA83FC002850 -:10CC20000CBF0123002391F8560014F00C0F08BF2D -:10CC300000200CEB020108449830002B14BF0421A3 -:10CC400000210844F0BC70472DE9F00391F854200E -:10CC50000B8E12F00C0F4FF474771CBF07EB83138D -:10CC60009CB255D012F00C0F8B8ECA8E4D8E91F85F -:10CC700055C021D016461CF00C0F04D0B6F5296F14 -:10CC800038BF4FF42966B1F8028040F2E24908FB50 -:10CC900009F807EB8519B14502D8AE0106F574769F -:10CCA000A8EB0606A6F59676B34228BF3346B3F541 -:10CCB000296F38BF4FF42963A34228BF23469CB293 -:10CCC0001CF00C0F1CBF07EB85139BB228D000BFD4 -:10CCD0001CF00C0F04D0B2F5296F38BF4FF4296255 -:10CCE0009A4228BF1A4600280CBF0123002391F85E -:10CCF00056001CF00C0F08BF0020A1180844983003 -:10CD0000002B14BF042100210844BDE8F003704744 -:10CD1000022A07BF9B003C33DB0070339CB2A1E7C3 -:10CD2000BCF1020F07BFAB003C33EB0070339BB28A -:10CD3000CEE710F0010F1CBF0120704710F0020F6A -:10CD40001CBF0220704710F0040018BF0820704775 -:10CD50002DE9F0470446174689464FF0010808467A -:10CD600000F0D1FC0546484600F0D1FC10F0010F60 -:10CD700018BF012625D000BF15F0010F18BF0123F1 -:10CD80002AD000BF56EA030108BF4FF0000810F098 -:10CD9000070F08BF002615F0070F08BF002394F8FF -:10CDA0005400B0420CBF00203046387094F8551043 -:10CDB000994208BF00237B70002808BF002B25D1B3 -:10CDC00015E010F0020F18BF0226D5D110F0040FA5 -:10CDD00014BF08260026CFE715F0020F18BF022364 -:10CDE000D0D115F0040F14BF08230023CAE748462A -:10CDF00000F093FCB4F85810401A00B247F6FE71E8 -:10CE0000884201DC002801DC4FF0000816B1082E32 -:10CE10000CD018E094F85400012818BF022812D052 -:10CE200004281EBF0828FFDF032D0CD194F8A401AD -:10CE300048B1B4F8A801012894F8540006D0082895 -:10CE400001D0082038704046BDE8F087042818BF9C -:10CE50000420F7D1F5E7012814BF0228704710F02D -:10CE60000C0018BF0420704738B4CBB2C1F3072CB4 -:10CE7000C1B2C0F30724012B07D0022B09D0042B29 -:10CE800008BFBCF1040F2DD006E0BCF1010F03D1A7 -:10CE900028E0BCF1020F25D0012906D0022907D0D5 -:10CEA000042908BF042C1DD004E0012C02D119E094 -:10CEB000022C17D001EA0C0161F3070204EA030116 -:10CEC00061F30F22D1B211F0020F18BF022310D06C -:10CED000C2F307218DF8003011F0020F18BF0221B4 -:10CEE0001BD111E0214003EA0C03194061F3070252 -:10CEF000E6E711F0010F18BF0123E9D111F0040F8B -:10CF000014BF08230023E3E711F0010F18BF01212C -:10CF100003D111F0040118BF08218DF80110082B6E -:10CF200001BF000C012804208DF80000BDF80000AE -:10CF300038BC70474FF0000C082902D0042909D0F2 -:10CF400011E001280FD10420907082F803C01380F3 -:10CF500001207047012806D00820907082F803C095 -:10CF600013800120704700207047162A10D12A2212 -:10CF70000C2818BF0D280FD04FF0230C1F280DD000 -:10CF800031B10878012818BF002805D0162805D02F -:10CF900000207047012070471A70FBE783F800C03B -:10CFA000F8E7012908D002290BD0042912BF08296B -:10CFB00040F6A660704707E0002804BF40F2E24058 -:10CFC000704740F6C410704700B5FFDF40F2E24002 -:10CFD00000BD0000282107F03CBE4078704730B506 -:10CFE0000546007801F00F0220F00F001043287072 -:10CFF000092910D2DFE801F0050705070509050B2F -:10D000000D00062409E00C2407E0222405E0012499 -:10D0100003E00E2401E00024FFDF6C7030BD0078D7 -:10D0200000F00F0070470A68C0F803208988A0F854 -:10D0300007107047D0F803200A60B0F80700888016 -:10D0400070470A68C0F809208988A0F80D10704759 -:10D05000D0F809200A60B0F80D0088807047027887 -:10D06000402322F0400203EA81111143017070470E -:10D070000078C0F3801070470278802322F080028D -:10D0800003EAC1111143017070470078C00970476D -:10D09000027802F00F02072A16BF082AD0F80520EE -:10D0A000D0F80320C1F809200CBFB0F80920B0F86F -:10D0B0000720A1F80D200A7822F080020A7000787B -:10D0C000800942EAC0100870704770B514460E46D9 -:10D0D00005461F2A88BFFFDF2246314605F10900B9 -:10D0E00007F038FDA01D687070BD70B544780E461D -:10D0F0000546062C38BFFFDFA01F84B21F2C88BF57 -:10D100001F24224605F10901304607F023FD204681 -:10D1100070BD70B514460E4605461F2A88BFFFDF56 -:10D120002246314605F1090007F014FDA01D687084 -:10D1300070BD70B544780E460546062C38BFFFDF3B -:10D14000A01F84B21F2C88BFFFDF224605F1090112 -:10D15000304607F0FFFC204670BD0968C0F80F108C -:10D1600070470A88A0F8132089784175704790F8B5 -:10D17000242001F01F0122F01F02114380F8241027 -:10D180007047072988BF072190F82420E02322F068 -:10D19000E00203EA4111114380F8241070471F3068 -:10D1A00007F08EBE10B5044600F0E3FA002818BF61 -:10D1B000204410BDC17811F03F0F1BBF027912F05F -:10D1C000010F0022012211F03F0F1BBF037913F062 -:10D1D000020F002301231A4402EB4202530011F014 -:10D1E0003F0F1BBF027912F0080F0022012203EB50 -:10D1F000420311F03F0F1BBF027912F0040F00220F -:10D200000122134411F03F0F1BBF027912F0200FCF -:10D210000022012202EBC20203EB420311F03F0F96 -:10D220001BBF027912F0100F0022012202EB420212 -:10D230001A4411F03F0F1BBF007910F0400F00207F -:10D240000120104410F0FF0014BF01210021084408 -:10D25000C0B2704770B50278417802F00F02082A18 -:10D260004DD2DFE802F004080B4C4C4C0F14881F21 -:10D270001F280AD943E00C2907D040E0881F1F2847 -:10D2800003D93CE0881F1F2839D8012070BD4A1EF1 -:10D29000242A34D88446C07800258209032A09D07C -:10D2A00000F03F04601C884204D86046FFF782FF0C -:10D2B000A04201D9284670BD9CF803004FF001063A -:10D2C00010F03F0F1EBF1CF10400007810F0100F8B -:10D2D00013D064460421604600F04BFA002818BFC2 -:10D2E00014EB0000E6D0017801F03F012529E1D2DE -:10D2F00080780221B1EB501FDCD3304670BD002096 -:10D3000070BDC078800970470178002201F00F03DA -:10D310000121042B0BD0082B1CBF00207047437841 -:10D320000E2B04BFC3785FEA931C04D106E040785B -:10D33000801F1F2800D911460846704713F03F0F81 -:10D340001EBF007910F0010F10F0020FF4D1F2E7C8 -:10D3500010B4017801F00F01032920D0052921D153 -:10D360004478B0F81910B0F81BC0B0F81730827DBF -:10D37000222C17D1062915D3B1F5486F98BFBCF5FB -:10D38000FA7F0FD272B1082A98BF8A420AD28B4222 -:10D390009CBFB0F81D00B0F5486F03D805E0407899 -:10D3A0000C2802D010BC0020704710BC0120704730 -:10D3B0002DE9F0411F4614460D00064608BFFFDF69 -:10D3C0002146304600F0D5F9040008BFFFDF3019D0 -:10D3D0003A462946BDE8F04107F0BCBBC07800F0F2 -:10D3E0003F007047C02202EA8111C27802F03F027A -:10D3F0001143C1707047C9B201F00102C1F340038B -:10D400001A4402EB4202C1F3800303EB4202C1F370 -:10D41000C00302EB4302C1F3001303EB43031A44BE -:10D42000C1F3401303EBC30302EB4302C1F38013C8 -:10D430001A4412F0FF0202D0521CD2B20171C3781A -:10D4400002F03F0103F0C0031943C170511C417049 -:10D4500070472DE9F0410546C078164600F03F04BC -:10D46000C4F124000F46B042B8BFFFDF281932468E -:10D470003946001D07F06EFBA019401C6870BDE81E -:10D48000F0812DE9F04105464478C0780F4600F060 -:10D490003F06002C08BFFFDFA01B401E84B21F2CDC -:10D4A00088BF1F242FB1A819011D2246384607F056 -:10D4B00051FB2046BDE8F0814078704700B5027806 -:10D4C00001F0030322F003021A430270012914BF82 -:10D4D0000229002104D0032916BFFFDF012100BD6E -:10D4E000417000BD00B5027801F0030322F0030291 -:10D4F0001A430270012914BF0229002104D0032914 -:10D5000016BFFFDF012100BD417000BD007800F0B3 -:10D5100003007047417889B1C0780E2818BF0F28E2 -:10D5200003D0102818BF192802D3FB2904D905E01D -:10D53000BF4A105C884201D101207047002070472B -:10D5400030B501240546C17019293CBFB848445C78 -:10D5500002D3FF2918BFFFDF6C7030BD70B51546D0 -:10D560000E4604461B2A88BFFFDF65702A463146F7 -:10D57000E01CBDE8704007F0EDBAB0F80700704756 -:10D58000B0F809007047C172090A01737047B0F81A -:10D590000B00704730B4B0F80720A64DB0F809C0B2 -:10D5A000B0F805300179941F2D1998BFBCF5FA7FAA -:10D5B0000ED269B1082998BF914209D293429FBF08 -:10D5C000B0F80B00B0F5486F012030BC98BF704731 -:10D5D000002030BC7047001D07F072BC021D0846D9 -:10D5E000114607F06DBCB0F809007047007970472C -:10D5F0000A68426049688160704742680A608068D2 -:10D600004860704709888181704780890880704729 -:10D610000A68C0F80E204968C0F812107047D0F8A8 -:10D620000E200A60D0F81200486070470968C0F800 -:10D6300016107047D0F81600086070470A684260FC -:10D6400049688160704742680A6080684860704736 -:10D650000968C1607047C06808607047007970470A -:10D660000A68426049688160704742680A60806861 -:10D67000486070470171090A417170478171090A58 -:10D68000C17170470172090A417270478172090ABB -:10D69000C172704780887047C088704700897047A2 -:10D6A0004089704701891B2924BF4189B1F5A47FB6 -:10D6B00007D381881B2921BFC088B0F5A47F012032 -:10D6C0007047002070470A6842604968816070476F -:10D6D00042680A60806848607047017911F0070F5E -:10D6E0001BBF407910F0070F00200120704701791F -:10D6F00011F0070F1BBF407910F0070F0020012029 -:10D7000070470171704700797047417170474079E7 -:10D7100070478171090AC1717047C088704746A27D -:10D7200082B0D2E90012CDE900120179407901F00E -:10D73000070269461DF80220012A07D800F00700F9 -:10D74000085C01289EBF012002B07047002002B093 -:10D750007047017170470079704741717047407997 -:10D76000704730B50C460546FB2988BFFFDF6C705B -:10D7700030BDC378024613F03F0008BF7047052054 -:10D78000127903F03F0312F0010F36D0002914BFC5 -:10D790000B20704712F0020F32D0012914BF801DF8 -:10D7A000704700BF12F0040F2DD0022914BF401C97 -:10D7B000704700BF12F0080F28D0032914BF801C47 -:10D7C000704700BF12F0100F23D0042914BFC01CF3 -:10D7D000704700BF12F0200F1ED005291ABF12306B -:10D7E000C0B2704712F0400F19D006291ABF401C72 -:10D7F000C0B27047072918D114E00029CAD114E03B -:10D800000129CFD111E00229D4D10EE00329D9D1C9 -:10D810000BE00429DED108E00529E3D105E0062963 -:10D82000E8D102E0834288BF7047002070470000C3 -:10D830005052020086F3FFFF0001010201020203C1 -:10D840002DE9F041FC4D0446284600216A788068A5 -:10D8500001270E4612B1012A1ED006E090F866207C -:10D86000002A18BF6F7000D001216A78C2EB421203 -:10D8700000EB420292F82830194324D0667090F8E9 -:10D88000D90002F12A0170B12A22201D07F062F9A5 -:10D890000420207027710DE090F82820002A18BF7E -:10D8A0006E70E1D1E1E73C22201D07F053F905201D -:10D8B000207027716878A968C0EB401001EB400028 -:10D8C00080F828601DE090F8A410E9B190F8D90024 -:10D8D000012818BFFFDFA868D0F8A5106160D0F854 -:10D8E000A910A160D0F8AD10E160D0F8B1102161AD -:10D8F00090F8B5102175667013212170277180F89A -:10D90000A4600120BDE8F08190F82210012922D006 -:10D91000017801291CBF0020BDE8F0816670142148 -:10D920002170811C2022201D07F014F92672A9689D -:10D930000E70C24882888284D0F8C420527B80F85E -:10D94000262080F82270D1F8C4000088F3F7BEFAD0 -:10D95000F2F765FFD5E7667007212170416A6160C3 -:10D9600080F82260CDE7B44880680178002914BFB0 -:10D9700080884FF6FF7070472DE9F84F4FF0000890 -:10D98000894606460127CDF80080FFF748FBBDF821 -:10D990000010A94D21F06004ADF8004008284FD2D6 -:10D9A000DFE800F004070D4E184E132C44F003007E -:10D9B0000DE044F01500ADF80000474641E044F0AA -:10D9C000100000BFADF800003BE044F0020040F062 -:10D9D0001000F7E7A86890F8E000052818BFFFDFFF -:10D9E00044F01A00ADF80000A96891F8E71000298A -:10D9F00014BF40F0010020F00100E3E7A86890F8B0 -:10DA0000E01003290AD090F8E01006295DD090F8C4 -:10DA1000E000042818BFFFDF64D012E03046FFF7B3 -:10DA200070FC002818BFFFDF0AD1F07810F03F0F1C -:10DA30001FBF307910F0020F44F00400ADF8000071 -:10DA40004746BDF800000090BDF80000C0F3C00BD1 -:10DA5000A868CBEB4B1A00EB4A0090F8280000288E -:10DA600018BFBDE8F88F3046FFF7D9FA80467248F4 -:10DA7000806800EB4A0190F8C90001F12A040128EE -:10DA800008BF012508D0022808BF022504D00428B9 -:10DA900016BF08280325FFDF257300206073664842 -:10DAA000806890F8E11084F83B10FF21A1737F217A -:10DAB000E176BDF80010618190F8E01004291CBFE8 -:10DAC00090F8E01006293AD049E044F00A01ADF898 -:10DAD000001090F8FA00002814BF41F0040021F073 -:10DAE00004006FE73046FFF70CFCD8B1012804BFF3 -:10DAF00044F00100ADF8000014D0022818BFFFDF89 -:10DB00009FD144F00200ADF80000A96891F8FA1026 -:10DB1000002914BF40F0040020F00400ADF800001C -:10DB200047468EE7F07810F03F0F1FBF307910F0B6 -:10DB3000020FBDF8000040F0040082D042E790F8E8 -:10DB4000E200012808BF012508D0022808BF0225ED -:10DB500004D0042816BF08280325FFDF657304F1ED -:10DB600009000090344D28787F2808BFFFDF29780E -:10DB7000009801707F2028706FB1B8F1070F04F191 -:10DB80001C01304603D2FFF7B0FA207239E0FFF7EC -:10DB900078FC207204E000202072B8F1070F30D327 -:10DBA000B8F1070F0DD1A86890F8F91001B3D0F8BB -:10DBB000EA10C4F80210B0F8EE10E18090F8F0001E -:10DBC0006070A07A10F0040F0ED0A86890F8FA10D8 -:10DBD000E9B190F8F7102175D0F8F110C4F81510DC -:10DBE000B0F8F500A4F81900B8F1070F38D098E0A4 -:10DBF000F07810F03F0F1ABF307910F0010FFF20BE -:10DC0000DED0621CA11C304601F0E4FCD9E7B8F17B -:10DC1000070F1CBFB8F1010FFFDFB9F1000F08BFFC -:10DC2000FFDF99F800002075B8F1010F08D0B8F1B6 -:10DC3000070F0BD075E0000064010020CC1000201D -:10DC400004F115013046FFF703FA6AE0012130467E -:10DC5000FFF7A8FA0168C4F815108088A4F8190025 -:10DC6000F07810F03F0F1CBF317911F0080F1AD077 -:10DC7000A86890F8E020042A06D090F8E000032875 -:10DC800011D111F0100F0ED003213046FFF78AFAA0 -:10DC9000407803210009A0733046FFF783FA00881B -:10DCA000C0F30B002082F07810F03F0F1CBF3079DA -:10DCB00010F0400F13D0FE48FFF723FBA96891F83E -:10DCC000E020032A14D006213046FFF76BFA0078D3 -:10DCD000E076A86890F8E010062922D118E0A8683C -:10DCE00090F8FB10002918BF90F8F800F0D1F0E789 -:10DCF00091F8C910042914BF08290028E3D1F0784D -:10DD000010F03F0F1CBF307910F0080FDBD1E0E7B7 -:10DD100090F8E9100909A173B0F8E800C0F30B000E -:10DD20002082A968012001EB4A0181F82800BBF19B -:10DD3000000F14BF06200520BDE8F84F03F02CBAF1 -:10DD40002DE9F041DB4DAA6892F8D930002B6ED056 -:10DD50007F27012611B10978FE2914D0804692F858 -:10DD60002800002818BFBDE8F08102F12A044046CF -:10DD7000FFF755F90021082879D2DFE800F0515368 -:10DD800056787878595CCA4C92F8A400002818BFDD -:10DD9000BDE8F08182F8A66092F8DD0018B1F6F7D0 -:10DDA000DAFC012829D02046FFF762F90146A8686D -:10DDB00080F8A71000F1A8012046FFF73BF92046A4 -:10DDC000FFF763F90146A86880F8AE1000F1AF01D3 -:10DDD0002046FFF73DF9A86800F1B50428787F28B0 -:10DDE00008BFFFDF287820702F70A86880F8A46033 -:10DDF000BDE8F041052003F0CFB9F6F7EFFCA968C4 -:10DE000001F1A802A731FDF7FDFE002808BFFFDFE2 -:10DE1000A86890F8A71041F0020180F8A710CEE79B -:10DE2000A17209E0A67221720CE0032001E021E05A -:10DE30000220A07200E0FFDF04F10B014046FFF773 -:10DE400054F92072621CA11C404601F0C3FB2878E3 -:10DE500009347F2808BFFFDF287820702F70A8685A -:10DE600080F82860BDE8F041052003F095B92172E3 -:10DE7000BDE8F081BDE8F0417EE570B58D4C002233 -:10DE8000A06890F8C910104602F0D4FF002831D0E5 -:10DE9000F7F763F9A068884990F8DF000D5C284621 -:10DEA000F6F7E7FEA06880F8E15090F8C91008295D -:10DEB00016BF04290F202520F6F7F9FDA0680021E0 -:10DEC00090F8C9200120F6F7D4FF7948F7F74EF90A -:10DED000A068D0F80001F7F74CF9A06890F8C910D5 -:10DEE00080F8E21090F8C800032814BF0228012926 -:10DEF00008D103E0BDE8704001F0A5BB0821002077 -:10DF0000F7F72AFAA06890F8C91080F8E210F7F73E -:10DF100000FAA06890F8C95090F8DD0040B1F6F71B -:10DF2000E6FB15F00C0F0CBF40205520F7F7D2F997 -:10DF3000A168032081F8E00070BD2DE9F0410F4693 -:10DF4000904605460321FFF72DF94078594C020908 -:10DF5000A06890F8E91062F3071180F8E910032136 -:10DF60002846FFF71FF90188A068B0F8E82061F3A0 -:10DF70000B02A0F8E82080F8E77090F8C91001299A -:10DF800005D090F8E000032808BFBDE8F081E878EC -:10DF90004FF0010610F03F0F1CBF287910F0400F22 -:10DFA00009D006212846FFF7FDF80178A06880F81F -:10DFB000F81080F8FB60A06890F8E01003292AD0E0 -:10DFC000E97811F03F0F1CBF297911F0010F08D03B -:10DFD00000F1F002911F284601F0FCFAA06880F8D9 -:10DFE000F960E87810F03F0F1ABF287910F0020F9F -:10DFF000BDE8F08101212846FFF7D4F8A168026846 -:10E00000C1F8F1208088A1F8F50081F8F78081F847 -:10E01000FA60BDE8F081022F18BF012FD0D1BDE812 -:10E02000F0812DE9F84F0446C07810F03F0F1CBF77 -:10E03000207910F0020F05D010F0010F18BF4FF03B -:10E04000010901D14FF0000900271A4DB9F1000F65 -:10E050005BD020780026C70901212046FFF7A2F8EF -:10E060003FB1407900F0C000402808BF4FF00108E0 -:10E0700001D04FF00008A86890F8C810032906D115 -:10E0800090F8C110002918BF90F8CC0001D190F889 -:10E09000DE00FDF7A5FD070015D01021FEF7DDFB22 -:10E0A000B8F1000F0FD001212046FFF77BF805E003 -:10E0B000D811002064010020785202000146384641 -:10E0C000F7F7D4FC0646A868B8F1000F90F8B970CD -:10E0D00018BF47F00207E07810F03F0F1CBF20790F -:10E0E00010F0020F0ED02046FEF7CFFF824601212E -:10E0F0002046FFF757F85146F6F769FD002818BF8C -:10E10000012000D1002030435BD0E07810F03F0FB9 -:10E110001EBF217911F0100F11F0080F3FD004211C -:10E120002046FFF73FF80646A86890F8E20002F0A4 -:10E1300078FE0146304601F0A8FAA0B13A46002127 -:10E140002046FFF7FAFEF848FFF7DBF80146A8681B -:10E1500080F8E6103188A0F8E310B17880F8E51077 -:10E160000120BDE8F88FA86890F8E20001283AD1B4 -:10E17000E07810F03F0F1CBF207910F0010F32D073 -:10E18000B9F1000F04D100212046FFF7F5FB2AE08A -:10E190008DF8007069462046FFF7EEFB23E010F093 -:10E1A0003F0F1CBF217911F0100F1CD110F03F0F51 -:10E1B0001CBF207910F0010F15D0B9F1000FE7D185 -:10E1C000E1E7A86890F8CA00032818BF02280AD11E -:10E1D000B8F1000F07D036B9D448694600680090FE -:10E1E0002046FFF7C9FB0020BDE8F88FD0498968B9 -:10E1F00081F80A01704770B5CD4DA86890F8E0101D -:10E20000022919BF90F8E010012900210C461CBF1B -:10E210000C2070BDC1EB411200EB4202034682F8B4 -:10E220002840491CC9B20229F4D3047080F8224066 -:10E2300093F8DD0030B1F7F757F8F6F76CFAA868F5 -:10E2400080F8DD40A868012180F8DC4080F8C1102A -:10E2500080F8C84080F8DF40282180F80B1180F852 -:10E260000A41A0F8E34080F8E540072180F8C0109B -:10E27000002070BDAE4810B58068002180F8E01025 -:10E28000012180F8E010FFF7B6FF002818BFFFDF7C -:10E2900010BD2DE9F047A64C07460C26A06890F863 -:10E2A000E01001291FBF90F8E00002280C20BDE813 -:10E2B000F087F6F73CFCA06890F90A01F6F7C7FC76 -:10E2C000A06890F8C91080F8E21090F8C0100125FD -:10E2D000002978D090F8C8004FF00009032802D038 -:10E2E000022805D008E00521924801F03AFA03E03F -:10E2F0000321904801F035FAA06890F8D810002961 -:10E3000004BF90F8DB00002843D0F4F7DDFD06469B -:10E31000A0683146D0F8D400F5F7E4FA864990FBBE -:10E32000F1F801FB180041423046F4F7D6FA0146F5 -:10E33000A068C0F8D410D0F8D0104144C0F8D01074 -:10E34000FDF72FFC0146A068D0F8D020914220D8DC -:10E35000C0E9349690F8DB0000281CBF0120FDF7CF -:10E3600044FD0121A06890F8DC20002A1CBF90F831 -:10E37000D820002A0DD090F8B93000F1BA02012B54 -:10E3800004D1527902F0C002402A14D0BA30F7F713 -:10E39000D5FBA06890F8B910BA30F6F710FC0F2141 -:10E3A0000720F6F728FCA068002690F8E010012965 -:10E3B00018D112E007E0FDF745FDA1682A46BA3101 -:10E3C000F7F785FBE5E790F8E010022904BF80F835 -:10E3D000E0500C2006D1BDE8F08780F804510221FE -:10E3E00080F8E010A06890F8C10088B1FDF7A5FCA6 -:10E3F00003214D48FDF7DDFC0146A06880F8DD10E3 -:10E40000C0F800714D48F6F79AFE3046BDE8F08737 -:10E41000FDF73CFCECE738B5454CA06890F8E010FF -:10E4200002291CBF0C2038BD012180F80511A0F87D -:10E43000081129208DF800006846F5F77DFD30B100 -:10E44000A0689DF8001090F80601884205D1A068E8 -:10E4500090F80601401C8DF80000A1689DF80000AE -:10E4600081F806010220F6F77EFE3548F6F7F9FB43 -:10E47000A168DFF8D0C0002091F8C03091F8DF200B -:10E48000521CACFB02546408A4EB8404224481F8BF -:10E49000DF2023FA02F212F0010F03D1401CC0B2B8 -:10E4A0000328EBD3FFF7E9FC002038BD2049896839 -:10E4B00081F8C900002070471D49896881F8DA0099 -:10E4C000704710B51A4CA36893F8B830022B14BFEC -:10E4D000032B00280BD100291ABF0229012000209C -:10E4E0001146FDF761FB08281CBF012010BDA06884 -:10E4F00090F8B800002816BF022800200120BDE8CF -:10E500001040F7F7A5BA0A48806890F8B8000028CC -:10E5100016BF022800200120F7F79ABA044989683B -:10E5200081F8B80070470000D81100206C5202003A -:10E53000640100200012002040420F0075520200CA -:10E540007B520200ABAAAAAAF749896881F8DC00CD -:10E55000704770B5F44CA16891F8B800002816BF58 -:10E5600002280020012081F8B900BA31F7F75AFAE1 -:10E57000A06890F8B810022916BF032901210021D4 -:10E5800080F8DB1090F8B920002500F1BA03012AC9 -:10E5900004BF5B7913F0C00F0AD000F1BA03012A5F -:10E5A00004D15A7902F0C002402A01D0002200E0D2 -:10E5B000012280F8D820002A04BF002970BDC0F8CD -:10E5C000D050F4F781FCA168C1F8D40091F8DB00C9 -:10E5D00000281CBF0020FDF708FC0026A06890F86A -:10E5E000DC1000291ABF90F8D810002970BD90F8EF -:10E5F000B92000F1BA01012A04D1497901F0C00122 -:10E60000402905D02946BDE87040BA30F7F796BAE0 -:10E61000FDF718FCA1683246BDE87040BA31F7F743 -:10E6200056BA70B5C04D0C4600280CBF012300231C -:10E63000A96881F8C13081F8CB004FF0080081F85B -:10E64000CC000CD1002C1ABF022C01200020114656 -:10E65000FDF7AAFAA968082881F8CC0001D00020AB -:10E6600070BD022C14BF032C1220F8D170BD0028FD -:10E6700018BF112070470328AB4A926808BFC2F840 -:10E68000C41082F8C8000020704710B5044602F09C -:10E6900083FF052809D002F07FFF042805D0A24897 -:10E6A000806880F8D940002010BD0C2010BD9E4825 -:10E6B000816891F8C800032804D0012818BF0228F7 -:10E6C00007D004E091F8CB00012808BF7047002074 -:10E6D000704791F8CA00012814BF03280120F6D121 -:10E6E000704710B5F6F7EAFDF6F79EFDF6F7CEFC9B -:10E6F000F6F72BFD8C4CA06890F8DD0038B1F6F7EA -:10E70000F3FDF6F708F8A168002081F8DD00A068A5 -:10E71000012180F80411022180F8E010002010BDD2 -:10E720008149896881F8FC0070477F4902788968CF -:10E73000012A06D0042A24D0052A0CBF1120122059 -:10E74000704742780023032A08BFC1F8C43081F81B -:10E75000C820012281F8C920C27881F8B820027946 -:10E76000002A16BF022A0123002381F8C13081F854 -:10E77000CA20427981F8C020807981F8DA0000202F -:10E78000704782780023032A08BFC1F8C43081F89B -:10E79000C8200822DEE764488068704700F053BF55 -:10E7A0002DE9F84F00256048F6F7BEFD5E4C4FF0AE -:10E7B0007F0A002808BF84F800A0F6F7A0FD5B4898 -:10E7C000FEF72DFCA0700146A06890F8E2204FF003 -:10E7D00003084FF000094FF0010B012A10D0042A62 -:10E7E0001CBF082AFFDF00F05782A06890F8DD0008 -:10E7F00018B1F6F779FDF5F78EFF2846BDE8F88FDA -:10E800004A4D0026A5F58677072936D290F8C10033 -:10E8100028B9F6F71EFA002808BF002600D0012606 -:10E82000A06890F8DD0080B1FDF715FAA168FF2817 -:10E8300081F8DE0001460DD0E81CFDF701FAA06862 -:10E8400090F8DE00FDF712FA0643A06890F8DE00AB -:10E85000FF2817D1FDF7A1FA87F8DE0097F8C1105D -:10E8600081B108280ED12878E91CC0F38010FDF78B -:10E870009BF9082818BF002604E002BF90F8D900D1 -:10E8800000280126A07808283CD2DFE800F03FB934 -:10E89000043B3B3B17FD36B1A06890F8C800012847 -:10E8A00018BF022803D0F6F7F1FB45469DE7F6F7BF -:10E8B000EDFB00211D48FFF743FAF6E716B3A06809 -:10E8C00090F8C800022802D0012815D01AE00021D3 -:10E8D0001648FFF735FAA0680825C0F8E790C0F899 -:10E8E000EB90C0F8EF90C0F8F390C0F8F79080F884 -:10E8F000FB9080F8E79078E700210C48FFF720FABA -:10E9000000F040B9F6F7C2FB03256EE70020002EA9 -:10E9100071D0A26892F8C810022909D0012925D027 -:10E92000032928D06AE0000064010020D8110020EB -:10E930000021FE48FFF704FAA16891F8050128B10B -:10E94000401E10F0FF0081F8050154D1C1F8E79096 -:10E95000C1F8EB90C1F8EF90C1F8F390C1F8F790CF -:10E9600081F8FB90082081F8E7B047E00021EF48EC -:10E97000FFF7E6F941E0D2F8C400E978837E9942D6 -:10E980001BD12979C37E994217D16979037F9942B6 -:10E9900013D1A979437F99420FD1E979837F9942B5 -:10E9A0000BD1297AC37F994207D12978437EC1F3DD -:10E9B0008011994208BF012100D0002192F8CB209C -:10E9C000012A01D079B10CE059B900F11A01D748F8 -:10E9D000FEF730FBD548FEF74BFBA168D1F8C41019 -:10E9E00048760A200AE097F8CC00082803D097F868 -:10E9F000DE108142F5D0F6F749FB03200546F4E628 -:10EA0000A06890F8DB1000290CBF4FF0010B4FF00D -:10EA1000000B4FF000082978CA0905F1090107D059 -:10EA2000497901F0C001402908BF4FF0010901D028 -:10EA30004FF0000990F8C810032906D190F8C110D2 -:10EA4000002918BF90F8CC0001D190F8DE00FDF746 -:10EA5000C7F85FEA000A13D01021FDF7FEFE002878 -:10EA600018BF4FF0010BB9F1000F04BFA06890F878 -:10EA7000B9A00FD005F109015046F6F7F7FF80461F -:10EA8000A06890F8B9A000E093E0B9F1000F18BFBA -:10EA90004AF0020A90F8C81003290ED0F6F7F6FAE9 -:10EAA000F6B3F6F7A4F850EA08006DD08DF800A090 -:10EAB00069469E48FFF744F964E0D0F8C400E9785D -:10EAC000827E91421BD12979C27E914217D1697908 -:10EAD000027F914213D1A979427F91420FD1E97906 -:10EAE000827F91420BD1297AC27F914207D1297846 -:10EAF000407EC1F38011814208BF012500D000256E -:10EB000097F8DE00082806D097F8CC10884208BF96 -:10EB10004FF0010901D04FF00009B8F1000F00E0FB -:10EB200032E005D1BBF1000F04D0F6F760F808B170 -:10EB3000012100E000214EB197F8CB00012803D05D -:10EB400020B955EA090001D0012000E0002001426F -:10EB500016D0A06890F8CB10012908BF002D0DD168 -:10EB6000D0F8C40000F11A017048FEF763FA6F484C -:10EB7000FEF77EFAA168D1F8C41048760A2534E67B -:10EB8000F6F784FA032530E6A06890F8CA00032857 -:10EB900018BF0228F6D1B9F1000FF3D0B8F1000F79 -:10EBA000F0D163486946406800906048FFF7C8F8B4 -:10EBB000E8E7A06890F8DA0000283FF4A3AEF6F783 -:10EBC00065FAA06890F8D9100029DBD1C0F8E79069 -:10EBD000C0F8EB90C0F8EF90C0F8F390C0F8F79051 -:10EBE00080F8FB9080F8F8A05048FEF78AFB50B3FD -:10EBF000012836D00228C5D1A068032590F8C800A6 -:10EC0000032814BF0020012036EA00003FF4EDADD8 -:10EC1000464E1820F17811F03F0F3FF4E6AD317900 -:10EC200088437FF4E2AD04213046FEF7BBFA074685 -:10EC3000A06890F8E20002F0F4F80146384600F0CF -:10EC400024FDE8BBD1E5002E9CD0A06890F8C80058 -:10EC5000012818BF022895D13448FFF7E2F980BB9C -:10EC600090E7002E8ED0314D1820E97811F03F0F3B -:10EC700088D02979884385D104212846FEF792FA65 -:10EC80000646A06890F8E20002F0CBF80146304654 -:10EC900000F0FBFC98BB75E707297FF433AEC0F8A2 -:10ECA000E790C0F8EB90C0F8EF90C0F8F390C0F890 -:10ECB000F79080F8FB90012680F8F8A01B4801E04F -:10ECC0007FE01AE0FEF71DFB38B1012818D00228BA -:10ECD0004DD0F6F7DBF9454687E5F6F7D7F9A0689A -:10ECE00090F8C800012818BF02287FF44BAF0F48E6 -:10ECF000FFF797F900283FF445AF042575E522E0BA -:10ED0000F6F7C4F9094D1820E97811F03F0F3FF4E8 -:10ED100039AF297988437FF435AF04212846FEF7BF -:10ED200041FA0646A06890F8E20003E0D8110020FE -:10ED30006C52020002F075F80146304600F0A5FC66 -:10ED400000283FF41FAF002201212846FFF7F5F805 -:10ED5000F748FEF7D6FA0146A06880F8E610318839 -:10ED6000A0F8E310B17880F8E51004253DE503250F -:10ED7000F6F78CF9A06890F8C800032814BF0020AB -:10ED8000012036EA00003FF430ADE94E1820F1785A -:10ED900011F03F0F3FF429AD317988437FF425AD61 -:10EDA00004213046FEF7FEF90746A06890F8E2001D -:10EDB00002F037F80146384600F067FC00283FF4BF -:10EDC00014AD002202213046FFF7B7F8D848FEF70D -:10EDD00098FA0146A06880F8E6103988A0F8E31098 -:10EDE000B97880F8E5100425FFE42DE9F041D14C15 -:10EDF000A0680078002818BFFFDF0025A068012761 -:10EE00008570D0F8C4100A8882804A8842838A8834 -:10EE10008283C988C18380F82050C74990F8DB20DD -:10EE2000A1F59A764AB10A78C2F38013CA1C23B1BD -:10EE3000527902F0C002402A33D090F8DC2042B16F -:10EE400011F8032BC2F380121AB1497911F0C00FE7 -:10EE500027D00E3006F022F8A06890F8DD0018B137 -:10EE6000F5F779FC012824D0A068D0F8C4104A7EB8 -:10EE7000C271D1F81A208260C98B818145610583F6 -:10EE8000A0680770D0F8C42090F80A1182F85710D3 -:10EE9000D0F8C4000088F2F719F8BDE8F041F1F7A6 -:10EEA000AFBCD6F83711C0F80E10B6F83B1141824E -:10EEB000D2E7F5F793FCA16801F10802C91DFCF740 -:10EEC000A1FE002808BFFFDFA068C17941F0020160 -:10EED000C171D6F80F114161B6F813110183CFE764 -:10EEE0002DE9F047934C0746FF21A0680025012635 -:10EEF00080F8DE1090F8C800012818BF022802D060 -:10EF0000032818BFFFDF5FB18948FEF7A3F918B9DE -:10EF10008748FEF7F9F918B100F07BFC05463FE0A1 -:10EF2000A06890F8E0007F27082839D2DFE800F0D9 -:10EF3000383838041725352B7E48F6F7F5F90028C0 -:10EF400008BF2770F6F7DBF9A06890F8DD0018B16C -:10EF5000F6F7CAF9F5F7DFFBF6F798F82BE07548F6 -:10EF6000F6F7E2F9002808BF2770F6F7C8F9A0689D -:10EF700090F8DD000028EFD0EAE76E48F6F7D4F904 -:10EF800030B9277004E06B48F6F7CEF90028F8D0C6 -:10EF9000F6F7B5F9F6F77AF80DE000F03DFE0AE075 -:10EFA0000C2D80F02B82DFE805F04CFCFB06FAF913 -:10EFB000F9F90AF84ECBBDE8F047FEF75EBF002234 -:10EFC0000121022001F036FF002800F05B815A4940 -:10EFD000A1F12800FEF75CF8A068574E90F8B91030 -:10EFE0003046FEF73CF8A06800F1BA013046FEF763 -:10EFF0001AF8A06890F8DB10C1B190F8C810032986 -:10F0000006D190F8C110002918BF90F8CC0001D1AA -:10F0100090F8DE00FCF718FF050007D0012130460C -:10F02000FEF71DF829463046FDF7FDFF4248F6F78A -:10F030009DF801210846F6F78FF9A168082081F8AC -:10F04000E000BDE8F087A06890F8E21090F80B218E -:10F0500011F00C0F08BF002290F8E210032001F01D -:10F06000E9FE002800F00E81344D0A2085F8E0000A -:10F07000012002F091F805F59A71A1F12800FEF740 -:10F0800007F8A06805F59A7790F8B9103846FDF7AB -:10F09000E6FFA06800F1BA013846FDF7C4FFA0689A -:10F0A00090F8DB10C1B190F8C810032906D190F890 -:10F0B000C110002918BF90F8CC0001D190F8DE00F3 -:10F0C000FCF7C2FE060007D001213846FDF7C7FF56 -:10F0D00031463846FDF7A7FFA2681749D2F8C400A9 -:10F0E000C08AC875000A0876D2F8C400407D8875C9 -:10F0F0000846F6F73BF8D5F8C4100F4820234A7BA2 -:10F10000017803EA421221F0200111430170084AFC -:10F11000D5F8C4001278417BC2F34012114041730C -:10F12000D5F8C41095F80B0181F85600BDE8F087BA -:10F13000D81100206401002000120020CC10002013 -:10F14000A06890F8E21090F80B2111F00C0F08BFA6 -:10F15000002290F8E210052001F06CFE00287CD01F -:10F16000FE4D0B2085F8E000022002F015F805F5B1 -:10F170009A71A1F12800FDF78BFFA06805F59A7838 -:10F1800090F8B9104046FDF76AFFA06800F1BA0197 -:10F190004046FDF748FFA06804E047E02EE1A5E007 -:10F1A0009DE098E090F8DB10C1B190F8C8100329F9 -:10F1B00006D190F8C110002918BF90F8CC0001D1F9 -:10F1C00090F8DE00FCF740FE070007D00121404622 -:10F1D000FDF745FF39464046FDF725FFA068E04AA8 -:10F1E000D0F8C410C98AD175090A1176D0F8C400C4 -:10F1F0001146407D88750846F5F7B8FFD5F8C4007C -:10F200004673A06890F8E230012296210020F5F7BD -:10F210008CFED348017821F020010170A068D5F858 -:10F22000C41090F80B0181F856007FE7A06890F8B1 -:10F23000E21090F80B2111F00C0F08BF002290F89B -:10F24000E210042001F0F6FD38B1C549A1F1280013 -:10F25000FDF71EFFC24EA06800E013E090F8B91061 -:10F260003046FDF7FCFEA06800F1BA013046FDF71C -:10F27000DAFEA06890F8DB10E9B190F8C810032915 -:10F2800004D00AE0BDE8F04700F0DDB990F8C11005 -:10F29000002918BF90F8CC0001D190F8DE00FCF7EF -:10F2A000D3FD050007D001213046FDF7D8FE2946E1 -:10F2B0003046FDF7B8FEAA48F5F758FFA06890F869 -:10F2C000E230012296210020F5F72FFEA1680920E7 -:10F2D00081F8E0002AE7A06880F8E06026E7A068EF -:10F2E000022180F8046180F8E0101FE7A66816F894 -:10F2F000E31F11F0800F0CBF1E204FF49670B6F87C -:10F300000120C2F30C0212FB00F7C80908BF4FF03E -:10F310001E0906D0002806BFFFDF4FF000094FF49A -:10F320009679B078400908BF012507D0012808BFA9 -:10F33000022503D0022814BF00250825A06890F8F4 -:10F34000E20001F06EFDA7EB0008307808EB09073A -:10F35000C0F38010002808BF4FF4FA7A05D006BF2A -:10F36000FFDF4FF0000A4FF0320A7C4890F8FC9023 -:10F37000B9F10C0F28BFFFDF7A487B4A30F819003B -:10F380000AEB000101FB0720511CB0FBF1F000F17A -:10F3900020094F44F5F7E1FE307800F03F06304693 -:10F3A000F5F767FCA06880F8E16029462520F5F7AD -:10F3B0007EFB0122A8EB09012B461046F5F7B5FDAF -:10F3C0006A48F5F7D3FE00213846F5F7EAFEA06853 -:10F3D00080F8E250F5F79DFFA06890F8DD0040B19D -:10F3E000F5F785F915F00C0F0CBF50205520F5F7F7 -:10F3F00071FFA168042081F8E00097E6FFDF95E641 -:10F400005B4810B5806890F8E0000C286BD2DFE80C -:10F4100000F06A6A6A6A6A6A6A6A0615533453486F -:10F42000F5F7A4FEF5F775FF514C00219620F5F78E -:10F43000B8FEA168052081F8E00010BD4B48F5F743 -:10F4400095FE4B4CA06890F8E230012296211046C0 -:10F45000F5F76BFDA16891F8E20091F80B1110F03F -:10F460000C0F08BF00219620F5F79BFEF5F751FF22 -:10F47000A168062081F8E00010BD3C48F5F776FE53 -:10F480003B4CA06890F8E230012296211046F5F737 -:10F490004CFDA16891F8E20091F80B1110F00C0FEF -:10F4A00008BF00219620F5F77CFEF5F732FFA16832 -:10F4B000072081F8E00010BDF5F700FFF5F7B4FE76 -:10F4C000F5F7E4FDF5F741FE29480121806880F851 -:10F4D0000411022180F8E010FFF787FCBDE810401E -:10F4E000032001F059BEFFDF10BD70B5204CA068AD -:10F4F00090F8E0007F25082828BF70BDDFE800F005 -:10F500004D4D4D172304470A1948F5F70DFF30B943 -:10F51000257004E01648F5F707FF0028F8D0F5F746 -:10F52000EEFEF5F7B3FDBDE87040FEF7A6BC10484F -:10F53000F5F7FAFE002808BF2570F5F7E0FEBDE8F4 -:10F54000704000F080B80A48F5F7EEFE002808BFCA -:10F550002570F5F7D4FEA0680CE00000CC10002068 -:10F5600000120020805202003F420F00D8110020FC -:10F570006401002090F8DD0018B1F5F7B5FEF5F74D -:10F58000CAF8F5F783FDBDE87040FEF776BC00F0E1 -:10F5900043FBBDE87040FEF770BC70BD70B5F84C21 -:10F5A00006460D46012909D0A06890F8E23090F88F -:10F5B000E2203046BDE8704001F0C8BFF5F728FAF8 -:10F5C000A16891F8E220034629463046BDE8704024 -:10F5D00001F0BCBF70B50646E94814460D46806888 -:10F5E00090F8DD0018B1F5F7B6F801280ED03046D6 -:10F5F000FDF73EFD20703046FDF711FD072813D2C0 -:10F6000029463046BDE87040FDF714BDF5F7E6F831 -:10F610002A462146FCF7F6FA002808BFFFDF2078CB -:10F6200040F00200207070BD3046FDF7F8FC07285E -:10F6300018BF70BD00213046FDF7B4FD0168296098 -:10F640008088A88070BD10B5F5F738FEF5F7ECFDA1 -:10F65000F5F71CFDF5F779FDC94CA06890F8DD00C1 -:10F6600038B1F5F741FEF5F756F8A168002081F8AA -:10F67000DD00A068012180F80411022180F8E0106B -:10F68000BDE81040002001F087BD2DE9F0410D4696 -:10F690000178044611F0800F0CBF1E204FF49670C5 -:10F6A000B4F80120C2F30C0212FB00F6C80908BF2F -:10F6B0001E2105D0002806BFFFDF00214FF4967100 -:10F6C000701BA278520908BF012707D0012A08BF82 -:10F6D000022703D0022A14BF00270827B0F5877F2E -:10F6E0002EBFAE420020BDE8F08145182078C0F35F -:10F6F0008010002808BF4FF4FA7603D006BFFFDF62 -:10F70000002632269F4890F8FC400C2C28BFFFDFD3 -:10F710009D489E4A30F81400311801FB0520511C09 -:10F72000B0FBF1F0203005449548806890F8E20085 -:10F73000F6F76CF804463846F6F768F84FF47A7135 -:10F7400084423ABF001B00F2E730201AB0FBF1F010 -:10F7500034BF42192A1A3946BDE8F041012001F0B0 -:10F7600069BB70B50D460446FDF734FC032D4AD045 -:10F77000052D18BF70BD05212046FDF730FC804DDA -:10F78000A868D0F8C40000F10E012046FDF7E5FCA2 -:10F79000A868D0F8C40000F112012046FDF7E1FC92 -:10F7A000A868D0F8C410497DA175D0F8C410C98AE2 -:10F7B000E175090A2176D0F8C41049886176090AF2 -:10F7C000A176D0F8C4108988E176090A2177D0F8AB -:10F7D000C410C9886177090AA177D0F8C40000F184 -:10F7E00008012046FDF7DBFCA868D0F8C400017EC4 -:10F7F0002046FDF7BCFCA86890F8FC102046BDE848 -:10F800007040FDF7BEBC2046BDE870400321FDF707 -:10F81000E6BB2DE9F04FDFF8688183B04FF0000AB6 -:10F82000D8F8080090F8E000594E01274FF003097E -:10F8300055464FF07F0BA6F12804082880F0E78199 -:10F84000DFE800F0FEFEFE0407B3FDFCFEF7A8FFB4 -:10F85000A8E04B48F5F768FD002808BF88F800B01D -:10F86000F5F74DFDD8F8080090F8D900002818BF2A -:10F87000FFDF4848FDF7D3FB88F80300E078002657 -:10F8800010F03F0F1CBF207910F0080F11D0414835 -:10F89000FDF737FD60B1012802D0022808D008E04A -:10F8A000E07810F03F0F1CBF207910F0010F00D05E -:10F8B00001260296D8F8080090F8DD0018B1F5F797 -:10F8C00013FDF4F728FFE1782A460020134611F0D3 -:10F8D0003F0F1ABF217911F0020F2F4647D0D8F8F9 -:10F8E0000800DFF8B0A0002590F8DB0000280CBF6E -:10F8F000012600269AF800000121C4095046FDF7B0 -:10F9000051FC34B1407900F0C000402808BF012408 -:10F9100000D00024D8F8080090F8C810032906D1B8 -:10F9200090F8C110002918BF90F8CC0001D190F8D0 -:10F93000DE00FCF755F95FEA000B0FD01021FCF751 -:10F940008CFF002818BF012644B101215046FDF765 -:10F9500029FC01465846F6F789F80546D8F808000C -:10F960002200334690F8B90018BF40F0020098F822 -:10F970000310072910D0F5F789FBCA4600F048B9F3 -:10F9800064010020CC100020805202003F420F0092 -:10F9900000120020D8110020CDE900072946029866 -:10F9A00000F07BF9824600F033B9FC48FDF737FBE5 -:10F9B00088F80400E078717A88421CD12079B17A05 -:10F9C000884218D16079F17A884214D1A079317BCC -:10F9D000884210D1E079717B88420CD1207AB17BCA -:10F9E000884208D120783178C0F38010B0EBD11F65 -:10F9F00008BF012400D00024F5F748FBE848F5F7DC -:10FA000093FC002808BF88F800B0F5F778FC98F858 -:10FA1000040004283BD1B4B30095D8F80820DF488F -:10FA2000694692F8D9307BB3054692F8660050BB20 -:10FA3000042002F1680482F8720002E029E07DE00F -:10FA4000E5E06932A11C2846FFF7C4FD04F10B0173 -:10FA50002846FDF76EFBC0B220721F2884BF1F200E -:10FA6000207298F8000009347F2808BFFFDF98F85B -:10FA70000000207088F800B0D8F8080080F86670A0 -:10FA8000062001F089FB02E0FFE7FDF775FFCA469B -:10FA9000BEE04FF0030AC248F5F746FC002808BF55 -:10FAA00088F800B0F5F72BFCBC48FDF7B8FA05461E -:10FAB000BA48FDF726FC082D08BF00287ED1E17862 -:10FAC000032011F03F0F79D02179884376D10021AE -:10FAD000B248FDF767FB062206F1090105F00EF8B2 -:10FAE00000286BD1AD48FDF7C3FA0446AD48FDF7D9 -:10FAF000CCFA844262D10121A848FDF753FB0622CB -:10FB0000F11C04F0FBFF002858D1A448FDF7BDFA12 -:10FB10000446A448FDF7ACFA844279D1F5F7CEFB50 -:10FB2000F5F782FBF5F7B2FAF5F70FFB4FF0020A93 -:10FB3000FFF75BF9042001F02FFB69E04FF0030AA7 -:10FB4000F5F7A4FA9648F5F7EFFB002808BF88F808 -:10FB500000B0F5F7D4FB9148FDF761FA81468F4874 -:10FB6000FDF7CFFBB9F1070F08BF002850D1E178AE -:10FB7000012011F03F0F4BD02179884348D100215B -:10FB80008648FDF70FFB062206F1090104F0B6FFD7 -:10FB9000A0B98248FDF76CFA04468248FDF775FA71 -:10FBA000844235D1D8F8080090F8041139B3B0F880 -:10FBB000082190F80611012A07D900E028E0520830 -:10FBC000A0F8082108BFA0F80871012914BF002976 -:10FBD0000D21C943C1EBC10202EB011190F80521CF -:10FBE000D24302EB8203C3EB82121144B0F8082126 -:10FBF000890CB1FBF2F302FB131180F8051180F8B8 -:10FC00000471694665480095FDF7B6FE00E0FFDF28 -:10FC100003B05046BDE8F08F10B5F5F737FA6048ED -:10FC2000F5F782FB5E4C002804BF7F202070F5F7BB -:10FC300066FBA06890F8041119B1002180F8041146 -:10FC400010BDB0F8082190F80611FF2A0AD24FF62D -:10FC5000FF7303EA4202A0F80821FF2A84BFFF22B3 -:10FC6000A0F80821012914BF00290D21C943C1EBC7 -:10FC7000C10202EB011290F80511C94301EB8103A7 -:10FC8000C3EB81111144B0F80821890CB1FBF2F3E8 -:10FC900002FB131180F80511CFE72DE9F84F8346D9 -:10FCA0009946924688463D480A9FFDF72AFB3B4EFF -:10FCB0003B4D002800F03C81012803D0022800F0D1 -:10FCC0007781BAE0002403213448FDF76BFABBF1D9 -:10FCD000000F6BD0A96891F8E720012A66D142781D -:10FCE00091F8E9301209B2EB131F5FD10088B1F827 -:10FCF000E810C0F30B00C1F30B01884256D127482E -:10FD0000FDF7FFFAA96891F8E62090424ED191F8EC -:10FD1000C800012818BF022802D0032847D0AEE04F -:10FD2000F5F7B4F9F07810F03F0F1CBF307910F000 -:10FD3000020F18D0194C2046FDF7A7F906460121FD -:10FD40002046FDF72FFA3146F4F741FF002818BF8F -:10FD5000012050EA08000BD08DF8007069460F486A -:10FD6000FDF70AFE18E000210C48FDF705FE13E040 -:10FD7000A86890F8CA00032818BF02280CD1BAF16D -:10FD8000000F09D0B8F1000F06D107486946806816 -:10FD900000900248FDF7F0FD032470E0D811002028 -:10FDA00064010020001200206C52020064E0002177 -:10FDB0009848FDF7F7F9A9680622D1F8C4101A315E -:10FDC00004F09CFE50B99348FDF752F9A968D1F8A8 -:10FDD000C410497E884208BF012400D00024F07876 -:10FDE00010F03F0F1CBF307910F0020F03D0B8F1B4 -:10FDF000000F47D056E0A86890F8CB10012901D039 -:10FE0000ACB11FE0F4B900218248FDF7CBF9A96835 -:10FE10000268D1F8C410C1F81A208088C8837D48D0 -:10FE2000FDF726F9A968D1F8C41048760AE090F8E1 -:10FE3000DE1090F8CC00814204D0F5F727F90320BA -:10FE4000BDE8F88FA86890F8E21011F00C0F11D0FF -:10FE500090F8E21011F00C0F0ED00123D0F8C4106E -:10FE60001A460020FCF79DFEA968D1F8C410496A23 -:10FE7000884201D80B2402E0F5F708F90324204654 -:10FE8000BDE8F88FB9F1000F0ED0624E3046FDF795 -:10FE9000FCF8074601213046FDF784F93946F4F7AE -:10FEA00096FE08B1012200E00022A96891F8CB007B -:10FEB000012807D040B92CB991F8DE3091F8CC1068 -:10FEC0008B4201D1012100E000210A42D4D0012857 -:10FED00008BF002C12D100214E48FDF763F9A96834 -:10FEE0000268D1F8C410C1F81A208088C883494834 -:10FEF000FDF7BEF8A968D1F8C4104876A86890F854 -:10FF0000E21011F00C0FB5D090F8E21011F00C0FC8 -:10FF1000B2D00123D0F8C4101A460020FCF741FEED -:10FF2000A968D1F8C410496A8842A5D8A2E700BFE1 -:10FF3000F5F7ACF803213748FDF734F9BBF1000FB2 -:10FF40005DD0A96891F8E7205ABB427891F8E93072 -:10FF50001209B2EB131F52D10088B1F8E810C0F3B8 -:10FF60000B00C1F30B01884249D12A48FDF7C9F9BA -:10FF7000A96891F8E620904241D191F8C800012883 -:10FF800018BF02283BD1F07810F03F0F1CBF30792A -:10FF900010F0020F06D08DF8007069461D48FDF77D -:10FFA000EBFC2CE000211B48FDF7E6FC27E000BF3E -:10FFB000F5F76CF8A86890F8C80003281FD015481A -:10FFC000FDF79FF9A96891F8E620904217D1F278E1 -:10FFD000092012F03F0F12D0327990430FD1BBF1BC -:10FFE000000F0CD091F8C8000228DBD191F8050170 -:10FFF00040B1401E10F0FF0081F8050102D003203F -:020000040002F8 -:10000000BDE8F88F3A4601210248FDF796FF092026 -:10001000BDE8F88FD81100202DE9FF4F07460C46A8 -:10002000488881B040F2E24148430090E08A0026CF -:1000300000FB01FB94F8640091460D2818BF0C28C2 -:100040001FD024281EBF94F8650024284FF0000A12 -:1000500017D0049818B10121204602F018FC94F83A -:10006000540094F8558094F8D010054661B10129E8 -:100070006DD0022952D0032918BFFFDF67D000F0EE -:10008000D5B84FF0010AE4E7B9F1000F08BFFFDF70 -:10009000FD4EB068002808BFFFDF94F85410FB48FD -:1000A00090F82400FCF77DFF009094F85400F5F7D9 -:1000B000C6FB00F2E7314FF47A79B1FBF9F1F2486F -:1000C00080680E1894F85400F5F7B9FB014694F8CF -:1000D0005400022804BFEE484FF47A720DD0012874 -:1000E00004BFEC484FF4C86207D0042807BFEA48B1 -:1000F00040F69802E94840F6E4421044084400F211 -:10010000E731B1FBF9F10098401A00EB0B01DE4832 -:10011000406930440844061D012015E0DA48A9F181 -:1001200001018068084308BFFFDFDD48B9F1000F17 -:10013000006800EB0B0606D0D348806800F222303E -:10014000B04288BFFFDF032084F8D0006DE094F850 -:100150006410009E24291EBF94F86520242A2529B6 -:100160004FD1B4F85810B4F8F020891A491C09B2DC -:10017000002946DB94F8F210002942D00D4694F88D -:10018000F310002918BF8846022804BFC0494FF465 -:100190007A700DD0012804BFBE494FF4C86007D063 -:1001A000042807BFBC4940F69800BC4940F6E4402B -:1001B0000144022D04BFB6484FF47A720DD0012DD0 -:1001C00004BFB4484FF4C86207D0042D07BFB2483B -:1001D00040F69802B14840F6E4421044814208D902 -:1001E000081A00F5FA714FF47A70B1FBF0F006448A -:1001F00007E0401A00F5FA714FF47A70B1FBF0F0A5 -:10020000361AB9F1000F10D0DFF87C92D9F8080047 -:1002100020B9B9F80200002818BFFFDFD9F808009C -:1002200000F22230B04288BFFFDF06B9FFDF31465F -:10023000D4F8D400F2F751FBC4F8D400B860002021 -:1002400038704FF0010987F80490204602F00DFC49 -:10025000AAF10101084208BF87F8059006D094F87A -:10026000D00001280CBF0220032078714046D4F84A -:1002700024B0F5F7CBFA0146022D04BF84484FF4B1 -:100280007A720DD0012D04BF82484FF4C86207D0A6 -:10029000042D07BF804840F69802804840F6E442AB -:1002A0001044084400F23F614FF47A70B1FBF0F063 -:1002B000584400F5C970F860049830EA0A0004BF99 -:1002C00005B0BDE8F08F31463846FCF7E8FB85B253 -:1002D000204602F0CAFBA8420FD8054687F80590D1 -:1002E00006FB05F1D4F8D400F2F7F7FAB86031460E -:1002F0003846FCF7D4FB284485B22946204602F054 -:10030000C6FAB868C4F8D40005B0BDE8F08F2DE98E -:10031000F0430446634885B00D4690F80004DFF8CA -:100320008891400999F800144909884218BFFFDFF5 -:10033000DFF85481002708F14406082D80F00E8173 -:10034000DFE805F0046872726DFEFEB6202C28BF4F -:10035000FFDF36F814000621F0F786FC050008BF21 -:10036000FFDF202C28BFFFDF36F8140029888842E1 -:1003700018BFFFDF95F8D000002808BFFFDF284630 -:1003800001F089FFC8F80870A8F80270294600201B -:10039000C8F81470FCF758FC00F19804686AA04291 -:1003A00025D995F85500F5F731FA014695F854002E -:1003B000022804BF36484FF47A720DD0012804BFDA -:1003C00034484FF4C86207D0042807BF324840F6CB -:1003D0009802324840F6E442104408444FF47A71DF -:1003E00000F23F60B0FBF1F1686A0844071B294640 -:1003F0000020C8F80C70FCF727FC698840F2E24244 -:1004000051439830081AA0F22230C8F8100005B005 -:10041000BDE8F08305B0BDE8F04302F013B905B0C4 -:10042000BDE8F043F4F7BCBF99F8140D1F4940092B -:1004300091F800144909884218BFFFDF202C28BF1B -:10044000FFDF36F814000621F0F70EFC050008BFA8 -:10045000FFDF202C28BFFFDF36F8140029888842F0 -:1004600018BFFFDF0022012329466846FFF7D4FDAD -:1004700095F8DA006946F2F76FFF002808BFFFDF42 -:1004800005B0BDE8F08300002812002044120020CF -:1004900068360200A2240200D0FB010030D3010024 -:1004A0007401002001E000E00BE000E019E000E052 -:1004B000202C28BFFFDF36F814000621F0F7D4FB0C -:1004C000050008BFFFDF202C28BFFFDF36F814002F -:1004D0002988884218BFFFDF95F8D000042818BF8C -:1004E000FFDF85F8D07095F8DA404FF6FF79202CC1 -:1004F00028BFFFDF26F8149095F8DA00F2F7C5FC64 -:10050000002808BFFFDF202085F8DA00D5F8E000DA -:10051000002804BFD5F8DC00C8F8180008D0D5E9D9 -:1005200039121144826911448161D5E93701C860EB -:10053000D5F8DC0000281CBFD5F8E010016100E010 -:100540000CE004D1D5F8E000002818BF8761FE4810 -:10055000007805B0BDE8F043EBF74CBCFFDF05B019 -:10056000BDE8F0832DE9F05FF84E07468B46F08B2F -:100570007568401CF08330784FF00008002808BFF1 -:10058000FFDF07D0DFF8C89304282ED0052818BF56 -:10059000FFDF5BD05846FEF7FEF8040008BFFFDF20 -:1005A00029463069F2F799F9B86087F80080012090 -:1005B000387194F8C900022808BFE64807D001281E -:1005C00008BFE54803D004280CBFE448E4484FF4D2 -:1005D0007A7100F2E140B0FBF1F0B168FA30084402 -:1005E000F860307804287DD183E0002AD2D0D6F894 -:1005F00010A0D9F8184034B3A146E468002CFBD110 -:10060000B9F1000F1FD099F80000002808BFFFDFE4 -:10061000D9F81410D9F8040001445046F3F762F9F0 -:10062000002807DA291A491E91FBF5F101FB0504A0 -:100630002A4604E090FBF5F101FB15042A4694429A -:1006400088BFFFDF00E044462546A3E7002AA1D08B -:10065000B569002D08BFFFDF0024D5F8E420D9F8E4 -:1006600018002346611E58B18369934228BF9942FE -:1006700084BF194604460346C0680028F4D104B973 -:100680001C46C5F8E040D035002C04BFC5F80C80EE -:10069000C9F8185005D0E068E560E860002818BF88 -:1006A0000561D5F81090C5F81880B9F1000F0ED08B -:1006B000D9F8180048B1D5F814A0504538BFFFDF6D -:1006C000D9F81800A0EB0A00A861C9F81880002C1E -:1006D00008BFC6F8208009D02078002808BFFFDFB7 -:1006E000616900E00AE060680844306240F6B835AD -:1006F00050E7F08B0A2838BF032000D3022078711E -:10070000F08B012807D938467168FCF7C8F9014613 -:10071000F08B0844F083B8683061BDE8F09F2DE9A4 -:10072000F04107468F4884B00D4690F80004DFF88A -:100730003882400998F800144909884218BFFFDF41 -:1007400001200026082D814C80F0BB80DFE805F0F9 -:1007500004718C8C87B9B9A5607320736078002808 -:100760001CBF04B0BDE8F0817948866046612673FD -:100770003846FEF710F8050008BFFFDF95F8C900FE -:10078000022804BF79494FF47A720DD0012804BFC2 -:1007900071494FF4C86207D0042807BF6F4940F67B -:1007A0009802734940F6E44211444FF47A7201F220 -:1007B000E731B1FBF2F1A2688C18F5F715F80246A3 -:1007C00095F8C900082808BF082127D004280CBFC5 -:1007D0000221002322D002280CBF1821282119440D -:1007E000042816BF08280F2325235B1D082808BFEF -:1007F000402007D0042808BF102003D002280CBFD7 -:100800000420082013FB0010801A201AFDF741FD78 -:10081000002818BFFFDF04B0BDE8F08101EB410103 -:1008200001F12803082814BF04284FF4A871D6D07A -:10083000D1E7617851B1207B002808BFFDF751FF57 -:10084000667304B0BDE8F041F2F74ABAA073FDF751 -:10085000E2FD002818BFFFDF04B0BDE8F08104B05E -:10086000BDE8F041F4F79CBD98F8140D41494009EA -:1008700091F800144909884218BFFFDF0022394669 -:100880006846FFF76FFE69463846F2F765FD0028B7 -:1008900008BFFFDF04B0BDE8F0812078052818BF4D -:1008A000FFDF207F002808BFFFDF26772670207D2E -:1008B000F2F7EBFA002808BFFFDF267504B0BDE8A9 -:1008C000F081FFDF04B0BDE8F0812DE9F0411F4C5D -:1008D0000026207804281FBF207805280C20BDE8BA -:1008E000F08101206070607B0025A8B1EFF31080DB -:1008F00010F0010F72B60CBF00270127607B0028A3 -:100900001CBFA07B002805D0FDF7EBFE6573A57327 -:10091000F2F7E6F92FB903E0207DF2F72FFE00E0B1 -:1009200062B6207DF3F777F8207F28B1257720780D -:10093000052818BFFFDF0C2665702570207DF2F7B3 -:10094000A4FA002818E000007001002044120020E2 -:100950002812002004360200A2240200D0FB01006D -:10096000C0D4010001E000E00BE000E068360200C6 -:1009700030D3010019E000E008BFFFDF25753046E5 -:10098000BDE8F0812DE9F04FFB4883B000780028E6 -:1009900018BFFFF79AFF0120DFF8E08388F8000016 -:1009A00069460620F0F7E9F8002818BFFFDF0027A6 -:1009B0004FF6FF7934E0029800281CBF90F8D01061 -:1009C00000292DD0008848451CBFDFF8B4A34FF0A4 -:1009D000200B3BD00621F0F747F9040008BFFFDFEA -:1009E00094F8DA00F3F717F884F8D07094F8DA5036 -:1009F0004FF6FF76202D28BFFFDF2AF8156094F808 -:100A0000DA00F2F742FA002808BFFFDF84F8DAB014 -:100A100069460620F0F7B1F8002818BFFFDF10E0A4 -:100A20006846F0F788F80028C5D00FE00298002843 -:100A30001CBF90F8D010002903D000884845C9D1C8 -:100A400004E06846F0F777F80028EFD088F80070E7 -:100A5000C8F8187003B00020BDE8F08F10B5C94C7D -:100A600060B101280CBF40F6C410FFDF06D0A068BB -:100A700041F66A01884228BFFFDF10BDA060F6E79B -:100A800010B5DFF800C3BC4C00238CF800002370C5 -:100A90006370237723736373A3732020A36120758E -:100AA000A4F11C004370423010214FF6FF724280C7 -:100AB00020F8042F491EFAD1CCF80830DCF80800E1 -:100AC00041F66A01884228BFFFDFFFF75BFF40F66F -:100AD000C41101206160F4F799FE00F2E7314FF490 -:100AE0007A70B1FBF0F042F210710844A0606168C6 -:100AF000A1F21731884298BF0146A16010BDF0B540 -:100B00009D4C054685B0207800281EBF0C2005B0FE -:100B1000F0BD95F8546095F855006F6AF4F776FECD -:100B2000022E04BF98494FF47A720DD0012E04BFF3 -:100B300096494FF4C86207D0042E07BF944940F687 -:100B40009802944940F6E442114408444FF47A7103 -:100B500000F23F60B0FBF1F0384400F22230C5F8FB -:100B6000E400A56195F8D000002818BFFFDF002041 -:100B7000824948610521217060702077E0838648B2 -:100B8000F2F729F92075202808BFFFDFF2F79CF95A -:100B90002061217D01226846FFF7E4FC207D694643 -:100BA000F2F7DAFB002808BFFFDF002005B0F0BD38 -:100BB0007148007800281CBF0020704710B506203F -:100BC000EFF7ECFF80F0010010BD70B56A4C0546F0 -:100BD0002078002818BFFFDF2878012832D00428A9 -:100BE0001CBF112070BDE8882E89082540F27121B4 -:100BF000484360602846F4F709FE4FF47A7100F22A -:100C0000E730B0FBF1F040F2712206FB0200A06079 -:100C1000022D08BF614A07D0012D08BF5B4A03D0EF -:100C2000042D0CBF5A4A5E4A02F2E142B2FBF1F1D6 -:100C30006268511AA1F28A21884298BF01460020B9 -:100C4000A16070BD6888AE880125CFE710B584B07B -:100C500008431EBF112004B010BD474C2078002867 -:100C60001EBF0C2004B010BD002060700421217054 -:100C7000E0834948F2F7AFF82075202808BFFFDF6E -:100C80003E48806938B10146C0680028FBD111B1E7 -:100C9000F2F71AF905E0F2F717F940F6B831F1F773 -:100CA0001CFE2061217D01226846FFF75BFC207D50 -:100CB0006946F2F751FB002808BFFFDF002004B0AF -:100CC00010BD70B52C4CA1690160FFF7FEFD00233B -:100CD00000BBA169D1F8E0205AB1D1E939C5AC44D3 -:100CE0009569AC44C2F818C0D1E9372CCCF80C2077 -:100CF00005E0DFF888C0D1F8DC20CCF81820D1F866 -:100D0000DC20D1F8E010002A18BF116102D10029BF -:100D100018BF8B61A36170BD18494870704770B5EA -:100D200040F2E24300FB03F510460C46F4F76EFD7B -:100D3000022C04BF14494FF47A720DD0012C04BF69 -:100D400012494FF4C86207D0042C07BF104940F67F -:100D50009802104940F6E442114408444FF47A7175 -:100D600000F23F60B0FBF1F000F2223085428CBF10 -:100D7000281A002070BD0000441200202812002014 -:100D80006C1200207001002068360200A2240200CC -:100D9000D0FB010030D301001F070200043602001F -:100DA000C0D4010070B50D46064601460020FBF791 -:100DB0004BFF044696F85500F4F728FD014696F8D7 -:100DC0005400022804BFFB4A4FF47A700DD001286A -:100DD00004BFF94A4FF4C86007D0042807BFF74A98 -:100DE00040F69800F64A40F6E440104408444FF4B8 -:100DF0007A7100F23F60B0FBF1F0718840F271222D -:100E00005143C0EB4100A0F22230A54234BF21463D -:100E10002946814203D2A5422CBF28462046706253 -:100E200070BD10B5F4F7E0FCE6498A684968511ACC -:100E3000084410BD2DE9F04FE24B04252827D3F8D4 -:100E400008B04FF010080BF198044FF008094FF06C -:100E5000000C4FF4C8734FF4BF764FF0400A0628D9 -:100E60007CD2DFE800F00351214E246C14200429C9 -:100E700011D0082908D02A20022910D010FB0940DF -:100E800000252821294458E0554610FB054000BFA5 -:100E90004FF4A871F6E710FB08402E25F8E710FB89 -:100EA000054065461821EDE704F5317473E0D0B2D2 -:100EB00011F00C0F08BF0020082904BF00F5BA612B -:100EC00040200ED0042917D002290CBF0CF15C0180 -:100ED0000CF1B001014407BF0CF1180304203B469C -:100EE000082000EBC00000EB400003EB400008448A -:100EF000204400F19C044EE000F28E213346102085 -:100F0000EFE704F5B07446E0082908BF40200CD094 -:100F1000042904BF3346102007D0022907BF0CF173 -:100F2000180304200CF128030820C0EBC00000EBDC -:100F3000400003EB40000BEB020144182BE0D0B261 -:100F400011F00C0F08BF0020082904BF00F535611F -:100F5000402010D0042918D0022900E01AE00CBF6C -:100F60000CF1B4010CF5B071014407BF0CF118038A -:100F700004203B46082000EB400202EB001018441E -:100F80000844204400F19C0405E000F2EE313346B1 -:100F90001020F0E7FFDF8C488068A0428CBF012062 -:100FA0000020BDE8F08F10B5864C607828B1D4E9F8 -:100FB0000301A268FBF79BFDE060D4E902018842CF -:100FC0009CBF2078002814BF0020012010BD0422FF -:100FD0002DE9F04F774E784FDFF8E081DFF8E091B0 -:100FE00085B04FF47A7A052980F0D280DFE801F0ED -:100FF0000A2B0331920080F8D02005B0BDE8F04FF5 -:10100000F1F76EBE04466F480078002818BF84F8D8 -:10101000D02004D005B0BDE8F04FF1F761BE012249 -:10102000002321466846FEF7F7FF94F8DA00694688 -:10103000F2F792F9002808BFFFDFB4F85800401C0F -:10104000A4F85800E6E7032180F8D01005B0BDE809 -:10105000F08F8346408840F2E24148435B49086094 -:10106000DBF8F80059460089ABF81600DBF8F80009 -:1010700080798BF81500DBF8F8004089ABF80200A6 -:10108000DBF8F8008089ABF80400DBF8F800C089D1 -:10109000ABF806000020DBF82850FBF7D5FD04462E -:1010A0009BF85500F4F7B2FB9BF85410022908BFD7 -:1010B0004FF47A710DD0012904BF3E464FF4C86148 -:1010C00007D0042907BF464640F698014E4640F631 -:1010D000E4413144084400F23F60B0FBFAF1BBF850 -:1010E000020040F271225043C1EB4000A0F22230D6 -:1010F000A54234BF21462946814203D2A5422CBFD6 -:1011000028462046CBF8240002208BF8D00005B0FA -:10111000BDE8F08F83460146856A0020FBF794FD09 -:1011200004469BF85500F4F771FB9BF85410022914 -:1011300008BF4FF47A710DD0012904BF3E464FF429 -:10114000C86107D0042907BF464640F698014E46BD -:1011500040F6E4413144084400F23F60B0FBFAF04D -:10116000BBF8021040F271225143C0EB4100A0F2E3 -:101170002230A54234BF21462946814203D2A542EE -:101180002CBF28462046CBF8240005B0BDE8F08FE0 -:10119000FFDF05B0BDE8F08F2DE9F043DFF83080C8 -:1011A0000126002498F80010074D85B0072880F02C -:1011B000C6810FE068360200A2240200D0FB0100C5 -:1011C00030D30100281200204412002074010020B6 -:1011D00070010020DFE800F0041A1AFCFCFBFB00A1 -:1011E000EC830846EAF706FE6878002840F066813E -:1011F000297D00226846FFF7B5F9287D6946F2F798 -:10120000ABF8002808BFFFDF00F058B902280CBF78 -:1012100001260026287DFDF7BEFA040008BFFFDF87 -:1012200094F8E2103046FBF7BCFEDFF874930146F9 -:101230002869D9F80820002E024408BF4FF4FC703A -:101240007DD094F8E20094F80B3110F00C0F08BF39 -:10125000002394F8E20008281EBF94F8E200042856 -:101260004FF0000C00F0C68094F8E20008281ABF86 -:1012700094F8E20004284FF4A87005D094F8E20036 -:1012800002280CBF18202820844494F8E200082883 -:1012900008BF40200BD094F8E200042808BF1020BB -:1012A00005D094F8E20002280CBF04200820C0EB0F -:1012B000C00606EB4010604494F8E2C0BCF1080F91 -:1012C0001EBF94F8E2C0BCF1040F00267ED000BF20 -:1012D00094F8E2C0BCF1080F1ABF94F8E2C0BCF168 -:1012E000040F4FF4A87C08D094F8E2C0BCF1020FC0 -:1012F0000CBF4FF0180C4FF0280C664494F8E2C075 -:10130000BCF1080F08BF4FF0400C10D094F8E2C0B9 -:10131000BCF1040F08BF4FF0100C08D094F8E2C0E5 -:10132000BCF1020F0CBF4FF0040C4FF0080C0CEB9B -:101330004C0707EB0C1CB4446044184400E001E087 -:1013400000F59A7010440844061D94F8E200F4F782 -:101350005DFA024694F8E200022808BF91480BD0DB -:1013600094F8E200012808BF8F4805D094F8E20005 -:1013700004280CBF8D488E4894F8E210022908BF5B -:101380004FF47A710ED094F8E210012908BF4FF49F -:10139000C86107D094F8E21004290CBF40F6980108 -:1013A00040F6E441084410444FF47A7100F2E7300B -:1013B000B0FBF1F0A96940F2E243301A4A88D0311B -:1013C00002FB03F7D9F818208A4202E01CE0B0E0E3 -:1013D0005DE008BF00262BD0296AF2F783FA0028C7 -:1013E0001EDA391A4A1E92FBF7F202FB070639464B -:1013F0001BE000BF94F8E200082818BF022000EBB1 -:10140000400000F1280C2FE794F8E2C0BCF1080F6F -:1014100018BF4FF0020C0CEB4C0C0CF1280657E7F0 -:1014200090FBF7F202FB170639468E4288BFFFDFBA -:10143000D8F80800864208D2A86940F27122418893 -:10144000C1824A4306EB420605E040F2E240B6FBA9 -:10145000F0F0A969C88294F8E210A86980F85410E5 -:1014600094F8E21080F8551005214175C08A6FF498 -:101470001C71484306EB400040F63541C9F81400A2 -:10148000B0EB410F28BFFFDF05B0BDE8F0830428B3 -:101490000CBF01270027EC830846EAF7ABFC2E7748 -:1014A00085F82470A8692969C0F8D41080F8D04064 -:1014B0002978052918BFFFDF07D000BFF1F710FC1E -:1014C0006C73AC7305B0BDE8F083002808BFFFDF84 -:1014D000A86990F8D000002818BFFFDFA86990F82D -:1014E000DA00202818BFFFDF3248F1F774FCA96941 -:1014F0000646202881F8DA000F8828BFFFDF2E4833 -:1015000020F81670A86990F8DA00202808BFFFDFDD -:10151000002301226846A969FEF77EFDA869694695 -:1015200090F8DA00F1F718FF002808BFFFDFAC6180 -:10153000C4E705B00846BDE8F043EAF75BBCFFDF4F -:1015400005B0BDE8F08316494860704770B5144D8A -:101550000446002904BFA86070BD4FF47A760129C3 -:1015600010D002291CBFFFDF70BD6888401C688056 -:101570001046F4F764F900F2E730B0FBF6F0201AF9 -:10158000A86070BD1846F4F76FF900F2E730B0FBC1 -:10159000F6F0201AA86070BD084800787047000077 -:1015A0002812002068360200A2240200D0FB0100AD -:1015B00030D301000F0302006C12002044120020FF -:1015C000FB490C28896881F8CB001ABF132818281A -:1015D0007047002211280FD0072808BF7047152830 -:1015E0000AD001281ABF002802287047A1F88420D9 -:1015F000012081F888007047A1F88A20704770B5F3 -:10160000EB4CA1680A88A1F83E2181F83C0191F8D1 -:101610005400012808BF012508D0022808BF022570 -:1016200004D0042816BF08280325FFDFA06880F82F -:10163000405190F85500012808BF012508D0022824 -:1016400008BF022504D0042816BF08280325FFDFA1 -:10165000A068012180F8415180F83A11002180F8FA -:101660000E11E078BDE87040EAF7C4BBD04A01290A -:1016700092681BD0002302290FD0032922D030B357 -:1016800001282FD0032818BF704792F86400132850 -:101690001CBF1628182805D1704792F8CB000028E7 -:1016A00008BF7047D2F8F8000370704792F8CB007B -:1016B000012808BF704700BFD2F8FC000178491E1E -:1016C0000170704792F8CB000328EBD17047D2F835 -:1016D000F800B2F858108288891A09B20029A8BF08 -:1016E00003707047B2F85800B2F80211401A00B205 -:1016F0000028E1DA70472DE9F041AD4C00260327C0 -:10170000D4F808C0012590B12069C0788CF8CA00CF -:1017100005FA00F010F4000F08BFFFDFA06880F8A2 -:101720006470A0F8846080F88850BDE8F0810023E0 -:101730009CF8652019460CF15800FBF746F9002883 -:1017400004BF6570BDE8F0816078002818BFBDE86F -:10175000F0812069C178A06880F8C91080F86570B0 -:10176000A0F88A6080F88C50BDE8F08170B5904C8C -:1017700084B0207910F0010F04BF04B070BD20695F -:1017800000230521C578A06890F864205830FBF745 -:101790001CF9002818BF062D09D020DC022D1CBF23 -:1017A000042D052D03D0607840F00800607060784B -:1017B00000281CBF04B070BD2069C078801E1628A8 -:1017C00080F00783DFE800F011FE89A7D52CFEFD2D -:1017D000FE7FFCD2FEFEFEC5FBFAF9F8F7F60B2DF4 -:1017E0001CBF0D2D112DDED1E1E7A06800230121E2 -:1017F00090F867205830FBF7E8F8002840F05C8349 -:101800002069FBF7F3FEA16881F8F600072081F854 -:101810006700002081F88C0081F8880000F04CBB44 -:10182000A0680921002390F864205830FBF7CDF818 -:1018300018B120690079122812D0A0680A2100236B -:1018400090F864205830FBF7C0F818B1206900798F -:10185000142820D020690079162840F02D8324E038 -:10186000A0680125002390F8642009215830FBF777 -:10187000ACF8002808BF657000F01E83607800286F -:1018800040F01A83A16881F87C0081F8880081F813 -:10189000640000F011BBA168002081F86400A1F889 -:1018A000840081F8880000F035BAA06890F86410D0 -:1018B0001F2940F00183002180F8641080F888100F -:1018C0001A2000F0F7BAA06890F864100F2927D109 -:1018D000002180F86910122137E0A06890F86410A8 -:1018E00013291DD1D0F8F81000884988814218BF0B -:1018F000FFDFA068D0F8F80000F126012069FBF7AF -:10190000A2FEA06800F1C4012069FBF7A4FE162026 -:10191000A16800F05BB9A26892F86400162802D0B2 -:10192000022000F03BBAD2F8F80002F1B00300F157 -:101930001E0100220E30FAF7C4FFA0680021C0E9A2 -:101940002811012180F86910182180F8641000F036 -:10195000B3BA2069FBF7FFFE032840F0AD8220698F -:10196000FBF7FDFE01F00FFC00F0A6BA206900793C -:10197000F8E7A06890F864101A29D1D1002580F802 -:101980008D5080F88850D0F8F8100088498881423E -:1019900018BFFFDFA068D0F8F8100D70D0F8441120 -:1019A0000A78002A18BFFFDF7ED190F88E200AE067 -:1019B0007C0100203BE2B7E182E126E1F2E009E1AF -:1019C0002CE09FE0AAE17AB180F88E500288CA80AC -:1019D000D0F844110D71D0F844210E211170D0F8C7 -:1019E00044210188518010E00288CA80D0F8441157 -:1019F0000D71D0F8442101211172D0F844210D213C -:101A00001170D0F84421018851800088EFF75EFA08 -:101A1000EEF7F6FEE078EAF7EDF9BEE0A068002305 -:101A2000194690F865205830FAF7CFFF50B9A068F2 -:101A30000023082190F864205830FAF7C6FF0028E8 -:101A400000F0FA816078002840F03682A06890F8B3 -:101A5000900010F0020F14D12069FBF7FFFDA16880 -:101A600081F891002069B0F80520A1F89220B0F823 -:101A70000700A1F8940091F8900040F0020081F86E -:101A80009000A06890F8901011F0010F14D190F818 -:101A90006520002319465830FAF797FF002808BF41 -:101AA000FFDF0121A06800E077E080F8651080F892 -:101AB0008C100021A0F88A10A06890F86410012909 -:101AC00007D1002180F8641080F88810E078EAF7E8 -:101AD00091F9A168D1F8F800098842888A4204BFC8 -:101AE0000178042940F0E88100250570E078EAF7E4 -:101AF00081F9A06890F86410002908BF80F8885028 -:101B000000F0DAB9A0680023072190F8642058306B -:101B1000FAF75BFF002800F08F816078002840F022 -:101B2000CB8102A92069FBF7D3FD9DF808000025B1 -:101B300000F02501A06880F896109DF8091001F0CA -:101B4000410180F8971080F88850D0F8F81000888C -:101B50004988814218BFFFDFA068D0F8F8100D70E7 -:101B6000D0F844110A78002A18BFFFDF15D1028887 -:101B7000CA80D0F844110D71D0F84411029A8A60DD -:101B8000039ACA60D0F84421082111700188D0F866 -:101B900044014180E078EAF72DF9A06880F86450AC -:101BA00000F08AB9A0680023092190F86420583019 -:101BB000FAF70BFF002800F03F816078002840F022 -:101BC0007B81A16881F87C0081F8880081F864003D -:101BD00000F072B9A0680023194690F865205830CB -:101BE000FAF7F3FE002800F027816078002840F023 -:101BF0006381A0680021A0F88A10012180F88C1070 -:101C0000022180F8651000F057B9A068002319463A -:101C100090F865205830FAF7D8FE00287FD0206968 -:101C2000FBF740FD002879D0A5682069FBF736FD59 -:101C30002887A5682069FBF72DFD6887A5682069BE -:101C4000FBF72EFDA887A5682069FBF725FDE8872F -:101C5000A06890F864101C2913BF90F84E10012161 -:101C600080F84E10012907D090F80511002904BF13 -:101C700090F80411002903D01E2180F8651017E0A8 -:101C80001D2180F865100288A0F82A21028FA0F893 -:101C90002C21428FA0F82E21828F00F58A71A0F8A6 -:101CA0003021C08FC88301200875E078EAF7A2F8D8 -:101CB000A0680021A0F88A10012180F88C10FBE0B8 -:101CC000A06800230A2190F864205830FAF77DFEBE -:101CD00018B32069FBF7E6FCA8B1A5682069FBF7FB -:101CE000DDFC2887A5682069FBF7D4FC6887A56818 -:101CF0002069FBF7D5FCA887A5682069FBF7CCFC19 -:101D0000E88700F019FFA168002081F8880081F8B9 -:101D1000640000BF00F0E1FECEE000E059E0607832 -:101D200040F001006070C7E0A0680023194690F8F9 -:101D300065205830FAF749FE78B3A06890F864003F -:101D4000232812BF2428607840F0200026D068465F -:101D5000F3F71FFE002808BF002104D0009802A955 -:101D6000C0788DF80800A06801AB162290F86400D6 -:101D7000FBF7FBF8A0B1A0689DF80420162180F8BD -:101D8000EC2080F8ED10192180F86510012180F811 -:101D90008C100021A0F88A108EE04DE060708BE07E -:101DA0002069FBF79AFCA0B12269107900F00701C5 -:101DB000A06880F85010527902F0070280F8512094 -:101DC00090F80F31002B04BF90F80E31002B04D097 -:101DD00022E00020FFF78FFC6EE090F855C000F184 -:101DE00054038C4501BF19789142012180F87D1080 -:101DF00012D00288A0F8362190F8502000F58A71A0 -:101E000080F8382190F8510081F82500012081F8F0 -:101E10002000E078E9F7EEFFA068212180F8651046 -:101E2000012180F88C100021A0F88A1044E0A068FD -:101E300090F864001F2801D00120AFE72069FBF76C -:101E400056FC88B32069A2680179407901F0070146 -:101E500061F30705294600F0070060F30F21012018 -:101E600082F888000025A2F88450232082F86400BC -:101E7000566DD2F81001FAF7F7FFF2B2C1B28A42FA -:101E800007BFA16881F8F250A26882F8F210C6F389 -:101E90000721C0F30720814219BFA16881F8F30030 -:101EA000A06880F8F35007E0FFE70120FFF723FC6C -:101EB0005FF01E00FFF7A3FBA068D0E92A12491CBF -:101EC00042F10002C0E92A1204B070BD2DE9F047CA -:101ED000FE4D04464FF00007687808436870287983 -:101EE00010F0200F2846806818BFA0F87E7004D13B -:101EF000B0F87E10491CA0F87E1090F86A100126F8 -:101F000039B990F86420002306215830FAF75DFDB6 -:101F100058B3A88810F4006F07D0A86890F86A102A -:101F2000002918BFA0F876701FD1A868B0F8761005 -:101F3000491C89B2A0F87610B0F878208A422CBFEC -:101F4000511A00218288521D8A4228BF80F87C6085 -:101F5000B0F87610B0F87820914206D3A0F87670E9 -:101F600080F81A61E878E9F745FF287910F0600FEA -:101F700008D0A86890F8681021B980F8686001213D -:101F8000FFF725F84FF00808002C56D16878002894 -:101F900051D1287910F0040F0DD0A86890F8640092 -:101FA000032808BFFFDFA86890F86710072904BF5F -:101FB0002E7080F8677001F036F9287910F0080F5C -:101FC00019D06878B8B9A868002190F8CB00FFF75D -:101FD0004DFBA86890F8CB00FE2808BFFFDFFE216C -:101FE000A86880F8CB1090F86710082903D1022167 -:101FF000297080F86770FFF7B9FBA87810F0080F18 -:1020000016D0A8680023052190F864205830FAF70C -:10201000DCFC50B185F80180A868D0F8441108783C -:102020000D2808BF0020087002E00020F9F7E8F84A -:10203000A86801F031F800F0C9FDA868A14600F1D8 -:10204000580490F8F40030B9E27B002301212046C7 -:10205000FAF7BBFC10B1608D401C60853D21B9F1E1 -:10206000000F18D12878022808BF16200ED00128AA -:1020700004BFA86890F8F60008D06878E8B110F0BE -:10208000140F1CBF1E20207702D005E0207703E04C -:1020900010F0080F02D02177E67641E010F0030F30 -:1020A00003D02A202077E6763AE010F0200F08BF10 -:1020B000FFDF23202077E67632E094F8300028B165 -:1020C000A08D411CA185E18D884213D294F8340083 -:1020D00028B1608E411C6186E18D88420AD2618DF3 -:1020E000208D814203D3AA6892F8F42012B9E28DC0 -:1020F000914203D322202077E67611E0217C31B192 -:10210000E18C814228BF84F81C80C5D206E0E08CB7 -:10211000062803D33E202077E67601E0E07EA0B1DA -:102120002773677327740221A868FEF750FFA86819 -:1021300090F8CB10012904D1D0F8FC000178491E99 -:102140000170E878E9F756FE03E00021A868FEF781 -:102150003EFFBDE8F047F3F72BBC5C4A517893781B -:10216000194314D111460128896809D0107910F05B -:10217000040F03D091F86700072808D001207047AA -:10218000B1F84800098E884201D8FEF70CBF002044 -:10219000704770B54D4C06460D46A0883043A08070 -:1021A00016F0020F04D016F0010F18BFFFDFE56034 -:1021B00016F0010F18BF256116F0020F4FF0000254 -:1021C0004FF0010117D0E878062802D00B280BD079 -:1021D00011E0A06890F86420182A0CD10022C0E910 -:1021E0002A2280F86A1006E0A06890F8641012298C -:1021F00008BF80F86A2016F0800F1CBF0820A0706E -:1022000016F4806F08BF70BDA268B2F858009188BC -:102210000844801DE97880B2012908BFA2F80201B4 -:102220001ED0002904BFD2F8F810888018D01829D1 -:1022300016D192F8F210002904BF92F8F330002B67 -:102240000BD011F00C0F1EBF92F8543013F00C0F8E -:10225000994203D092F8F31001B90020A2F8F000DF -:10226000E9782846012909D071B1182918BF70BD35 -:10227000B2F8F010BDE87040FBF74BBAB2F80211AB -:102280004172090AA97270BDD2F8F81089884173A9 -:10229000090AA97370BDF0B50C4C85B00026A0608A -:1022A000A6806670A670054626700088F3F748FB86 -:1022B000A0680088F3F76AFBB5F8D800A168401C55 -:1022C00082B201F15800FAF743F901E07C010020E5 -:1022D000002818BFFFDF95F8650024280AD1B5F85B -:1022E0005810B5F8F000081A00B20028A4BF6078B2 -:1022F000002806D095F86400242818BF25283BD173 -:1023000019E0A06890F8F210002908BF90F8541066 -:1023100080F8541090F8F310002908BF90F8551079 -:1023200080F855100020FFF76AF985F86560A1680C -:1023300081F87D6020E0B5F85810B5F8F000081A73 -:1023400000B20028A4BF6078002815D1A06890F8DA -:10235000F210002908BF90F8541080F8541090F83B -:10236000F310002908BF90F8551080F85510002090 -:10237000FFF745F985F86460A5F8D860A06890F883 -:10238000881039B1B0F88410B0F88620914224BF8B -:1023900005B0F0BD90F88C1039B1B0F88A10B0F8E3 -:1023A0008620914224BF05B0F0BDB0F88220B0F87D -:1023B00080108A4224BF05B0F0BD90F8682092B327 -:1023C000B0F87E208A4224BF05B0F0BD90F8CB70F3 -:1023D000FE2F00F01E816846F3F7B5FA002808BF0B -:1023E000FFDF2221009802F034FC03210098FBF764 -:1023F00079F80098017821F0100101703946FBF757 -:102400009FF8192F80F0E380DFE807F028201446BA -:10241000E1E1E21A71E1E2E264E1E1E1E1D4E2E268 -:102420007B94ADE1B600B0F87E10062924BF05B05C -:10243000F0BDCBE7A068009990F8F5000871C7E0FF -:10244000A168009891F8CC100171C1E0A068D0F8A3 -:10245000FC00411C0098FBF7BEF8B9E0A1680098A9 -:10246000D1F8F82092790271D1F8F82012894271DE -:10247000120A8271D1F8F8205289C271120A0272CE -:10248000D1F8F82092894272120A8272D1F8F810BB -:10249000C989FBF778F89BE0A068D0F8F800011D27 -:1024A0000098FBF7A5F8A068D0F8F80000F10C013F -:1024B0000098FBF7A7F8A068D0F8F80000F11E011B -:1024C0000098FBF7A5F8A06800F1C0010098FBF7A1 -:1024D000ADF87DE0626900981178017191884171D1 -:1024E000090A81715188C171090A017270E0FE49BF -:1024F000D1E90001CDE9020102A90098FBF7B0F88B -:1025000066E0A068B0F844100098FBF7B3F8A06844 -:10251000B0F846100098FBF7B1F8A068B0F840108A -:102520000098FBF7AFF8A068B0F842100098FBF7EE -:10253000ADF84DE0A068B0F840100098FBF7A2F8A5 -:10254000A068B0F842100098FBF7A0F8A068B0F8B7 -:1025500044100098FBF78EF8A068B0F84610009879 -:10256000FBF78CF834E0A068009990F810210A710C -:1025700090F8110148712BE0A06890F8F300FAF789 -:102580006AFC01460098FBF7C0F8A16891F8F200D8 -:1025900010F00C0F1CBF91F8541011F00C0F02D06A -:1025A000884218BF0020FAF756FC01460098FBF756 -:1025B000A8F80DE0A06890F8ED100098FBF7C9F8B6 -:1025C000A06890F8EC100098FBF7C7F800E0FFDF78 -:1025D000F3F7CCF9002808BFFFDF0098C178012984 -:1025E00003D049B118290FD013E0A168B1F8021146 -:1025F0004172090A81720CE0A168D1F8F81089884B -:102600004173090A817304E0A168B1F8F010FBF787 -:1026100080F8B6480090B64BB64A29463046F8F7DF -:1026200033FDA0680023052190F864205830FAF7A4 -:10263000CCF9002804BF05B0F0BD05B0BDE8F040FE -:10264000F8F713BBAC48806890F8881029B1B0F84F -:102650008410B0F8862091421AD290F88C1029B1DB -:10266000B0F88A10B0F88620914211D2B0F88220DA -:10267000B0F880108A420BD290F86820B0F87E0043 -:1026800022B1884204D200BFF8F796BD0628FBD3DA -:10269000002001461AE470B50C46064615464FF474 -:1026A000A471204602F0F7FA2680002D08BFFFDF54 -:1026B0002868C4F8F8006868C4F8FC00A868C4F882 -:1026C000440170BDEEF7D9BB2DE9F0410D46074638 -:1026D0000621EEF7C9FA040008BFBDE8F081D4F87E -:1026E00044110026087858B14A8821888A4207D1C7 -:1026F000092810D00E281DD00D2832D008284CD023 -:1027000094F81A01002857D06E701020287084F8B1 -:102710001A61AF803EE06E7009202870D4F8440141 -:10272000416869608168A9608089A881D4F8440102 -:1027300006702FE00846EEF7C9FB0746EEF775F87E -:10274000B0B96E700E202870D4F8440140686860FB -:10275000D4F8440106703846EEF761F80120BDE870 -:10276000F0810846EEF7B2FB0746EEF75EF810B1CF -:102770000020BDE8F0816E700D202870D4F844016F -:102780004168696000892881D4F8440106703846A0 -:10279000EEF745F80120BDE8F0816E700820287042 -:1027A000D4F8440141688268C0686960AA60E86042 -:1027B000D4F844010670EDE794F81C01B0B16E70D6 -:1027C0001520287094F81C010028E3D084F81C61BF -:1027D000D4F81E016860D4F82201A860B4F826017C -:1027E000A88194F81C010028F0D1D3E794F82801BF -:1027F00070B16E701D20287084F82861D4F82A0109 -:102800006860D4F82E01A860B4F83201A881C1E74D -:1028100094F8340140B16E701E20287084F8346141 -:10282000D4F836016860B5E794F8140180B16E7091 -:102830001B20287094F814010028ABD084F8146190 -:10284000D4F81601686094F814010028F6D1A1E7C5 -:1028500094F83A01002808BFBDE8F0816E70162098 -:10286000287094F83A01002894D000BF84F83A61A7 -:10287000D4F83C016860B4F84001288194F83A012A -:102880000028F3D186E71C4A5061D17070472DE9CA -:10289000F0470446481E85B238BFBDE8F08704F112 -:1028A00008080126DFF850904FF0090A5FF0000792 -:1028B000B4F8D800401CA4F8D800B4F87E00401C3E -:1028C000A4F87E0094F86A0040B994F864200023CC -:1028D000062104F15800FAF778F838B3B4F8760016 -:1028E000401C80B20AE0000098520200CD1E020097 -:1028F0005B210200932102007C010020A4F87600F5 -:10290000B4F8781081422CBF0A1A0022A3885B1DFC -:10291000934228BF84F87C60884207D3A4F876707D -:1029200084F81A6199F80300E9F764FA94F88800CA -:1029300020B1B4F88400401CA4F8840094F88C0002 -:1029400020B1B4F88A00401CA4F88A0094F8F4007E -:1029500040B994F867200023012104F15800FAF7E8 -:1029600034F820B1B4F88200401CA4F8820094F836 -:1029700064000C2802D00D2820D067E0B4F858007D -:10298000411CB4F80201814260D1D4F8FC00411C22 -:10299000404602F095FA02212046F9F7FCFCD4F8F3 -:1029A000FC000078002808BFFFDF0121FE20FEF7B1 -:1029B0005DFE84F8647084F8986047E0B4F85800CD -:1029C000411CD4F8F800808881423FD1D4F84401FA -:1029D0000178002918BFFFDF22D12188C180D4F8F7 -:1029E000F8004189D4F844010181D4F8F8008189C4 -:1029F000D4F844014181D4F8F800C189D4F84401E5 -:102A00008181D4F844010771D4F8440180F800A012 -:102A1000D4F844012188418099F80300E9F7EAF9E4 -:102A200001212046F9F7B7FC03212046FEF7CFFA33 -:102A3000D9F80800D0F8F8000078022818BFFFDFA6 -:102A40000221FE20FEF712FE84F86470B4F85800EC -:102A5000401C691EA4F858008DB2BFF429AFBDE830 -:102A6000F087F94AC2E90601704770B50446B0F82C -:102A70007E0094F86810002908BFC0F1020503D059 -:102A8000B4F88010081A051F94F87C0040B194F83F -:102A900064200023092104F15800F9F796FFA0B142 -:102AA000B4F8766094F86A0058B994F8642000236A -:102AB000062104F15800F9F788FF002808BF2846CE -:102AC00003D0B4F87800801B001F8542C8BF0546BC -:102AD000002DD4BF0020A8B270BD042110B5DA4C7F -:102AE000A068FEF774FAA06890F84E10012902BFA2 -:102AF000022180F84E1010BD00F58A710288A0F8FE -:102B00001E21028EA0F82021828EA0F82221028FA1 -:102B1000B0F844309A4228BF1A460A82828FB0F831 -:102B20004600824238BF1046488201200872E07891 -:102B3000BDE81040E9F75EB9C34830B4806890F84A -:102B40004E30B0F832C0C48EB0F84010428F022B25 -:102B500025D08A4238BF11460186C28FB0F8421094 -:102B60008A4238BF11468186028FB0F844108A42EB -:102B700038BF11464186828FB0F846108A4238BF6E -:102B80001146C186418E614588BF8C46A0F832C08F -:102B9000C18EA14288BF0C46C48630BC7047038EEC -:102BA0009A4228BF1A46C58F838E9D4238BF2B4656 -:102BB0008A4238BF11460186B0F842108B4228BFC6 -:102BC0000B468386002180F84E10CDE770B59E4CF1 -:102BD000A06890F8CB10FE2906BF6178002970BD6F -:102BE00090F86720002301215830F9F7EEFE002805 -:102BF00018BF70BDA06890F8F41021B1BDE8704016 -:102C00000220FEF7DDBC90F86420002319465830FE -:102C1000F9F7DBFE40B1A06890F87C0020B1BDE878 -:102C200070401220FEF7CCBCA068002590F864200C -:102C3000122A1FD004DC032A3FD0112A1FD003E040 -:102C4000182A35D0232A43D0002304215830F9F71D -:102C5000BCFE002818BF70BDD4F808C09CF8650001 -:102C600019286ED03BDC01286ED002287AD00328C8 -:102C70005DD038E0BDE870400B20FEF7A1BCF1F755 -:102C800057F90C2838BF70BDA0680821D0F8F800AB -:102C90001E30F1F751F928B1A0680421C030F1F7D6 -:102CA0004BF900B9FFDFBDE870400320FEF788BC98 -:102CB000BDE870400620FEF783BC90F8CA1080F88B -:102CC000CC100720FEF77CFCA06880F8645070BD33 -:102CD0001820FEF775FCA068A0F8845070BD1E286F -:102CE00048D021286CD0DCF8F800012601780029B2 -:102CF00074D04088BCF8001088426FD100239CF843 -:102D0000642019460CF15800F9F75FFE002865D0E1 -:102D1000A068D0F8F810097802297DD003297CD06A -:102D200004297BD0052908BF082078D0C8E09CF88A -:102D3000C9008CF8CC000720FEF742FCA06800F028 -:102D40007AB97CE000E00DE00C20FEF739FCA068C9 -:102D5000A0F88A5090F8901041F0010180F890108E -:102D600000F069B91320FEF72BFCA068A0F88A5088 -:102D700000F061B99CF80501002818BF70BD9CF8EF -:102D8000040188B1BCF80601ACF84000BCF80801A9 -:102D9000ACF84200BCF80A01ACF84400BCF80C01E5 -:102DA000ACF846008CF80451FFF7C6FEFFF795FE1D -:102DB0001520FEF705FCA068A0F88A5000F03BB98A -:102DC0009CF87D0058B18CF8F2508CF8F350182024 -:102DD000FEF7F6FBA068A0F88A5070BD70E09CF882 -:102DE0000F01002818BF70BD9CF80E01002808BF15 -:102DF00070BDDCE91416DCF81001FAF735F8F2B210 -:102E0000C1B28A4207BFA16881F8F250A26882F875 -:102E1000F210C6F3072103E018E01DE03DE024E0D6 -:102E2000C0F30720814219BFA16881F8F300A068B0 -:102E300080F8F3501820BDE87040FEF7C1BB1120A8 -:102E4000FEF7BEFBA068F6E07C01002090F865006C -:102E5000F9F7A4FDA0BB08E090F8691041B190F823 -:102E60006A00002808BFFFDF0A20FEF7A9FB27E061 -:102E7000F1F75EF80C2823D3A0680821D0F8F800F9 -:102E80001E30F1F759F828B1A0680421C030F1F7DD -:102E900053F800B9FFDF0320E7E790F8900010F047 -:102EA000030F0DD10C20FEF78BFBA168A1F8845015 -:102EB00081F8886091F8900040F0010081F890005E -:102EC000A06890F8CB10FE2918BF70BD90F8642060 -:102ED000002319465830F9F778FD002808BF70BD67 -:102EE000A06890F80011E9B3A1690978D1BB90F806 -:102EF0006500F9F753FDA8BBA068B0F858100A297F -:102F000031D900F108010522E06901F0F7FD002840 -:102F1000A06804BF80F8005170BDD0F8FC000178B3 -:102F200061B1411C0522E06901F0E8FD002818BFED -:102F300070BDA068D0F8FC00007830B9A068E169E5 -:102F4000D0F8FC00401C01F0BBFFA068D0F8FC00EA -:102F50000178491C01700120FEF732FBA06880F85F -:102F6000005170BDFFE7A06890F8041111B190F80E -:102F70000511E1B390F80E11002908BF70BD90F85B -:102F80000F11002918BF70BD90F86500F9F706FD14 -:102F9000002818BF70BDA06890F85400012808BF31 -:102FA000012508D0022808BF022504D0042816BF36 -:102FB00008280325FFDFA06890F85500012808BF06 -:102FC000012608D0022808BF022604D0042816BF14 -:102FD00008280326FFDFA268012D92F810012DD0EA -:102FE000022D2ED0032D08BF04282CD03BE0FFE794 -:102FF000B0F80611A0F84010B0F80811A0F842107F -:10300000B0F80A11A0F84410B0F80C11A0F846105E -:1030100080F8045190F865001D2804D0BDE8704088 -:103020001420FEF7CDBAFFF787FDFFF756FD1520F8 -:10303000FEF7C6FAA06880F8655070BD012812D16D -:1030400001E002280FD192F81101012E06D0022EC4 -:1030500007D0032E08BF04280AD004E0012802D1BB -:1030600006E0022804D0BDE870401620FEF7A8BA9A -:10307000B2F8583092F85410B2F81201F032F9F761 -:1030800059FF20B1A168252081F8640070BDBDE81A -:1030900070400020FEF7B3BA70B5044690F86400A3 -:1030A00000250C2814D00D2818BF70BDB4F85800A6 -:1030B000D4F8F810401C8988884218BF70BDD4F835 -:1030C0004401FF4E0178002918BFFFDF45D122E0FF -:1030D000B4F85800B4F80211401C884218BF70BD03 -:1030E000D4F8FC00411C04F1080001F0E9FE0221C3 -:1030F0002046F9F750F9D4F8FC000078002808BF02 -:10310000FFDF0121FE20FEF7B1FA84F864500120B0 -:1031100084F8980070BD2188C180D4F8F800D4F8F4 -:10312000441140890881D4F8F800D4F8441180890A -:103130004881D4F8F800D4F84411C0898881D4F8C3 -:1031400044010571D4F8441109200870D4F84411E1 -:1031500020884880F078E8F74DFE01212046F9F7F5 -:103160001AF903212046FDF732FFB068D0F8F800C5 -:103170000078022818BFFFDF0221FE20FEF776FA52 -:1031800084F8645070BD70B5CD4CA16891F864208E -:10319000162A11BF132A91F88E20002A62781BBFCD -:1031A00002206070002A70BD81F8C800002581F8F7 -:1031B0008D5081F88850D1F8F800098840888842FD -:1031C00018BFFFDFA068D0F8F8000078032818BF08 -:1031D000FFDF0321FE20FEF749FAA068D0F8441172 -:1031E0000A78002A18BFFFDF19D10288CA80D0F8F8 -:1031F000442190F8C8101171D0F844110D72D0F824 -:1032000044210D211170D0F844210188518000889B -:10321000EDF75CFEEDF7F4FAE078E8F7EBFDA06877 -:1032200080F8645070BD10B5A54C207910F0020FE5 -:1032300008BF10BD6078002818BF10BDE068C078D6 -:10324000192880F06781DFE800F05F4F0D8EF7F7F7 -:10325000A5223FF76F82B0F7F7F7F7F6E2DFF8F451 -:10326000F3F7F200A0680023012190F8672058309E -:10327000F9F7ABFB002818BF10BD0821A06880F843 -:103280006710002180F8881080F88C1010BDA068AD -:103290000023194690F865205830F9F796FB18B1CD -:1032A000A168002081F88C00A0680023194690F8DE -:1032B00064205830F9F789FB002808BF10BD0020B2 -:1032C000A16881F8880010BDA0680023194690F815 -:1032D00064205830F9F779FB002808BFFFDF04208D -:1032E000A16881F8640010BDA0680023194690F819 -:1032F00064205830F9F769FB002808BFFFDF0C2075 -:10330000A16881F8640010BDA0680023194690F8F8 -:1033100064205830F9F759FB002808BFFFDF0D2063 -:10332000A16881F8640010BDA0680023194690F8D8 -:1033300064205830F9F749FB002808BFFFDF01215E -:10334000A06880F88D100F2180F8641010BDA0686F -:1033500090F86400122818BFFFDF0121A06880F8F0 -:103360008E101121F0E7A0680023194690F8642020 -:103370005830F9F72AFB28B9A06890F88E00002889 -:1033800008BFFFDF0121A06880F88D10132180F8AD -:10339000641010BDA06890F86400182818BFFFDF03 -:1033A0001A20A16881F8640010BDA068D0F8F81058 -:1033B00003884A889A4204BF0978042919D190F8F1 -:1033C0006420002319465830F9F7FFFA002808BF97 -:1033D000FFDFA06890F8901011F0020F04BF0121E8 -:1033E00080F8641005D0002180F88810D0F8F8002B -:1033F0000170A0680023194690F865205830F9F74D -:10340000E4FA002808BF10BD0020A1687FE0A06892 -:103410000023194690F864205830F9F7D6FA0028AE -:1034200008BFFFDF0520A16881F8640010BD30E00F -:103430001FE012E001E066E06CE0A068002319469E -:1034400090F864205830F9F7C0FA002808BFFFDF71 -:103450001C20A16881F86400E8E7A06800231946F1 -:1034600090F865205830F9F7B0FA002808BFFFDF60 -:10347000CAE7A0680023194690F864205830F9F78D -:10348000A4FA002808BFFFDF1F20A16881F86400AC -:10349000CCE7A06890F8651021291CD090F8641042 -:1034A000232918BFFFDFC1D190F8F210002907BF10 -:1034B00090F8F3100029242180F8641002E0000045 -:1034C0007C0100207FF4FBAE002180F864100846E8 -:1034D000FEF795F8F3E690F8F210002907BF90F890 -:1034E000F3100029242180F865108DD1002180F887 -:1034F000651080F87D1090F80E0100281CBF002098 -:10350000FEF77DF880E7A168002081F8650081F86A -:103510008C008BE7FFDF89E770B58D4C0829207A96 -:1035200063D2DFE801F0041A5A5A2662625A80B167 -:10353000F1F7FDFA012211461046F1F7C4FCF2F74B -:10354000A2F90020A072F1F794FBBDE87040F1F7FA -:1035500004BEBDE87040EFF7C3BBD4E90001EFF74C -:10356000BCF92060A07A401CC0B2A07228281CD3ED -:1035700070BDA07A0025401EC6B2E0683044F1F765 -:10358000D3FE10B9E1687F208855A07A272828BF8C -:1035900001252846F2F710F9A07A282809D2401C04 -:1035A000C0B2A072282828BF70BDBDE87040F1F7F6 -:1035B00060BB207A00281CBF012000F085F8F1F7DD -:1035C00065FDF1F7C2FD0120E07262480078E8F77E -:1035D00011FCBDE87040EFF783BB002808BF70BD49 -:1035E0000020BDE8704000F06FB8FFDF70BD10B57F -:1035F000574C207A002804BF0C2010BD00202072F8 -:10360000E072607AEFF7BAFF607AF0F704FA607A56 -:10361000EFF73BFC00280CBF1F20002010BD00224C -:1036200070B54B4C06460D46207A68B12272E272A4 -:10363000607AEFF7A3FF607AF0F7EDF9607AEFF7C1 -:1036400024FC002808BFFFDF4248E560067070BD1B -:1036500070B5050007D0A5F5E8503F494C388142C8 -:103660009CBF122070BD3A4CE068002804BF0920BE -:1036700070BD207A00281CBF0C2070BD3748EFF7C2 -:10368000AAFB6072202804BF1F2070BDEFF71CFC4E -:103690002060002D1CBF284420600120656020723E -:1036A000002000F011F8002070BD2949CA7A002AD4 -:1036B00004BF002070471F22027000224270CB68B6 -:1036C0004360CA72012070472DE9F04184B007467B -:1036D000EFF7FAFB1E4D8046414668682C6800EB08 -:1036E000800046002046F0F7FDF8B04206DB68682F -:1036F000811B4046EFF7F1F80446286040F233762C -:1037000021464046F0F7EEF8B04204DA3146404632 -:10371000EFF7E3F8044600208DF8000040F2E76080 -:10372000039004208DF80500002F14BF0120032012 -:103730008DF8040068460294EFF793FD687A6946B5 -:10374000EFF70AFE002808BFFFDF04B0BDE8F081F4 -:10375000AC1200209C010020B5EB3C0019350200A2 -:103760002DE9F0410C4612490D68114A1149083201 -:103770001160A0F12001312901D301200CE0412882 -:1037800010D040CC0C4F94E80E0007EB8000241FB3 -:1037900050F8807C3046B84720600548001D056021 -:1037A000BDE8F0812046DDF71BFDF5E706207047F8 -:1037B0001005024001000001A052020010B552485D -:1037C00000F012FA00B1FFDF4F48401C00F00CFA85 -:1037D000002800D0FFDF10BD2DE9F14F4B4ED6F889 -:1037E00000B00127484800F007FADFF81C8128B92B -:1037F0005FF0000708F1010000F014FA444C0025C6 -:103800004FF0030901206060C4F80051C4F804516E -:10381000009931602060DFF8FCA018E0DAF80000C1 -:10382000C00614D50E2000F064F8EFF3108010F0FD -:10383000010072B600D00120C4F80493D4F800113E -:1038400019B9D4F8041101B920BF00B962B6D4F88F -:10385000000118B9D4F804010028DFD0D4F804011D -:103860000028CFD137B1C6F800B008F1010000F050 -:10387000C3F911E008F1010000F0BEF90028B9D148 -:10388000C4F80893C4F80451C4F800510E2000F0A5 -:1038900030F81D4800F0C6F90020BDE8F88F2DE98A -:1038A000F0438DB00D46064600240DF110090DF1D0 -:1038B000200817E004EB4407102255F8271068464B -:1038C00001F048F905EB870710224846796801F0B6 -:1038D00041F96846FFF780FF10224146B86801F0C1 -:1038E00039F9641CB442E5DB0DB00020BDE8F0837B -:1038F00072E700F01F02012191404009800000F1B1 -:10390000E020C0F8801270479D01002004E50040CF -:1039100000E0004010ED00E0A94900200870704769 -:1039200070B5A84D01232B60A74B1C68002CFCD060 -:10393000002407E00E6806601E68002EFCD0001D03 -:10394000091D641C9442F5D30020286018680028E3 -:10395000FCD070BD70B59A4E04469C4D307802285C -:1039600000D0FFDFAC4200D3FFDF71699848012926 -:1039700003D847F23052944201DD03224271491CC0 -:103980007161291BC16092497078EFF7E5FC00284E -:1039900000D1FFDF70BD70B5894C0D46617888425B -:1039A00000D0FFDF894E082D4BD2DFE805F04A0436 -:1039B0001E2D4A4A4A382078022800D0FFDF032013 -:1039C0002070A078012801D020B108E0A06800F0A4 -:1039D0001BFE04E004F1080007C8FFF7A1FF052063 -:1039E0002070BDE87040EFF77BB9EFF76DFA014644 -:1039F0006068EFF777FFB04202D2616902290BD30A -:103A00000320F0F722FA12E0EFF75EFA0146606851 -:103A1000EFF768FFB042F3D2BDE870409AE7207834 -:103A200002280AD0052806D0FFDF04202070BDE858 -:103A3000704000F0BBB8022000E00320F0F705FA68 -:103A4000F3E7FFDF70BD70B50546EFF73DFA5C4C5C -:103A500060602078012800D0FFDF5D4901200870F8 -:103A60000020087104208D6048715848C860022009 -:103A700020706078EFF770FC002800D1FFDF70BD88 -:103A800010B54F4C207838B90220F0F7F4F918B986 -:103A90000320F0F7F0F908B1112010BD4D48EFF701 -:103AA0009AF96070202804D0012020700020606105 -:103AB00010BD032010BD2DE9F041144600EB840732 -:103AC0000E4605463F1F00F0B2FD4FF080521169CF -:103AD000484306EB8401091FB14201D2012100E0F5 -:103AE00000211CB11269B4EB920F02D90920BDE884 -:103AF000F081394A95420ED3AF420CD3854205D2AC -:103B0000874203D245EA0600800701D01020EEE785 -:103B1000964200D309B10F20E9E7304830490068E8 -:103B2000884205D0224631462846FFF7F9FE10E0CC -:103B3000FFF7A6FF0028DAD1214800218560C0E9FF -:103B4000036481704FF4A97104FB01F01830FFF792 -:103B50007AFF0020CBE770B54FF080550446286906 -:103B60001D49B1FBF0F0844201D20F2070BD00F07E -:103B70005EFDA04201D8102070BD184818490068A9 -:103B8000884204D02869604300F03EFD0CE0FFF756 -:103B900077FF0028F0D1296909486143816001213C -:103BA00081701048FFF74FFF002070BD10B5044C26 -:103BB0006078EFF76AF900B9FFDF0020207010BDD0 -:103BC000A001002004E5014000E40140105C0C006D -:103BD000BC1200209739020000600200B0000020F3 -:103BE000BEBAFECA7C5E0100002101700846704723 -:103BF0000146002008707047EFF3108101F00101C9 -:103C000072B60278012A01D0012200E000220123CD -:103C1000037001B962B60AB1002070474FF400503A -:103C20007047E9E7EFF3108111F0010F72B64FF022 -:103C30000002027000D162B600207047F2E7000077 -:103C40007B490968016000207047794908600020BD -:103C5000704701218A0720B1012804D042F20400F4 -:103C60007047916700E0D1670020704771490120DB -:103C7000086042F20600704708B504236D4A190730 -:103C8000103230B1C1F80433106840F00100106008 -:103C90000BE0106820F001001060C1F8083300202C -:103CA000C1F80801644800680090002008BD011FA9 -:103CB0000B2909D85F4910310A6822F01E0242EA36 -:103CC000400008600020704742F2050070470F284E -:103CD00009D8584910310A6822F4706242EA00207B -:103CE00008600020704742F205007047000100F1B3 -:103CF0008040C0F8041900207047000100F18040A6 -:103D0000C0F8081900207047000100F18040D0F889 -:103D10000009086000207047012801D9072070477A -:103D2000464A52F8200002680A43026000207047A9 -:103D3000012801D907207047404A52F82000026844 -:103D40008A43026000207047012801D9072070478C -:103D50003A4A52F8200000680860002070470200CC -:103D600037494FF0000003D0012A01D007207047E7 -:103D70000A607047020033494FF0000003D0012A67 -:103D800001D0072070470A60704708B54FF40072F1 -:103D9000510510B1C1F8042308E0C1F80823002040 -:103DA000C1F8240124481C3000680090002008BDA0 -:103DB00008B58022D10510B1C1F8042308E0C1F88C -:103DC00008230020C1F81C011B4814300068009033 -:103DD000002008BD08B54FF48072910510B1C1F8FC -:103DE000042308E0C1F808230020C1F8200112488C -:103DF000183000680090002008BD0D49383109686E -:103E00000160002070474FF080410020C1F8080198 -:103E1000C1F82401C1F81C01C1F820014FF0E020D5 -:103E2000802180F800140121C0F8001170470000C3 -:103E300000040040000500400801004064530200F7 -:103E400078050040800500406249634B0A68634979 -:103E50009A42096801D1C1F3100101600020704746 -:103E60005C495D4B0A685D49091D9A4201D1C0F366 -:103E700010000860002070475649574B0A685749A0 -:103E800008319A4201D1C0F3100008600020704749 -:103E900030B5504B504D1C6842F20803AC4202D082 -:103EA000142802D203E0112801D3184630BDC30004 -:103EB0004B481844C0F81015C0F81425002030BD38 -:103EC0004449454B0A6842F209019A4202D0062849 -:103ED00002D203E0042801D308467047404A01217A -:103EE00042F83010002070473A493B4B0A6842F2D2 -:103EF00009019A4202D0062802D203E0042801D325 -:103F000008467047364A012102EBC000416000209C -:103F1000704770B52F4A304E314C156842F2090394 -:103F200004EB8002B54204D0062804D2C2F800187F -:103F300007E0042801D3184670BDC1F31000C2F891 -:103F40000008002070BD70B5224A234E244C15682D -:103F500042F2090304EB8002B54204D0062804D2E1 -:103F6000D2F8000807E0042801D3184670BDD2F843 -:103F70000008C0F310000860002070BD174910B59C -:103F80000831184808601120154A002102EBC003CF -:103F9000C3F81015C3F81415401C1428F6D30020DC -:103FA00006E0042804D302EB8003C3F8001807E0FE -:103FB00002EB8003D3F80048C4F31004C3F80048B0 -:103FC000401C0628EDD310BD04490648083108609E -:103FD00070470000B0000020BEBAFECA00F50140E4 -:103FE00000F001400000FEFF7E4B1B6803B19847C4 -:103FF000BFF34F8F7C4801687C4A01F4E0611143B4 -:104000000160BFF34F8FFEE710B5EFF3108010F0A3 -:10401000010F72B601D0012400E0002400F0D9F8AD -:1040200050B1DDF777F9EEF71CFDEFF7B1FEDEF7E3 -:10403000ECFE6F490020086004B962B6002010BD94 -:1040400070B50C460546EFF3108010F0010F72B604 -:1040500001D0012600E0002600F0BBF818B106B937 -:1040600062B6082070BDDDF7D1F8DDF757F90246DA -:10407000002043099B0003F1E02300F01F01D3F867 -:104080000031CB40D9071BD0202803D222FA00F1FF -:10409000C90722D141B2002906DA01F00F0101F16E -:1040A000E02191F8141D03E001F1E02191F80014E2 -:1040B0004909082911D281B101290ED004290CD057 -:1040C000401C6428D5D3DEF777FE4949494808608B -:1040D0002046F0F775FA60B904E006B962B641F21D -:1040E000010070BD3F4804602DB12846F0F7B5FAD5 -:1040F00018B110242CE0404D19E02878022802D98C -:104100004FF4805424E007240028687801D0F8B9DF -:1041100008E0E8B120281BD8A878212818D8012861 -:1041200016D001E0A87898B9E8780B2810D8334960 -:10413000802081F8140DDDF7F1F82946EFF70EFE27 -:10414000EEF74EFC00F0A6FA2846DDF7B5F8044677 -:1041500006B962B61CB1FFF757FF204670BD0020BC -:1041600070BD10B5044600F034F800B10120207095 -:10417000002010BD224908600020704770B50C4631 -:1041800020490D681F49204E08310E60102807D0C5 -:1041900011280CD012280FD0132811D0012013E0C1 -:1041A000D4E90001FFF74CFF354620600DE0FFF732 -:1041B0002BFF0025206008E02068FFF7D2FF03E016 -:1041C0000F4920680860002020600E48001D05602F -:1041D00070BD074807490068884201D10120704737 -:1041E00000207047B80100200CED00E00400FA0543 -:1041F000B0000020BEBAFECA6C5302000BE000E023 -:1042000004000020100502400100000100B5D8495B -:1042100002282DD021DC10F10C0F08BFF42027D08C -:104220000FDC10F1280F08BFD82021D010F1140F97 -:1042300008BFEC201CD010F1100F08BFF02017D0E1 -:1042400020E010F1080F08BFF82011D010F1040F82 -:104250000CBFFC2000280BD014E0C01E062811D291 -:10426000DFE800F00E0C0A080503082000E0072034 -:10427000086000BD0620FBE70520F9E70420F7E70A -:104280000320F5E7FFDF00BD00B5BA49012808BFEC -:1042900003200CD0022808BF042008D0042808BF3F -:1042A000062004D0082816BFFFDF052000BD0860E7 -:1042B00000BDB149002804BF086820F0010005D006 -:1042C000012806BF086840F0010070470860704789 -:1042D00070B51E460546012924D0022A04BFA7480E -:1042E0004FF47A710DD0012A04BFA5484FF4C8617C -:1042F00007D0042A07BFA34840F69801A24840F619 -:10430000E44144181846F1F781FA04443046F1F7C5 -:10431000ABFA20444FF47A7100F27120B0FBF1F057 -:10432000281A70BD022A08BF4FF47A700AD0012AF9 -:1043300008BF4FF4C86005D0042A0CBF40F69800AF -:1043400040F6E44049F608514418DBE770B51446DE -:104350000546012908BF49F6CA660DD0022B08BFE1 -:104360008A4807D0012B08BF854803D0042B0CBF17 -:104370008448874800F1FA061046F1F760FA012CEC -:1043800008BF4FF47A710AD0022C08BF4FF4FA71BB -:1043900005D0042C0CBF4FF4FA614FF4FA51711A96 -:1043A00008444FF47A7100F28920B0FBF1F0281A2A -:1043B000801E70BD70B514460646012930D0022B10 -:1043C00004BF6E494FF47A700DD0012B04BF6C49C5 -:1043D0004FF4C86007D0042B07BF6A4940F6980025 -:1043E000694940F6E4400D181046F1F728FA012C0F -:1043F00008BF4FF47A710AD0022C08BF4FF4FA714B -:1044000005D0042C0CBF4FF4FA614FF4FA51691A2D -:1044100008444FF47A716438B0FBF1F0301A70BD83 -:10442000022B08BF4FF47A700AD0012B08BF4FF45B -:10443000C86005D0042B0CBF40F6980040F6E4405D -:1044400049F608514518CFE770B5164604460129CC -:1044500008BF49F6CA650DD0022B08BF4B4807D0EC -:10446000012B08BF464803D0042B0CBF45484848E1 -:1044700000F1FA051046F1F7C9F905443046F1F7A5 -:10448000F3F928444FF47A7100F2E140B0FBF1F007 -:10449000201A801E70BD2DE9F04107461E460C46CD -:1044A00015461046082A16BF04284DF68830F1F745 -:1044B000ADF907EB4701C1EBC71100EBC100012CBF -:1044C00008BF4FF47A710AD0022C08BF4FF4FA717A -:1044D00005D0042C0CBF4FF4FA614FF4FA51471881 -:1044E0002046F1F7ACF9381A4FF47A7100F60F60F4 -:1044F000B0FBF1F42846F1F777F920443044401D31 -:10450000BDE8F08170B5054614460E460846F1F741 -:104510007DF905EB4502C2EBC512C0EBC205304682 -:10452000F1F7A2F92D1A2046082C16BF04284DF6E3 -:104530008830F1F76BF928444FF47A7100F6B73000 -:10454000B0FBF1F52046F1F74FF92844401D70BD4E -:104550001049082818BF0428086803BF20F46C50CD -:1045600040F4444040F0004020F0004008607047B4 -:104570000C1500401015004050160040683602002F -:10458000A2240200D0FB010030D301000436020057 -:10459000C0D40100401700402DE9FE430C46804680 -:1045A000F8F7B4FF074698F80160204601A96A466B -:1045B000ECF717F905000DD0012F02D00320BDE85C -:1045C000FE83204602AA0199ECF72DF80298B0F874 -:1045D00003000AE0022F14D1042E12D3B8F803000E -:1045E000BDF80020011D914204D8001D80B2A91918 -:1045F000814202D14FF00000E1E702D24FF001000A -:10460000DDE74FF00200DAE70B4A022111600B49A7 -:104610000B68002BFCD0084B1B1D18600868002895 -:10462000FCD00020106008680028FCD070474FF0D4 -:10463000805040697047000004E5014000E40140FB -:1046400002000B464FF00000014620D0012A04D0A2 -:10465000022A04D0032A0DD103E0012002E0022047 -:1046600015E00320072B05D2DFE803F00406080A53 -:104670000C0E100007207047012108E0022106E01F -:10468000032104E0042102E0052100E00621EEF709 -:10469000BEBB0000F9480521817000210170417006 -:1046A0007047F7490A78012A05D0CA681044C860E3 -:1046B0004038EFF7E4B88A6810448860F8E70028CB -:1046C00019D00378EF49F04A13B1012B0ED011E055 -:1046D0000379012B00D06BB943790BB1012B09D1C0 -:1046E0008368643B8B4205D2C0680EE00379012BDE -:1046F00002D00BB10020704743790BB1012BF9D1E7 -:10470000C368643B8B42F5D280689042F2D80120A6 -:104710007047DB4910B501220A700279A2B100226C -:104720000A71427992B104224A718268D34C5232A2 -:104730008A60C0681434C8606060EEF7C5FBCF497A -:1047400020600220887010BD0322E9E70322EBE716 -:1047500070B5044609B1012000E00320C84D0021D6 -:104760002970217901B100202871607968B1042095 -:10477000C24E6871A168F068EEF7AFF8A860E06813 -:104780005230E8600320B07070BD0320F0E72DE9DF -:10479000F04105460226EEF79EFF006800B1FFDFFC -:1047A000B64C01273DB12878B0B1012805D00228C8 -:1047B00010D0032813D027710CE06868C82807D3ED -:1047C000EFF7C3F820B16868FFF76BFF012603E03D -:1047D000002601E000F05CF93046BDE8F081207869 -:1047E0000028F7D16868FFF76AFF0028E3D06868FF -:1047F000017879B1A078042800D0FFDF0121686832 -:10480000FFF7A6FF9E49E078EEF7A6FD0028E1D16C -:10481000FFDFDFE7FFF77DFF6770DBE72DE9F0479C -:10482000964C8846E178884200D0FFDFDFF84C9252 -:1048300000250127924E09F11409B8F1080F75D22D -:10484000DFE808F0040C28527A808D95A0780328C0 -:1048500002D0022800D0FFDFBDE8F087A07803284F -:1048600002D0022800D0FFDF0420A070257120783C -:10487000002878D1FFF715FF3078012806D0B068FE -:10488000E06000F025F92061002060E0E078EEF7BC -:1048900060FCF5E7A078032802D0022800D0FFDFF3 -:1048A000207800286DD1A078032816D0EEF70CFBF5 -:1048B00001464F46D9F80000EFF714F800280EDB48 -:1048C000796881420BDB081AF0606D49E078EEF7F9 -:1048D00043FD0028C0D1FFDFBEE7042028E004200C -:1048E000EFF7B3FAA570B7E7A078032802D0022843 -:1048F00000D0FFDF207888BBA078032817D0EEF720 -:10490000E3FA01464F46D9F80000EEF7EBFF002826 -:10491000E5DB79688142E2DB081AF0605849E0780B -:10492000EEF71AFD002897D1FFDF95E740E005205C -:10493000EFF78BFAA7708FE7A078042800D0FFDF8D -:10494000022004E0A078042800D0FFDF0120A16845 -:104950008847FFF71CFF054630E004E011E0A0782F -:10496000042800D0FFDFBDE8F04700F091B8A07840 -:10497000042804D0617809B1022800D0FFDF207834 -:1049800018B1BDE8F04700F08CB8207920B10620BE -:10499000EFF75BFA2571CDE7607838B13849E078F8 -:1049A000EEF7DAFC00B9FFDF657055E70720BFE7D7 -:1049B000FFDF51E73DB1012D03D0FFDF022DF9D11B -:1049C0004AE70420C3E70320C1E770B5050004D01F -:1049D0002A4CA078052806D101E0102070BD0820DF -:1049E000EFF749FA08B1112070BD2848EEF7F3F946 -:1049F000E070202803D00020A560A07070BD0320C7 -:104A000070BD1E4810B5017809B1112010BD817824 -:104A1000052906D0012906D029B101210170002005 -:104A200010BD0F2010BD00F03CF8F8E770B5134C36 -:104A30000546A07808B1012809D155B12846FFF7ED -:104A40003EFE40B1287840B1A078012809D00F205F -:104A500070BD102070BD072070BD2846FFF759FEBD -:104A600003E000212846FFF773FE0549E078EEF7E2 -:104A700073FC00B9FFDF002070BD0000BC01002006 -:104A8000CC1200203D860100FF1FA1071D48020037 -:104A90000A4810B5006900F013F8BDE81040EEF7C1 -:104AA0001FB9064810B5C078EEF7EFF900B9FFDF7F -:104AB0000820EFF7CAF9BDE81040EBE5BC01002083 -:104AC0000C490A6848F202139A4302430A6070478D -:104AD000084A116848F2021301EA03009943116081 -:104AE00070470246044B10201344FC2B01D8116080 -:104AF00000207047C80602400018FEBF40EA0103CC -:104B000010B59B070FD1042A0DD310C808C9121F76 -:104B10009C42F8D020BA19BA884201D9012010BDB0 -:104B20004FF0FF3010BD1AB1D30703D0521C07E07D -:104B3000002010BD10F8013B11F8014B1B1B07D1E1 -:104B400010F8013B11F8014B1B1B01D1921EF1D152 -:104B5000184610BD032A40F2308010F0030C00F01C -:104B6000158011F8013BBCF1020F624498BF11F8A7 -:104B700001CB00F8013B38BF11F8013BA2F1040260 -:104B800098BF00F801CB38BF00F8013B11F00303D8 -:104B900000F02580083AC0F0088051F8043B083A3C -:104BA00051F804CBA0E80810F5E7121D5CBF51F8DE -:104BB000043B40F8043BAFF30080D20724BF11F858 -:104BC000013B11F801CB48BF11F8012B24BF00F8BD -:104BD000013B00F801CB48BF00F8012B704710B52E -:104BE000203AC0F00B80B1E81850203AA0E81850E5 -:104BF000B1E81850A0E81850BFF4F5AF5FEA027CA6 -:104C000024BFB1E81850A0E8185044BF18C918C014 -:104C1000BDE810405FEA827C24BF51F8043B40F8B5 -:104C2000043B08BF7047D20728BF31F8023B48BF9A -:104C300011F8012B28BF20F8023B48BF00F8012BD8 -:104C4000704702F0FF0343EA032242EA024200F007 -:104C500002B84FF000020429C0F0128010F0030CDB -:104C600000F01B80CCF1040CBCF1020F18BF00F85F -:104C7000012BA8BF20F8022BA1EB0C0100F00DB80E -:104C80005FEAC17C24BF00F8012B00F8012B48BF6C -:104C900000F8012B70474FF0000200B51346944610 -:104CA0009646203922BFA0E80C50A0E80C50B1F184 -:104CB0002001BFF4F7AF090728BFA0E80C5048BF98 -:104CC0000CC05DF804EB890028BF40F8042B08BF36 -:104CD000704748BF20F8022B11F0804F18BF00F832 -:104CE000012B7047FEDF04207146084219D1069956 -:104CF000124A914215DC069902394878DF2810D112 -:104D00000878FE2807D0FF280BD14FF001004FF0A4 -:104D100000020B4B184741F201000099019A084B21 -:104D20001847084B002B02D01B68DB6818474FF070 -:104D3000FF3071464FF00002014B1847006002003F -:104D4000E93F020004000020184819497047FFF7A6 -:104D5000FBFFDCF733FA00BD4FF4805015490968BA -:104D6000884203D1144A13605B68184700BD0000F5 -:104D700020BFFDE74FF480500E490968884210D1EA -:104D80000E4B18684FF0FF318842F1D080F308884D -:104D90004FF02021884204DD0948026803210A43BC -:104DA00002600848804708488047FFDFE012002083 -:104DB000E01200200000002004000020006002003B -:104DC0001409004099460100594D02000420714623 -:104DD000084202D0EFF3098101E0EFF3088188690E -:104DE00002380078102813DB20280FDB2C280BDB7F -:104DF0000A4A12680A4B9A4203D1602804DB094A26 -:104E00001047022008607047074A1047074A1047BA -:104E1000074A12682C32126810470000B0000020C8 -:104E2000BEBAFECA21130000613702007D410200B4 -:104E3000040000200D4B0E4908470E4B0C49084753 -:104E40000D4B0B4908470D4B094908470C4B0849C6 -:104E500008470C4B064908470B4B054908470B4BC5 -:104E6000034908470A4B02490847000051BB0000AC -:104E70000D2F00006D2C0000092B0000972A000068 -:104E80000F2D00003D1300005328000029BE000034 -:104E9000C91100000021016001717047002101600B -:104EA00081807047002101604160017270470A688B -:104EB0004B6802604360B1F808C0A0F808C07047B2 -:104EC0000A6802600B79037170470000B995000011 -:104ED00043970000A1980000C5980000FF980000CB -:104EE0003399000065990000959900000B9A000025 -:104EF00091960000A7120000A7120000794400005C -:104F0000C5440000E94400007D45000099460000CA -:104F10005B4700008D47000075480000074900000E -:104F20005B490000414A0000614A0000DF150000B3 -:104F30000316000033150000871500003516000029 -:104F4000C91600006360000013620000E7650000FE -:104F5000FD660000876700000568000069680000C2 -:104F60008D6900005D6A0000C96A0000834A000084 -:104F7000894A0000934A000089410000FB4A000072 -:104F80005D410000874C0000BF4C0000294D00002F -:104F90000F4E0000254E0000A7120000A7120000CF -:104FA000A7120000A7120000A7120000A71200001D -:104FB000A7120000A7120000BF2400004525000032 -:104FC000612500007D2500000B270000A7250000BB -:104FD000B1250000F325000015260000F126000091 -:104FE00033270000A7120000A7120000678300000B -:104FF0008783000089830000CD830000FB830000CD -:10500000E9840000778500008B850000D9850000C9 -:10501000C98600006F880000998900007B7300003A -:10502000B1890000A7120000A7120000D1B400004F -:105030003BB600008FB60000FBB60000ABB7000027 -:105040000100000000000000100110013A02000001 -:105050001A020000FB900000E9900000FFFFFFFF34 -:105060000000FFFFCDAC0000293D000065200000DE -:10507000C5730000618E0000000000000000020007 -:10508000000000000002000000000000000100001D -:105090000000000013810000F38000006181000027 -:1050A00041240000032400002324000037A800004E -:1050B00063A800006BAA000059590000818100001C -:1050C00000000000B18100008F24000000000000FB -:1050D00000000000000000004DA9000000000000DA -:1050E000ED59000000000000900A0000900A000046 -:1050F000DB560000DB5600005544000079AB000091 -:1051000047760000771F0000972602004F970100A6 -:10511000195700001957000077440000DBAB00006E -:10512000CB760000E91F0000C5260200639701004E -:1051300070017001400038005C002400480100024A -:1051400000000300656C74620000000000000000B5 -:1051500000000000000000008700000000000000C8 -:105160000000000000000000BE83605ADB0B3760C7 -:1051700038A5F5AA9183886C010000003114010064 -:10518000F9220100000000010206030405000000EE -:105190000700000000000000060000000A000000F8 -:1051A0003200000073000000B4000000C989010053 -:1051B00047150200616F0100D5B10100EBF4010059 -:1051C000D5B10100F77001008DB30100E1EE0100DF -:1051D0008DB30100BF6D010021B3010001F4010096 -:1051E00021B301005D6F0100E9B101009DE70100FD -:1051F000E9B10100ED74010001B601009DF5010067 -:1052000001B601000300000001555555D6BE898E38 -:105210000000C706C70CC71200006B030F06B308D7 -:105220000000B704A708970CF401FA009600640088 -:105230004B0032001E0014000A00050002000100AD -:105240000041000000000000AAAED7AB15412010BD -:105250000C0802170D0101020909010106020918D3 -:10526000180301010909030305000000FE00000006 -:10527000FE000000FE555555252627D6BE898E0016 -:10528000F401FA00960064004B0032001E00140086 -:105290000A00050002000100254100000000000096 -:1052A000493E0200613E0200793E0200913E02004A -:1052B000C13E0200E93E0200133F0200473F0200E8 -:1052C000573B0200B73A0200AD370200E34A020042 -:1052D000E93B0200F93B0200253C0200433F01008C -:1052E0004B3F01005D3F0100533C02006D3C02005A -:1052F000413C02004B3C0200793C0200AF3C020002 -:10530000CF3C0200ED3C0200FB3C0200093D0200E4 -:10531000193D0200313D0200493D02005F3D02009F -:10532000753D0200000000007FB90000D5B9000003 -:10533000EBB9000041460200D93702009F38020055 -:10534000CB490200034A02002D4A0200ED3D010054 -:105350006D4101008B3D0200B13D0200D53D0200D0 -:10536000FB3D02001C05004020050040001002002B -:105370009053020008000020D001000044110000FA -:10538000C8530200D801002008110000A01100003D -:10539000011813C8140250201A0102227C2720FB96 -:1053A000349B5F801280021A10138B091B20480463 -:1053B0001ACE0401200B50A40AAC01300912CB63B1 -:0853C0007F010B68CC10A00076 -:00000001FF diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json deleted file mode 100644 index a755cee09d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_FULL/mbed_lib.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "softdevice", - "macros": [ - "SOFTDEVICE_PRESENT=1", - "S140", - "BLE_STACK_SUPPORT_REQD", - "NRF_SDH_CLOCK_LF_XTAL_ACCURACY=7", - "NRF_SD_BLE_API_VERSION=6", - "NRF_SDH_ENABLED=1", - "NRF_SDH_BLE_ENABLED=1", - "PEER_MANAGER_ENABLED=1", - "NRF_SDH_BLE_GATT_MAX_MTU_SIZE=23", - "NRF_SDH_BLE_OBSERVER_PRIO_LEVELS=4", - "NRF_SDH_BLE_GAP_EVENT_LENGTH=3", - "BLE_ADV_BLE_OBSERVER_PRIO=1", - "BLE_CONN_STATE_BLE_OBSERVER_PRIO=0", - "BLE_CONN_PARAMS_BLE_OBSERVER_PRIO=1", - "NRF_BLE_GATT_BLE_OBSERVER_PRIO=1", - "NRF_SDH_DISPATCH_MODEL=2", - "NRF_SDH_SOC_ENABLED=1", - "NRF_SDH_STACK_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_STATE_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_SOC_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_REQ_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", - "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", - "FDS_BACKEND=2", - "SWI_DISABLE1=1" - ], - "target_overrides": { - "*": { - "target.features_add": ["BLE"], - "target.bootloader_img": "hex/s140_nrf52_6.0.0_softdevice.hex", - "target.mbed_ram_start": "0x200032F8", - "target.mbed_ram_size": "0x3CD08" - } - } -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/CMakeLists.txt deleted file mode 100644 index eb60b0d115..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./libraries - ./libraries/fstorage - ./nrf_soc_nosd -) - -target_sources(mbed-core - INTERFACE - libraries/fstorage/nrf_fstorage_nvmc.c - nrf_soc_nosd/nrf_nvic.c - nrf_soc_nosd/nrf_soc.c -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_mbr.h deleted file mode 100644 index e0c80e278c..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_mbr.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is - * not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_mbr.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_mbr.hex deleted file mode 100644 index 56225a4a9d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/hex/mbr_nrf52_2.3.0_mbr.hex +++ /dev/null @@ -1,165 +0,0 @@ -:020000040000FA -:1000000000040020990900002D0600007909000075 -:1000100037060000410600004B060000000000000B -:10002000000000000000000000000000BD0900000A -:1000300055060000000000005F0600006906000091 -:10004000730600007D060000870600009106000090 -:100050009B060000A5060000AF060000B9060000E0 -:10006000C3060000CD060000D7060000E106000030 -:10007000EB060000F5060000FF060000090700007F -:10008000130700001D0700002707000031070000CC -:100090003B070000450700004F070000590700001C -:1000A000630700006D07000077070000810700006C -:1000B0008B070000950700009F070000A9070000BC -:1000C000B3070000BD070000C7070000D10700000C -:1000D000DB070000E5070000EF070000F90700005C -:1000E000030800000D0800001708000021080000A8 -:1000F0002B080000350800003F08000049080000F8 -:10010000530800001FB500F003F88DE80F001FBD75 -:1001100000F038BC70B50B46010B184400F6FF70B8 -:10012000040B4FF080500022090303692403406947 -:1001300043431D1B104600F0E9F929462046BDE85F -:10014000704000F0E3B9F0B54FF6FF734FF4B475AB -:100150001A466E1E12E0A94201D3344600E00C4656 -:10016000B1EB040130F8027B641E3B441A44F9D120 -:100170009CB204EB134394B204EB12420029EAD17F -:1001800098B200EB134002EB124140EA0140F0BD8F -:10019000C34992B00446D1E90001CDE91001FF2224 -:1001A0004021684600F094FB94E80F008DE80F00B2 -:1001B000684610A902E004C841F8042D8842FAD12B -:1001C00010216846FFF7BFFF1090AA208DF8440069 -:1001D00000F0FAF800F0DDF84FF01024A0691022CA -:1001E0006946803000F0DEF8A069082210A900F00E -:1001F000D9F800F0C2F870B504460068A94D072888 -:1002000069D2DFE800F033041929561E2500D4E92D -:10021000026564682946304600F0FDF82A4621460A -:10022000304600F0BFF8AA002146304600F024FB1B -:10023000002800D0032070BD00F0D6FB4FF48050A2 -:1002400007E0201D00F0C6F80028F4D100F0CCFB38 -:1002500060682860002070BD241D94E807009200AB -:1002600000F00AFB0028F6D00E2070BD00F0BEF8AA -:100270000028FAD1D4E9010100EB81034FF080504E -:10028000026945696A43934209D84FF010225369C5 -:1002900003EB81030169406941438B4201D9092085 -:1002A00070BD5069401C01D10F2070BD2046FFF782 -:1002B0006FFF00F09BF80028F7D1201D00F08AF8AE -:1002C0000028F2D160680028F0D100F07DF800F03D -:1002D00060F800F052F8072070BD10B50C461828E1 -:1002E00002D00120086010BD2068FFF784FF206065 -:1002F00010BD4FF01024A069401C05D0A569A66967 -:1003000080353079AA2808D06069401C2DD06069FA -:100310000068401C29D060692CE010212846FFF7B6 -:1003200012FF316881421CD1A16901F18002C03104 -:1003300005E030B108CA51F8040D984201D10120FE -:1003400000E000208A42F4D158B1286810B1042896 -:1003500003D0FEE7284600F070F85249686808604C -:1003600008E000F016F800F008F84FF4805001683B -:10037000491C01D000F012FBFEE7BFF34F8F4A4843 -:1003800001684A4A01F4E06111430160BFF34F8FF5 -:10039000FEE74FF010208169491C02D0806900F00F -:1003A0008CB870472DE9F04117460D4606460024EB -:1003B00006E03046296800F093F8641C2D1D361DB8 -:1003C000BC42F6D3BDE8F0814FF0102080694FF4B5 -:1003D00080519FE64FF080510A69496900684A439D -:1003E000824201D810207047002070474FF08050A3 -:1003F0000169406941434FF01020826902F5805243 -:10040000914201D2092070478069401C01D0002030 -:1004100070470420704770B50C4605464FF480665F -:1004200008E0284600F049F8B44205D3A4F58064FA -:1004300005F58055002CF4D170BD4168044609B122 -:10044000012600E000264FF010256869A26892009E -:1004500000F012FAF8B1A06881006869FFF75AFE4F -:10046000BEB16E694FF08050A56864680169426949 -:100470005143A1420DD9016940694143A94208D9BC -:1004800029463046FFF7C7FF2A4621463046FFF788 -:1004900089FFFFF772FFFFF797FFFFF77AFFF8E793 -:1004A0000C0A0000000000200CED00E00400FA053A -:1004B000144801680029FCD07047134A02211160DA -:1004C00010490B68002BFCD00F4B1B1D18600868EF -:1004D0000028FCD00020106008680028FCD070477D -:1004E000094B10B501221A60064A1468002CFCD092 -:1004F000016010680028FCD00020186010680028F7 -:10050000FCD010BD00E4014004E5014070B50C468C -:10051000054600F073F810B900F07EF828B12146C6 -:100520002846BDE8704000F007B821462846BDE8DF -:10053000704000F037B800007FB5002200920192B1 -:10054000029203920A0B000B6946012302440AE05F -:10055000440900F01F0651F8245003FA06F635430B -:1005600041F82450401C8242F2D80D490868009A94 -:1005700010430860081D0168019A1143016000F0F2 -:100580003DF800280AD0064910310868029A104345 -:100590000860091D0868039A104308607FBD0000C9 -:1005A0000006004030B50F4C002200BF04EB0213E0 -:1005B000D3F800582DB9D3F8045815B9D3F8085812 -:1005C0001DB1521C082AF1D330BD082AFCD204EB1D -:1005D0000212C2F80008C3F804180220C3F8080881 -:1005E00030BD000000E001404FF08050D0F83001F5 -:1005F000082801D000207047012070474FF080503C -:10060000D0F83011062905D0D0F83001401C01D0B7 -:1006100000207047012070474FF08050D0F8300123 -:100620000A2801D0002070470120704708208F4918 -:1006300009680958084710208C4909680958084773 -:1006400014208A4909680958084718208749096809 -:100650000958084730208549096809580847382053 -:1006600082490968095808473C20804909680958A7 -:10067000084740207D4909680958084744207B49BC -:1006800009680958084748207849096809580847FF -:100690004C20764909680958084750207349096871 -:1006A00009580847542071490968095808475820D3 -:1006B0006E490968095808475C206C49096809585F -:1006C0000847602069490968095808476420674954 -:1006D00009680958084768206449096809580847A3 -:1006E0006C20624909680958084770205F49096809 -:1006F0000958084774205D49096809580847782057 -:100700005A490968095808477C2058490968095816 -:1007100008478020554909680958084784205349EB -:100720000968095808478820504909680958084746 -:100730008C204E4909680958084790204B490968A0 -:1007400009580847942049490968095808479820DA -:1007500046490968095808479C20444909680958CE -:100760000847A0204149096809580847A4203F4983 -:10077000096809580847A8203C49096809580847EA -:10078000AC203A49096809580847B0203749096838 -:1007900009580847B4203549096809580847B8205E -:1007A0003249096809580847BC2030490968095886 -:1007B0000847C0202D49096809580847C4202B491B -:1007C000096809580847C82028490968095808478E -:1007D000CC202649096809580847D02023490968D0 -:1007E00009580847D4202149096809580847D820E2 -:1007F0001E49096809580847DC201C49096809583E -:100800000847E0201949096809580847E4201749B2 -:10081000096809580847E820144909680958084731 -:10082000EC201249096809580847F0200F49096867 -:1008300009580847F4200D49096809580847F82065 -:100840000A49096809580847FC20084909680958F5 -:1008500008475FF480700549096809580847000097 -:1008600003480449024A034B70470000000000207F -:10087000180A0000180A000040EA010310B59B079F -:100880000FD1042A0DD310C808C9121F9C42F8D0FA -:1008900020BA19BA884201D9012010BD4FF0FF30AB -:1008A00010BD1AB1D30703D0521C07E0002010BDC1 -:1008B00010F8013B11F8014B1B1B07D110F8013B4D -:1008C00011F8014B1B1B01D1921EF1D1184610BD2E -:1008D00002F0FF0343EA032242EA024200F005B8B5 -:1008E0007047704770474FF000020429C0F0128033 -:1008F00010F0030C00F01B80CCF1040CBCF1020FD3 -:1009000018BF00F8012BA8BF20F8022BA1EB0C01A7 -:1009100000F00DB85FEAC17C24BF00F8012B00F89D -:10092000012B48BF00F8012B70474FF0000200B5C3 -:10093000134694469646203922BFA0E80C50A0E802 -:100940000C50B1F12001BFF4F7AF090728BFA0E8B0 -:100950000C5048BF0CC05DF804EB890028BF40F87C -:10096000042B08BF704748BF20F8022B11F0804FBE -:1009700018BF00F8012B7047014B1B68DB68184754 -:100980000000002009480A497047FFF7FBFFFFF706 -:10099000B9FB00BD20BFFDE7064B1847064A1060B3 -:1009A000016881F30888406800470000180A0000C9 -:1009B000180A0000F3020000000000201EF0040FDF -:1009C0000CBFEFF30881EFF30981886902380078E2 -:1009D000182803D100E00000074A1047074A1268B0 -:1009E0002C3212681047000000B5054B1B68054A01 -:1009F0009B58984700BD0000DB020000000000206B -:100A0000080A0000040000000010000000000000C0 -:080A100000FFFFFF0090D0037E -:040000050000099955 -:00000001FF diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.c deleted file mode 100644 index 14b1859c93..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.c +++ /dev/null @@ -1,217 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include "sdk_common.h" - -#if NRF_MODULE_ENABLED(NRF_FSTORAGE) - -#include "nrf_fstorage_nvmc.h" -#include -#include -#include -#include "nrf_nvmc.h" -#include "nrf_atomic.h" - - -static nrf_fstorage_info_t m_flash_info = -{ -#if defined(NRF51) - .erase_unit = 1024, -#elif defined(NRF52_SERIES) - .erase_unit = 4096, -#endif - .program_unit = 4, - .rmap = true, - .wmap = false, -}; - - - /* An operation initiated by fstorage is ongoing. */ -static nrf_atomic_flag_t m_flash_operation_ongoing; - - -/* Send event to the event handler. */ -static void event_send(nrf_fstorage_t const * p_fs, - nrf_fstorage_evt_id_t evt_id, - void const * p_src, - uint32_t addr, - uint32_t len, - void * p_param) -{ - if (p_fs->evt_handler == NULL) - { - /* Nothing to do. */ - return; - } - - nrf_fstorage_evt_t evt = - { - .result = NRF_SUCCESS, - .id = evt_id, - .addr = addr, - .p_src = p_src, - .len = len, - .p_param = p_param, - }; - - p_fs->evt_handler(&evt); -} - - -static ret_code_t init(nrf_fstorage_t * p_fs, void * p_param) -{ - UNUSED_PARAMETER(p_param); - - p_fs->p_flash_info = &m_flash_info; - - return NRF_SUCCESS; -} - - -static ret_code_t uninit(nrf_fstorage_t * p_fs, void * p_param) -{ - UNUSED_PARAMETER(p_fs); - UNUSED_PARAMETER(p_param); - - (void) nrf_atomic_flag_clear(&m_flash_operation_ongoing); - - return NRF_SUCCESS; -} - - -static ret_code_t read(nrf_fstorage_t const * p_fs, uint32_t src, void * p_dest, uint32_t len) -{ - UNUSED_PARAMETER(p_fs); - - memcpy(p_dest, (uint32_t*)src, len); - - return NRF_SUCCESS; -} - - -static ret_code_t write(nrf_fstorage_t const * p_fs, - uint32_t dest, - void const * p_src, - uint32_t len, - void * p_param) -{ - if (nrf_atomic_flag_set_fetch(&m_flash_operation_ongoing)) - { - return NRF_ERROR_BUSY; - } - - nrf_nvmc_write_words(dest, (uint32_t*)p_src, (len / m_flash_info.program_unit)); - - /* Clear the flag before sending the event, to allow API calls in the event context. */ - (void) nrf_atomic_flag_clear(&m_flash_operation_ongoing); - - event_send(p_fs, NRF_FSTORAGE_EVT_WRITE_RESULT, p_src, dest, len, p_param); - - return NRF_SUCCESS; -} - - -static ret_code_t erase(nrf_fstorage_t const * p_fs, - uint32_t page_addr, - uint32_t len, - void * p_param) -{ - uint32_t progress = 0; - - if (nrf_atomic_flag_set_fetch(&m_flash_operation_ongoing)) - { - return NRF_ERROR_BUSY; - } - - while (progress != len) - { - nrf_nvmc_page_erase(page_addr + (progress * m_flash_info.erase_unit)); - progress++; - } - - /* Clear the flag before sending the event, to allow API calls in the event context. */ - (void) nrf_atomic_flag_clear(&m_flash_operation_ongoing); - - event_send(p_fs, NRF_FSTORAGE_EVT_ERASE_RESULT, NULL, page_addr, len, p_param); - - return NRF_SUCCESS; -} - - -static uint8_t const * rmap(nrf_fstorage_t const * p_fs, uint32_t addr) -{ - UNUSED_PARAMETER(p_fs); - - return (uint8_t*)addr; -} - - -static uint8_t * wmap(nrf_fstorage_t const * p_fs, uint32_t addr) -{ - UNUSED_PARAMETER(p_fs); - UNUSED_PARAMETER(addr); - - /* Not supported. */ - return NULL; -} - - -static bool is_busy(nrf_fstorage_t const * p_fs) -{ - UNUSED_PARAMETER(p_fs); - - return m_flash_operation_ongoing; -} - - -/* The exported API. */ -nrf_fstorage_api_t nrf_fstorage_nvmc = -{ - .init = init, - .uninit = uninit, - .read = read, - .write = write, - .erase = erase, - .rmap = rmap, - .wmap = wmap, - .is_busy = is_busy -}; - - -#endif // NRF_FSTORAGE_ENABLED diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.h deleted file mode 100644 index bacd7457e0..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/libraries/fstorage/nrf_fstorage_nvmc.h +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/** - * @file - * - * @defgroup nrf_fstorage_nvmc NVMC implementation - * @ingroup nrf_fstorage - * @{ - * - * @brief API implementation of fstorage that uses the non-volatile memory controller (NVMC). -*/ - -#ifndef NRF_FSTORAGE_NVMC_H__ -#define NRF_FSTORAGE_NVMC_H__ - -#include "nrf_fstorage.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/**@brief API implementation that uses the non-volatile memory controller. - * - * @details An fstorage instance with this API implementation can be initialized by providing - * this structure as a parameter to @ref nrf_fstorage_init. - * The structure is defined in @c nrf_fstorage_nvmc.c. - */ -extern nrf_fstorage_api_t nrf_fstorage_nvmc; - - -#ifdef __cplusplus -} -#endif - -#endif // NRF_FSTORAGE_NVMC_H__ -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/mbed_lib.json deleted file mode 100644 index f599d4a7e1..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/mbed_lib.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "softdevice_mbr", - "target_overrides": { - "*": { - "target.bootloader_img": "hex/mbr_nrf52_2.3.0_mbr.hex" - } - } -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_error.h deleted file mode 100644 index c673beb10d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_error.h +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -/* Header guard */ - -#ifndef SOFTDEVICE_PRESENT - -/** - @defgroup nrf_error Global Error Codes - @{ - - @brief Global Error definitions -*/ - -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Data size exceeds limit -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy - -#ifdef __cplusplus -} -#endif - -#endif // NRF_ERROR_H__ - -/** - @} -*/ - -#endif // SOFTDEVICE_PRESENT diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.c deleted file mode 100644 index 8fa8b2beb9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.c +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include -#include "nrf_soc.h" -#include "nrf_error.h" - -static uint8_t m_in_critical_region = 0; - -uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - NVIC_EnableIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - NVIC_DisableIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (p_pending_irq != NULL) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - return NRF_ERROR_NULL; -} - -uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - NVIC_SetPriority(IRQn, priority); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (p_priority != NULL) - { - *p_priority = NVIC_GetPriority(IRQn); - return NRF_SUCCESS; - } - - return NRF_ERROR_NULL; -} - -uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_SUCCESS; -} - -uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - __disable_irq(); - - *p_is_nested_critical_region = (m_in_critical_region != 0); - m_in_critical_region++; - - return NRF_SUCCESS; -} - -uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - m_in_critical_region--; - - if (is_nested_critical_region == 0) - { - m_in_critical_region = 0; - __enable_irq(); - } - return NRF_SUCCESS; -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.h deleted file mode 100644 index 58dd0274eb..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_nvic.h +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - */ -uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - */ -uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - */ -uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - */ -uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - */ -uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * @pre{priority is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - */ -uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre{IRQn is valid and not reserved by the stack} - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - */ -uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -uint32_t sd_nvic_SystemReset(void); - -/**@brief Enters critical region. - * - * @post Application interrupts will be disabled. - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region 1: If in a nested critical region. - * 0: Otherwise. - * - * @retval ::NRF_SUCCESS - */ -uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_NVIC_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_sdm.h deleted file mode 100644 index ec3f150fc6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_sdm.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - - diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.c deleted file mode 100644 index da25fbbd32..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.c +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include -#include "nrf_soc.h" -#include "nrf_error.h" - -uint32_t sd_app_evt_wait(void) -{ - __WFE(); - return NRF_SUCCESS; -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.h deleted file mode 100644 index c1c9d04416..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_MBR/nrf_soc_nosd/nrf_soc.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the - * interrupt is disabled. When the interrupt is enabled it will be taken immediately since - * this function will wait in thread mode, then the execution will return in the application's - * main thread. When an interrupt is disabled and gets pended it will return to the application's - * thread main. The application must ensure that the pended flag is cleared using - * ::sd_nvic_ClearPendingIRQ in order to sleep using this function. This is only necessary for - * disabled interrupts, as the interrupt handler will clear the pending flag automatically for - * enabled interrupts. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M0 - * System Control Register (SCR). @sa CMSIS_SCB - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -uint32_t sd_app_evt_wait(void); - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SOC_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/CMakeLists.txt deleted file mode 100644 index 9125e60859..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./headers - ./headers/nrf52 -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_migration-document.pdf b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/doc/s140_nrf52_6.0.0_migration-document.pdf deleted file mode 100644 index 1379ecd581fe350004ea88531838f769efc8ef80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71009 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 diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_err.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_err.h deleted file mode 100644 index 1b4820dc3d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_err.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @addtogroup nrf_error - @{ - @ingroup BLE_COMMON - @} - - @defgroup ble_err General error codes - @{ - - @brief General error code definitions for the BLE API. - - @ingroup BLE_COMMON -*/ -#ifndef NRF_BLE_ERR_H__ -#define NRF_BLE_ERR_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* @defgroup BLE_ERRORS Error Codes - * @{ */ -#define BLE_ERROR_NOT_ENABLED (NRF_ERROR_STK_BASE_NUM+0x001) /**< @ref sd_ble_enable has not been called. */ -#define BLE_ERROR_INVALID_CONN_HANDLE (NRF_ERROR_STK_BASE_NUM+0x002) /**< Invalid connection handle. */ -#define BLE_ERROR_INVALID_ATTR_HANDLE (NRF_ERROR_STK_BASE_NUM+0x003) /**< Invalid attribute handle. */ -#define BLE_ERROR_INVALID_ADV_HANDLE (NRF_ERROR_STK_BASE_NUM+0x004) /**< Invalid advertising handle. */ -#define BLE_ERROR_INVALID_ROLE (NRF_ERROR_STK_BASE_NUM+0x005) /**< Invalid role. */ -#define BLE_ERROR_BLOCKED_BY_OTHER_LINKS (NRF_ERROR_STK_BASE_NUM+0x006) /**< The attempt to change link settings failed due to the scheduling of other links. */ -/** @} */ - - -/** @defgroup BLE_ERROR_SUBRANGES Module specific error code subranges - * @brief Assignment of subranges for module specific error codes. - * @note For specific error codes, see ble_.h or ble_error_.h. - * @{ */ -#define NRF_L2CAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x100) /**< L2CAP specific errors. */ -#define NRF_GAP_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x200) /**< GAP specific errors. */ -#define NRF_GATTC_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x300) /**< GATT client specific errors. */ -#define NRF_GATTS_ERR_BASE (NRF_ERROR_STK_BASE_NUM+0x400) /**< GATT server specific errors. */ -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif - - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gap.h deleted file mode 100644 index 6e6cae2754..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gap.h +++ /dev/null @@ -1,2669 +0,0 @@ -/* - * Copyright (c) 2011 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GAP Generic Access Profile (GAP) - @{ - @brief Definitions and prototypes for the GAP interface. - */ - -#ifndef BLE_GAP_H__ -#define BLE_GAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_GAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GAP API SVC numbers. - */ -enum BLE_GAP_SVCS -{ - SD_BLE_GAP_ADDR_SET = BLE_GAP_SVC_BASE, /**< Set own Bluetooth Address. */ - SD_BLE_GAP_ADDR_GET = BLE_GAP_SVC_BASE + 1, /**< Get own Bluetooth Address. */ - SD_BLE_GAP_WHITELIST_SET = BLE_GAP_SVC_BASE + 2, /**< Set active whitelist. */ - SD_BLE_GAP_DEVICE_IDENTITIES_SET = BLE_GAP_SVC_BASE + 3, /**< Set device identity list. */ - SD_BLE_GAP_PRIVACY_SET = BLE_GAP_SVC_BASE + 4, /**< Set Privacy settings*/ - SD_BLE_GAP_PRIVACY_GET = BLE_GAP_SVC_BASE + 5, /**< Get Privacy settings*/ - SD_BLE_GAP_ADV_SET_CONFIGURE = BLE_GAP_SVC_BASE + 6, /**< Configure an advertising set. */ - SD_BLE_GAP_ADV_START = BLE_GAP_SVC_BASE + 7, /**< Start Advertising. */ - SD_BLE_GAP_ADV_STOP = BLE_GAP_SVC_BASE + 8, /**< Stop Advertising. */ - SD_BLE_GAP_CONN_PARAM_UPDATE = BLE_GAP_SVC_BASE + 9, /**< Connection Parameter Update. */ - SD_BLE_GAP_DISCONNECT = BLE_GAP_SVC_BASE + 10, /**< Disconnect. */ - SD_BLE_GAP_TX_POWER_SET = BLE_GAP_SVC_BASE + 11, /**< Set TX Power. */ - SD_BLE_GAP_APPEARANCE_SET = BLE_GAP_SVC_BASE + 12, /**< Set Appearance. */ - SD_BLE_GAP_APPEARANCE_GET = BLE_GAP_SVC_BASE + 13, /**< Get Appearance. */ - SD_BLE_GAP_PPCP_SET = BLE_GAP_SVC_BASE + 14, /**< Set PPCP. */ - SD_BLE_GAP_PPCP_GET = BLE_GAP_SVC_BASE + 15, /**< Get PPCP. */ - SD_BLE_GAP_DEVICE_NAME_SET = BLE_GAP_SVC_BASE + 16, /**< Set Device Name. */ - SD_BLE_GAP_DEVICE_NAME_GET = BLE_GAP_SVC_BASE + 17, /**< Get Device Name. */ - SD_BLE_GAP_AUTHENTICATE = BLE_GAP_SVC_BASE + 18, /**< Initiate Pairing/Bonding. */ - SD_BLE_GAP_SEC_PARAMS_REPLY = BLE_GAP_SVC_BASE + 19, /**< Reply with Security Parameters. */ - SD_BLE_GAP_AUTH_KEY_REPLY = BLE_GAP_SVC_BASE + 20, /**< Reply with an authentication key. */ - SD_BLE_GAP_LESC_DHKEY_REPLY = BLE_GAP_SVC_BASE + 21, /**< Reply with an LE Secure Connections DHKey. */ - SD_BLE_GAP_KEYPRESS_NOTIFY = BLE_GAP_SVC_BASE + 22, /**< Notify of a keypress during an authentication procedure. */ - SD_BLE_GAP_LESC_OOB_DATA_GET = BLE_GAP_SVC_BASE + 23, /**< Get the local LE Secure Connections OOB data. */ - SD_BLE_GAP_LESC_OOB_DATA_SET = BLE_GAP_SVC_BASE + 24, /**< Set the remote LE Secure Connections OOB data. */ - SD_BLE_GAP_ENCRYPT = BLE_GAP_SVC_BASE + 25, /**< Initiate encryption procedure. */ - SD_BLE_GAP_SEC_INFO_REPLY = BLE_GAP_SVC_BASE + 26, /**< Reply with Security Information. */ - SD_BLE_GAP_CONN_SEC_GET = BLE_GAP_SVC_BASE + 27, /**< Obtain connection security level. */ - SD_BLE_GAP_RSSI_START = BLE_GAP_SVC_BASE + 28, /**< Start reporting of changes in RSSI. */ - SD_BLE_GAP_RSSI_STOP = BLE_GAP_SVC_BASE + 29, /**< Stop reporting of changes in RSSI. */ - SD_BLE_GAP_SCAN_START = BLE_GAP_SVC_BASE + 30, /**< Start Scanning. */ - SD_BLE_GAP_SCAN_STOP = BLE_GAP_SVC_BASE + 31, /**< Stop Scanning. */ - SD_BLE_GAP_CONNECT = BLE_GAP_SVC_BASE + 32, /**< Connect. */ - SD_BLE_GAP_CONNECT_CANCEL = BLE_GAP_SVC_BASE + 33, /**< Cancel ongoing connection procedure. */ - SD_BLE_GAP_RSSI_GET = BLE_GAP_SVC_BASE + 34, /**< Get the last RSSI sample. */ - SD_BLE_GAP_PHY_UPDATE = BLE_GAP_SVC_BASE + 35, /**< Initiate or respond to a PHY Update Procedure. */ - SD_BLE_GAP_DATA_LENGTH_UPDATE = BLE_GAP_SVC_BASE + 36, /**< Initiate or respond to a Data Length Update Procedure. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_START = BLE_GAP_SVC_BASE + 37, /**< Start Quality of Service (QoS) channel survey module. */ - SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP = BLE_GAP_SVC_BASE + 38, /**< Stop Quality of Service (QoS) channel survey module. */ -}; - -/**@brief GAP Event IDs. - * IDs that uniquely identify an event coming from the stack to the application. - */ -enum BLE_GAP_EVTS -{ - BLE_GAP_EVT_CONNECTED = BLE_GAP_EVT_BASE, - BLE_GAP_EVT_DISCONNECTED = BLE_GAP_EVT_BASE + 1, /**< Disconnected from peer. \n See @ref ble_gap_evt_disconnected_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE = BLE_GAP_EVT_BASE + 2, /**< Connection Parameters updated. \n See @ref ble_gap_evt_conn_param_update_t. */ - BLE_GAP_EVT_SEC_PARAMS_REQUEST = BLE_GAP_EVT_BASE + 3, /**< Request to provide security parameters. \n Reply with @ref sd_ble_gap_sec_params_reply. \n See @ref ble_gap_evt_sec_params_request_t. */ - BLE_GAP_EVT_SEC_INFO_REQUEST = BLE_GAP_EVT_BASE + 4, /**< Request to provide security information. \n Reply with @ref sd_ble_gap_sec_info_reply. \n See @ref ble_gap_evt_sec_info_request_t. */ - BLE_GAP_EVT_PASSKEY_DISPLAY = BLE_GAP_EVT_BASE + 5, /**< Request to display a passkey to the user. \n In LESC Numeric Comparison, reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_passkey_display_t. */ - BLE_GAP_EVT_KEY_PRESSED = BLE_GAP_EVT_BASE + 6, /**< Notification of a keypress on the remote device.\n See @ref ble_gap_evt_key_pressed_t */ - BLE_GAP_EVT_AUTH_KEY_REQUEST = BLE_GAP_EVT_BASE + 7, /**< Request to provide an authentication key. \n Reply with @ref sd_ble_gap_auth_key_reply. \n See @ref ble_gap_evt_auth_key_request_t. */ - BLE_GAP_EVT_LESC_DHKEY_REQUEST = BLE_GAP_EVT_BASE + 8, /**< Request to calculate an LE Secure Connections DHKey. \n Reply with @ref sd_ble_gap_lesc_dhkey_reply. \n See @ref ble_gap_evt_lesc_dhkey_request_t */ - BLE_GAP_EVT_AUTH_STATUS = BLE_GAP_EVT_BASE + 9, /**< Authentication procedure completed with status. \n See @ref ble_gap_evt_auth_status_t. */ - BLE_GAP_EVT_CONN_SEC_UPDATE = BLE_GAP_EVT_BASE + 10, /**< Connection security updated. \n See @ref ble_gap_evt_conn_sec_update_t. */ - BLE_GAP_EVT_TIMEOUT = BLE_GAP_EVT_BASE + 11, /**< Timeout expired. \n See @ref ble_gap_evt_timeout_t. */ - BLE_GAP_EVT_RSSI_CHANGED = BLE_GAP_EVT_BASE + 12, /**< RSSI report. \n See @ref ble_gap_evt_rssi_changed_t. */ - BLE_GAP_EVT_ADV_REPORT = BLE_GAP_EVT_BASE + 13, /**< Advertising report. \n See @ref ble_gap_evt_adv_report_t. */ - BLE_GAP_EVT_SEC_REQUEST = BLE_GAP_EVT_BASE + 14, /**< Security Request. \n See @ref ble_gap_evt_sec_request_t. */ - BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 15, /**< Connection Parameter Update Request. \n Reply with @ref sd_ble_gap_conn_param_update. \n See @ref ble_gap_evt_conn_param_update_request_t. */ - BLE_GAP_EVT_SCAN_REQ_REPORT = BLE_GAP_EVT_BASE + 16, /**< Scan request report. \n See @ref ble_gap_evt_scan_req_report_t. */ - BLE_GAP_EVT_PHY_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 17, /**< PHY Update Request. \n Reply with @ref sd_ble_gap_phy_update. \n See @ref ble_gap_evt_phy_update_request_t. */ - BLE_GAP_EVT_PHY_UPDATE = BLE_GAP_EVT_BASE + 18, /**< PHY Update Procedure is complete. \n See @ref ble_gap_evt_phy_update_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST = BLE_GAP_EVT_BASE + 19, /**< Data Length Update Request. \n Reply with @ref sd_ble_gap_data_length_update.\n See @ref ble_gap_evt_data_length_update_request_t. */ - BLE_GAP_EVT_DATA_LENGTH_UPDATE = BLE_GAP_EVT_BASE + 20, /**< LL Data Channel PDU payload length updated. \n See @ref ble_gap_evt_data_length_update_t. */ - BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT = BLE_GAP_EVT_BASE + 21, /**< Channel survey report. \n See @ref ble_gap_evt_qos_channel_survey_report_t. */ - BLE_GAP_EVT_ADV_SET_TERMINATED = BLE_GAP_EVT_BASE + 22, /**< Advertising set terminated. \n See @ref ble_gap_evt_adv_set_terminated_t. */ -}; - -/**@brief GAP Option IDs. - * IDs that uniquely identify a GAP option. - */ -enum BLE_GAP_OPTS -{ - BLE_GAP_OPT_CH_MAP = BLE_GAP_OPT_BASE, /**< Channel Map. @ref ble_gap_opt_ch_map_t */ - BLE_GAP_OPT_LOCAL_CONN_LATENCY = BLE_GAP_OPT_BASE + 1, /**< Local connection latency. @ref ble_gap_opt_local_conn_latency_t */ - BLE_GAP_OPT_PASSKEY = BLE_GAP_OPT_BASE + 2, /**< Set passkey. @ref ble_gap_opt_passkey_t */ - BLE_GAP_OPT_COMPAT_MODE_1 = BLE_GAP_OPT_BASE + 3, /**< Compatibility mode. @ref ble_gap_opt_compat_mode_1_t */ - BLE_GAP_OPT_AUTH_PAYLOAD_TIMEOUT = BLE_GAP_OPT_BASE + 4, /**< Set Authenticated payload timeout. @ref ble_gap_opt_auth_payload_timeout_t */ - BLE_GAP_OPT_SLAVE_LATENCY_DISABLE = BLE_GAP_OPT_BASE + 5, /**< Disable slave latency. @ref ble_gap_opt_slave_latency_disable_t */ -}; - -/**@brief GAP Configuration IDs. - * - * IDs that uniquely identify a GAP configuration. - */ -enum BLE_GAP_CFGS -{ - BLE_GAP_CFG_ROLE_COUNT = BLE_GAP_CFG_BASE, /**< Role count configuration. */ - BLE_GAP_CFG_DEVICE_NAME = BLE_GAP_CFG_BASE + 1, /**< Device name configuration. */ -}; - -/**@brief GAP TX Power roles. - */ -enum BLE_GAP_TX_POWER_ROLES -{ - BLE_GAP_TX_POWER_ROLE_ADV = 1, /**< Advertiser role. */ - BLE_GAP_TX_POWER_ROLE_SCAN_INIT = 2, /**< Scanner and initiator role. */ - BLE_GAP_TX_POWER_ROLE_CONN = 3, /**< Connection role. */ -}; - -/** @} */ - -/**@addtogroup BLE_GAP_DEFINES Defines - * @{ */ - -/**@defgroup BLE_ERRORS_GAP SVC return values specific to GAP - * @{ */ -#define BLE_ERROR_GAP_UUID_LIST_MISMATCH (NRF_GAP_ERR_BASE + 0x000) /**< UUID list does not contain an integral number of UUIDs. */ -#define BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST (NRF_GAP_ERR_BASE + 0x001) /**< Use of Whitelist not permitted with discoverable advertising. */ -#define BLE_ERROR_GAP_INVALID_BLE_ADDR (NRF_GAP_ERR_BASE + 0x002) /**< The upper two bits of the address do not correspond to the specified address type. */ -#define BLE_ERROR_GAP_WHITELIST_IN_USE (NRF_GAP_ERR_BASE + 0x003) /**< Attempt to modify the whitelist while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE (NRF_GAP_ERR_BASE + 0x004) /**< Attempt to modify the device identity list while already in use by another operation. */ -#define BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE (NRF_GAP_ERR_BASE + 0x005) /**< The device identity list contains entries with duplicate identity addresses. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLES GAP Roles - * @{ */ -#define BLE_GAP_ROLE_INVALID 0x0 /**< Invalid Role. */ -#define BLE_GAP_ROLE_PERIPH 0x1 /**< Peripheral Role. */ -#define BLE_GAP_ROLE_CENTRAL 0x2 /**< Central Role. */ -/**@} */ - - -/**@defgroup BLE_GAP_TIMEOUT_SOURCES GAP Timeout sources - * @{ */ -#define BLE_GAP_TIMEOUT_SRC_SCAN 0x01 /**< Scanning timeout. */ -#define BLE_GAP_TIMEOUT_SRC_CONN 0x02 /**< Connection timeout. */ -#define BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD 0x03 /**< Authenticated payload timeout. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADDR_TYPES GAP Address types - * @{ */ -#define BLE_GAP_ADDR_TYPE_PUBLIC 0x00 /**< Public (identity) address.*/ -#define BLE_GAP_ADDR_TYPE_RANDOM_STATIC 0x01 /**< Random static (identity) address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE 0x02 /**< Random private resolvable address. */ -#define BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE 0x03 /**< Random private non-resolvable address. */ -#define BLE_GAP_ADDR_TYPE_ANONYMOUS 0x7F /**< An advertiser may advertise without its address. - This type of advertising is called anonymous. */ -/**@} */ - - -/**@brief The default interval in seconds at which a private address is refreshed. */ -#define BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S (900) /* 15 minutes. */ -/**@brief The maximum interval in seconds at which a private address can be refreshed. */ -#define BLE_GAP_MAX_PRIVATE_ADDR_CYCLE_INTERVAL_S (41400) /* 11 hours 30 minutes. */ - - -/** @brief BLE address length. */ -#define BLE_GAP_ADDR_LEN (6) - -/**@defgroup BLE_GAP_PRIVACY_MODES Privacy modes - * @{ */ -#define BLE_GAP_PRIVACY_MODE_OFF 0x00 /**< Device will send and accept its identity address for its own address. */ -#define BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY 0x01 /**< Device will send and accept only private addresses for its own address. */ -#define BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY 0x02 /**< Device will send and accept only private addresses for its own address, - and will not accept a peer using identity address as sender address when - the peer IRK is exchanged, non-zero and added to the identity list. */ -/**@} */ - -/** @brief Invalid power level. */ -#define BLE_GAP_POWER_LEVEL_INVALID 127 - -/** @brief Advertising set handle not set. */ -#define BLE_GAP_ADV_SET_HANDLE_NOT_SET (0xFF) - -/** @brief The default number of advertising sets. */ -#define BLE_GAP_ADV_SET_COUNT_DEFAULT (1) - -/** @brief The maximum number of advertising sets supported by this SoftDevice. */ -#define BLE_GAP_ADV_SET_COUNT_MAX (1) - -/**@defgroup BLE_GAP_ADV_SET_DATA_SIZES Advertising data sizes. - * @{ */ -#define BLE_GAP_ADV_SET_DATA_SIZE_MAX (31) /**< Maximum data length for an advertising set. */ -/**@}. */ - -/** @brief Set ID not available in advertising report. */ -#define BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE 0xFF - -/**@defgroup BLE_GAP_EVT_ADV_SET_TERMINATED_REASON GAP Advertising Set Terminated reasons - * @{ */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT 0x01 /**< Timeout value reached. */ -#define BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_LIMIT_REACHED 0x02 /**< @ref ble_gap_adv_params_t::max_adv_evts was reached. */ -/**@} */ - -/**@defgroup BLE_GAP_AD_TYPE_DEFINITIONS GAP Advertising and Scan Response Data format - * @note Found at https://www.bluetooth.org/Technical/AssignedNumbers/generic_access_profile.htm - * @{ */ -#define BLE_GAP_AD_TYPE_FLAGS 0x01 /**< Flags for discoverability. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE 0x02 /**< Partial list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_16BIT_SERVICE_UUID_COMPLETE 0x03 /**< Complete list of 16 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE 0x04 /**< Partial list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_32BIT_SERVICE_UUID_COMPLETE 0x05 /**< Complete list of 32 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE 0x06 /**< Partial list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_128BIT_SERVICE_UUID_COMPLETE 0x07 /**< Complete list of 128 bit service UUIDs. */ -#define BLE_GAP_AD_TYPE_SHORT_LOCAL_NAME 0x08 /**< Short local device name. */ -#define BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME 0x09 /**< Complete local device name. */ -#define BLE_GAP_AD_TYPE_TX_POWER_LEVEL 0x0A /**< Transmit power level. */ -#define BLE_GAP_AD_TYPE_CLASS_OF_DEVICE 0x0D /**< Class of device. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C 0x0E /**< Simple Pairing Hash C. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R 0x0F /**< Simple Pairing Randomizer R. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_TK_VALUE 0x10 /**< Security Manager TK Value. */ -#define BLE_GAP_AD_TYPE_SECURITY_MANAGER_OOB_FLAGS 0x11 /**< Security Manager Out Of Band Flags. */ -#define BLE_GAP_AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE 0x12 /**< Slave Connection Interval Range. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT 0x14 /**< List of 16-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT 0x15 /**< List of 128-bit Service Solicitation UUIDs. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA 0x16 /**< Service Data - 16-bit UUID. */ -#define BLE_GAP_AD_TYPE_PUBLIC_TARGET_ADDRESS 0x17 /**< Public Target Address. */ -#define BLE_GAP_AD_TYPE_RANDOM_TARGET_ADDRESS 0x18 /**< Random Target Address. */ -#define BLE_GAP_AD_TYPE_APPEARANCE 0x19 /**< Appearance. */ -#define BLE_GAP_AD_TYPE_ADVERTISING_INTERVAL 0x1A /**< Advertising Interval. */ -#define BLE_GAP_AD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS 0x1B /**< LE Bluetooth Device Address. */ -#define BLE_GAP_AD_TYPE_LE_ROLE 0x1C /**< LE Role. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_HASH_C256 0x1D /**< Simple Pairing Hash C-256. */ -#define BLE_GAP_AD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R256 0x1E /**< Simple Pairing Randomizer R-256. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_32BIT_UUID 0x20 /**< Service Data - 32-bit UUID. */ -#define BLE_GAP_AD_TYPE_SERVICE_DATA_128BIT_UUID 0x21 /**< Service Data - 128-bit UUID. */ -#define BLE_GAP_AD_TYPE_LESC_CONFIRMATION_VALUE 0x22 /**< LE Secure Connections Confirmation Value */ -#define BLE_GAP_AD_TYPE_LESC_RANDOM_VALUE 0x23 /**< LE Secure Connections Random Value */ -#define BLE_GAP_AD_TYPE_URI 0x24 /**< URI */ -#define BLE_GAP_AD_TYPE_3D_INFORMATION_DATA 0x3D /**< 3D Information Data. */ -#define BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA 0xFF /**< Manufacturer Specific Data. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_FLAGS GAP Advertisement Flags - * @{ */ -#define BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE (0x01) /**< LE Limited Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE (0x02) /**< LE General Discoverable Mode. */ -#define BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED (0x04) /**< BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_CONTROLLER (0x08) /**< Simultaneous LE and BR/EDR, Controller. */ -#define BLE_GAP_ADV_FLAG_LE_BR_EDR_HOST (0x10) /**< Simultaneous LE and BR/EDR, Host. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE (BLE_GAP_ADV_FLAG_LE_LIMITED_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE Limited Discoverable Mode, BR/EDR not supported. */ -#define BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE (BLE_GAP_ADV_FLAG_LE_GENERAL_DISC_MODE | BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED) /**< LE General Discoverable Mode, BR/EDR not supported. */ -/**@} */ - - -/**@defgroup BLE_GAP_ADV_INTERVALS GAP Advertising interval max and min - * @{ */ -#define BLE_GAP_ADV_INTERVAL_MIN 0x000020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ -#define BLE_GAP_ADV_INTERVAL_MAX 0x004000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. - @note Support for values above @ref BLE_GAP_ADV_INTERVAL_MAX - is experimental. Values above 0xFFFFFF, i.e 10,485.759375 s - are not supported. */ - /**@} */ - - -/**@defgroup BLE_GAP_SCAN_INTERVALS GAP Scan interval max and min - * @{ */ -#define BLE_GAP_SCAN_INTERVAL_MIN 0x0004 /**< Minimum Scan interval in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_INTERVAL_MAX 0xFFFF /**< Maximum Scan interval in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_WINDOW GAP Scan window max and min - * @{ */ -#define BLE_GAP_SCAN_WINDOW_MIN 0x0004 /**< Minimum Scan window in 625 us units, i.e. 2.5 ms. */ -#define BLE_GAP_SCAN_WINDOW_MAX 0xFFFF /**< Maximum Scan window in 625 us units, i.e. 40,959.375 s. */ - /** @} */ - - -/**@defgroup BLE_GAP_SCAN_TIMEOUT GAP Scan timeout max and min - * @{ */ -#define BLE_GAP_SCAN_TIMEOUT_MIN 0x0001 /**< Minimum Scan timeout in 10 ms units, i.e 10 ms. */ -#define BLE_GAP_SCAN_TIMEOUT_UNLIMITED 0x0000 /**< Continue to scan forever. */ - /** @} */ - -/**@defgroup BLE_GAP_SCAN_BUFFER_SIZE GAP Minimum scanner buffer size - * - * Scan buffers are used for storing advertising data received from an advertiser. - * If ble_gap_scan_params_t::extended is set to 0, @ref BLE_GAP_SCAN_BUFFER_MIN is the minimum scan buffer length. - * else the minimum scan buffer size is @ref BLE_GAP_SCAN_BUFFER_EXTENDED_MIN. - * @{ */ -#define BLE_GAP_SCAN_BUFFER_MIN (31) /**< Minimum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_MAX (31) /**< Maximum data length for an - advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MIN (255) /**< Minimum data length for an - extended advertising set. */ -#define BLE_GAP_SCAN_BUFFER_EXTENDED_MAX (1650) /**< Maximum data length for an - extended advertising set. - @note Extended scanning is only - supported as an experimental - feature in this SoftDevice. - The scanner will only receive - advertising data up to 31 bytes. */ -/** @} */ - -/**@defgroup BLE_GAP_ADV_TYPES GAP Advertising types - * - * Advertising types defined in Bluetooth Core Specification v5.0, Vol 6, Part B, Section 4.4.2. - * - * The maximum advertising data length is defined by @ref BLE_GAP_ADV_SET_DATA_SIZE_MAX. - * Note that some of the advertising types do not support advertising data. Non-scannable types do not support - * scan response data. - * - * @{ */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED 0x01 /**< Connectable and scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE 0x02 /**< Connectable non-scannable directed advertising - events. Advertising interval is less that 3.75 ms. - Use this type for fast reconnections. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED 0x03 /**< Connectable non-scannable directed advertising - events. - @note Advertising data is not supported. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x04 /**< Non-connectable scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x05 /**< Non-connectable non-scannable undirected - advertising events. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_UNDIRECTED 0x06 /**< Connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_CONNECTABLE_NONSCANNABLE_DIRECTED 0x07 /**< Connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_UNDIRECTED 0x08 /**< Non-connectable scannable undirected advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_SCANNABLE_DIRECTED 0x09 /**< Non-connectable scannable directed advertising - events using extended advertising PDUs. - @note Only scan response data is supported. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED 0x0A /**< Non-connectable non-scannable undirected advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -#define BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED 0x0B /**< Non-connectable non-scannable directed advertising - events using extended advertising PDUs. - @note Extended advertising types are only - supported as experimental features in this - SoftDevice. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_FILTER_POLICIES GAP Advertising filter policies - * @{ */ -#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */ -#define BLE_GAP_ADV_FP_FILTER_SCANREQ 0x01 /**< Filter scan requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_CONNREQ 0x02 /**< Filter connect requests with whitelist. */ -#define BLE_GAP_ADV_FP_FILTER_BOTH 0x03 /**< Filter both scan and connect requests with whitelist. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_DATA_STATUS GAP Advertising data status - * @{ */ -#define BLE_GAP_ADV_DATA_STATUS_COMPLETE 0x00 /**< All data in the advertising event have been received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA 0x01 /**< More data to be received. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED 0x02 /**< Incomplete data. Buffer size insufficient to receive more. */ -#define BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MISSED 0x03 /**< Failed to receive the remaining data. */ -/**@} */ - -/**@defgroup BLE_GAP_SCAN_FILTER_POLICIES GAP Scanner filter policies - * @{ */ -#define BLE_GAP_SCAN_FP_ACCEPT_ALL 0x00 /**< Accept all advertising packets except directed advertising packets - not addressed to this device. */ -#define BLE_GAP_SCAN_FP_WHITELIST 0x01 /**< Accept advertising packets from devices in the whitelist except directed - packets not addressed to this device. */ -#define BLE_GAP_SCAN_FP_ALL_NOT_RESOLVED_DIRECTED 0x02 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_ACCEPT_ALL. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -#define BLE_GAP_SCAN_FP_WHITELIST_NOT_RESOLVED_DIRECTED 0x03 /**< Accept all advertising packets specified in @ref BLE_GAP_SCAN_FP_WHITELIST. - In addition, accept directed advertising packets, where the advertiser's - address is a resolvable private address that cannot be resolved. */ -/**@} */ - -/**@defgroup BLE_GAP_ADV_TIMEOUT_VALUES GAP Advertising timeout values in 10 ms units - * @{ */ -#define BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX (128) /**< Maximum high duty advertising time in 10 ms units. Corresponds to 1.28 s. */ -#define BLE_GAP_ADV_TIMEOUT_LIMITED_MAX (18000) /**< Maximum advertising time in 10 ms units corresponding to TGAP(lim_adv_timeout) = 180 s in limited discoverable mode. */ -#define BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED (0) /**< Unlimited advertising in general discoverable mode. - For high duty cycle advertising, this corresponds to @ref BLE_GAP_ADV_TIMEOUT_HIGH_DUTY_MAX. */ -/**@} */ - - -/**@defgroup BLE_GAP_DISC_MODES GAP Discovery modes - * @{ */ -#define BLE_GAP_DISC_MODE_NOT_DISCOVERABLE 0x00 /**< Not discoverable discovery Mode. */ -#define BLE_GAP_DISC_MODE_LIMITED 0x01 /**< Limited Discovery Mode. */ -#define BLE_GAP_DISC_MODE_GENERAL 0x02 /**< General Discovery Mode. */ -/**@} */ - - -/**@defgroup BLE_GAP_IO_CAPS GAP IO Capabilities - * @{ */ -#define BLE_GAP_IO_CAPS_DISPLAY_ONLY 0x00 /**< Display Only. */ -#define BLE_GAP_IO_CAPS_DISPLAY_YESNO 0x01 /**< Display and Yes/No entry. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_ONLY 0x02 /**< Keyboard Only. */ -#define BLE_GAP_IO_CAPS_NONE 0x03 /**< No I/O capabilities. */ -#define BLE_GAP_IO_CAPS_KEYBOARD_DISPLAY 0x04 /**< Keyboard and Display. */ -/**@} */ - - -/**@defgroup BLE_GAP_AUTH_KEY_TYPES GAP Authentication Key Types - * @{ */ -#define BLE_GAP_AUTH_KEY_TYPE_NONE 0x00 /**< No key (may be used to reject). */ -#define BLE_GAP_AUTH_KEY_TYPE_PASSKEY 0x01 /**< 6-digit Passkey. */ -#define BLE_GAP_AUTH_KEY_TYPE_OOB 0x02 /**< Out Of Band data. */ -/**@} */ - - -/**@defgroup BLE_GAP_KP_NOT_TYPES GAP Keypress Notification Types - * @{ */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_START 0x00 /**< Passkey entry started. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_IN 0x01 /**< Passkey digit entered. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_DIGIT_OUT 0x02 /**< Passkey digit erased. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_CLEAR 0x03 /**< Passkey cleared. */ -#define BLE_GAP_KP_NOT_TYPE_PASSKEY_END 0x04 /**< Passkey entry completed. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS GAP Security status - * @{ */ -#define BLE_GAP_SEC_STATUS_SUCCESS 0x00 /**< Procedure completed with success. */ -#define BLE_GAP_SEC_STATUS_TIMEOUT 0x01 /**< Procedure timed out. */ -#define BLE_GAP_SEC_STATUS_PDU_INVALID 0x02 /**< Invalid PDU received. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_BEGIN 0x03 /**< Reserved for Future Use range #1 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE1_END 0x80 /**< Reserved for Future Use range #1 end. */ -#define BLE_GAP_SEC_STATUS_PASSKEY_ENTRY_FAILED 0x81 /**< Passkey entry failed (user canceled or other). */ -#define BLE_GAP_SEC_STATUS_OOB_NOT_AVAILABLE 0x82 /**< Out of Band Key not available. */ -#define BLE_GAP_SEC_STATUS_AUTH_REQ 0x83 /**< Authentication requirements not met. */ -#define BLE_GAP_SEC_STATUS_CONFIRM_VALUE 0x84 /**< Confirm value failed. */ -#define BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP 0x85 /**< Pairing not supported. */ -#define BLE_GAP_SEC_STATUS_ENC_KEY_SIZE 0x86 /**< Encryption key size. */ -#define BLE_GAP_SEC_STATUS_SMP_CMD_UNSUPPORTED 0x87 /**< Unsupported SMP command. */ -#define BLE_GAP_SEC_STATUS_UNSPECIFIED 0x88 /**< Unspecified reason. */ -#define BLE_GAP_SEC_STATUS_REPEATED_ATTEMPTS 0x89 /**< Too little time elapsed since last attempt. */ -#define BLE_GAP_SEC_STATUS_INVALID_PARAMS 0x8A /**< Invalid parameters. */ -#define BLE_GAP_SEC_STATUS_DHKEY_FAILURE 0x8B /**< DHKey check failure. */ -#define BLE_GAP_SEC_STATUS_NUM_COMP_FAILURE 0x8C /**< Numeric Comparison failure. */ -#define BLE_GAP_SEC_STATUS_BR_EDR_IN_PROG 0x8D /**< BR/EDR pairing in progress. */ -#define BLE_GAP_SEC_STATUS_X_TRANS_KEY_DISALLOWED 0x8E /**< BR/EDR Link Key cannot be used for LE keys. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_BEGIN 0x8F /**< Reserved for Future Use range #2 begin. */ -#define BLE_GAP_SEC_STATUS_RFU_RANGE2_END 0xFF /**< Reserved for Future Use range #2 end. */ -/**@} */ - - -/**@defgroup BLE_GAP_SEC_STATUS_SOURCES GAP Security status sources - * @{ */ -#define BLE_GAP_SEC_STATUS_SOURCE_LOCAL 0x00 /**< Local failure. */ -#define BLE_GAP_SEC_STATUS_SOURCE_REMOTE 0x01 /**< Remote failure. */ -/**@} */ - - -/**@defgroup BLE_GAP_CP_LIMITS GAP Connection Parameters Limits - * @{ */ -#define BLE_GAP_CP_MIN_CONN_INTVL_NONE 0xFFFF /**< No new minimum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MIN 0x0006 /**< Lowest minimum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MIN_CONN_INTVL_MAX 0x0C80 /**< Highest minimum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_NONE 0xFFFF /**< No new maximum connection interval specified in connect parameters. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MIN 0x0006 /**< Lowest maximum connection interval permitted, in units of 1.25 ms, i.e. 7.5 ms. */ -#define BLE_GAP_CP_MAX_CONN_INTVL_MAX 0x0C80 /**< Highest maximum connection interval permitted, in units of 1.25 ms, i.e. 4 s. */ -#define BLE_GAP_CP_SLAVE_LATENCY_MAX 0x01F3 /**< Highest slave latency permitted, in connection events. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_NONE 0xFFFF /**< No new supervision timeout specified in connect parameters. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MIN 0x000A /**< Lowest supervision timeout permitted, in units of 10 ms, i.e. 100 ms. */ -#define BLE_GAP_CP_CONN_SUP_TIMEOUT_MAX 0x0C80 /**< Highest supervision timeout permitted, in units of 10 ms, i.e. 32 s. */ -/**@} */ - - -/**@defgroup BLE_GAP_DEVNAME GAP device name defines. - * @{ */ -#define BLE_GAP_DEVNAME_DEFAULT "nRF5x" /**< Default device name value. */ -#define BLE_GAP_DEVNAME_DEFAULT_LEN 31 /**< Default number of octets in device name. */ -#define BLE_GAP_DEVNAME_MAX_LEN 248 /**< Maximum number of octets in device name. */ -/**@} */ - - -/**@brief Disable RSSI events for connections */ -#define BLE_GAP_RSSI_THRESHOLD_INVALID 0xFF - -/**@defgroup BLE_GAP_PHYS GAP PHYs - * @{ */ -#define BLE_GAP_PHY_AUTO 0x00 /**< Automatic PHY selection. Refer @ref sd_ble_gap_phy_update for more information.*/ -#define BLE_GAP_PHY_1MBPS 0x01 /**< 1 Mbps PHY. */ -#define BLE_GAP_PHY_2MBPS 0x02 /**< 2 Mbps PHY. */ -#define BLE_GAP_PHY_CODED 0x04 /**< Coded PHY. */ -#define BLE_GAP_PHY_NOT_SET 0xFF /**< PHY is not configured. */ - -/**@brief Supported PHYs in connections, for scanning, and for advertising. */ -#define BLE_GAP_PHYS_SUPPORTED (BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS | BLE_GAP_PHY_CODED) /**< All PHYs are supported. - @note Coded PHY is only supported - as an experimental feature - in this SoftDevice. */ - -/**@} */ - -/**@defgroup BLE_GAP_CONN_SEC_MODE_SET_MACROS GAP attribute security requirement setters - * - * See @ref ble_gap_conn_sec_mode_t. - * @{ */ -/**@brief Set sec_mode pointed to by ptr to have no access rights.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(ptr) do {(ptr)->sm = 0; (ptr)->lv = 0;} while(0) -/**@brief Set sec_mode pointed to by ptr to require no protection, open link.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_OPEN(ptr) do {(ptr)->sm = 1; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption, but no MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_NO_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 2;} while(0) -/**@brief Set sec_mode pointed to by ptr to require encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 3;} while(0) -/**@brief Set sec_mode pointed to by ptr to require LESC encryption and MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_LESC_ENC_WITH_MITM(ptr) do {(ptr)->sm = 1; (ptr)->lv = 4;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption, no MITM protection needed.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_NO_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 1;} while(0) -/**@brief Set sec_mode pointed to by ptr to require signing or encryption with MITM protection.*/ -#define BLE_GAP_CONN_SEC_MODE_SET_SIGNED_WITH_MITM(ptr) do {(ptr)->sm = 2; (ptr)->lv = 2;} while(0) -/**@} */ - - -/**@brief GAP Security Random Number Length. */ -#define BLE_GAP_SEC_RAND_LEN 8 - - -/**@brief GAP Security Key Length. */ -#define BLE_GAP_SEC_KEY_LEN 16 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key Length. */ -#define BLE_GAP_LESC_P256_PK_LEN 64 - - -/**@brief GAP LE Secure Connections Elliptic Curve Diffie-Hellman DHKey Length. */ -#define BLE_GAP_LESC_DHKEY_LEN 32 - - -/**@brief GAP Passkey Length. */ -#define BLE_GAP_PASSKEY_LEN 6 - - -/**@brief Maximum amount of addresses in the whitelist. */ -#define BLE_GAP_WHITELIST_ADDR_MAX_COUNT (8) - - -/**@brief Maximum amount of identities in the device identities list. */ -#define BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT (8) - - -/**@brief Default connection count for a configuration. */ -#define BLE_GAP_CONN_COUNT_DEFAULT (1) - - -/**@defgroup BLE_GAP_EVENT_LENGTH GAP event length defines. - * @{ */ -#define BLE_GAP_EVENT_LENGTH_MIN (2) /**< Minimum event length, in 1.25 ms units. */ -#define BLE_GAP_EVENT_LENGTH_CODED_PHY_MIN (6) /**< The shortest event length in 1.25 ms units supporting LE Coded PHY. */ -#define BLE_GAP_EVENT_LENGTH_DEFAULT (3) /**< Default event length, in 1.25 ms units. */ -/**@} */ - - -/**@defgroup BLE_GAP_ROLE_COUNT GAP concurrent connection count defines. - * @{ */ -#define BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT (1) /**< Default maximum number of connections concurrently acting as peripherals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT (3) /**< Default maximum number of connections concurrently acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT (1) /**< Default number of SMP instances shared between all connections acting as centrals. */ -#define BLE_GAP_ROLE_COUNT_COMBINED_MAX (20) /**< Maximum supported number of concurrent connections in the peripheral and central roles combined. */ - -/**@} */ - -/**@brief Automatic data length parameter. */ -#define BLE_GAP_DATA_LENGTH_AUTO 0 - -/**@defgroup BLE_GAP_AUTH_PAYLOAD_TIMEOUT Authenticated payload timeout defines. - * @{ */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX (48000) /**< Maximum authenticated payload timeout in 10 ms units, i.e. 8 minutes. */ -#define BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MIN (1) /**< Minimum authenticated payload timeout in 10 ms units, i.e. 10 ms. */ -/**@} */ - -/**@defgroup GAP_SEC_MODES GAP Security Modes - * @{ */ -#define BLE_GAP_SEC_MODE 0x00 /**< No key (may be used to reject). */ -/**@} */ - -/**@brief The total number of channels in Bluetooth Low Energy. */ -#define BLE_GAP_CHANNEL_COUNT (40) - -/**@defgroup BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS Quality of Service (QoS) Channel survey interval defines - * @{ */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS (0) /**< Continuous channel survey. */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MIN_US (7500) /**< Minimum channel survey interval in microseconds (7.5 ms). */ -#define BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_MAX_US (4000000) /**< Maximum channel survey interval in microseconds (4 s). */ - /**@} */ - -/** @} */ - - -/**@addtogroup BLE_GAP_STRUCTURES Structures - * @{ */ - -/**@brief Advertising event properties. */ -typedef struct -{ - uint8_t type; /**< Advertising type. See @ref BLE_GAP_ADV_TYPES. */ - uint8_t anonymous : 1; /**< Omit advertiser's address from all PDUs. - @note Anonymous advertising is only available for - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED and - @ref BLE_GAP_ADV_TYPE_EXTENDED_NONCONNECTABLE_NONSCANNABLE_DIRECTED. */ - uint8_t include_tx_power : 1; /**< Include TxPower set by @ref sd_ble_gap_tx_power_set in the extended header - of the advertising PDU. - @note TxPower can only be added to the extended header when @ref type is an extended advertising type. */ -} ble_gap_adv_properties_t; - - -/**@brief Advertising report type. */ -typedef struct -{ - uint16_t connectable : 1; /**< Connectable advertising event type. */ - uint16_t scannable : 1; /**< Scannable advertising event type. */ - uint16_t directed : 1; /**< Directed advertising event type. */ - uint16_t scan_response : 1; /**< Received a scan response. */ - uint16_t extended_pdu : 1; /**< Received an extended advertising set. */ - uint16_t status : 2; /**< Data status. See @ref BLE_GAP_ADV_DATA_STATUS. */ - uint16_t reserved : 9; /**< Reserved for future use. */ -} ble_gap_adv_report_type_t; - -/**@brief Advertising Auxiliary Pointer. */ -typedef struct -{ - uint16_t aux_offset; /**< Time offset from the beginning of advertising packet to the auxiliary packet in 100 us units. */ - uint8_t aux_phy; /**< Indicates the PHY on which the auxiliary advertising packet is sent. See @ref BLE_GAP_PHYS. */ -} ble_gap_aux_pointer_t; - -/**@brief Bluetooth Low Energy address. */ -typedef struct -{ - uint8_t addr_id_peer : 1; /**< Only valid for peer addresses. - Reference to peer in device identities list (as set with @ref sd_ble_gap_device_identities_set) when peer is using privacy. */ - uint8_t addr_type : 7; /**< See @ref BLE_GAP_ADDR_TYPES. */ - uint8_t addr[BLE_GAP_ADDR_LEN]; /**< 48-bit address, LSB format. - addr is not used if addr_type is @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. */ -} ble_gap_addr_t; - - -/**@brief GAP connection parameters. - * - * @note When ble_conn_params_t is received in an event, both min_conn_interval and - * max_conn_interval will be equal to the connection interval set by the central. - * - * @note If both conn_sup_timeout and max_conn_interval are specified, then the following constraint applies: - * conn_sup_timeout * 4 > (1 + slave_latency) * max_conn_interval - * that corresponds to the following Bluetooth Spec requirement: - * The Supervision_Timeout in milliseconds shall be larger than - * (1 + Conn_Latency) * Conn_Interval_Max * 2, where Conn_Interval_Max is given in milliseconds. - */ -typedef struct -{ - uint16_t min_conn_interval; /**< Minimum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t max_conn_interval; /**< Maximum Connection Interval in 1.25 ms units, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t slave_latency; /**< Slave Latency in number of connection events, see @ref BLE_GAP_CP_LIMITS.*/ - uint16_t conn_sup_timeout; /**< Connection Supervision Timeout in 10 ms units, see @ref BLE_GAP_CP_LIMITS.*/ -} ble_gap_conn_params_t; - - -/**@brief GAP connection security modes. - * - * Security Mode 0 Level 0: No access permissions at all (this level is not defined by the Bluetooth Core specification).\n - * Security Mode 1 Level 1: No security is needed (aka open link).\n - * Security Mode 1 Level 2: Encrypted link required, MITM protection not necessary.\n - * Security Mode 1 Level 3: MITM protected encrypted link required.\n - * Security Mode 1 Level 4: LESC MITM protected encrypted link using a 128-bit strength encryption key required.\n - * Security Mode 2 Level 1: Signing or encryption required, MITM protection not necessary.\n - * Security Mode 2 Level 2: MITM protected signing required, unless link is MITM protected encrypted.\n - */ -typedef struct -{ - uint8_t sm : 4; /**< Security Mode (1 or 2), 0 for no permissions at all. */ - uint8_t lv : 4; /**< Level (1, 2, 3 or 4), 0 for no permissions at all. */ - -} ble_gap_conn_sec_mode_t; - - -/**@brief GAP connection security status.*/ -typedef struct -{ - ble_gap_conn_sec_mode_t sec_mode; /**< Currently active security mode for this connection.*/ - uint8_t encr_key_size; /**< Length of currently active encryption key, 7 to 16 octets (only applicable for bonding procedures). */ -} ble_gap_conn_sec_t; - -/**@brief Identity Resolving Key. */ -typedef struct -{ - uint8_t irk[BLE_GAP_SEC_KEY_LEN]; /**< Array containing IRK. */ -} ble_gap_irk_t; - - -/**@brief Channel mask (40 bits). - * Every channel is represented with a bit positioned as per channel index defined in Bluetooth Core Specification v5.0, - * Vol 6, Part B, Section 1.4.1. The LSB contained in array element 0 represents channel index 0, and bit 39 represents - * channel index 39. If a bit is set to 1, the channel is not used. - */ -typedef uint8_t ble_gap_ch_mask_t[5]; - - -/**@brief GAP advertising parameters. */ -typedef struct -{ - ble_gap_adv_properties_t properties; /**< The properties of the advertising events. */ - ble_gap_addr_t const *p_peer_addr; /**< Address of a known peer. - @note ble_gap_addr_t::addr_type cannot be - @ref BLE_GAP_ADDR_TYPE_ANONYMOUS. - - When privacy is enabled and the local device uses - @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE addresses, - the device identity list is searched for a matching entry. If - the local IRK for that device identity is set, the local IRK - for that device will be used to generate the advertiser address - field in the advertising packet. - - If @ref ble_gap_adv_properties_t::type is directed, this must be - set to the targeted scanner or initiator. If the peer address is - in the device identity list, the peer IRK for that device will be - used to generate @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE - target addresses used in the advertising event PDUs. */ - uint32_t interval; /**< Advertising interval in 625 us units. @sa BLE_GAP_ADV_INTERVALS. - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE - advertising, this parameter is ignored. */ - uint16_t duration; /**< Advertising duration in 10 ms units. When timeout is reached, - an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - @sa BLE_GAP_ADV_TIMEOUT_VALUES. */ - uint8_t max_adv_evts; /**< Maximum advertising events that shall be sent prior to disabling - advertising. Setting the value to 0 disables the limitation. When - the count of advertising events specified by this parameter - (if not 0) is reached, advertising will be automatically stopped - and an event of type @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised - @note If @ref ble_gap_adv_properties_t::type is set to - @ref BLE_GAP_ADV_TYPE_CONNECTABLE_NONSCANNABLE_DIRECTED_HIGH_DUTY_CYCLE, - this parameter is ignored. - @note Setting max_adv_evts to a values not equal to 0 is only supported - as an experimental feature in this SoftDevice. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be used. - Masking away secondary advertising channels is not supported. */ - uint8_t filter_policy; /**< Filter Policy. @sa BLE_GAP_ADV_FILTER_POLICIES. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising channel packets - are transmitted. If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS - will be used. - Valid values are @ref BLE_GAP_PHY_1MBPS and @ref BLE_GAP_PHY_CODED. - @note The primary_phy shall indicate @ref BLE_GAP_PHY_1MBPS if - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising channel packets - are transmitted. - If set to @ref BLE_GAP_PHY_AUTO, @ref BLE_GAP_PHY_1MBPS will be used. - Valid values are - @ref BLE_GAP_PHY_1MBPS, @ref BLE_GAP_PHY_2MBPS, and @ref BLE_GAP_PHY_CODED. - If @ref ble_gap_adv_properties_t::type is an extended advertising type - and connectable, this is the PHY that will be used to establish a - connection and send AUX_ADV_IND packets on. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t set_id:4; /**< The advertising set identifier distinguishes this advertising set from other - advertising sets transmitted by this and other devices. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is not an extended advertising type. */ - uint8_t scan_req_notification:1; /**< Enable scan request notifications for this advertising set. When a - scan request is received and the scanner address is allowed - by the filter policy, @ref BLE_GAP_EVT_SCAN_REQ_REPORT is raised. - @note This parameter will be ignored when - @ref ble_gap_adv_properties_t::type is a non-scannable - advertising type. */ -} ble_gap_adv_params_t; - - -/**@brief GAP advertising data buffers. - * - * The application must provide the buffers for advertisement. The memory shall reside in application RAM, and - * shall never be modified while advertising. The data shall be kept alive until either: - * - @ref BLE_GAP_EVT_ADV_SET_TERMINATED is raised. - * - @ref BLE_GAP_EVT_CONNECTED is raised with @ref ble_gap_evt_connected_t::adv_handle set to the corresponding - * advertising handle. - * - Advertising is stopped. - * - Advertising data is changed. - * To update advertising data while advertising, provide new buffers to @ref sd_ble_gap_adv_set_configure. */ -typedef struct -{ - ble_data_t adv_data; /**< Advertising data. - @note - Advertising data can only be specified for a @ref ble_gap_adv_properties_t::type - that is allowed to contain advertising data. */ - ble_data_t scan_rsp_data; /**< Scan response data. - @note - Scan response data can only be specified for a @ref ble_gap_adv_properties_t::type - that is scannable. */ -} ble_gap_adv_data_t; - - -/**@brief GAP scanning parameters. */ -typedef struct -{ - uint8_t extended : 1; /**< If 1, the scanner will accept extended advertising packets. - If set to 0, the scanner will not receive advertising packets - on secondary advertising channels, and will not be able - to receive long advertising PDUs. - @note Extended scanning is only supported as an experimental feature in this - SoftDevice. */ - uint8_t report_incomplete_evts : 1; /**< If 1, events of type @ref ble_gap_evt_adv_report_t may have - @ref ble_gap_adv_report_type_t::status set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. - This parameter is ignored when used with @ref sd_ble_gap_connect - @note This may be used to abort receiving more packets from an extended - advertising event, and is only available for extended - scanning, see @ref sd_ble_gap_scan_start. - @note This feature is not supported by this SoftDevice. */ - uint8_t active : 1; /**< If 1, perform active scanning by sending scan requests. - This parameter is ignored when used with @ref sd_ble_gap_connect. */ - uint8_t filter_policy : 2; /**< Scanning filter policy. @sa BLE_GAP_SCAN_FILTER_POLICIES. - @note Only @ref BLE_GAP_SCAN_FP_ACCEPT_ALL and - @ref BLE_GAP_SCAN_FP_WHITELIST are valid when used with - @ref sd_ble_gap_connect */ - uint8_t scan_phys; /**< Bitfield of PHYs to scan on. If set to @ref BLE_GAP_PHY_AUTO, - scan_phys will default to @ref BLE_GAP_PHY_1MBPS. - - If @ref ble_gap_scan_params_t::extended is set to 0, the only - supported PHY is @ref BLE_GAP_PHY_1MBPS. - - When used with @ref sd_ble_gap_scan_start, - the bitfield indicates the PHYs the scanner will use for scanning - on primary advertising channels. The scanner will accept - @ref BLE_GAP_PHYS_SUPPORTED as secondary advertising channel PHYs. - - When used with @ref sd_ble_gap_connect, the - bitfield indicates the PHYs on where a connection may be initiated. - If scan_phys contains @ref BLE_GAP_PHY_1MBPS and/or @ref BLE_GAP_PHY_2MBPS, - the primary scan PHY is @ref BLE_GAP_PHY_1MBPS. - If scan_phys also contains @ref BLE_GAP_PHY_CODED, the primary scan - PHY will also contain @ref BLE_GAP_PHY_CODED. If the only scan PHY is - @ref BLE_GAP_PHY_CODED, the primary scan PHY is - @ref BLE_GAP_PHY_CODED only. */ - uint16_t interval; /**< Scan interval in 625 us units. @sa BLE_GAP_SCAN_INTERVALS. */ - uint16_t window; /**< Scan window in 625 us units. @sa BLE_GAP_SCAN_WINDOW. */ - uint16_t timeout; /**< Scan timeout in 10 ms units. @sa BLE_GAP_SCAN_TIMEOUT. */ - ble_gap_ch_mask_t channel_mask; /**< Channel mask for primary and secondary advertising channels. - At least one of the primary channels, that is channel index 37-39, must be - set to 0. - Masking away secondary channels is not supported. */ -} ble_gap_scan_params_t; - - -/**@brief Privacy. - * - * The privacy feature provides a way for the device to avoid being tracked over a period of time. - * The privacy feature, when enabled, hides the local device identity and replaces it with a private address - * that is automatically refreshed at a specified interval. - * - * If a device still wants to be recognized by other peers, it needs to share it's Identity Resolving Key (IRK). - * With this key, a device can generate a random private address that can only be recognized by peers in possession of that key, - * and devices can establish connections without revealing their real identities. - * - * Both network privacy (@ref BLE_GAP_PRIVACY_MODE_NETWORK_PRIVACY) and device privacy (@ref BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY) - * are supported. - * - * @note If the device IRK is updated, the new IRK becomes the one to be distributed in all - * bonding procedures performed after @ref sd_ble_gap_privacy_set returns. - * The IRK distributed during bonding procedure is the device IRK that is active when @ref sd_ble_gap_sec_params_reply is called. - */ -typedef struct -{ - uint8_t privacy_mode; /**< Privacy mode, see @ref BLE_GAP_PRIVACY_MODES. Default is @ref BLE_GAP_PRIVACY_MODE_OFF. */ - uint8_t private_addr_type; /**< The private address type must be either @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE or @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE. */ - uint16_t private_addr_cycle_s; /**< Private address cycle interval in seconds. Providing an address cycle value of 0 will use the default value defined by @ref BLE_GAP_DEFAULT_PRIVATE_ADDR_CYCLE_INTERVAL_S. */ - ble_gap_irk_t *p_device_irk; /**< When used as input, pointer to IRK structure that will be used as the default IRK. If NULL, the device default IRK will be used. - When used as output, pointer to IRK structure where the current default IRK will be written to. If NULL, this argument is ignored. - By default, the default IRK is used to generate random private resolvable addresses for the local device unless instructed otherwise. */ -} ble_gap_privacy_params_t; - - -/**@brief PHY preferences for TX and RX - * @note tx_phys and rx_phys are bit fields. Multiple bits can be set in them to indicate multiple preferred PHYs for each direction. - * @code - * p_gap_phys->tx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * p_gap_phys->rx_phys = BLE_GAP_PHY_1MBPS | BLE_GAP_PHY_2MBPS; - * @endcode - * - */ -typedef struct -{ - uint8_t tx_phys; /**< Preferred transmit PHYs, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phys; /**< Preferred receive PHYs, see @ref BLE_GAP_PHYS. */ -} ble_gap_phys_t; - -/** @brief Keys that can be exchanged during a bonding procedure. */ -typedef struct -{ - uint8_t enc : 1; /**< Long Term Key and Master Identification. */ - uint8_t id : 1; /**< Identity Resolving Key and Identity Address Information. */ - uint8_t sign : 1; /**< Connection Signature Resolving Key. */ - uint8_t link : 1; /**< Derive the Link Key from the LTK. */ -} ble_gap_sec_kdist_t; - - -/**@brief GAP security parameters. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Enable Man In The Middle protection. */ - uint8_t lesc : 1; /**< Enable LE Secure Connection pairing. */ - uint8_t keypress : 1; /**< Enable generation of keypress notifications. */ - uint8_t io_caps : 3; /**< IO capabilities, see @ref BLE_GAP_IO_CAPS. */ - uint8_t oob : 1; /**< The OOB data flag. - - In LE legacy pairing, this flag is set if a device has out of band authentication data. - The OOB method is used if both of the devices have out of band authentication data. - - In LE Secure Connections pairing, this flag is set if a device has the peer device's out of band authentication data. - The OOB method is used if at least one device has the peer device's OOB data available. */ - uint8_t min_key_size; /**< Minimum encryption key size in octets between 7 and 16. If 0 then not applicable in this instance. */ - uint8_t max_key_size; /**< Maximum encryption key size in octets between min_key_size and 16. */ - ble_gap_sec_kdist_t kdist_own; /**< Key distribution bitmap: keys that the local device will distribute. */ - ble_gap_sec_kdist_t kdist_peer; /**< Key distribution bitmap: keys that the remote device will distribute. */ -} ble_gap_sec_params_t; - - -/**@brief GAP Encryption Information. */ -typedef struct -{ - uint8_t ltk[BLE_GAP_SEC_KEY_LEN]; /**< Long Term Key. */ - uint8_t lesc : 1; /**< Key generated using LE Secure Connections. */ - uint8_t auth : 1; /**< Authenticated Key. */ - uint8_t ltk_len : 6; /**< LTK length in octets. */ -} ble_gap_enc_info_t; - - -/**@brief GAP Master Identification. */ -typedef struct -{ - uint16_t ediv; /**< Encrypted Diversifier. */ - uint8_t rand[BLE_GAP_SEC_RAND_LEN]; /**< Random Number. */ -} ble_gap_master_id_t; - - -/**@brief GAP Signing Information. */ -typedef struct -{ - uint8_t csrk[BLE_GAP_SEC_KEY_LEN]; /**< Connection Signature Resolving Key. */ -} ble_gap_sign_info_t; - - -/**@brief GAP LE Secure Connections P-256 Public Key. */ -typedef struct -{ - uint8_t pk[BLE_GAP_LESC_P256_PK_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman P-256 Public Key. Stored in the standard SMP protocol format: {X,Y} both in little-endian. */ -} ble_gap_lesc_p256_pk_t; - - -/**@brief GAP LE Secure Connections DHKey. */ -typedef struct -{ - uint8_t key[BLE_GAP_LESC_DHKEY_LEN]; /**< LE Secure Connections Elliptic Curve Diffie-Hellman Key. Stored in little-endian. */ -} ble_gap_lesc_dhkey_t; - - -/**@brief GAP LE Secure Connections OOB data. */ -typedef struct -{ - ble_gap_addr_t addr; /**< Bluetooth address of the device. */ - uint8_t r[BLE_GAP_SEC_KEY_LEN]; /**< Random Number. */ - uint8_t c[BLE_GAP_SEC_KEY_LEN]; /**< Confirm Value. */ -} ble_gap_lesc_oob_data_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONNECTED. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ - uint8_t role; /**< BLE role for this connection, see @ref BLE_GAP_ROLES */ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. - This variable is only set if role is set to @ref BLE_GAP_ROLE_PERIPH. */ -} ble_gap_evt_connected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DISCONNECTED. */ -typedef struct -{ - uint8_t reason; /**< HCI error code, see @ref BLE_HCI_STATUS_CODES. */ -} ble_gap_evt_disconnected_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_PHY_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_phys_t peer_preferred_phys; /**< The PHYs the peer prefers to use. */ -} ble_gap_evt_phy_update_request_t; - -/**@brief Event Structure for @ref BLE_GAP_EVT_PHY_UPDATE. */ -typedef struct -{ - uint8_t status; /**< Status of the procedure, see @ref BLE_HCI_STATUS_CODES.*/ - uint8_t tx_phy; /**< TX PHY for this connection, see @ref BLE_GAP_PHYS. */ - uint8_t rx_phy; /**< RX PHY for this connection, see @ref BLE_GAP_PHYS. */ -} ble_gap_evt_phy_update_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. */ -typedef struct -{ - ble_gap_sec_params_t peer_params; /**< Initiator Security Parameters. */ -} ble_gap_evt_sec_params_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_INFO_REQUEST. */ -typedef struct -{ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. */ - ble_gap_master_id_t master_id; /**< Master Identification for LTK lookup. */ - uint8_t enc_info : 1; /**< If 1, Encryption Information required. */ - uint8_t id_info : 1; /**< If 1, Identity Information required. */ - uint8_t sign_info : 1; /**< If 1, Signing Information required. */ -} ble_gap_evt_sec_info_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_PASSKEY_DISPLAY. */ -typedef struct -{ - uint8_t passkey[BLE_GAP_PASSKEY_LEN]; /**< 6-digit passkey in ASCII ('0'-'9' digits only). */ - uint8_t match_request : 1; /**< If 1 requires the application to report the match using @ref sd_ble_gap_auth_key_reply - with either @ref BLE_GAP_AUTH_KEY_TYPE_NONE if there is no match or - @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY if there is a match. */ -} ble_gap_evt_passkey_display_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_KEY_PRESSED. */ -typedef struct -{ - uint8_t kp_not; /**< Keypress notification type, see @ref BLE_GAP_KP_NOT_TYPES. */ -} ble_gap_evt_key_pressed_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_KEY_REQUEST. */ -typedef struct -{ - uint8_t key_type; /**< See @ref BLE_GAP_AUTH_KEY_TYPES. */ -} ble_gap_evt_auth_key_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST. */ -typedef struct -{ - ble_gap_lesc_p256_pk_t *p_pk_peer; /**< LE Secure Connections remote P-256 Public Key. This will point to the application-supplied memory - inside the keyset during the call to @ref sd_ble_gap_sec_params_reply. */ - uint8_t oobd_req :1; /**< LESC OOB data required. A call to @ref sd_ble_gap_lesc_oob_data_set is required to complete the procedure. */ -} ble_gap_evt_lesc_dhkey_request_t; - - -/**@brief Security levels supported. - * @note See Bluetooth Specification Version 4.2 Volume 3, Part C, Chapter 10, Section 10.2.1. -*/ -typedef struct -{ - uint8_t lv1 : 1; /**< If 1: Level 1 is supported. */ - uint8_t lv2 : 1; /**< If 1: Level 2 is supported. */ - uint8_t lv3 : 1; /**< If 1: Level 3 is supported. */ - uint8_t lv4 : 1; /**< If 1: Level 4 is supported. */ -} ble_gap_sec_levels_t; - - -/**@brief Encryption Key. */ -typedef struct -{ - ble_gap_enc_info_t enc_info; /**< Encryption Information. */ - ble_gap_master_id_t master_id; /**< Master Identification. */ -} ble_gap_enc_key_t; - - -/**@brief Identity Key. */ -typedef struct -{ - ble_gap_irk_t id_info; /**< Identity Resolving Key. */ - ble_gap_addr_t id_addr_info; /**< Identity Address. */ -} ble_gap_id_key_t; - - -/**@brief Security Keys. */ -typedef struct -{ - ble_gap_enc_key_t *p_enc_key; /**< Encryption Key, or NULL. */ - ble_gap_id_key_t *p_id_key; /**< Identity Key, or NULL. */ - ble_gap_sign_info_t *p_sign_key; /**< Signing Key, or NULL. */ - ble_gap_lesc_p256_pk_t *p_pk; /**< LE Secure Connections P-256 Public Key. When in debug mode the application must use the value defined - in the Core Bluetooth Specification v4.2 Vol.3, Part H, Section 2.3.5.6.1 */ -} ble_gap_sec_keys_t; - - -/**@brief Security key set for both local and peer keys. */ -typedef struct -{ - ble_gap_sec_keys_t keys_own; /**< Keys distributed by the local device. For LE Secure Connections the encryption key will be generated locally and will always be stored if bonding. */ - ble_gap_sec_keys_t keys_peer; /**< Keys distributed by the remote device. For LE Secure Connections, p_enc_key must always be NULL. */ -} ble_gap_sec_keyset_t; - - -/**@brief Data Length Update Procedure parameters. */ -typedef struct -{ - uint16_t max_tx_octets; /**< Maximum number of payload octets that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_octets; /**< Maximum number of payload octets that a Controller supports for reception of a single Link Layer Data Channel PDU. */ - uint16_t max_tx_time_us; /**< Maximum time, in microseconds, that a Controller supports for transmission of a single Link Layer Data Channel PDU. */ - uint16_t max_rx_time_us; /**< Maximum time, in microseconds, that a Controller supports for reception of a single Link Layer Data Channel PDU. */ -} ble_gap_data_length_params_t; - - -/**@brief Data Length Update Procedure local limitation. */ -typedef struct -{ - uint16_t tx_payload_limited_octets; /**< If > 0, the requested TX packet length is too long by this many octets. */ - uint16_t rx_payload_limited_octets; /**< If > 0, the requested RX packet length is too long by this many octets. */ - uint16_t tx_rx_time_limited_us; /**< If > 0, the requested combination of TX and RX packet lengths is too long by this many microseconds. */ -} ble_gap_data_length_limitation_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_AUTH_STATUS. */ -typedef struct -{ - uint8_t auth_status; /**< Authentication status, see @ref BLE_GAP_SEC_STATUS. */ - uint8_t error_src : 2; /**< On error, source that caused the failure, see @ref BLE_GAP_SEC_STATUS_SOURCES. */ - uint8_t bonded : 1; /**< Procedure resulted in a bond. */ - uint8_t lesc : 1; /**< Procedure resulted in a LE Secure Connection. */ - ble_gap_sec_levels_t sm1_levels; /**< Levels supported in Security Mode 1. */ - ble_gap_sec_levels_t sm2_levels; /**< Levels supported in Security Mode 2. */ - ble_gap_sec_kdist_t kdist_own; /**< Bitmap stating which keys were exchanged (distributed) by the local device. If bonding with LE Secure Connections, the enc bit will be always set. */ - ble_gap_sec_kdist_t kdist_peer; /**< Bitmap stating which keys were exchanged (distributed) by the remote device. If bonding with LE Secure Connections, the enc bit will never be set. */ -} ble_gap_evt_auth_status_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_SEC_UPDATE. */ -typedef struct -{ - ble_gap_conn_sec_t conn_sec; /**< Connection security level. */ -} ble_gap_evt_conn_sec_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Source of timeout event, see @ref BLE_GAP_TIMEOUT_SOURCES. */ - union - { - ble_data_t adv_report_buffer; /**< If source is set to @ref BLE_GAP_TIMEOUT_SRC_SCAN, the released - scan buffer is contained in this field. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_timeout_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_RSSI_CHANGED. */ -typedef struct -{ - int8_t rssi; /**< Received Signal Strength Indication in dBm. - @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ - uint8_t ch_index; /**< Data Channel Index on which the Signal Strength is measured (0-36). */ -} ble_gap_evt_rssi_changed_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_SET_TERMINATED */ -typedef struct -{ - uint8_t reason; /**< Reason for why the advertising set terminated. See - @ref BLE_GAP_EVT_ADV_SET_TERMINATED_REASON. */ - uint8_t adv_handle; /**< Advertising handle in which advertising has ended. */ - uint8_t num_completed_adv_events; /**< If @ref ble_gap_adv_params_t::max_adv_evts was not set to 0, - this field indicates the number of completed advertising events. */ - ble_gap_adv_data_t adv_data; /**< Advertising buffers corresponding to the terminated - advertising set. The advertising buffers provided in - @ref sd_ble_gap_adv_set_configure are now released. */ -} ble_gap_evt_adv_set_terminated_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. - * - * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * not all fields in the advertising report may be available. - * - * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, - * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. - */ -typedef struct -{ - ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the - peer's identity address. */ - ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if - @ref ble_gap_adv_report_type_t::directed is set to 1. If the - SoftDevice was able to resolve the address, - @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr - contains the local identity address. If the target address of the - advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, - and the SoftDevice was unable to resolve it, the application may try - to resolve this address to find out if the advertising event was - directed to us. */ - uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received on. - See @ref BLE_GAP_PHYS. */ - uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received on. - See @ref BLE_GAP_PHYS. This field is to 0 if no packets where received on - a secondary advertising channel. */ - int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. - This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the - last received packet did not contain the Tx Power field. - @note TX Power is only included in extended advertising packets. */ - int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. - @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ - uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ - uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present - if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID - is not present if @ref ble_gap_evt_adv_report_t::set_id is set to - @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ - ble_data_t data; /**< Received advertising or scan response data. If - @ref ble_gap_adv_report_type_t::status is not set to - @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided - in @ref sd_ble_gap_scan_start is now released. */ - ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising - event. @note This field is only set if @ref ble_gap_adv_report_type_t::status - is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ -} ble_gap_evt_adv_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SEC_REQUEST. */ -typedef struct -{ - uint8_t bond : 1; /**< Perform bonding. */ - uint8_t mitm : 1; /**< Man In The Middle protection requested. */ - uint8_t lesc : 1; /**< LE Secure Connections requested. */ - uint8_t keypress : 1; /**< Generation of keypress notifications requested. */ -} ble_gap_evt_sec_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_conn_params_t conn_params; /**< GAP Connection Parameters. */ -} ble_gap_evt_conn_param_update_request_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_SCAN_REQ_REPORT. */ -typedef struct -{ - uint8_t adv_handle; /**< Advertising handle for the advertising set which received the Scan Request */ - int8_t rssi; /**< Received Signal Strength Indication in dBm. - @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. */ - ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 - and the address is the device's identity address. */ -} ble_gap_evt_scan_req_report_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. */ -typedef struct -{ - ble_gap_data_length_params_t peer_params; /**< Peer data length parameters. */ -} ble_gap_evt_data_length_update_request_t; - -/**@brief Event structure for @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE. */ -typedef struct -{ - ble_gap_data_length_params_t effective_params; /**< The effective data length parameters. */ -} ble_gap_evt_data_length_update_t; - - -/**@brief Event structure for @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT. */ -typedef struct -{ - int8_t channel_energy[BLE_GAP_CHANNEL_COUNT]; /**< The measured energy on the Bluetooth Low Energy - channels, in dBm, indexed by Channel Index. - If no measurement is available for the given channel, channel_energy is set to - @ref BLE_GAP_POWER_LEVEL_INVALID. */ -} ble_gap_evt_qos_channel_survey_report_t; - -/**@brief GAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - union /**< union alternative identified by evt_id in enclosing struct. */ - { - ble_gap_evt_connected_t connected; /**< Connected Event Parameters. */ - ble_gap_evt_disconnected_t disconnected; /**< Disconnected Event Parameters. */ - ble_gap_evt_conn_param_update_t conn_param_update; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_sec_params_request_t sec_params_request; /**< Security Parameters Request Event Parameters. */ - ble_gap_evt_sec_info_request_t sec_info_request; /**< Security Information Request Event Parameters. */ - ble_gap_evt_passkey_display_t passkey_display; /**< Passkey Display Event Parameters. */ - ble_gap_evt_key_pressed_t key_pressed; /**< Key Pressed Event Parameters. */ - ble_gap_evt_auth_key_request_t auth_key_request; /**< Authentication Key Request Event Parameters. */ - ble_gap_evt_lesc_dhkey_request_t lesc_dhkey_request; /**< LE Secure Connections DHKey calculation request. */ - ble_gap_evt_auth_status_t auth_status; /**< Authentication Status Event Parameters. */ - ble_gap_evt_conn_sec_update_t conn_sec_update; /**< Connection Security Update Event Parameters. */ - ble_gap_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gap_evt_rssi_changed_t rssi_changed; /**< RSSI Event Parameters. */ - ble_gap_evt_adv_report_t adv_report; /**< Advertising Report Event Parameters. */ - ble_gap_evt_adv_set_terminated_t adv_set_terminated; /**< Advertising Set Terminated Event Parameters. */ - ble_gap_evt_sec_request_t sec_request; /**< Security Request Event Parameters. */ - ble_gap_evt_conn_param_update_request_t conn_param_update_request; /**< Connection Parameter Update Parameters. */ - ble_gap_evt_scan_req_report_t scan_req_report; /**< Scan Request Report Parameters. */ - ble_gap_evt_phy_update_request_t phy_update_request; /**< PHY Update Request Event Parameters. */ - ble_gap_evt_phy_update_t phy_update; /**< PHY Update Parameters. */ - ble_gap_evt_data_length_update_request_t data_length_update_request; /**< Data Length Update Request Event Parameters. */ - ble_gap_evt_data_length_update_t data_length_update; /**< Data Length Update Event Parameters. */ - ble_gap_evt_qos_channel_survey_report_t qos_channel_survey_report; /**< Quality of Service (QoS) Channel Survey Report Parameters. */ - } params; /**< Event Parameters. */ -} ble_gap_evt_t; - - -/** - * @brief BLE GAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The connection count for the connection configurations is zero. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - The sum of conn_count for all connection configurations combined exceeds UINT8_MAX. - * - The event length is smaller than @ref BLE_GAP_EVENT_LENGTH_MIN. - */ -typedef struct -{ - uint8_t conn_count; /**< The number of concurrent connections the application can create with this configuration. - The default and minimum value is @ref BLE_GAP_CONN_COUNT_DEFAULT. */ - uint16_t event_length; /**< The time set aside for this connection on every connection interval in 1.25 ms units. - The default value is @ref BLE_GAP_EVENT_LENGTH_DEFAULT, the minimum value is @ref BLE_GAP_EVENT_LENGTH_MIN. - The event length and the connection interval are the primary parameters - for setting the throughput of a connection. - See the SoftDevice Specification for details on throughput. */ -} ble_gap_conn_cfg_t; - - -/** - * @brief Configuration of maximum concurrent connections in the different connected roles, set with - * @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_CONN_COUNT The sum of periph_role_count and central_role_count is too - * large. The maximum supported sum of concurrent connections is - * @ref BLE_GAP_ROLE_COUNT_COMBINED_MAX. - * @retval ::NRF_ERROR_INVALID_PARAM central_sec_count is larger than central_role_count. - * @retval ::NRF_ERROR_RESOURCES The adv_set_count is too large. The maximum - * supported advertising handles is - * @ref BLE_GAP_ADV_SET_COUNT_MAX. - */ -typedef struct -{ - uint8_t adv_set_count; /**< Maximum number of advertising sets. Default value is @ref BLE_GAP_ADV_SET_COUNT_DEFAULT. */ - uint8_t periph_role_count; /**< Maximum number of connections concurrently acting as a peripheral. Default value is @ref BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT. */ - uint8_t central_role_count; /**< Maximum number of connections concurrently acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_DEFAULT. */ - uint8_t central_sec_count; /**< Number of SMP instances shared between all connections acting as a central. Default value is @ref BLE_GAP_ROLE_COUNT_CENTRAL_SEC_DEFAULT. */ - uint8_t qos_channel_survey_role_available:1; /**< If set, the Quality of Service (QoS) channel survey module is available to the - application using @ref sd_ble_gap_qos_channel_survey_start. */ -} ble_gap_cfg_role_count_t; - - -/** - * @brief Device name and its properties, set with @ref sd_ble_cfg_set. - * - * @note If the device name is not configured, the default device name will be - * @ref BLE_GAP_DEVNAME_DEFAULT, the maximum device name length will be - * @ref BLE_GAP_DEVNAME_DEFAULT_LEN, vloc will be set to @ref BLE_GATTS_VLOC_STACK and the device name - * will have no write access. - * - * @note If @ref max_len is more than @ref BLE_GAP_DEVNAME_DEFAULT_LEN and vloc is set to @ref BLE_GATTS_VLOC_STACK, - * the attribute table size must be increased to have room for the longer device name (see - * @ref sd_ble_cfg_set and @ref ble_gatts_cfg_attr_tab_size_t). - * - * @note If vloc is @ref BLE_GATTS_VLOC_STACK : - * - p_value must point to non-volatile memory (flash) or be NULL. - * - If p_value is NULL, the device name will initially be empty. - * - * @note If vloc is @ref BLE_GATTS_VLOC_USER : - * - p_value cannot be NULL. - * - If the device name is writable, p_value must point to volatile memory (RAM). - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Invalid device name location (vloc). - * - Invalid device name security mode. - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The device name length is invalid (must be between 0 and @ref BLE_GAP_DEVNAME_MAX_LEN). - * - The device name length is too long for the given Attribute Table. - * @retval ::NRF_ERROR_NOT_SUPPORTED Device name security mode is not supported. - */ -typedef struct -{ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vloc:2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t *p_value; /**< Pointer to where the value (device name) is stored or will be stored. */ - uint16_t current_len; /**< Current length in bytes of the memory pointed to by p_value.*/ - uint16_t max_len; /**< Maximum length in bytes of the memory pointed to by p_value.*/ -} ble_gap_cfg_device_name_t; - - -/**@brief Configuration structure for GAP configurations. */ -typedef union -{ - ble_gap_cfg_role_count_t role_count_cfg; /**< Role count configuration, cfg_id is @ref BLE_GAP_CFG_ROLE_COUNT. */ - ble_gap_cfg_device_name_t device_name_cfg; /**< Device name configuration, cfg_id is @ref BLE_GAP_CFG_DEVICE_NAME. */ -} ble_gap_cfg_t; - - -/**@brief Channel Map option. - * - * @details Used with @ref sd_ble_opt_get to get the current channel map - * or @ref sd_ble_opt_set to set a new channel map. When setting the - * channel map, it applies to all current and future connections. When getting the - * current channel map, it applies to a single connection and the connection handle - * must be supplied. - * - * @note Setting the channel map may take some time, depending on connection parameters. - * The time taken may be different for each connection and the get operation will - * return the previous channel map until the new one has taken effect. - * - * @note After setting the channel map, by spec it can not be set again until at least 1 s has passed. - * See Bluetooth Specification Version 4.1 Volume 2, Part E, Section 7.3.46. - * - * @retval ::NRF_SUCCESS Get or set successful. - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - Less then two bits in @ref ch_map are set. - * - Bits for primary advertising channels (37-39) are set. - * @retval ::NRF_ERROR_BUSY Channel map was set again before enough time had passed. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied for get. - * - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle (only applicable for get) */ - uint8_t ch_map[5]; /**< Channel Map (37-bit). */ -} ble_gap_opt_ch_map_t; - - -/**@brief Local connection latency option. - * - * @details Local connection latency is a feature which enables the slave to improve - * current consumption by ignoring the slave latency set by the peer. The - * local connection latency can only be set to a multiple of the slave latency, - * and cannot be longer than half of the supervision timeout. - * - * @details Used with @ref sd_ble_opt_set to set the local connection latency. The - * @ref sd_ble_opt_get is not supported for this option, but the actual - * local connection latency (unless set to NULL) is set as a return parameter - * when setting the option. - * - * @note The latency set will be truncated down to the closest slave latency event - * multiple, or the nearest multiple before half of the supervision timeout. - * - * @note The local connection latency is disabled by default, and needs to be enabled for new - * connections and whenever the connection is updated. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t requested_latency; /**< Requested local connection latency. */ - uint16_t * p_actual_latency; /**< Pointer to storage for the actual local connection latency (can be set to NULL to skip return value). */ -} ble_gap_opt_local_conn_latency_t; - -/**@brief Disable slave latency - * - * @details Used with @ref sd_ble_opt_set to temporarily disable slave latency of a peripheral connection - * (see @ref ble_gap_conn_params_t::slave_latency). And to re-enable it again. When disabled, the - * peripheral will ignore the slave_latency set by the central. - * - * @note Shall only be called on peripheral links. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_NOT_SUPPORTED Get is not supported. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint8_t disable : 1; /**< Set to 1 to disable slave latency. Set to 0 enable it again.*/ -} ble_gap_opt_slave_latency_disable_t; - -/**@brief Passkey Option. - * - * @details Structure containing the passkey to be used during pairing. This can be used with @ref - * sd_ble_opt_set to make the SoftDevice use a preprogrammed passkey for authentication - * instead of generating a random one. - * - * @note Repeated pairing attempts using the same preprogrammed passkey makes pairing vulnerable to MITM attacks. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * - */ -typedef struct -{ - uint8_t const * p_passkey; /**< Pointer to 6-digit ASCII string (digit 0..9 only, no NULL termination) passkey to be used during pairing. If this is NULL, the SoftDevice will generate a random passkey if required.*/ -} ble_gap_opt_passkey_t; - - -/**@brief Compatibility mode 1 option. - * - * @details This can be used with @ref sd_ble_opt_set to enable and disable - * compatibility mode 1. Compatibility mode 1 is disabled by default. - * - * @note Compatibility mode 1 enables interoperability with devices that do not support a value of - * 0 for the WinOffset parameter in the Link Layer CONNECT_IND packet. This applies to a - * limited set of legacy peripheral devices from another vendor. Enabling this compatibility - * mode will only have an effect if the local device will act as a central device and - * initiate a connection to a peripheral device. In that case it may lead to the connection - * creation taking up to one connection interval longer to complete for all connections. - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_STATE When connection creation is ongoing while mode 1 is set. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable compatibility mode 1.*/ -} ble_gap_opt_compat_mode_1_t; - - -/**@brief Authenticated payload timeout option. - * - * @details This can be used with @ref sd_ble_opt_set to change the Authenticated payload timeout to a value other - * than the default of @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT_MAX. - * - * @note The authenticated payload timeout event ::BLE_GAP_TIMEOUT_SRC_AUTH_PAYLOAD will be generated - * if auth_payload_timeout time has elapsed without receiving a packet with a valid MIC on an encrypted - * link. - * - * @note The LE ping procedure will be initiated before the timer expires to give the peer a chance - * to reset the timer. In addition the stack will try to prioritize running of LE ping over other - * activities to increase chances of finishing LE ping before timer expires. To avoid side-effects - * on other activities, it is recommended to use high timeout values. - * Recommended timeout > 2*(connInterval * (6 + connSlaveLatency)). - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. auth_payload_timeout was outside of allowed range. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter. - */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle */ - uint16_t auth_payload_timeout; /**< Requested timeout in 10 ms unit, see @ref BLE_GAP_AUTH_PAYLOAD_TIMEOUT. */ -} ble_gap_opt_auth_payload_timeout_t; - -/**@brief Option structure for GAP options. */ -typedef union -{ - ble_gap_opt_ch_map_t ch_map; /**< Parameters for the Channel Map option. */ - ble_gap_opt_local_conn_latency_t local_conn_latency; /**< Parameters for the Local connection latency option */ - ble_gap_opt_passkey_t passkey; /**< Parameters for the Passkey option.*/ - ble_gap_opt_compat_mode_1_t compat_mode_1; /**< Parameters for the compatibility mode 1 option.*/ - ble_gap_opt_auth_payload_timeout_t auth_payload_timeout; /**< Parameters for the authenticated payload timeout option.*/ - ble_gap_opt_slave_latency_disable_t slave_latency_disable; /**< Parameters for the Disable slave latency option */ -} ble_gap_opt_t; -/**@} */ - - -/**@addtogroup BLE_GAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set the local Bluetooth identity address. - * - * The local Bluetooth identity address is the address that identifies this device to other peers. - * The address type must be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @note The identity address cannot be changed while advertising, scanning or creating a connection. - * - * @note This address will be distributed to the peer during bonding. - * If the address changes, the address stored in the peer device will not be valid and the ability to - * reconnect using the old address will be lost. - * - * @note By default the SoftDevice will set an address of type @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC upon being - * enabled. The address is a random number populated during the IC manufacturing process and remains unchanged - * for the lifetime of each IC. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @endmscs - * - * @param[in] p_addr Pointer to address structure. - * - * @retval ::NRF_SUCCESS Address successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_STATE The identity address cannot be changed while advertising, - * scanning or creating a connection. - */ -SVCALL(SD_BLE_GAP_ADDR_SET, uint32_t, sd_ble_gap_addr_set(ble_gap_addr_t const *p_addr)); - - -/**@brief Get local Bluetooth identity address. - * - * @note This will always return the identity address irrespective of the privacy settings, - * i.e. the address type will always be either @ref BLE_GAP_ADDR_TYPE_PUBLIC or @ref BLE_GAP_ADDR_TYPE_RANDOM_STATIC. - * - * @param[out] p_addr Pointer to address structure to be filled in. - * - * @retval ::NRF_SUCCESS Address successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - */ -SVCALL(SD_BLE_GAP_ADDR_GET, uint32_t, sd_ble_gap_addr_get(ble_gap_addr_t *p_addr)); - - -/**@brief Set the active whitelist in the SoftDevice. - * - * @note Only one whitelist can be used at a time and the whitelist is shared between the BLE roles. - * The whitelist cannot be set if a BLE role is using the whitelist. - * - * @note If an address is resolved using the information in the device identity list, then the whitelist - * filter policy applies to the peer identity address and not the resolvable address sent on air. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @endmscs - * - * @param[in] pp_wl_addrs Pointer to a whitelist of peer addresses, if NULL the whitelist will be cleared. - * @param[in] len Length of the whitelist, maximum @ref BLE_GAP_WHITELIST_ADDR_MAX_COUNT. - * - * @retval ::NRF_SUCCESS The whitelist is successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The whitelist (or one of its entries) provided is invalid. - * @retval ::BLE_ERROR_GAP_WHITELIST_IN_USE The whitelist is in use by a BLE role and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given whitelist size is invalid (zero or too large); this can only return when - * pp_wl_addrs is not NULL. - */ -SVCALL(SD_BLE_GAP_WHITELIST_SET, uint32_t, sd_ble_gap_whitelist_set(ble_gap_addr_t const * const * pp_wl_addrs, uint8_t len)); - - -/**@brief Set device identity list. - * - * @note Only one device identity list can be used at a time and the list is shared between the BLE roles. - * The device identity list cannot be set if a BLE role is using the list. - * - * @param[in] pp_id_keys Pointer to an array of peer identity addresses and peer IRKs, if NULL the device identity list will be cleared. - * @param[in] pp_local_irks Pointer to an array of local IRKs. Each entry in the array maps to the entry in pp_id_keys at the same index. - * To fill in the list with the currently set device IRK for all peers, set to NULL. - * @param[in] len Length of the device identity list, maximum @ref BLE_GAP_DEVICE_IDENTITIES_MAX_COUNT. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_PRIVATE_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS The device identity list successfully set/cleared. - * @retval ::NRF_ERROR_INVALID_ADDR The device identity list (or one of its entries) provided is invalid. - * This code may be returned if the local IRK list also has an invalid entry. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_IN_USE The device identity list is in use and cannot be set or cleared. - * @retval ::BLE_ERROR_GAP_DEVICE_IDENTITIES_DUPLICATE The device identity list contains multiple entries with the same identity address. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_DATA_SIZE The given device identity list size invalid (zero or too large); this can - * only return when pp_id_keys is not NULL. - */ -SVCALL(SD_BLE_GAP_DEVICE_IDENTITIES_SET, uint32_t, sd_ble_gap_device_identities_set(ble_gap_id_key_t const * const * pp_id_keys, ble_gap_irk_t const * const * pp_local_irks, uint8_t len)); - - -/**@brief Set privacy settings. - * - * @note Privacy settings cannot be changed while advertising, scanning or creating a connection. - * - * @param[in] p_privacy_params Privacy settings. - * - * @mscs - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_SCAN_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Set successfully. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid address type is supplied. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer to privacy settings is NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - * @retval ::NRF_ERROR_INVALID_PARAM Out of range parameters are provided. - * @retval ::NRF_ERROR_INVALID_STATE Privacy settings cannot be changed while advertising, scanning - * or creating a connection. - */ -SVCALL(SD_BLE_GAP_PRIVACY_SET, uint32_t, sd_ble_gap_privacy_set(ble_gap_privacy_params_t const *p_privacy_params)); - - -/**@brief Get privacy settings. - * - * @note ::ble_gap_privacy_params_t::p_device_irk must be initialized to NULL or a valid address before this function is called. - * If it is initialized to a valid address, the address pointed to will contain the current device IRK on return. - * - * @param[in,out] p_privacy_params Privacy settings. - * - * @retval ::NRF_SUCCESS Privacy settings read. - * @retval ::NRF_ERROR_INVALID_ADDR The pointer given for returning the privacy settings may be NULL or invalid. - * Otherwise, the p_device_irk pointer in privacy parameter is an invalid pointer. - */ -SVCALL(SD_BLE_GAP_PRIVACY_GET, uint32_t, sd_ble_gap_privacy_get(ble_gap_privacy_params_t *p_privacy_params)); - - -/**@brief Configure an advertising set. Set, clear or update advertising and scan response data. - * - * @note The format of the advertising data will be checked by this call to ensure interoperability. - * Limitations imposed by this API call to the data provided include having a flags data type in the scan response data and - * duplicating the local name in the advertising data and scan response data. - * - * @note In order to update advertising data while advertising, new advertising buffers must be provided. - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in,out] p_adv_handle Provide a pointer to a handle containing @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to configure - * a new advertising set. On success, a new handle is then returned through the pointer. - * Provide a pointer to an existing advertising handle to configure an existing advertising set. - * @param[in] p_adv_data Advertising data. If set to NULL, no advertising data will be used. See @ref ble_gap_adv_data_t. - * @param[in] p_adv_params Advertising parameters. When this function is used to update advertising data while advertising, - * this parameter must be NULL. See @ref ble_gap_adv_params_t. - * - * @retval ::NRF_SUCCESS Advertising set successfully configured. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid advertising data configuration specified. See @ref ble_gap_adv_data_t. - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, - * see @ref sd_ble_gap_whitelist_set. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR ble_gap_adv_params_t::p_peer_addr is invalid. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * - It is invalid to provide non-NULL advertising set parameters while advertising. - * - It is invalid to provide the same data buffers while advertising. To update - * advertising data, provide new advertising buffers. - * @retval ::BLE_ERROR_GAP_DISCOVERABLE_WITH_WHITELIST Discoverable mode and whitelist incompatible. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE The provided advertising handle was not found. Use @ref BLE_GAP_ADV_SET_HANDLE_NOT_SET to - * configure a new advertising handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_FLAGS Invalid combination of advertising flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data type(s) supplied. Check the advertising data format specification - * given in Bluetooth Specification Version 5.0, Volume 3, Part C, Chapter 11. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid data length(s) supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported data length or advertising parameter configuration. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to configure a new advertising handle. Update an - * existing advertising handle instead. - * @retval ::BLE_ERROR_GAP_UUID_LIST_MISMATCH Invalid UUID list supplied. - */ -SVCALL(SD_BLE_GAP_ADV_SET_CONFIGURE, uint32_t, sd_ble_gap_adv_set_configure(uint8_t *p_adv_handle, ble_gap_adv_data_t const *p_adv_data, ble_gap_adv_params_t const *p_adv_params)); - - -/**@brief Start advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @note Only one advertiser may be active at any time. - * - * @events - * @event{@ref BLE_GAP_EVT_CONNECTED, Generated after connection has been established through connectable advertising.} - * @event{@ref BLE_GAP_EVT_ADV_SET_TERMINATED, Advertising set has terminated.} - * @event{@ref BLE_GAP_EVT_SCAN_REQ_REPORT, A scan request was received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_PRIVACY_ADV_DIR_PRIV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle Advertising handle to advertise on, received from @ref sd_ble_gap_adv_set_configure. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. For non-connectable - * advertising, this is ignored. - * - * @retval ::NRF_SUCCESS The BLE stack has started advertising. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. adv_handle is not configured or already advertising. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached; connectable advertiser cannot be started. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. Configure a new adveriting handle with @ref sd_ble_gap_adv_set_configure. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied: - * - Invalid configuration of p_adv_params. See @ref ble_gap_adv_params_t. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * @retval ::NRF_ERROR_RESOURCES Either: - * - adv_handle is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - * - Not enough BLE role slots available. - Stop one or more currently active roles (Central, Peripheral, Broadcaster or Observer) and try again. - * - p_adv_params is configured with connectable advertising, but the event_length parameter - * associated with conn_cfg_tag is too small to be able to establish a connection on - * the selected advertising phys. Use @ref sd_ble_cfg_set to increase the event length. - */ -SVCALL(SD_BLE_GAP_ADV_START, uint32_t, sd_ble_gap_adv_start(uint8_t adv_handle, uint8_t conn_cfg_tag)); - - -/**@brief Stop advertising (GAP Discoverable, Connectable modes, Broadcast Procedure). - * - * @mscs - * @mmsc{@ref BLE_GAP_ADV_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] adv_handle The advertising handle that should stop advertising. - * - * @retval ::NRF_SUCCESS The BLE stack has stopped advertising. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Invalid advertising handle. - * @retval ::NRF_ERROR_INVALID_STATE The advertising handle is not advertising. - */ -SVCALL(SD_BLE_GAP_ADV_STOP, uint32_t, sd_ble_gap_adv_stop(uint8_t adv_handle)); - - - -/**@brief Update connection parameters. - * - * @details In the central role this will initiate a Link Layer connection parameter update procedure, - * otherwise in the peripheral role, this will send the corresponding L2CAP request and wait for - * the central to perform the procedure. In both cases, and regardless of success or failure, the application - * will be informed of the result with a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE event. - * - * @details This function can be used as a central both to reply to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST or to start the procedure unrequested. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_PARAM_UPDATE, Result of the connection parameter update procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CPU_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CPU_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CPU_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_conn_params Pointer to desired connection parameters. If NULL is provided on a peripheral role, - * the parameters in the PPCP characteristic of the GAP service will be used instead. - * If NULL is provided on a central role and in response to a @ref BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST, the peripheral request will be rejected - * - * @retval ::NRF_SUCCESS The Connection Update procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_BUSY Procedure already in progress, wait for pending procedures to complete and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GAP_CONN_PARAM_UPDATE, uint32_t, sd_ble_gap_conn_param_update(uint16_t conn_handle, ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Disconnect (GAP Link Termination). - * - * @details This call initiates the disconnection procedure, and its completion will be communicated to the application - * with a @ref BLE_GAP_EVT_DISCONNECTED event. - * - * @events - * @event{@ref BLE_GAP_EVT_DISCONNECTED, Generated when disconnection procedure is complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CONN_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] hci_status_code HCI status code, see @ref BLE_HCI_STATUS_CODES (accepted values are @ref BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION and @ref BLE_HCI_CONN_INTERVAL_UNACCEPTABLE). - * - * @retval ::NRF_SUCCESS The disconnection procedure has been started successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation (disconnection is already in progress). - */ -SVCALL(SD_BLE_GAP_DISCONNECT, uint32_t, sd_ble_gap_disconnect(uint16_t conn_handle, uint8_t hci_status_code)); - - -/**@brief Set the radio's transmit power. - * - * @param[in] role The role to set the transmit power for, see @ref BLE_GAP_TX_POWER_ROLES for - * possible roles. - * @param[in] handle The handle parameter is interpreted depending on role: - * - If role is @ref BLE_GAP_TX_POWER_ROLE_CONN, this value is the specific connection handle. - * - If role is @ref BLE_GAP_TX_POWER_ROLE_ADV, the advertising set identified with the advertising handle, - * will use the specified transmit power, and include it in the advertising packet headers if - * @ref ble_gap_adv_properties_t::include_tx_power set. - * - For all other roles handle is ignored. - * @param[in] tx_power Radio transmit power in dBm (see note for accepted values). - * - * @note Supported tx_power values: -40dBm, -20dBm, -16dBm, -12dBm, -8dBm, -4dBm, 0dBm, +2dBm, +3dBm, +4dBm, +5dBm, +6dBm, +7dBm and +8dBm. - * @note The initiator will have the same transmit power as the scanner. - * @note When a connection is created it will inherit the transmit power from the initiator or - * advertiser leading to the connection. - * - * @retval ::NRF_SUCCESS Successfully changed the transmit power. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ADV_HANDLE Advertising handle not found. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_TX_POWER_SET, uint32_t, sd_ble_gap_tx_power_set(uint8_t role, uint16_t handle, int8_t tx_power)); - - -/**@brief Set GAP Appearance value. - * - * @param[in] appearance Appearance (16-bit), see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value set successfully. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_SET, uint32_t, sd_ble_gap_appearance_set(uint16_t appearance)); - - -/**@brief Get GAP Appearance value. - * - * @param[out] p_appearance Pointer to appearance (16-bit) to be filled in, see @ref BLE_APPEARANCES. - * - * @retval ::NRF_SUCCESS Appearance value retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_APPEARANCE_GET, uint32_t, sd_ble_gap_appearance_get(uint16_t *p_appearance)); - - -/**@brief Set GAP Peripheral Preferred Connection Parameters. - * - * @param[in] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure with the desired parameters. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_SET, uint32_t, sd_ble_gap_ppcp_set(ble_gap_conn_params_t const *p_conn_params)); - - -/**@brief Get GAP Peripheral Preferred Connection Parameters. - * - * @param[out] p_conn_params Pointer to a @ref ble_gap_conn_params_t structure where the parameters will be stored. - * - * @retval ::NRF_SUCCESS Peripheral Preferred Connection Parameters retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GAP_PPCP_GET, uint32_t, sd_ble_gap_ppcp_get(ble_gap_conn_params_t *p_conn_params)); - - -/**@brief Set GAP device name. - * - * @note If the device name is located in application flash memory (see @ref ble_gap_cfg_device_name_t), - * it cannot be changed. Then @ref NRF_ERROR_FORBIDDEN will be returned. - * - * @param[in] p_write_perm Write permissions for the Device Name characteristic, see @ref ble_gap_conn_sec_mode_t. - * @param[in] p_dev_name Pointer to a UTF-8 encoded, non NULL-terminated string. - * @param[in] len Length of the UTF-8, non NULL-terminated string pointed to by p_dev_name in octets (must be smaller or equal than @ref BLE_GAP_DEVNAME_MAX_LEN). - * - * @retval ::NRF_SUCCESS GAP device name and permissions set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_FORBIDDEN Device name is not writable. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_SET, uint32_t, sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_t const *p_write_perm, uint8_t const *p_dev_name, uint16_t len)); - - -/**@brief Get GAP device name. - * - * @note If the device name is longer than the size of the supplied buffer, - * p_len will return the complete device name length, - * and not the number of bytes actually returned in p_dev_name. - * The application may use this information to allocate a suitable buffer size. - * - * @param[out] p_dev_name Pointer to an empty buffer where the UTF-8 non NULL-terminated string will be placed. Set to NULL to obtain the complete device name length. - * @param[in,out] p_len Length of the buffer pointed by p_dev_name, complete device name length on output. - * - * @retval ::NRF_SUCCESS GAP device name retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - */ -SVCALL(SD_BLE_GAP_DEVICE_NAME_GET, uint32_t, sd_ble_gap_device_name_get(uint8_t *p_dev_name, uint16_t *p_len)); - - -/**@brief Initiate the GAP Authentication procedure. - * - * @details In the central role, this function will send an SMP Pairing Request (or an SMP Pairing Failed if rejected), - * otherwise in the peripheral role, an SMP Security Request will be sent. - * - * @events - * @event{Depending on the security parameters set and the packet exchanges with the peer\, the following events may be generated:} - * @event{@ref BLE_GAP_EVT_SEC_PARAMS_REQUEST} - * @event{@ref BLE_GAP_EVT_SEC_INFO_REQUEST} - * @event{@ref BLE_GAP_EVT_PASSKEY_DISPLAY} - * @event{@ref BLE_GAP_EVT_KEY_PRESSED} - * @event{@ref BLE_GAP_EVT_AUTH_KEY_REQUEST} - * @event{@ref BLE_GAP_EVT_LESC_DHKEY_REQUEST} - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE} - * @event{@ref BLE_GAP_EVT_AUTH_STATUS} - * @event{@ref BLE_GAP_EVT_TIMEOUT} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sec_params Pointer to the @ref ble_gap_sec_params_t structure with the security parameters to be used during the pairing or bonding procedure. - * In the peripheral role, only the bond, mitm, lesc and keypress fields of this structure are used. - * In the central role, this pointer may be NULL to reject a Security Request. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NO_MEM The maximum number of authentication procedures that can run in parallel for the given role is reached. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - * @retval ::NRF_ERROR_TIMEOUT A SMP timeout has occurred, and further SMP operations on this link is prohibited. - */ -SVCALL(SD_BLE_GAP_AUTHENTICATE, uint32_t, sd_ble_gap_authenticate(uint16_t conn_handle, ble_gap_sec_params_t const *p_sec_params)); - - -/**@brief Reply with GAP security parameters. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_CONFIRM_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_KS_TOO_SMALL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_APP_ERROR_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_REMOTE_PAIRING_FAIL_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_PAIRING_TIMEOUT_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] sec_status Security status, see @ref BLE_GAP_SEC_STATUS. - * @param[in] p_sec_params Pointer to a @ref ble_gap_sec_params_t security parameters structure. In the central role this must be set to NULL, as the parameters have - * already been provided during a previous call to @ref sd_ble_gap_authenticate. - * @param[in,out] p_sec_keyset Pointer to a @ref ble_gap_sec_keyset_t security keyset structure. Any keys generated and/or distributed as a result of the ongoing security procedure - * will be stored into the memory referenced by the pointers inside this structure. The keys will be stored and available to the application - * upon reception of a @ref BLE_GAP_EVT_AUTH_STATUS event. - * Note that the SoftDevice expects the application to provide memory for storing the - * peer's keys. So it must be ensured that the relevant pointers inside this structure are not NULL. The pointers to the local key - * can, however, be NULL, in which case, the local key data will not be available to the application upon reception of the - * @ref BLE_GAP_EVT_AUTH_STATUS event. - * - * @retval ::NRF_SUCCESS Successfully accepted security parameter from the application. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED Setting of sign or link fields in @ref ble_gap_sec_kdist_t not supported. - */ -SVCALL(SD_BLE_GAP_SEC_PARAMS_REPLY, uint32_t, sd_ble_gap_sec_params_reply(uint16_t conn_handle, uint8_t sec_status, ble_gap_sec_params_t const *p_sec_params, ble_gap_sec_keyset_t const *p_sec_keyset)); - - -/**@brief Reply with an authentication key. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_AUTH_KEY_REQUEST or a @ref BLE_GAP_EVT_PASSKEY_DISPLAY, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_PK_CENTRAL_OOB_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_BONDING_PK_PERIPH_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] key_type See @ref BLE_GAP_AUTH_KEY_TYPES. - * @param[in] p_key If key type is @ref BLE_GAP_AUTH_KEY_TYPE_NONE, then NULL. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_PASSKEY, then a 6-byte ASCII string (digit 0..9 only, no NULL termination) - * or NULL when confirming LE Secure Connections Numeric Comparison. - * If key type is @ref BLE_GAP_AUTH_KEY_TYPE_OOB, then a 16-byte OOB key value in little-endian format. - * - * @retval ::NRF_SUCCESS Authentication key successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t conn_handle, uint8_t key_type, uint8_t const *p_key)); - - -/**@brief Reply with an LE Secure connections DHKey. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST, calling it at other times will result in an @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_PAIRING_JW_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_NC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_PD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dhkey LE Secure Connections DHKey. - * - * @retval ::NRF_SUCCESS DHKey successfully set. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_DHKEY_REPLY, uint32_t, sd_ble_gap_lesc_dhkey_reply(uint16_t conn_handle, ble_gap_lesc_dhkey_t const *p_dhkey)); - - -/**@brief Notify the peer of a local keypress. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_PKE_CD_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_PKE_CD_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] kp_not See @ref BLE_GAP_KP_NOT_TYPES. - * - * @retval ::NRF_SUCCESS Keypress notification successfully queued for transmission. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either not entering a passkey or keypresses have not been enabled by both peers. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy. Retry at later time. - */ -SVCALL(SD_BLE_GAP_KEYPRESS_NOTIFY, uint32_t, sd_ble_gap_keypress_notify(uint16_t conn_handle, uint8_t kp_not)); - - -/**@brief Generate a set of OOB data to send to a peer out of band. - * - * @note The @ref ble_gap_addr_t included in the OOB data returned will be the currently active one (or, if a connection has already been established, - * the one used during connection setup). The application may manually overwrite it with an updated value. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Can be @ref BLE_CONN_HANDLE_INVALID if a BLE connection has not been established yet. - * @param[in] p_pk_own LE Secure Connections local P-256 Public Key. - * @param[out] p_oobd_own The OOB data to be sent out of band to a peer. - * - * @retval ::NRF_SUCCESS OOB data successfully generated. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_GET, uint32_t, sd_ble_gap_lesc_oob_data_get(uint16_t conn_handle, ble_gap_lesc_p256_pk_t const *p_pk_own, ble_gap_lesc_oob_data_t *p_oobd_own)); - -/**@brief Provide the OOB data sent/received out of band. - * - * @note An authentication procedure with OOB selected as an algorithm must be in progress when calling this function. - * @note A @ref BLE_GAP_EVT_LESC_DHKEY_REQUEST event with the oobd_req set to 1 must have been received prior to calling this function. - * - * @events - * @event{This function is used during authentication procedures\, see the list of events in the documentation of @ref sd_ble_gap_authenticate.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_LESC_BONDING_OOB_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_LESC_BONDING_OOB_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_oobd_own The OOB data sent out of band to a peer or NULL if the peer has not received OOB data. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref BLE_GAP_EVT_SEC_PARAMS_REQUEST. - * @param[in] p_oobd_peer The OOB data received out of band from a peer or NULL if none received. - * Must correspond to @ref ble_gap_sec_params_t::oob flag in @ref sd_ble_gap_authenticate in the central role - * or @ref sd_ble_gap_sec_params_reply in the peripheral role. - * - * @retval ::NRF_SUCCESS OOB data accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_LESC_OOB_DATA_SET, uint32_t, sd_ble_gap_lesc_oob_data_set(uint16_t conn_handle, ble_gap_lesc_oob_data_t const *p_oobd_own, ble_gap_lesc_oob_data_t const *p_oobd_peer)); - - -/**@brief Initiate GAP Encryption procedure. - * - * @details In the central role, this function will initiate the encryption procedure using the encryption information provided. - * - * @events - * @event{@ref BLE_GAP_EVT_CONN_SEC_UPDATE, The connection security has been updated.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_AUTH_MUTEX_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_ENC_MSC} - * @mmsc{@ref BLE_GAP_MULTILINK_CTRL_PROC_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_SEC_REQ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_master_id Pointer to a @ref ble_gap_master_id_t master identification structure. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. - * - * @retval ::NRF_SUCCESS Successfully initiated authentication procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::BLE_ERROR_INVALID_ROLE Operation is not supported in the Peripheral role. - * @retval ::NRF_ERROR_BUSY Procedure already in progress or not allowed at this time, wait for pending procedures to complete and retry. - */ -SVCALL(SD_BLE_GAP_ENCRYPT, uint32_t, sd_ble_gap_encrypt(uint16_t conn_handle, ble_gap_master_id_t const *p_master_id, ble_gap_enc_info_t const *p_enc_info)); - - -/**@brief Reply with GAP security information. - * - * @details This function is only used to reply to a @ref BLE_GAP_EVT_SEC_INFO_REQUEST, calling it at other times will result in @ref NRF_ERROR_INVALID_STATE. - * @note If the call returns an error code, the request is still pending, and the reply call may be repeated with corrected parameters. - * @note Data signing is not yet supported, and p_sign_info must therefore be NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_ENC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_enc_info Pointer to a @ref ble_gap_enc_info_t encryption information structure. May be NULL to signal none is available. - * @param[in] p_id_info Pointer to a @ref ble_gap_irk_t identity information structure. May be NULL to signal none is available. - * @param[in] p_sign_info Pointer to a @ref ble_gap_sign_info_t signing information structure. May be NULL to signal none is available. - * - * @retval ::NRF_SUCCESS Successfully accepted security information. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const *p_enc_info, ble_gap_irk_t const *p_id_info, ble_gap_sign_info_t const *p_sign_info)); - - -/**@brief Get the current connection security. - * - * @param[in] conn_handle Connection handle. - * @param[out] p_conn_sec Pointer to a @ref ble_gap_conn_sec_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Current connection security successfully retrieved. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_CONN_SEC_GET, uint32_t, sd_ble_gap_conn_sec_get(uint16_t conn_handle, ble_gap_conn_sec_t *p_conn_sec)); - - -/**@brief Start reporting the received signal strength to the application. - * - * A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called. - * - * @events - * @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is - * dependent on the settings of the threshold_dbm - * and skip_count input parameters.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID. - * @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event. - * - * @retval ::NRF_SUCCESS Successfully activated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count)); - - -/**@brief Stop reporting the received signal strength. - * - * @note An RSSI change detected before the call but not yet received by the application - * may be reported after @ref sd_ble_gap_rssi_stop has been called. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @mmsc{@ref BLE_GAP_RSSI_FILT_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * - * @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - */ -SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle)); - - -/**@brief Get the received signal strength for the last connection event. - * - * @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND - * will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start. - * @note ERRATA-153 requires the rssi sample to be compensated based on a temperature measurement. - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored. - * @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored. - * - * @retval ::NRF_SUCCESS Successfully read the RSSI. - * @retval ::NRF_ERROR_NOT_FOUND No sample is available. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing. - */ -SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index)); - - -/**@brief Start or continue scanning (GAP Discovery procedure, Observer Procedure). - * - * @note A call to this function will require the application to keep the memory pointed by - * p_adv_report_buffer alive until the buffer is released. The buffer is released when the scanner is stopped - * or when this function is called with another buffer. - * - * @note The scanner will automatically stop in the following cases: - * - @ref sd_ble_gap_scan_stop is called. - * - @ref sd_ble_gap_connect is called. - * - A @ref BLE_GAP_EVT_TIMEOUT with source set to @ref BLE_GAP_TIMEOUT_SRC_SCAN is received. - * - When a @ref BLE_GAP_EVT_ADV_REPORT event is received and @ref ble_gap_adv_report_type_t::status is not set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. In this case scanning is only paused to let the application - * access received data. The application must call this function to continue scanning, or call @ref sd_ble_gap_scan_stop - * to stop scanning. - * - * @note If a @ref BLE_GAP_EVT_ADV_REPORT event is received with @ref ble_gap_adv_report_type_t::status set to - * @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the scanner will continue scanning, and the application will - * receive more reports from this advertising event. The following reports will include the old and new received data. - * The application can stop the scanner from receiving more packets from this advertising event by calling this function. - * This might be useful when receiving data from extended advertising events where @ref ble_gap_evt_adv_report_t::aux_pointer - * is large. - * - * @events - * @event{@ref BLE_GAP_EVT_ADV_REPORT, An advertising or scan response packet has been received.} - * @event{@ref BLE_GAP_EVT_TIMEOUT, Scanner has timed out.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @param[in] p_scan_params Pointer to scan parameters structure. When this function is used to continue - * scanning, this parameter must be NULL. - * @param[in] p_adv_report_buffer Pointer to buffer used to store incoming advertising data. - * The memory pointed to should be kept alive until the scanning is stopped. - * See @ref BLE_GAP_SCAN_BUFFER_SIZE for minimum and maximum buffer size. - * If the scanner receives advertising data larger than can be stored in the buffer, - * a @ref BLE_GAP_EVT_ADV_REPORT will be raised with @ref ble_gap_adv_report_type_t::status - * set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_TRUNCATED. - * - * @retval ::NRF_SUCCESS Successfully initiated scanning procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Either: - * - Scanning is already ongoing and p_scan_params was not NULL - * - Scanning is not running and p_scan_params was NULL. - * - The scanner has timed out when this function is called to continue scanning. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_NOT_SUPPORTED Unsupported parameters supplied. See @ref ble_gap_scan_params_t. - * @retval ::NRF_ERROR_INVALID_LENGTH The provided buffer length is invalid. See @ref BLE_GAP_SCAN_BUFFER_MIN. - * @retval ::NRF_ERROR_RESOURCES Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Broadcaster) and try again - */ -SVCALL(SD_BLE_GAP_SCAN_START, uint32_t, sd_ble_gap_scan_start(ble_gap_scan_params_t const *p_scan_params, ble_data_t const * p_adv_report_buffer)); - - -/**@brief Stop scanning (GAP Discovery procedure, Observer Procedure). - * - * @note The buffer provided in @ref sd_ble_gap_scan_start is released. - * - * @mscs - * @mmsc{@ref BLE_GAP_SCAN_MSC} - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully stopped scanning procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. Not in the scanning state. - */ -SVCALL(SD_BLE_GAP_SCAN_STOP, uint32_t, sd_ble_gap_scan_stop(void)); - - -/**@brief Create a connection (GAP Link Establishment). - * - * @note If a scanning procedure is currently in progress it will be automatically stopped when calling this function. - * The scanning procedure will be stopped even if the function returns an error. - * - * @mscs - * @mmsc{@ref BLE_GAP_WL_SHARE_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_PRIV_MSC} - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @param[in] p_peer_addr Pointer to peer identity address. If @ref ble_gap_scan_params_t::filter_policy is set to use - * whitelist, then p_peer_addr is ignored. - * @param[in] p_scan_params Pointer to scan parameters structure. - * @param[in] p_conn_params Pointer to desired connection parameters. - * @param[in] conn_cfg_tag Tag identifying a configuration set by @ref sd_ble_cfg_set or - * @ref BLE_CONN_CFG_TAG_DEFAULT to use the default connection configuration. - * - * @retval ::NRF_SUCCESS Successfully initiated connection procedure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid parameter(s) pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * - Invalid parameter(s) in p_scan_params or p_conn_params. - * - Use of whitelist requested but whitelist has not been set, see @ref sd_ble_gap_whitelist_set. - * - Peer address was not present in the device identity list, see @ref sd_ble_gap_device_identities_set. - * @retval ::NRF_ERROR_NOT_FOUND conn_cfg_tag not found. - * @retval ::NRF_ERROR_INVALID_STATE The SoftDevice is in an invalid state to perform this operation. This may be due to an - * existing locally initiated connect procedure, which must complete before initiating again. - * @retval ::BLE_ERROR_GAP_INVALID_BLE_ADDR Invalid Peer address. - * @retval ::NRF_ERROR_CONN_COUNT The limit of available connections has been reached. - * @retval ::NRF_ERROR_RESOURCES Either: - * - Not enough BLE role slots available. - * Stop one or more currently active roles (Central, Peripheral or Observer) and try again. - * - The event_length parameter associated with conn_cfg_tag is too small to be able to - * establish a connection on the selected @ref ble_gap_scan_params_t::scan_phys. - * Use @ref sd_ble_cfg_set to increase the event length. - */ -SVCALL(SD_BLE_GAP_CONNECT, uint32_t, sd_ble_gap_connect(ble_gap_addr_t const *p_peer_addr, ble_gap_scan_params_t const *p_scan_params, ble_gap_conn_params_t const *p_conn_params, uint8_t conn_cfg_tag)); - - -/**@brief Cancel a connection establishment. - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_CONN_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully canceled an ongoing connection procedure. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - */ -SVCALL(SD_BLE_GAP_CONNECT_CANCEL, uint32_t, sd_ble_gap_connect_cancel(void)); - - -/**@brief Initiate or respond to a PHY Update Procedure - * - * @details This function is used to initiate or respond to a PHY Update Procedure. It will always - * generate a @ref BLE_GAP_EVT_PHY_UPDATE event if successfully executed. - * If this function is used to initiate a PHY Update procedure and the only option - * provided in @ref ble_gap_phys_t::tx_phys and @ref ble_gap_phys_t::rx_phys is the - * currently active PHYs in the respective directions, the SoftDevice will generate a - * @ref BLE_GAP_EVT_PHY_UPDATE with the current PHYs set and will not initiate the - * procedure in the Link Layer. - * - * If @ref ble_gap_phys_t::tx_phys or @ref ble_gap_phys_t::rx_phys is @ref BLE_GAP_PHY_AUTO, - * then the stack will select PHYs based on the peer's PHY preferences and the local link - * configuration. The PHY Update procedure will for this case result in a PHY combination - * that respects the time constraints configured with @ref sd_ble_cfg_set and the current - * link layer data length. - * - * When acting as a central, the SoftDevice will select the fastest common PHY in each direction. - * - * If the peer does not support the PHY Update Procedure, then the resulting - * @ref BLE_GAP_EVT_PHY_UPDATE event will have a status set to - * @ref BLE_HCI_UNSUPPORTED_REMOTE_FEATURE. - * - * If the PHY procedure was rejected by the peer due to a procedure collision, the status - * will be @ref BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION or - * @ref BLE_HCI_DIFFERENT_TRANSACTION_COLLISION. - * If the peer responds to the PHY Update procedure with invalid parameters, the status - * will be @ref BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS. - * If the PHY procedure was rejected by the peer for a different reason, the status will - * contain the reason as specified by the peer. - * - * @note @ref BLE_GAP_PHY_CODED is only supported as an experimental feature in this SoftDevice. - * When this function is used to reply to a PHY Update, depending on the peers preferences, - * @ref BLE_GAP_PHY_AUTO might result in the PHY to be changed to @ref BLE_GAP_PHY_CODED. - * - * @events - * @event{@ref BLE_GAP_EVT_PHY_UPDATE, Result of the PHY Update Procedure.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GAP_CENTRAL_PHY_UPDATE} - * @mmsc{@ref BLE_GAP_PERIPHERAL_PHY_UPDATE} - * @endmscs - * - * @param[in] conn_handle Connection handle to indicate the connection for which the PHY Update is requested. - * @param[in] p_gap_phys Pointer to PHY structure. - * - * @retval ::NRF_SUCCESS Successfully requested a PHY Update. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the combination of - * @ref ble_gap_phys_t::tx_phys, @ref ble_gap_phys_t::rx_phys, and @ref ble_gap_data_length_params_t. - * The connection event length is configured with @ref BLE_CONN_CFG_GAP using @ref sd_ble_cfg_set. - * @retval ::NRF_ERROR_BUSY Procedure is already in progress or not allowed at this time. Process pending events and wait for the pending procedure to complete and retry. - * - */ -SVCALL(SD_BLE_GAP_PHY_UPDATE, uint32_t, sd_ble_gap_phy_update(uint16_t conn_handle, ble_gap_phys_t const *p_gap_phys)); - - -/**@brief Initiate or respond to a Data Length Update Procedure. - * - * @note If the application uses @ref BLE_GAP_DATA_LENGTH_AUTO for one or more members of - * p_dl_params, the SoftDevice will choose the highest value supported in current - * configuration and connection parameters. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_dl_params Pointer to local parameters to be used in Data Length Update - * Procedure. Set any member to @ref BLE_GAP_DATA_LENGTH_AUTO to let - * the SoftDevice automatically decide the value for that member. - * Set to NULL to use automatic values for all members. - * @param[out] p_dl_limitation Pointer to limitation to be written when local device does not - * have enough resources or does not support the requested Data Length - * Update parameters. Ignored if NULL. - * - * @mscs - * @mmsc{@ref BLE_GAP_DATA_LENGTH_UPDATE_PROCEDURE_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully set Data Length Extension initiation/response parameters. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle parameter supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. - * @retval ::NRF_ERROR_NOT_SUPPORTED The requested parameters are not supported by the SoftDevice. Inspect - * p_dl_limitation to see which parameter is not supported. - * @retval ::NRF_ERROR_RESOURCES The connection event length configured for this link is not sufficient for the requested parameters. - * Use @ref sd_ble_cfg_set with @ref BLE_CONN_CFG_GAP to increase the connection event length. - * Inspect p_dl_limitation to see where the limitation is. - * @retval ::NRF_ERROR_BUSY Peer has already initiated a Data Length Update Procedure. Process the - * pending @ref BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST event to respond. - */ -SVCALL(SD_BLE_GAP_DATA_LENGTH_UPDATE, uint32_t, sd_ble_gap_data_length_update(uint16_t conn_handle, ble_gap_data_length_params_t const *p_dl_params, ble_gap_data_length_limitation_t *p_dl_limitation)); - -/**@brief Start the Quality of Service (QoS) channel survey module. - * - * @details The channel survey module provides measurements of the energy levels on - * the Bluetooth Low Energy channels. When the module is enabled, @ref BLE_GAP_EVT_QOS_CHANNEL_SURVEY_REPORT - * events will periodically report the measured energy levels for each channel. - * - * @note The measurements are scheduled with lower priority than other Bluetooth Low Energy roles, - * Radio Timeslot API events and Flash API events. - * - * @note The channel survey module will attempt to do measurements so that the average interval - * between measurements will be interval_us. However due to the channel survey module - * having the lowest priority of all roles and modules, this may not be possible. In that - * case fewer than expected channel survey reports may be given. - * - * @note In order to use the channel survey module, @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available - * must be set. This is done using @ref sd_ble_cfg_set. - * - * @param[in] interval_us Requested average interval for the measurements and reports. See - * @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVALS for valid ranges. If set - * to @ref BLE_GAP_QOS_CHANNEL_SURVEY_INTERVAL_CONTINUOUS, the channel - * survey role will be scheduled at every available opportunity. - * - * @retval ::NRF_SUCCESS The module is successfully started. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter supplied. interval_us is out of the - * allowed range. - * @retval ::NRF_ERROR_INVALID_STATE Trying to start the module when already running. - * @retval ::NRF_ERROR_RESOURCES The channel survey module is not available to the application. - * Set @ref ble_gap_cfg_role_count_t::qos_channel_survey_role_available using - * @ref sd_ble_cfg_set. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_START, uint32_t, sd_ble_gap_qos_channel_survey_start(uint32_t interval_us)); - -/**@brief Stop the Quality of Service (QoS) channel survey module. - * - * @retval ::NRF_SUCCESS The module is successfully stopped. - * @retval ::NRF_ERROR_INVALID_STATE Trying to stop the module when it is not running. - */ -SVCALL(SD_BLE_GAP_QOS_CHANNEL_SURVEY_STOP, uint32_t, sd_ble_gap_qos_channel_survey_stop(void)); - - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatt.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatt.h deleted file mode 100644 index 98a7a150bf..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatt.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2013 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATT Generic Attribute Profile (GATT) Common - @{ - @brief Common definitions and prototypes for the GATT interfaces. - */ - -#ifndef BLE_GATT_H__ -#define BLE_GATT_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATT_DEFINES Defines - * @{ */ - -/** @brief Default ATT MTU, in bytes. */ -#define BLE_GATT_ATT_MTU_DEFAULT 23 - -/**@brief Invalid Attribute Handle. */ -#define BLE_GATT_HANDLE_INVALID 0x0000 - -/**@brief First Attribute Handle. */ -#define BLE_GATT_HANDLE_START 0x0001 - -/**@brief Last Attribute Handle. */ -#define BLE_GATT_HANDLE_END 0xFFFF - -/** @defgroup BLE_GATT_TIMEOUT_SOURCES GATT Timeout sources - * @{ */ -#define BLE_GATT_TIMEOUT_SRC_PROTOCOL 0x00 /**< ATT Protocol timeout. */ -/** @} */ - -/** @defgroup BLE_GATT_WRITE_OPS GATT Write operations - * @{ */ -#define BLE_GATT_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATT_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATT_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATT_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATT_OP_EXEC_WRITE_REQ 0x05 /**< Execute Write Request. */ -/** @} */ - -/** @defgroup BLE_GATT_EXEC_WRITE_FLAGS GATT Execute Write flags - * @{ */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_CANCEL 0x00 /**< Cancel prepared write. */ -#define BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE 0x01 /**< Execute prepared write. */ -/** @} */ - -/** @defgroup BLE_GATT_HVX_TYPES GATT Handle Value operations - * @{ */ -#define BLE_GATT_HVX_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATT_HVX_NOTIFICATION 0x01 /**< Handle Value Notification. */ -#define BLE_GATT_HVX_INDICATION 0x02 /**< Handle Value Indication. */ -/** @} */ - -/** @defgroup BLE_GATT_STATUS_CODES GATT Status Codes - * @{ */ -#define BLE_GATT_STATUS_SUCCESS 0x0000 /**< Success. */ -#define BLE_GATT_STATUS_UNKNOWN 0x0001 /**< Unknown or not applicable status. */ -#define BLE_GATT_STATUS_ATTERR_INVALID 0x0100 /**< ATT Error: Invalid Error Code. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_HANDLE 0x0101 /**< ATT Error: Invalid Attribute Handle. */ -#define BLE_GATT_STATUS_ATTERR_READ_NOT_PERMITTED 0x0102 /**< ATT Error: Read not permitted. */ -#define BLE_GATT_STATUS_ATTERR_WRITE_NOT_PERMITTED 0x0103 /**< ATT Error: Write not permitted. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_PDU 0x0104 /**< ATT Error: Used in ATT as Invalid PDU. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHENTICATION 0x0105 /**< ATT Error: Authenticated link required. */ -#define BLE_GATT_STATUS_ATTERR_REQUEST_NOT_SUPPORTED 0x0106 /**< ATT Error: Used in ATT as Request Not Supported. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_OFFSET 0x0107 /**< ATT Error: Offset specified was past the end of the attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_AUTHORIZATION 0x0108 /**< ATT Error: Used in ATT as Insufficient Authorization. */ -#define BLE_GATT_STATUS_ATTERR_PREPARE_QUEUE_FULL 0x0109 /**< ATT Error: Used in ATT as Prepare Queue Full. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND 0x010A /**< ATT Error: Used in ATT as Attribute not found. */ -#define BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_LONG 0x010B /**< ATT Error: Attribute cannot be read or written using read/write blob requests. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENC_KEY_SIZE 0x010C /**< ATT Error: Encryption key size used is insufficient. */ -#define BLE_GATT_STATUS_ATTERR_INVALID_ATT_VAL_LENGTH 0x010D /**< ATT Error: Invalid value size. */ -#define BLE_GATT_STATUS_ATTERR_UNLIKELY_ERROR 0x010E /**< ATT Error: Very unlikely error. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_ENCRYPTION 0x010F /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_UNSUPPORTED_GROUP_TYPE 0x0110 /**< ATT Error: Attribute type is not a supported grouping attribute. */ -#define BLE_GATT_STATUS_ATTERR_INSUF_RESOURCES 0x0111 /**< ATT Error: Encrypted link required. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_BEGIN 0x0112 /**< ATT Error: Reserved for Future Use range #1 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE1_END 0x017F /**< ATT Error: Reserved for Future Use range #1 end. */ -#define BLE_GATT_STATUS_ATTERR_APP_BEGIN 0x0180 /**< ATT Error: Application range begin. */ -#define BLE_GATT_STATUS_ATTERR_APP_END 0x019F /**< ATT Error: Application range end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_BEGIN 0x01A0 /**< ATT Error: Reserved for Future Use range #2 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE2_END 0x01DF /**< ATT Error: Reserved for Future Use range #2 end. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_BEGIN 0x01E0 /**< ATT Error: Reserved for Future Use range #3 begin. */ -#define BLE_GATT_STATUS_ATTERR_RFU_RANGE3_END 0x01FC /**< ATT Error: Reserved for Future Use range #3 end. */ -#define BLE_GATT_STATUS_ATTERR_CPS_CCCD_CONFIG_ERROR 0x01FD /**< ATT Common Profile and Service Error: Client Characteristic Configuration Descriptor improperly configured. */ -#define BLE_GATT_STATUS_ATTERR_CPS_PROC_ALR_IN_PROG 0x01FE /**< ATT Common Profile and Service Error: Procedure Already in Progress. */ -#define BLE_GATT_STATUS_ATTERR_CPS_OUT_OF_RANGE 0x01FF /**< ATT Common Profile and Service Error: Out Of Range. */ -/** @} */ - - -/** @defgroup BLE_GATT_CPF_FORMATS Characteristic Presentation Formats - * @note Found at http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.gatt.characteristic_presentation_format.xml - * @{ */ -#define BLE_GATT_CPF_FORMAT_RFU 0x00 /**< Reserved For Future Use. */ -#define BLE_GATT_CPF_FORMAT_BOOLEAN 0x01 /**< Boolean. */ -#define BLE_GATT_CPF_FORMAT_2BIT 0x02 /**< Unsigned 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_NIBBLE 0x03 /**< Unsigned 4-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT8 0x04 /**< Unsigned 8-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT12 0x05 /**< Unsigned 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT16 0x06 /**< Unsigned 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT24 0x07 /**< Unsigned 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT32 0x08 /**< Unsigned 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT48 0x09 /**< Unsigned 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT64 0x0A /**< Unsigned 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_UINT128 0x0B /**< Unsigned 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT8 0x0C /**< Signed 2-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT12 0x0D /**< Signed 12-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT16 0x0E /**< Signed 16-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT24 0x0F /**< Signed 24-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT32 0x10 /**< Signed 32-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT48 0x11 /**< Signed 48-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT64 0x12 /**< Signed 64-bit integer. */ -#define BLE_GATT_CPF_FORMAT_SINT128 0x13 /**< Signed 128-bit integer. */ -#define BLE_GATT_CPF_FORMAT_FLOAT32 0x14 /**< IEEE-754 32-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_FLOAT64 0x15 /**< IEEE-754 64-bit floating point. */ -#define BLE_GATT_CPF_FORMAT_SFLOAT 0x16 /**< IEEE-11073 16-bit SFLOAT. */ -#define BLE_GATT_CPF_FORMAT_FLOAT 0x17 /**< IEEE-11073 32-bit FLOAT. */ -#define BLE_GATT_CPF_FORMAT_DUINT16 0x18 /**< IEEE-20601 format. */ -#define BLE_GATT_CPF_FORMAT_UTF8S 0x19 /**< UTF-8 string. */ -#define BLE_GATT_CPF_FORMAT_UTF16S 0x1A /**< UTF-16 string. */ -#define BLE_GATT_CPF_FORMAT_STRUCT 0x1B /**< Opaque Structure. */ -/** @} */ - -/** @defgroup BLE_GATT_CPF_NAMESPACES GATT Bluetooth Namespaces - * @{ - */ -#define BLE_GATT_CPF_NAMESPACE_BTSIG 0x01 /**< Bluetooth SIG defined Namespace. */ -#define BLE_GATT_CPF_NAMESPACE_DESCRIPTION_UNKNOWN 0x0000 /**< Namespace Description Unknown. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATT_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATT connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM att_mtu is smaller than @ref BLE_GATT_ATT_MTU_DEFAULT. - */ -typedef struct -{ - uint16_t att_mtu; /**< Maximum size of ATT packet the SoftDevice can send or receive. - The default and minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - @mscs - @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - @endmscs - */ -} ble_gatt_conn_cfg_t; - -/**@brief GATT Characteristic Properties. */ -typedef struct -{ - /* Standard properties */ - uint8_t broadcast :1; /**< Broadcasting of the value permitted. */ - uint8_t read :1; /**< Reading the value permitted. */ - uint8_t write_wo_resp :1; /**< Writing the value with Write Command permitted. */ - uint8_t write :1; /**< Writing the value with Write Request permitted. */ - uint8_t notify :1; /**< Notification of the value permitted. */ - uint8_t indicate :1; /**< Indications of the value permitted. */ - uint8_t auth_signed_wr :1; /**< Writing the value with Signed Write Command permitted. */ -} ble_gatt_char_props_t; - -/**@brief GATT Characteristic Extended Properties. */ -typedef struct -{ - /* Extended properties */ - uint8_t reliable_wr :1; /**< Writing the value with Queued Write operations permitted. */ - uint8_t wr_aux :1; /**< Writing the Characteristic User Description descriptor permitted. */ -} ble_gatt_char_ext_props_t; - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATT_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gattc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gattc.h deleted file mode 100644 index 7fb3920244..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gattc.h +++ /dev/null @@ -1,715 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTC Generic Attribute Profile (GATT) Client - @{ - @brief Definitions and prototypes for the GATT Client interface. - */ - -#ifndef BLE_GATTC_H__ -#define BLE_GATTC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTC_ENUMERATIONS Enumerations - * @{ */ - -/**@brief GATTC API SVC numbers. */ -enum BLE_GATTC_SVCS -{ - SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER = BLE_GATTC_SVC_BASE, /**< Primary Service Discovery. */ - SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, /**< Relationship Discovery. */ - SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, /**< Characteristic Discovery. */ - SD_BLE_GATTC_DESCRIPTORS_DISCOVER, /**< Characteristic Descriptor Discovery. */ - SD_BLE_GATTC_ATTR_INFO_DISCOVER, /**< Attribute Information Discovery. */ - SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, /**< Read Characteristic Value by UUID. */ - SD_BLE_GATTC_READ, /**< Generic read. */ - SD_BLE_GATTC_CHAR_VALUES_READ, /**< Read multiple Characteristic Values. */ - SD_BLE_GATTC_WRITE, /**< Generic write. */ - SD_BLE_GATTC_HV_CONFIRM, /**< Handle Value Confirmation. */ - SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. */ -}; - -/** - * @brief GATT Client Event IDs. - */ -enum BLE_GATTC_EVTS -{ - BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP = BLE_GATTC_EVT_BASE, /**< Primary Service Discovery Response event. \n See @ref ble_gattc_evt_prim_srvc_disc_rsp_t. */ - BLE_GATTC_EVT_REL_DISC_RSP, /**< Relationship Discovery Response event. \n See @ref ble_gattc_evt_rel_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_DISC_RSP, /**< Characteristic Discovery Response event. \n See @ref ble_gattc_evt_char_disc_rsp_t. */ - BLE_GATTC_EVT_DESC_DISC_RSP, /**< Descriptor Discovery Response event. \n See @ref ble_gattc_evt_desc_disc_rsp_t. */ - BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, /**< Attribute Information Response event. \n See @ref ble_gattc_evt_attr_info_disc_rsp_t. */ - BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP, /**< Read By UUID Response event. \n See @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t. */ - BLE_GATTC_EVT_READ_RSP, /**< Read Response event. \n See @ref ble_gattc_evt_read_rsp_t. */ - BLE_GATTC_EVT_CHAR_VALS_READ_RSP, /**< Read multiple Response event. \n See @ref ble_gattc_evt_char_vals_read_rsp_t. */ - BLE_GATTC_EVT_WRITE_RSP, /**< Write Response event. \n See @ref ble_gattc_evt_write_rsp_t. */ - BLE_GATTC_EVT_HVX, /**< Handle Value Notification or Indication event. \n Confirm indication with @ref sd_ble_gattc_hv_confirm. \n See @ref ble_gattc_evt_hvx_t. */ - BLE_GATTC_EVT_EXCHANGE_MTU_RSP, /**< Exchange MTU Response event. \n See @ref ble_gattc_evt_exchange_mtu_rsp_t. */ - BLE_GATTC_EVT_TIMEOUT, /**< Timeout event. \n See @ref ble_gattc_evt_timeout_t. */ - BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE /**< Write without Response transmission complete. \n See @ref ble_gattc_evt_write_cmd_tx_complete_t. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTC_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTC SVC return values specific to GATTC - * @{ */ -#define BLE_ERROR_GATTC_PROC_NOT_PERMITTED (NRF_GATTC_ERR_BASE + 0x000) /**< Procedure not Permitted. */ -/** @} */ - -/** @defgroup BLE_GATTC_ATTR_INFO_FORMAT Attribute Information Formats - * @{ */ -#define BLE_GATTC_ATTR_INFO_FORMAT_16BIT 1 /**< 16-bit Attribute Information Format. */ -#define BLE_GATTC_ATTR_INFO_FORMAT_128BIT 2 /**< 128-bit Attribute Information Format. */ -/** @} */ - -/** @defgroup BLE_GATTC_DEFAULTS GATT Client defaults - * @{ */ -#define BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Write without Response that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTC_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTC connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t write_cmd_tx_queue_size; /**< The guaranteed minimum number of Write without Response that can be queued for transmission. - The default value is @ref BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT */ -} ble_gattc_conn_cfg_t; - -/**@brief Operation Handle Range. */ -typedef struct -{ - uint16_t start_handle; /**< Start Handle. */ - uint16_t end_handle; /**< End Handle. */ -} ble_gattc_handle_range_t; - - -/**@brief GATT service. */ -typedef struct -{ - ble_uuid_t uuid; /**< Service UUID. */ - ble_gattc_handle_range_t handle_range; /**< Service Handle Range. */ -} ble_gattc_service_t; - - -/**@brief GATT include. */ -typedef struct -{ - uint16_t handle; /**< Include Handle. */ - ble_gattc_service_t included_srvc; /**< Handle of the included service. */ -} ble_gattc_include_t; - - -/**@brief GATT characteristic. */ -typedef struct -{ - ble_uuid_t uuid; /**< Characteristic UUID. */ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - uint8_t char_ext_props : 1; /**< Extended properties present. */ - uint16_t handle_decl; /**< Handle of the Characteristic Declaration. */ - uint16_t handle_value; /**< Handle of the Characteristic Value. */ -} ble_gattc_char_t; - - -/**@brief GATT descriptor. */ -typedef struct -{ - uint16_t handle; /**< Descriptor Handle. */ - ble_uuid_t uuid; /**< Descriptor UUID. */ -} ble_gattc_desc_t; - - -/**@brief Write Parameters. */ -typedef struct -{ - uint8_t write_op; /**< Write Operation to be performed, see @ref BLE_GATT_WRITE_OPS. */ - uint8_t flags; /**< Flags, see @ref BLE_GATT_EXEC_WRITE_FLAGS. */ - uint16_t handle; /**< Handle to the attribute to be written. */ - uint16_t offset; /**< Offset in bytes. @note For WRITE_CMD and WRITE_REQ, offset must be 0. */ - uint16_t len; /**< Length of data in bytes. */ - uint8_t const *p_value; /**< Pointer to the value data. */ -} ble_gattc_write_params_t; - -/**@brief Attribute Information for 16-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid_t uuid; /**< 16-bit Attribute UUID. */ -} ble_gattc_attr_info16_t; - -/**@brief Attribute Information for 128-bit Attribute UUID. */ -typedef struct -{ - uint16_t handle; /**< Attribute handle. */ - ble_uuid128_t uuid; /**< 128-bit Attribute UUID. */ -} ble_gattc_attr_info128_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Service count. */ - ble_gattc_service_t services[1]; /**< Service data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_prim_srvc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_REL_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Include count. */ - ble_gattc_include_t includes[1]; /**< Include data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_rel_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Characteristic count. */ - ble_gattc_char_t chars[1]; /**< Characteristic data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_DESC_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Descriptor count. */ - ble_gattc_desc_t descs[1]; /**< Descriptor data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_desc_disc_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP. */ -typedef struct -{ - uint16_t count; /**< Attribute count. */ - uint8_t format; /**< Attribute information format, see @ref BLE_GATTC_ATTR_INFO_FORMAT. */ - union { - ble_gattc_attr_info16_t attr_info16[1]; /**< Attribute information for 16-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - ble_gattc_attr_info128_t attr_info128[1]; /**< Attribute information for 128-bit Attribute UUID. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ - } info; /**< Attribute information union. */ -} ble_gattc_evt_attr_info_disc_rsp_t; - -/**@brief GATT read by UUID handle value pair. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t *p_value; /**< Pointer to the Attribute Value, length is available in @ref ble_gattc_evt_char_val_by_uuid_read_rsp_t::value_len. */ -} ble_gattc_handle_value_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP. */ -typedef struct -{ - uint16_t count; /**< Handle-Value Pair Count. */ - uint16_t value_len; /**< Length of the value in Handle-Value(s) list. */ - uint8_t handle_value[1]; /**< Handle-Value(s) list. To iterate through the list use @ref sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter. - @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_val_by_uuid_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_READ_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint16_t offset; /**< Offset of the attribute data. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP. */ -typedef struct -{ - uint16_t len; /**< Concatenated Attribute values length. */ - uint8_t values[1]; /**< Attribute values. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_char_vals_read_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_RSP. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - uint8_t write_op; /**< Type of write operation, see @ref BLE_GATT_WRITE_OPS. */ - uint16_t offset; /**< Data offset. */ - uint16_t len; /**< Data length. */ - uint8_t data[1]; /**< Data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_write_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_HVX. */ -typedef struct -{ - uint16_t handle; /**< Handle to which the HVx operation applies. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t len; /**< Attribute data length. */ - uint8_t data[1]; /**< Attribute data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gattc_evt_hvx_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. */ -typedef struct -{ - uint16_t server_rx_mtu; /**< Server RX MTU size. */ -} ble_gattc_evt_exchange_mtu_rsp_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gattc_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of write without response transmissions completed. */ -} ble_gattc_evt_write_cmd_tx_complete_t; - -/**@brief GATTC event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which event occurred. */ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint16_t error_handle; /**< In case of error: The handle causing the error. In all other cases @ref BLE_GATT_HANDLE_INVALID. */ - union - { - ble_gattc_evt_prim_srvc_disc_rsp_t prim_srvc_disc_rsp; /**< Primary Service Discovery Response Event Parameters. */ - ble_gattc_evt_rel_disc_rsp_t rel_disc_rsp; /**< Relationship Discovery Response Event Parameters. */ - ble_gattc_evt_char_disc_rsp_t char_disc_rsp; /**< Characteristic Discovery Response Event Parameters. */ - ble_gattc_evt_desc_disc_rsp_t desc_disc_rsp; /**< Descriptor Discovery Response Event Parameters. */ - ble_gattc_evt_char_val_by_uuid_read_rsp_t char_val_by_uuid_read_rsp; /**< Characteristic Value Read by UUID Response Event Parameters. */ - ble_gattc_evt_read_rsp_t read_rsp; /**< Read Response Event Parameters. */ - ble_gattc_evt_char_vals_read_rsp_t char_vals_read_rsp; /**< Characteristic Values Read Response Event Parameters. */ - ble_gattc_evt_write_rsp_t write_rsp; /**< Write Response Event Parameters. */ - ble_gattc_evt_hvx_t hvx; /**< Handle Value Notification/Indication Event Parameters. */ - ble_gattc_evt_exchange_mtu_rsp_t exchange_mtu_rsp; /**< Exchange MTU Response Event Parameters. */ - ble_gattc_evt_timeout_t timeout; /**< Timeout Event Parameters. */ - ble_gattc_evt_attr_info_disc_rsp_t attr_info_disc_rsp; /**< Attribute Information Discovery Event Parameters. */ - ble_gattc_evt_write_cmd_tx_complete_t write_cmd_tx_complete; /**< Write without Response transmission complete Event Parameters. */ - } params; /**< Event Parameters. @note Only valid if @ref gatt_status == @ref BLE_GATT_STATUS_SUCCESS. */ -} ble_gattc_evt_t; -/** @} */ - -/** @addtogroup BLE_GATTC_FUNCTIONS Functions - * @{ */ - -/**@brief Initiate or continue a GATT Primary Service Discovery procedure. - * - * @details This function initiates or resumes a Primary Service discovery procedure, starting from the supplied handle. - * If the last service has not been reached, this function must be called again with an updated start handle value to continue the search. - * - * @note If any of the discovered services have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_PRIM_SRVC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] start_handle Handle to start searching from. - * @param[in] p_srvc_uuid Pointer to the service UUID to be found. If it is NULL, all primary services will be returned. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Primary Service Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_PRIMARY_SERVICES_DISCOVER, uint32_t, sd_ble_gattc_primary_services_discover(uint16_t conn_handle, uint16_t start_handle, ble_uuid_t const *p_srvc_uuid)); - - -/**@brief Initiate or continue a GATT Relationship Discovery procedure. - * - * @details This function initiates or resumes the Find Included Services sub-procedure. If the last included service has not been reached, - * this must be called again with an updated handle range to continue the search. - * - * @events - * @event{@ref BLE_GATTC_EVT_REL_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_REL_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Relationship Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_RELATIONSHIPS_DISCOVER, uint32_t, sd_ble_gattc_relationships_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Discovery procedure. - * - * @details This function initiates or resumes a Characteristic discovery procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @note If any of the discovered characteristics have 128-bit UUIDs which are not present in the table provided to ble_vs_uuids_assign, a UUID structure with - * type @ref BLE_UUID_TYPE_UNKNOWN will be received in the corresponding event. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_CHAR_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Service to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Characteristic Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHARACTERISTICS_DISCOVER, uint32_t, sd_ble_gattc_characteristics_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Characteristic Descriptor Discovery procedure. - * - * @details This function initiates or resumes a Characteristic Descriptor discovery procedure. If the last Descriptor has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_DESC_DISC_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_DESC_DISC_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range A pointer to the range of handles of the Characteristic to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Descriptor Discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_DESCRIPTORS_DISCOVER, uint32_t, sd_ble_gattc_descriptors_discover(uint16_t conn_handle, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read using Characteristic UUID procedure. - * - * @details This function initiates or resumes a Read using Characteristic UUID procedure. If the last Characteristic has not been reached, - * this must be called again with an updated handle range to continue the discovery. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_UUID_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_uuid Pointer to a Characteristic value UUID to read. - * @param[in] p_handle_range A pointer to the range of handles to perform this procedure on. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read using Characteristic UUID procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUE_BY_UUID_READ, uint32_t, sd_ble_gattc_char_value_by_uuid_read(uint16_t conn_handle, ble_uuid_t const *p_uuid, ble_gattc_handle_range_t const *p_handle_range)); - - -/**@brief Initiate or continue a GATT Read (Long) Characteristic or Descriptor procedure. - * - * @details This function initiates or resumes a GATT Read (Long) Characteristic or Descriptor procedure. If the Characteristic or Descriptor - * to be read is longer than ATT_MTU - 1, this function must be called multiple times with appropriate offset to read the - * complete value. - * - * @events - * @event{@ref BLE_GATTC_EVT_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_READ_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute to be read. - * @param[in] offset Offset into the attribute value to be read. - * - * @retval ::NRF_SUCCESS Successfully started or resumed the Read (Long) procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_READ, uint32_t, sd_ble_gattc_read(uint16_t conn_handle, uint16_t handle, uint16_t offset)); - - -/**@brief Initiate a GATT Read Multiple Characteristic Values procedure. - * - * @details This function initiates a GATT Read Multiple Characteristic Values procedure. - * - * @events - * @event{@ref BLE_GATTC_EVT_CHAR_VALS_READ_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_READ_MULT_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handles A pointer to the handle(s) of the attribute(s) to be read. - * @param[in] handle_count The number of handles in p_handles. - * - * @retval ::NRF_SUCCESS Successfully started the Read Multiple Characteristic Values procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_CHAR_VALUES_READ, uint32_t, sd_ble_gattc_char_values_read(uint16_t conn_handle, uint16_t const *p_handles, uint16_t handle_count)); - - -/**@brief Perform a Write (Characteristic Value or Descriptor, with or without response, signed or not, long or reliable) procedure. - * - * @details This function can perform all write procedures described in GATT. - * - * @note Only one write with response procedure can be ongoing per connection at a time. - * If the application tries to write with response while another write with response procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTC_EVT_WRITE_RSP event will be issued as soon as the write response arrives from the peer. - * - * @note The number of Write without Response that can be queued is configured by @ref ble_gattc_conn_cfg_t::write_cmd_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event will be issued as soon as the transmission of the write without response is complete. - * - * @note The application can keep track of the available queue element count for writes without responses by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE, Write without response transmission complete.} - * @event{@ref BLE_GATTC_EVT_WRITE_RSP, Write response received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_WITHOUT_RESP_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_LONG_WRITE_MSC} - * @mmsc{@ref BLE_GATTC_VALUE_RELIABLE_WRITE_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_write_params A pointer to a write parameters structure. - * - * @retval ::NRF_SUCCESS Successfully started the Write procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For write with response, procedure already in progress. Wait for a @ref BLE_GATTC_EVT_WRITE_RSP event and retry. - * @retval ::NRF_ERROR_RESOURCES Too many writes without responses queued. - * Wait for a @ref BLE_GATTC_EVT_WRITE_CMD_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_WRITE, uint32_t, sd_ble_gattc_write(uint16_t conn_handle, ble_gattc_write_params_t const *p_write_params)); - - -/**@brief Send a Handle Value Confirmation to the GATT Server. - * - * @mscs - * @mmsc{@ref BLE_GATTC_HVI_MSC} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] handle The handle of the attribute in the indication. - * - * @retval ::NRF_SUCCESS Successfully queued the Handle Value Confirmation for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no Indication pending to be confirmed. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_HV_CONFIRM, uint32_t, sd_ble_gattc_hv_confirm(uint16_t conn_handle, uint16_t handle)); - -/**@brief Discovers information about a range of attributes on a GATT server. - * - * @events - * @event{@ref BLE_GATTC_EVT_ATTR_INFO_DISC_RSP, Generated when information about a range of attributes has been received.} - * @endevents - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] p_handle_range The range of handles to request information about. - * - * @retval ::NRF_SUCCESS Successfully started an attribute information discovery procedure. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_ATTR_INFO_DISCOVER, uint32_t, sd_ble_gattc_attr_info_discover(uint16_t conn_handle, ble_gattc_handle_range_t const * p_handle_range)); - -/**@brief Start an ATT_MTU exchange by sending an Exchange MTU Request to the server. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value, and - * - The Server RX MTU value from @ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @events - * @event{@ref BLE_GATTC_EVT_EXCHANGE_MTU_RSP} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTC_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] client_rx_mtu Client RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - used for this connection. - * - The value must be equal to Server RX MTU size given in @ref sd_ble_gatts_exchange_mtu_reply - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent request to the server. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid connection state or an ATT_MTU exchange was already requested once. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Client RX MTU size supplied. - * @retval ::NRF_ERROR_BUSY Client procedure already in progress. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTC_EXCHANGE_MTU_REQUEST, uint32_t, sd_ble_gattc_exchange_mtu_request(uint16_t conn_handle, uint16_t client_rx_mtu)); - -/**@brief Iterate through Handle-Value(s) list in @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * - * @param[in] p_gattc_evt Pointer to event buffer containing @ref BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP event. - * @note If the buffer contains different event, behavior is undefined. - * @param[in,out] p_iter Iterator, points to @ref ble_gattc_handle_value_t structure that will be filled in with - * the next Handle-Value pair in each iteration. If the function returns other than - * @ref NRF_SUCCESS, it will not be changed. - * - To start iteration, initialize the structure to zero. - * - To continue, pass the value from previous iteration. - * - * \code - * ble_gattc_handle_value_t iter; - * memset(&iter, 0, sizeof(ble_gattc_handle_value_t)); - * while (sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(&ble_evt.evt.gattc_evt, &iter) == NRF_SUCCESS) - * { - * app_handle = iter.handle; - * memcpy(app_value, iter.p_value, ble_evt.evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len); - * } - * \endcode - * - * @retval ::NRF_SUCCESS Successfully retrieved the next Handle-Value pair. - * @retval ::NRF_ERROR_NOT_FOUND No more Handle-Value pairs available in the list. - */ -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter); - -/** @} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE uint32_t sd_ble_gattc_evt_char_val_by_uuid_read_rsp_iter(ble_gattc_evt_t *p_gattc_evt, ble_gattc_handle_value_t *p_iter) -{ - uint32_t value_len = p_gattc_evt->params.char_val_by_uuid_read_rsp.value_len; - uint8_t *p_first = p_gattc_evt->params.char_val_by_uuid_read_rsp.handle_value; - uint8_t *p_next = p_iter->p_value ? p_iter->p_value + value_len : p_first; - - if ((p_next - p_first) / (sizeof(uint16_t) + value_len) < p_gattc_evt->params.char_val_by_uuid_read_rsp.count) - { - p_iter->handle = (uint16_t)p_next[1] << 8 | p_next[0]; - p_iter->p_value = p_next + sizeof(uint16_t); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_NOT_FOUND; - } -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif -#endif /* BLE_GATTC_H__ */ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatts.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatts.h deleted file mode 100644 index e437b6e076..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_gatts.h +++ /dev/null @@ -1,845 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_GATTS Generic Attribute Profile (GATT) Server - @{ - @brief Definitions and prototypes for the GATTS interface. - */ - -#ifndef BLE_GATTS_H__ -#define BLE_GATTS_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_hci.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" -#include "ble_gatt.h" -#include "ble_gap.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_GATTS_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief GATTS API SVC numbers. - */ -enum BLE_GATTS_SVCS -{ - SD_BLE_GATTS_SERVICE_ADD = BLE_GATTS_SVC_BASE, /**< Add a service. */ - SD_BLE_GATTS_INCLUDE_ADD, /**< Add an included service. */ - SD_BLE_GATTS_CHARACTERISTIC_ADD, /**< Add a characteristic. */ - SD_BLE_GATTS_DESCRIPTOR_ADD, /**< Add a generic attribute. */ - SD_BLE_GATTS_VALUE_SET, /**< Set an attribute value. */ - SD_BLE_GATTS_VALUE_GET, /**< Get an attribute value. */ - SD_BLE_GATTS_HVX, /**< Handle Value Notification or Indication. */ - SD_BLE_GATTS_SERVICE_CHANGED, /**< Perform a Service Changed Indication to one or more peers. */ - SD_BLE_GATTS_RW_AUTHORIZE_REPLY, /**< Reply to an authorization request for a read or write operation on one or more attributes. */ - SD_BLE_GATTS_SYS_ATTR_SET, /**< Set the persistent system attributes for a connection. */ - SD_BLE_GATTS_SYS_ATTR_GET, /**< Retrieve the persistent system attributes. */ - SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, /**< Retrieve the first valid user handle. */ - SD_BLE_GATTS_ATTR_GET, /**< Retrieve the UUID and/or metadata of an attribute. */ - SD_BLE_GATTS_EXCHANGE_MTU_REPLY /**< Reply to Exchange MTU Request. */ -}; - -/** - * @brief GATT Server Event IDs. - */ -enum BLE_GATTS_EVTS -{ - BLE_GATTS_EVT_WRITE = BLE_GATTS_EVT_BASE, /**< Write operation performed. \n See @ref ble_gatts_evt_write_t. */ - BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST, /**< Read/Write Authorization request. \n Reply with @ref sd_ble_gatts_rw_authorize_reply. \n See @ref ble_gatts_evt_rw_authorize_request_t. */ - BLE_GATTS_EVT_SYS_ATTR_MISSING, /**< A persistent system attribute access is pending. \n Respond with @ref sd_ble_gatts_sys_attr_set. \n See @ref ble_gatts_evt_sys_attr_missing_t. */ - BLE_GATTS_EVT_HVC, /**< Handle Value Confirmation. \n See @ref ble_gatts_evt_hvc_t. */ - BLE_GATTS_EVT_SC_CONFIRM, /**< Service Changed Confirmation. \n No additional event structure applies. */ - BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, /**< Exchange MTU Request. \n Reply with @ref sd_ble_gatts_exchange_mtu_reply. \n See @ref ble_gatts_evt_exchange_mtu_request_t. */ - BLE_GATTS_EVT_TIMEOUT, /**< Peer failed to respond to an ATT request in time. \n See @ref ble_gatts_evt_timeout_t. */ - BLE_GATTS_EVT_HVN_TX_COMPLETE /**< Handle Value Notification transmission complete. \n See @ref ble_gatts_evt_hvn_tx_complete_t. */ -}; - -/**@brief GATTS Configuration IDs. - * - * IDs that uniquely identify a GATTS configuration. - */ -enum BLE_GATTS_CFGS -{ - BLE_GATTS_CFG_SERVICE_CHANGED = BLE_GATTS_CFG_BASE, /**< Service changed configuration. */ - BLE_GATTS_CFG_ATTR_TAB_SIZE, /**< Attribute table size configuration. */ -}; - -/** @} */ - -/** @addtogroup BLE_GATTS_DEFINES Defines - * @{ */ - -/** @defgroup BLE_ERRORS_GATTS SVC return values specific to GATTS - * @{ */ -#define BLE_ERROR_GATTS_INVALID_ATTR_TYPE (NRF_GATTS_ERR_BASE + 0x000) /**< Invalid attribute type. */ -#define BLE_ERROR_GATTS_SYS_ATTR_MISSING (NRF_GATTS_ERR_BASE + 0x001) /**< System Attributes missing. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_LENS_MAX Maximum attribute lengths - * @{ */ -#define BLE_GATTS_FIX_ATTR_LEN_MAX (510) /**< Maximum length for fixed length Attribute Values. */ -#define BLE_GATTS_VAR_ATTR_LEN_MAX (512) /**< Maximum length for variable length Attribute Values. */ -/** @} */ - -/** @defgroup BLE_GATTS_SRVC_TYPES GATT Server Service Types - * @{ */ -#define BLE_GATTS_SRVC_TYPE_INVALID 0x00 /**< Invalid Service Type. */ -#define BLE_GATTS_SRVC_TYPE_PRIMARY 0x01 /**< Primary Service. */ -#define BLE_GATTS_SRVC_TYPE_SECONDARY 0x02 /**< Secondary Type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_ATTR_TYPES GATT Server Attribute Types - * @{ */ -#define BLE_GATTS_ATTR_TYPE_INVALID 0x00 /**< Invalid Attribute Type. */ -#define BLE_GATTS_ATTR_TYPE_PRIM_SRVC_DECL 0x01 /**< Primary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_SEC_SRVC_DECL 0x02 /**< Secondary Service Declaration. */ -#define BLE_GATTS_ATTR_TYPE_INC_DECL 0x03 /**< Include Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_DECL 0x04 /**< Characteristic Declaration. */ -#define BLE_GATTS_ATTR_TYPE_CHAR_VAL 0x05 /**< Characteristic Value. */ -#define BLE_GATTS_ATTR_TYPE_DESC 0x06 /**< Descriptor. */ -#define BLE_GATTS_ATTR_TYPE_OTHER 0x07 /**< Other, non-GATT specific type. */ -/** @} */ - - -/** @defgroup BLE_GATTS_OPS GATT Server Operations - * @{ */ -#define BLE_GATTS_OP_INVALID 0x00 /**< Invalid Operation. */ -#define BLE_GATTS_OP_WRITE_REQ 0x01 /**< Write Request. */ -#define BLE_GATTS_OP_WRITE_CMD 0x02 /**< Write Command. */ -#define BLE_GATTS_OP_SIGN_WRITE_CMD 0x03 /**< Signed Write Command. */ -#define BLE_GATTS_OP_PREP_WRITE_REQ 0x04 /**< Prepare Write Request. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL 0x05 /**< Execute Write Request: Cancel all prepared writes. */ -#define BLE_GATTS_OP_EXEC_WRITE_REQ_NOW 0x06 /**< Execute Write Request: Immediately execute all prepared writes. */ -/** @} */ - -/** @defgroup BLE_GATTS_VLOCS GATT Value Locations - * @{ */ -#define BLE_GATTS_VLOC_INVALID 0x00 /**< Invalid Location. */ -#define BLE_GATTS_VLOC_STACK 0x01 /**< Attribute Value is located in stack memory, no user memory is required. */ -#define BLE_GATTS_VLOC_USER 0x02 /**< Attribute Value is located in user memory. This requires the user to maintain a valid buffer through the lifetime of the attribute, since the stack - will read and write directly to the memory using the pointer provided in the APIs. There are no alignment requirements for the buffer. */ -/** @} */ - -/** @defgroup BLE_GATTS_AUTHORIZE_TYPES GATT Server Authorization Types - * @{ */ -#define BLE_GATTS_AUTHORIZE_TYPE_INVALID 0x00 /**< Invalid Type. */ -#define BLE_GATTS_AUTHORIZE_TYPE_READ 0x01 /**< Authorize a Read Operation. */ -#define BLE_GATTS_AUTHORIZE_TYPE_WRITE 0x02 /**< Authorize a Write Request Operation. */ -/** @} */ - -/** @defgroup BLE_GATTS_SYS_ATTR_FLAGS System Attribute Flags - * @{ */ -#define BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS (1 << 0) /**< Restrict system attributes to system services only. */ -#define BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS (1 << 1) /**< Restrict system attributes to user services only. */ -/** @} */ - -/** @defgroup BLE_GATTS_SERVICE_CHANGED Service Changed Inclusion Values - * @{ - */ -#define BLE_GATTS_SERVICE_CHANGED_DEFAULT (1) /**< Default is to include the Service Changed characteristic in the Attribute Table. */ -/** @} */ - -/** @defgroup BLE_GATTS_ATTR_TAB_SIZE Attribute Table size - * @{ - */ -#define BLE_GATTS_ATTR_TAB_SIZE_MIN (248) /**< Minimum Attribute Table size */ -#define BLE_GATTS_ATTR_TAB_SIZE_DEFAULT (1408) /**< Default Attribute Table size. */ -/** @} */ - -/** @defgroup BLE_GATTS_DEFAULTS GATT Server defaults - * @{ - */ -#define BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT 1 /**< Default number of Handle Value Notifications that can be queued for transmission. */ -/** @} */ - -/** @} */ - -/** @addtogroup BLE_GATTS_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE GATTS connection configuration parameters, set with @ref sd_ble_cfg_set. - */ -typedef struct -{ - uint8_t hvn_tx_queue_size; /**< Minimum guaranteed number of Handle Value Notifications that can be queued for transmission. - The default value is @ref BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT */ -} ble_gatts_conn_cfg_t; - -/**@brief Attribute metadata. */ -typedef struct -{ - ble_gap_conn_sec_mode_t read_perm; /**< Read permissions. */ - ble_gap_conn_sec_mode_t write_perm; /**< Write permissions. */ - uint8_t vlen :1; /**< Variable length attribute. */ - uint8_t vloc :2; /**< Value location, see @ref BLE_GATTS_VLOCS.*/ - uint8_t rd_auth :1; /**< Read authorization and value will be requested from the application on every read operation. */ - uint8_t wr_auth :1; /**< Write authorization will be requested from the application on every Write Request operation (but not Write Command). */ -} ble_gatts_attr_md_t; - - -/**@brief GATT Attribute. */ -typedef struct -{ - ble_uuid_t const *p_uuid; /**< Pointer to the attribute UUID. */ - ble_gatts_attr_md_t const *p_attr_md; /**< Pointer to the attribute metadata structure. */ - uint16_t init_len; /**< Initial attribute value length in bytes. */ - uint16_t init_offs; /**< Initial attribute value offset in bytes. If different from zero, the first init_offs bytes of the attribute value will be left uninitialized. */ - uint16_t max_len; /**< Maximum attribute value length in bytes, see @ref BLE_GATTS_ATTR_LENS_MAX for maximum values. */ - uint8_t *p_value; /**< Pointer to the attribute data. Please note that if the @ref BLE_GATTS_VLOC_USER value location is selected in the attribute metadata, this will have to point to a buffer - that remains valid through the lifetime of the attribute. This excludes usage of automatic variables that may go out of scope or any other temporary location. - The stack may access that memory directly without the application's knowledge. For writable characteristics, this value must not be a location in flash memory.*/ -} ble_gatts_attr_t; - -/**@brief GATT Attribute Value. */ -typedef struct -{ - uint16_t len; /**< Length in bytes to be written or read. Length in bytes written or read after successful return.*/ - uint16_t offset; /**< Attribute value offset. */ - uint8_t *p_value; /**< Pointer to where value is stored or will be stored. - If value is stored in user memory, only the attribute length is updated when p_value == NULL. - Set to NULL when reading to obtain the complete length of the attribute value */ -} ble_gatts_value_t; - - -/**@brief GATT Characteristic Presentation Format. */ -typedef struct -{ - uint8_t format; /**< Format of the value, see @ref BLE_GATT_CPF_FORMATS. */ - int8_t exponent; /**< Exponent for integer data types. */ - uint16_t unit; /**< Unit from Bluetooth Assigned Numbers. */ - uint8_t name_space; /**< Namespace from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ - uint16_t desc; /**< Namespace description from Bluetooth Assigned Numbers, see @ref BLE_GATT_CPF_NAMESPACES. */ -} ble_gatts_char_pf_t; - - -/**@brief GATT Characteristic metadata. */ -typedef struct -{ - ble_gatt_char_props_t char_props; /**< Characteristic Properties. */ - ble_gatt_char_ext_props_t char_ext_props; /**< Characteristic Extended Properties. */ - uint8_t const *p_char_user_desc; /**< Pointer to a UTF-8 encoded string (non-NULL terminated), NULL if the descriptor is not required. */ - uint16_t char_user_desc_max_size; /**< The maximum size in bytes of the user description descriptor. */ - uint16_t char_user_desc_size; /**< The size of the user description, must be smaller or equal to char_user_desc_max_size. */ - ble_gatts_char_pf_t const *p_char_pf; /**< Pointer to a presentation format structure or NULL if the CPF descriptor is not required. */ - ble_gatts_attr_md_t const *p_user_desc_md; /**< Attribute metadata for the User Description descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_cccd_md; /**< Attribute metadata for the Client Characteristic Configuration Descriptor, or NULL for default values. */ - ble_gatts_attr_md_t const *p_sccd_md; /**< Attribute metadata for the Server Characteristic Configuration Descriptor, or NULL for default values. */ -} ble_gatts_char_md_t; - - -/**@brief GATT Characteristic Definition Handles. */ -typedef struct -{ - uint16_t value_handle; /**< Handle to the characteristic value. */ - uint16_t user_desc_handle; /**< Handle to the User Description descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t cccd_handle; /**< Handle to the Client Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ - uint16_t sccd_handle; /**< Handle to the Server Characteristic Configuration Descriptor, or @ref BLE_GATT_HANDLE_INVALID if not present. */ -} ble_gatts_char_handles_t; - - -/**@brief GATT HVx parameters. */ -typedef struct -{ - uint16_t handle; /**< Characteristic Value Handle. */ - uint8_t type; /**< Indication or Notification, see @ref BLE_GATT_HVX_TYPES. */ - uint16_t offset; /**< Offset within the attribute value. */ - uint16_t *p_len; /**< Length in bytes to be written, length in bytes written after return. */ - uint8_t const *p_data; /**< Actual data content, use NULL to use the current attribute value. */ -} ble_gatts_hvx_params_t; - -/**@brief GATT Authorization parameters. */ -typedef struct -{ - uint16_t gatt_status; /**< GATT status code for the operation, see @ref BLE_GATT_STATUS_CODES. */ - uint8_t update : 1; /**< If set, data supplied in p_data will be used to update the attribute value. - Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set, - as the data to be written needs to be stored and later provided by the application. */ - uint16_t offset; /**< Offset of the attribute value being updated. */ - uint16_t len; /**< Length in bytes of the value in p_data pointer, see @ref BLE_GATTS_ATTR_LENS_MAX. */ - uint8_t const *p_data; /**< Pointer to new value used to update the attribute value. */ -} ble_gatts_authorize_params_t; - -/**@brief GATT Read or Write Authorize Reply parameters. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_authorize_params_t read; /**< Read authorization parameters. */ - ble_gatts_authorize_params_t write; /**< Write authorization parameters. */ - } params; /**< Reply Parameters. */ -} ble_gatts_rw_authorize_reply_params_t; - -/**@brief Service Changed Inclusion configuration parameters, set with @ref sd_ble_cfg_set. */ -typedef struct -{ - uint8_t service_changed : 1; /**< If 1, include the Service Changed characteristic in the Attribute Table. Default is @ref BLE_GATTS_SERVICE_CHANGED_DEFAULT. */ -} ble_gatts_cfg_service_changed_t; - -/**@brief Attribute table size configuration parameters, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_LENGTH One or more of the following is true: - * - The specified Attribute Table size is too small. - * The minimum acceptable size is defined by @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. - * - The specified Attribute Table size is not a multiple of 4. - */ -typedef struct -{ - uint32_t attr_tab_size; /**< Attribute table size. Default is @ref BLE_GATTS_ATTR_TAB_SIZE_DEFAULT, minimum is @ref BLE_GATTS_ATTR_TAB_SIZE_MIN. */ -} ble_gatts_cfg_attr_tab_size_t; - -/**@brief Config structure for GATTS configurations. */ -typedef union -{ - ble_gatts_cfg_service_changed_t service_changed; /**< Include service changed characteristic, cfg_id is @ref BLE_GATTS_CFG_SERVICE_CHANGED. */ - ble_gatts_cfg_attr_tab_size_t attr_tab_size; /**< Attribute table size, cfg_id is @ref BLE_GATTS_CFG_ATTR_TAB_SIZE. */ -} ble_gatts_cfg_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_WRITE. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ - uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ - uint16_t offset; /**< Offset for the write operation. */ - uint16_t len; /**< Length of the received data. */ - uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. - See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ -} ble_gatts_evt_write_t; - -/**@brief Event substructure for authorized read requests, see @ref ble_gatts_evt_rw_authorize_request_t. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ - ble_uuid_t uuid; /**< Attribute UUID. */ - uint16_t offset; /**< Offset for the read operation. */ -} ble_gatts_evt_read_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST. */ -typedef struct -{ - uint8_t type; /**< Type of authorize operation, see @ref BLE_GATTS_AUTHORIZE_TYPES. */ - union { - ble_gatts_evt_read_t read; /**< Attribute Read Parameters. */ - ble_gatts_evt_write_t write; /**< Attribute Write Parameters. */ - } request; /**< Request Parameters. */ -} ble_gatts_evt_rw_authorize_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. */ -typedef struct -{ - uint8_t hint; /**< Hint (currently unused). */ -} ble_gatts_evt_sys_attr_missing_t; - - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVC. */ -typedef struct -{ - uint16_t handle; /**< Attribute Handle. */ -} ble_gatts_evt_hvc_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST. */ -typedef struct -{ - uint16_t client_rx_mtu; /**< Client RX MTU size. */ -} ble_gatts_evt_exchange_mtu_request_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_TIMEOUT. */ -typedef struct -{ - uint8_t src; /**< Timeout source, see @ref BLE_GATT_TIMEOUT_SOURCES. */ -} ble_gatts_evt_timeout_t; - -/**@brief Event structure for @ref BLE_GATTS_EVT_HVN_TX_COMPLETE. */ -typedef struct -{ - uint8_t count; /**< Number of notification transmissions completed. */ -} ble_gatts_evt_hvn_tx_complete_t; - -/**@brief GATTS event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occurred. */ - union - { - ble_gatts_evt_write_t write; /**< Write Event Parameters. */ - ble_gatts_evt_rw_authorize_request_t authorize_request; /**< Read or Write Authorize Request Parameters. */ - ble_gatts_evt_sys_attr_missing_t sys_attr_missing; /**< System attributes missing. */ - ble_gatts_evt_hvc_t hvc; /**< Handle Value Confirmation Event Parameters. */ - ble_gatts_evt_exchange_mtu_request_t exchange_mtu_request; /**< Exchange MTU Request Event Parameters. */ - ble_gatts_evt_timeout_t timeout; /**< Timeout Event. */ - ble_gatts_evt_hvn_tx_complete_t hvn_tx_complete; /**< Handle Value Notification transmission complete Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_gatts_evt_t; - -/** @} */ - -/** @addtogroup BLE_GATTS_FUNCTIONS Functions - * @{ */ - -/**@brief Add a service declaration to the Attribute Table. - * - * @note Secondary Services are only relevant in the context of the entity that references them, it is therefore forbidden to - * add a secondary service declaration that is not referenced by another service later in the Attribute Table. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] type Toggles between primary and secondary services, see @ref BLE_GATTS_SRVC_TYPES. - * @param[in] p_uuid Pointer to service UUID. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a service declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, Vendor Specific UUIDs need to be present in the table. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SERVICE_ADD, uint32_t, sd_ble_gatts_service_add(uint8_t type, ble_uuid_t const *p_uuid, uint16_t *p_handle)); - - -/**@brief Add an include declaration to the Attribute Table. - * - * @note It is currently only possible to add an include declaration to the last added service (i.e. only sequential population is supported at this time). - * - * @note The included service must already be present in the Attribute Table prior to this call. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the included service is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] inc_srvc_handle Handle of the included service. - * @param[out] p_include_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added an include declaration. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, handle values need to match previously added services. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation. - * @retval ::NRF_ERROR_NOT_SUPPORTED Feature is not supported, service_handle must be that of the last added service. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, self inclusions are not allowed. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - */ -SVCALL(SD_BLE_GATTS_INCLUDE_ADD, uint32_t, sd_ble_gatts_include_add(uint16_t service_handle, uint16_t inc_srvc_handle, uint16_t *p_include_handle)); - - -/**@brief Add a characteristic declaration, a characteristic value declaration and optional characteristic descriptor declarations to the Attribute Table. - * - * @note It is currently only possible to add a characteristic to the last added service (i.e. only sequential population is supported at this time). - * - * @note Several restrictions apply to the parameters, such as matching permissions between the user description descriptor and the writable auxiliaries bits, - * readable (no security) and writable (selectable) CCCDs and SCCDs and valid presentation format values. - * - * @note If no metadata is provided for the optional descriptors, their permissions will be derived from the characteristic permissions. - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] service_handle Handle of the service where the characteristic is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_char_md Characteristic metadata. - * @param[in] p_attr_char_value Pointer to the attribute structure corresponding to the characteristic value. - * @param[out] p_handles Pointer to the structure where the assigned handles will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a characteristic. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, service handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a service context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_CHARACTERISTIC_ADD, uint32_t, sd_ble_gatts_characteristic_add(uint16_t service_handle, ble_gatts_char_md_t const *p_char_md, ble_gatts_attr_t const *p_attr_char_value, ble_gatts_char_handles_t *p_handles)); - - -/**@brief Add a descriptor to the Attribute Table. - * - * @note It is currently only possible to add a descriptor to the last added characteristic (i.e. only sequential population is supported at this time). - * - * @mscs - * @mmsc{@ref BLE_GATTS_ATT_TABLE_POP_MSC} - * @endmscs - * - * @param[in] char_handle Handle of the characteristic where the descriptor is to be placed, if @ref BLE_GATT_HANDLE_INVALID is used, it will be placed sequentially. - * @param[in] p_attr Pointer to the attribute structure. - * @param[out] p_handle Pointer to a 16-bit word where the assigned handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully added a descriptor. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, characteristic handle, Vendor Specific UUIDs, lengths, and permissions need to adhere to the constraints. - * @retval ::NRF_ERROR_INVALID_STATE Invalid state to perform operation, a characteristic context is required. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden value supplied, certain UUIDs are reserved for the stack. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - */ -SVCALL(SD_BLE_GATTS_DESCRIPTOR_ADD, uint32_t, sd_ble_gatts_descriptor_add(uint16_t char_handle, ble_gatts_attr_t const *p_attr, uint16_t *p_handle)); - -/**@brief Set the value of a given attribute. - * - * @note Values other than system attributes can be set at any time, regardless of whether any active connections exist. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully set the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN Forbidden handle supplied, certain attributes are not modifiable by the application. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied, attribute lengths are restricted by @ref BLE_GATTS_ATTR_LENS_MAX. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - */ -SVCALL(SD_BLE_GATTS_VALUE_SET, uint32_t, sd_ble_gatts_value_set(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Get the value of a given attribute. - * - * @note If the attribute value is longer than the size of the supplied buffer, - * @ref ble_gatts_value_t::len will return the total attribute value length (excluding offset), - * and not the number of bytes actually returned in @ref ble_gatts_value_t::p_value. - * The application may use this information to allocate a suitable buffer size. - * - * @note When retrieving system attribute values with this function, the connection handle - * may refer to an already disconnected connection. Refer to the documentation of - * @ref sd_ble_gatts_sys_attr_get for further information. - * - * @param[in] conn_handle Connection handle. Ignored if the value does not belong to a system attribute. - * @param[in] handle Attribute handle. - * @param[in,out] p_value Attribute value information. - * - * @retval ::NRF_SUCCESS Successfully retrieved the value of the attribute. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid attribute offset supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied on a system attribute. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - */ -SVCALL(SD_BLE_GATTS_VALUE_GET, uint32_t, sd_ble_gatts_value_get(uint16_t conn_handle, uint16_t handle, ble_gatts_value_t *p_value)); - -/**@brief Notify or Indicate an attribute value. - * - * @details This function checks for the relevant Client Characteristic Configuration descriptor value to verify that the relevant operation - * (notification or indication) has been enabled by the client. It is also able to update the attribute value before issuing the PDU, so that - * the application can atomically perform a value update and a server initiated transaction with a single API call. - * - * @note The local attribute value may be updated even if an outgoing packet is not sent to the peer due to an error during execution. - * The Attribute Table has been updated if one of the following error codes is returned: @ref NRF_ERROR_INVALID_STATE, @ref NRF_ERROR_BUSY, - * @ref NRF_ERROR_FORBIDDEN, @ref BLE_ERROR_GATTS_SYS_ATTR_MISSING and @ref NRF_ERROR_RESOURCES. - * The caller can check whether the value has been updated by looking at the contents of *(@ref ble_gatts_hvx_params_t::p_len). - * - * @note Only one indication procedure can be ongoing per connection at a time. - * If the application tries to indicate an attribute value while another indication procedure is ongoing, - * the function call will return @ref NRF_ERROR_BUSY. - * A @ref BLE_GATTS_EVT_HVC event will be issued as soon as the confirmation arrives from the peer. - * - * @note The number of Handle Value Notifications that can be queued is configured by @ref ble_gatts_conn_cfg_t::hvn_tx_queue_size - * When the queue is full, the function call will return @ref NRF_ERROR_RESOURCES. - * A @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event will be issued as soon as the transmission of the notification is complete. - * - * @note The application can keep track of the available queue element count for notifications by following the procedure below: - * - Store initial queue element count in a variable. - * - Decrement the variable, which stores the currently available queue element count, by one when a call to this function returns @ref NRF_SUCCESS. - * - Increment the variable, which stores the current available queue element count, by the count variable in @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event. - * - * @events - * @event{@ref BLE_GATTS_EVT_HVN_TX_COMPLETE, Notification transmission complete.} - * @event{@ref BLE_GATTS_EVT_HVC, Confirmation received from the peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_HVN_MSC} - * @mmsc{@ref BLE_GATTS_HVI_MSC} - * @mmsc{@ref BLE_GATTS_HVX_DISABLED_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in,out] p_hvx_params Pointer to an HVx parameters structure. If @ref ble_gatts_hvx_params_t::p_data - * contains a non-NULL pointer the attribute value will be updated with the contents - * pointed by it before sending the notification or indication. If the attribute value - * is updated, @ref ble_gatts_hvx_params_t::p_len is updated by the SoftDevice to - * contain the number of actual bytes written, else it will be set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a notification or indication for transmission, and optionally updated the attribute value. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied. Only attributes added directly by the application are available to notify and indicate. - * @retval ::BLE_ERROR_GATTS_INVALID_ATTR_TYPE Invalid attribute type(s) supplied, only characteristic values may be notified and indicated. - * @retval ::NRF_ERROR_NOT_FOUND Attribute not found. - * @retval ::NRF_ERROR_FORBIDDEN The connection's current security level is lower than the one required by the write permissions of the CCCD associated with this characteristic. - * @retval ::NRF_ERROR_DATA_SIZE Invalid data size(s) supplied. - * @retval ::NRF_ERROR_BUSY For @ref BLE_GATT_HVX_INDICATION Procedure already in progress. Wait for a @ref BLE_GATTS_EVT_HVC event and retry. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_RESOURCES Too many notifications queued. - * Wait for a @ref BLE_GATTS_EVT_HVN_TX_COMPLETE event and retry. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_HVX, uint32_t, sd_ble_gatts_hvx(uint16_t conn_handle, ble_gatts_hvx_params_t const *p_hvx_params)); - -/**@brief Indicate the Service Changed attribute value. - * - * @details This call will send a Handle Value Indication to one or more peers connected to inform them that the Attribute - * Table layout has changed. As soon as the peer has confirmed the indication, a @ref BLE_GATTS_EVT_SC_CONFIRM event will - * be issued. - * - * @note Some of the restrictions and limitations that apply to @ref sd_ble_gatts_hvx also apply here. - * - * @events - * @event{@ref BLE_GATTS_EVT_SC_CONFIRM, Confirmation of attribute table change received from peer.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_GATTS_SC_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] start_handle Start of affected attribute handle range. - * @param[in] end_handle End of affected attribute handle range. - * - * @retval ::NRF_SUCCESS Successfully queued the Service Changed indication for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_NOT_SUPPORTED Service Changed not enabled at initialization. See @ref - * sd_ble_cfg_set and @ref ble_gatts_cfg_service_changed_t. - * @retval ::NRF_ERROR_INVALID_STATE One or more of the following is true: - * - Invalid Connection State - * - Notifications and/or indications not enabled in the CCCD - * - An ATT_MTU exchange is ongoing - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::BLE_ERROR_INVALID_ATTR_HANDLE Invalid attribute handle(s) supplied, handles must be in the range populated by the application. - * @retval ::NRF_ERROR_BUSY Procedure already in progress. - * @retval ::BLE_ERROR_GATTS_SYS_ATTR_MISSING System attributes missing, use @ref sd_ble_gatts_sys_attr_set to set them to a known value. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_SERVICE_CHANGED, uint32_t, sd_ble_gatts_service_changed(uint16_t conn_handle, uint16_t start_handle, uint16_t end_handle)); - -/**@brief Respond to a Read/Write authorization request. - * - * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application. - * - * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond - * to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update - * is set to 0. - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no authorization request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Authorization op invalid, - * handle supplied does not match requested handle, - * or invalid data to be written provided by the application. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params)); - - -/**@brief Update persistent system attribute information. - * - * @details Supply information about persistent system attributes to the stack, - * previously obtained using @ref sd_ble_gatts_sys_attr_get. - * This call is only allowed for active connections, and is usually - * made immediately after a connection is established with an known bonded device, - * often as a response to a @ref BLE_GATTS_EVT_SYS_ATTR_MISSING. - * - * p_sysattrs may point directly to the application's stored copy of the system attributes - * obtained using @ref sd_ble_gatts_sys_attr_get. - * If the pointer is NULL, the system attribute info is initialized, assuming that - * the application does not have any previously saved system attribute data for this device. - * - * @note The state of persistent system attributes is reset upon connection establishment and then remembered for its duration. - * - * @note If this call returns with an error code different from @ref NRF_SUCCESS, the storage of persistent system attributes may have been completed only partially. - * This means that the state of the attribute table is undefined, and the application should either provide a new set of attributes using this same call or - * reset the SoftDevice to return to a known state. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be modified. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be modified. - * - * @mscs - * @mmsc{@ref BLE_GATTS_HVX_SYS_ATTRS_MISSING_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_UNK_PEER_MSC} - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle. - * @param[in] p_sys_attr_data Pointer to a saved copy of system attributes supplied to the stack, or NULL. - * @param[in] len Size of data pointed by p_sys_attr_data, in octets. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully set the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_INVALID_DATA Invalid data supplied, the data should be exactly the same as retrieved with @ref sd_ble_gatts_sys_attr_get. - * @retval ::NRF_ERROR_NO_MEM Not enough memory to complete operation. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const *p_sys_attr_data, uint16_t len, uint32_t flags)); - - -/**@brief Retrieve persistent system attribute information from the stack. - * - * @details This call is used to retrieve information about values to be stored persistently by the application - * during the lifetime of a connection or after it has been terminated. When a new connection is established with the same bonded device, - * the system attribute information retrieved with this function should be restored using using @ref sd_ble_gatts_sys_attr_set. - * If retrieved after disconnection, the data should be read before a new connection established. The connection handle for - * the previous, now disconnected, connection will remain valid until a new one is created to allow this API call to refer to it. - * Connection handles belonging to active connections can be used as well, but care should be taken since the system attributes - * may be written to at any time by the peer during a connection's lifetime. - * - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS is used with this function, only the system attributes included in system services will be returned. - * @note When the @ref BLE_GATTS_SYS_ATTR_FLAG_USR_SRVCS is used with this function, only the system attributes included in user services will be returned. - * - * @mscs - * @mmsc{@ref BLE_GATTS_SYS_ATTRS_BONDED_PEER_MSC} - * @endmscs - * - * @param[in] conn_handle Connection handle of the recently terminated connection. - * @param[out] p_sys_attr_data Pointer to a buffer where updated information about system attributes will be filled in. The format of the data is described - * in @ref BLE_GATTS_SYS_ATTRS_FORMAT. NULL can be provided to obtain the length of the data. - * @param[in,out] p_len Size of application buffer if p_sys_attr_data is not NULL. Unconditionally updated to actual length of system attribute data. - * @param[in] flags Optional additional flags, see @ref BLE_GATTS_SYS_ATTR_FLAGS - * - * @retval ::NRF_SUCCESS Successfully retrieved the system attribute information. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid flags supplied. - * @retval ::NRF_ERROR_DATA_SIZE The system attribute information did not fit into the provided buffer. - * @retval ::NRF_ERROR_NOT_FOUND No system attributes found. - */ -SVCALL(SD_BLE_GATTS_SYS_ATTR_GET, uint32_t, sd_ble_gatts_sys_attr_get(uint16_t conn_handle, uint8_t *p_sys_attr_data, uint16_t *p_len, uint32_t flags)); - - -/**@brief Retrieve the first valid user attribute handle. - * - * @param[out] p_handle Pointer to an integer where the handle will be stored. - * - * @retval ::NRF_SUCCESS Successfully retrieved the handle. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - */ -SVCALL(SD_BLE_GATTS_INITIAL_USER_HANDLE_GET, uint32_t, sd_ble_gatts_initial_user_handle_get(uint16_t *p_handle)); - -/**@brief Retrieve the attribute UUID and/or metadata. - * - * @param[in] handle Attribute handle - * @param[out] p_uuid UUID of the attribute. Use NULL to omit this field. - * @param[out] p_md Metadata of the attribute. Use NULL to omit this field. - * - * @retval ::NRF_SUCCESS Successfully retrieved the attribute metadata, - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameters supplied. Returned when both @c p_uuid and @c p_md are NULL. - * @retval ::NRF_ERROR_NOT_FOUND Attribute was not found. - */ -SVCALL(SD_BLE_GATTS_ATTR_GET, uint32_t, sd_ble_gatts_attr_get(uint16_t handle, ble_uuid_t * p_uuid, ble_gatts_attr_md_t * p_md)); - -/**@brief Reply to an ATT_MTU exchange request by sending an Exchange MTU Response to the client. - * - * @details This function is only used to reply to a @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST event. - * - * @details The SoftDevice sets ATT_MTU to the minimum of: - * - The Client RX MTU value from @ref BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST, and - * - The Server RX MTU value. - * - * However, the SoftDevice never sets ATT_MTU lower than @ref BLE_GATT_ATT_MTU_DEFAULT. - * - * @mscs - * @mmsc{@ref BLE_GATTS_MTU_EXCHANGE} - * @endmscs - * - * @param[in] conn_handle The connection handle identifying the connection to perform this procedure on. - * @param[in] server_rx_mtu Server RX MTU size. - * - The minimum value is @ref BLE_GATT_ATT_MTU_DEFAULT. - * - The maximum value is @ref ble_gatt_conn_cfg_t::att_mtu in the connection configuration - * used for this connection. - * - The value must be equal to Client RX MTU size given in @ref sd_ble_gattc_exchange_mtu_request - * if an ATT_MTU exchange has already been performed in the other direction. - * - * @retval ::NRF_SUCCESS Successfully sent response to the client. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection State or no ATT_MTU exchange request pending. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid Server RX MTU size supplied. - * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection. - */ -SVCALL(SD_BLE_GATTS_EXCHANGE_MTU_REPLY, uint32_t, sd_ble_gatts_exchange_mtu_reply(uint16_t conn_handle, uint16_t server_rx_mtu)); -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_GATTS_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_hci.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_hci.h deleted file mode 100644 index f0dde9a03a..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_hci.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ -*/ - - -#ifndef BLE_HCI_H__ -#define BLE_HCI_H__ -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup BLE_HCI_STATUS_CODES Bluetooth status codes - * @{ */ - -#define BLE_HCI_STATUS_CODE_SUCCESS 0x00 /**< Success. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_BTLE_COMMAND 0x01 /**< Unknown BLE Command. */ -#define BLE_HCI_STATUS_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 /**< Unknown Connection Identifier. */ -/*0x03 Hardware Failure -0x04 Page Timeout -*/ -#define BLE_HCI_AUTHENTICATION_FAILURE 0x05 /**< Authentication Failure. */ -#define BLE_HCI_STATUS_CODE_PIN_OR_KEY_MISSING 0x06 /**< Pin or Key missing. */ -#define BLE_HCI_MEMORY_CAPACITY_EXCEEDED 0x07 /**< Memory Capacity Exceeded. */ -#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */ -/*0x09 Connection Limit Exceeded -0x0A Synchronous Connection Limit To A Device Exceeded -0x0B ACL Connection Already Exists*/ -#define BLE_HCI_STATUS_CODE_COMMAND_DISALLOWED 0x0C /**< Command Disallowed. */ -/*0x0D Connection Rejected due to Limited Resources -0x0E Connection Rejected Due To Security Reasons -0x0F Connection Rejected due to Unacceptable BD_ADDR -0x10 Connection Accept Timeout Exceeded -0x11 Unsupported Feature or Parameter Value*/ -#define BLE_HCI_STATUS_CODE_INVALID_BTLE_COMMAND_PARAMETERS 0x12 /**< Invalid BLE Command Parameters. */ -#define BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13 /**< Remote User Terminated Connection. */ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES 0x14 /**< Remote Device Terminated Connection due to low resources.*/ -#define BLE_HCI_REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF 0x15 /**< Remote Device Terminated Connection due to power off. */ -#define BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION 0x16 /**< Local Host Terminated Connection. */ -/* -0x17 Repeated Attempts -0x18 Pairing Not Allowed -0x19 Unknown LMP PDU -*/ -#define BLE_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1A /**< Unsupported Remote Feature. */ -/* -0x1B SCO Offset Rejected -0x1C SCO Interval Rejected -0x1D SCO Air Mode Rejected*/ -#define BLE_HCI_STATUS_CODE_INVALID_LMP_PARAMETERS 0x1E /**< Invalid LMP Parameters. */ -#define BLE_HCI_STATUS_CODE_UNSPECIFIED_ERROR 0x1F /**< Unspecified Error. */ -/*0x20 Unsupported LMP Parameter Value -0x21 Role Change Not Allowed -*/ -#define BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT 0x22 /**< LMP Response Timeout. */ -#define BLE_HCI_STATUS_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 /**< LMP Error Transaction Collision/LL Procedure Collision. */ -#define BLE_HCI_STATUS_CODE_LMP_PDU_NOT_ALLOWED 0x24 /**< LMP PDU Not Allowed. */ -/*0x25 Encryption Mode Not Acceptable -0x26 Link Key Can Not be Changed -0x27 Requested QoS Not Supported -*/ -#define BLE_HCI_INSTANT_PASSED 0x28 /**< Instant Passed. */ -#define BLE_HCI_PAIRING_WITH_UNIT_KEY_UNSUPPORTED 0x29 /**< Pairing with Unit Key Unsupported. */ -#define BLE_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2A /**< Different Transaction Collision. */ -/* -0x2B Reserved -0x2C QoS Unacceptable Parameter -0x2D QoS Rejected -0x2E Channel Classification Not Supported -0x2F Insufficient Security -*/ -#define BLE_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 /**< Parameter Out Of Mandatory Range. */ -/* -0x31 Reserved -0x32 Role Switch Pending -0x33 Reserved -0x34 Reserved Slot Violation -0x35 Role Switch Failed -0x36 Extended Inquiry Response Too Large -0x37 Secure Simple Pairing Not Supported By Host. -0x38 Host Busy - Pairing -0x39 Connection Rejected due to No Suitable Channel Found*/ -#define BLE_HCI_CONTROLLER_BUSY 0x3A /**< Controller Busy. */ -#define BLE_HCI_CONN_INTERVAL_UNACCEPTABLE 0x3B /**< Connection Interval Unacceptable. */ -#define BLE_HCI_DIRECTED_ADVERTISER_TIMEOUT 0x3C /**< Directed Advertisement Timeout. */ -#define BLE_HCI_CONN_TERMINATED_DUE_TO_MIC_FAILURE 0x3D /**< Connection Terminated due to MIC Failure. */ -#define BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED 0x3E /**< Connection Failed to be Established. */ - -/** @} */ - - -#ifdef __cplusplus -} -#endif -#endif // BLE_HCI_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_l2cap.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_l2cap.h deleted file mode 100644 index eaeb4b7d28..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_l2cap.h +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Copyright (c) 2011 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_L2CAP Logical Link Control and Adaptation Protocol (L2CAP) - @{ - @brief Definitions and prototypes for the L2CAP interface. - */ - -#ifndef BLE_L2CAP_H__ -#define BLE_L2CAP_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_ranges.h" -#include "ble_types.h" -#include "ble_err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup BLE_L2CAP_TERMINOLOGY Terminology - * @{ - * @details - * - * L2CAP SDU - * - A data unit that the application can send/receive to/from a peer. - * - * L2CAP PDU - * - A data unit that is exchanged between local and remote L2CAP entities. - * It consists of L2CAP protocol control information and payload fields. - * The payload field can contain an L2CAP SDU or a part of an L2CAP SDU. - * - * L2CAP MTU - * - The maximum length of an L2CAP SDU. - * - * L2CAP MPS - * - The maximum length of an L2CAP PDU payload field. - * - * Credits - * - A value indicating the number of L2CAP PDUs that the receiver of the credit can send to the peer. - * @} */ - -/**@addtogroup BLE_L2CAP_ENUMERATIONS Enumerations - * @{ */ - -/**@brief L2CAP API SVC numbers. */ -enum BLE_L2CAP_SVCS -{ - SD_BLE_L2CAP_CH_SETUP = BLE_L2CAP_SVC_BASE + 0, /**< Set up an L2CAP channel. */ - SD_BLE_L2CAP_CH_RELEASE = BLE_L2CAP_SVC_BASE + 1, /**< Release an L2CAP channel. */ - SD_BLE_L2CAP_CH_RX = BLE_L2CAP_SVC_BASE + 2, /**< Receive an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_TX = BLE_L2CAP_SVC_BASE + 3, /**< Transmit an SDU on an L2CAP channel. */ - SD_BLE_L2CAP_CH_FLOW_CONTROL = BLE_L2CAP_SVC_BASE + 4, /**< Advanced SDU reception flow control. */ -}; - -/**@brief L2CAP Event IDs. */ -enum BLE_L2CAP_EVTS -{ - BLE_L2CAP_EVT_CH_SETUP_REQUEST = BLE_L2CAP_EVT_BASE + 0, /**< L2CAP Channel Setup Request event. - \n See @ref ble_l2cap_evt_ch_setup_request_t. */ - BLE_L2CAP_EVT_CH_SETUP_REFUSED = BLE_L2CAP_EVT_BASE + 1, /**< L2CAP Channel Setup Refused event. - \n See @ref ble_l2cap_evt_ch_setup_refused_t. */ - BLE_L2CAP_EVT_CH_SETUP = BLE_L2CAP_EVT_BASE + 2, /**< L2CAP Channel Setup Completed event. - \n See @ref ble_l2cap_evt_ch_setup_t. */ - BLE_L2CAP_EVT_CH_RELEASED = BLE_L2CAP_EVT_BASE + 3, /**< L2CAP Channel Released event. - \n No additional event structure applies. */ - BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED = BLE_L2CAP_EVT_BASE + 4, /**< L2CAP Channel SDU data buffer released event. - \n See @ref ble_l2cap_evt_ch_sdu_buf_released_t. */ - BLE_L2CAP_EVT_CH_CREDIT = BLE_L2CAP_EVT_BASE + 5, /**< L2CAP Channel Credit received. - \n See @ref ble_l2cap_evt_ch_credit_t. */ - BLE_L2CAP_EVT_CH_RX = BLE_L2CAP_EVT_BASE + 6, /**< L2CAP Channel SDU received. - \n See @ref ble_l2cap_evt_ch_rx_t. */ - BLE_L2CAP_EVT_CH_TX = BLE_L2CAP_EVT_BASE + 7, /**< L2CAP Channel SDU transmitted. - \n See @ref ble_l2cap_evt_ch_tx_t. */ -}; - -/** @} */ - -/**@addtogroup BLE_L2CAP_DEFINES Defines - * @{ */ - -/**@brief Maximum number of L2CAP channels per connection. */ -#define BLE_L2CAP_CH_COUNT_MAX (64) - -/**@brief Minimum L2CAP MTU, in bytes. */ -#define BLE_L2CAP_MTU_MIN (23) - -/**@brief Minimum L2CAP MPS, in bytes. */ -#define BLE_L2CAP_MPS_MIN (23) - -/**@brief Invalid CID. */ -#define BLE_L2CAP_CID_INVALID (0x0000) - -/**@brief Default number of credits for @ref sd_ble_l2cap_ch_flow_control. */ -#define BLE_L2CAP_CREDITS_DEFAULT (1) - -/**@defgroup BLE_L2CAP_CH_SETUP_REFUSED_SRCS L2CAP channel setup refused sources - * @{ */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_LOCAL (0x01) /**< Local. */ -#define BLE_L2CAP_CH_SETUP_REFUSED_SRC_REMOTE (0x02) /**< Remote. */ - /** @} */ - - /** @defgroup BLE_L2CAP_CH_STATUS_CODES L2CAP channel status codes - * @{ */ -#define BLE_L2CAP_CH_STATUS_CODE_SUCCESS (0x0000) /**< Success. */ -#define BLE_L2CAP_CH_STATUS_CODE_LE_PSM_NOT_SUPPORTED (0x0002) /**< LE_PSM not supported. */ -#define BLE_L2CAP_CH_STATUS_CODE_NO_RESOURCES (0x0004) /**< No resources available. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHENTICATION (0x0005) /**< Insufficient authentication. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_AUTHORIZATION (0x0006) /**< Insufficient authorization. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC_KEY_SIZE (0x0007) /**< Insufficient encryption key size. */ -#define BLE_L2CAP_CH_STATUS_CODE_INSUFF_ENC (0x0008) /**< Insufficient encryption. */ -#define BLE_L2CAP_CH_STATUS_CODE_INVALID_SCID (0x0009) /**< Invalid Source CID. */ -#define BLE_L2CAP_CH_STATUS_CODE_SCID_ALLOCATED (0x000A) /**< Source CID already allocated. */ -#define BLE_L2CAP_CH_STATUS_CODE_UNACCEPTABLE_PARAMS (0x000B) /**< Unacceptable parameters. */ -#define BLE_L2CAP_CH_STATUS_CODE_NOT_UNDERSTOOD (0x8000) /**< Command Reject received instead of LE Credit Based Connection Response. */ -#define BLE_L2CAP_CH_STATUS_CODE_TIMEOUT (0xC000) /**< Operation timed out. */ -/** @} */ - -/** @} */ - -/**@addtogroup BLE_L2CAP_STRUCTURES Structures - * @{ */ - -/** - * @brief BLE L2CAP connection configuration parameters, set with @ref sd_ble_cfg_set. - * - * @note These parameters are set per connection, so all L2CAP channels created on this connection - * will have the same parameters. - * - * @retval ::NRF_ERROR_INVALID_PARAM One or more of the following is true: - * - rx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - tx_mps is smaller than @ref BLE_L2CAP_MPS_MIN. - * - ch_count is greater than @ref BLE_L2CAP_CH_COUNT_MAX. - * @retval ::NRF_ERROR_NO_MEM rx_mps or tx_mps is set too high. - */ -typedef struct -{ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to receive on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall - be able to transmit on L2CAP channels on connections with this - configuration. The minimum value is @ref BLE_L2CAP_MPS_MIN. */ - uint8_t rx_queue_size; /**< Number of SDU data buffers that can be queued for reception per - L2CAP channel. The minimum value is one. */ - uint8_t tx_queue_size; /**< Number of SDU data buffers that can be queued for transmission - per L2CAP channel. The minimum value is one. */ - uint8_t ch_count; /**< Number of L2CAP channels the application can create per connection - with this configuration. The default value is zero, the maximum - value is @ref BLE_L2CAP_CH_COUNT_MAX. - @note if this parameter is set to zero, all other parameters in - @ref ble_l2cap_conn_cfg_t are ignored. */ -} ble_l2cap_conn_cfg_t; - -/**@brief L2CAP channel RX parameters. */ -typedef struct -{ - uint16_t rx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP shall be able to - receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MTU_MIN. */ - uint16_t rx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP shall be - able to receive on this L2CAP channel. - - Must be equal to or greater than @ref BLE_L2CAP_MPS_MIN. - - Must be equal to or less than @ref ble_l2cap_conn_cfg_t::rx_mps. */ - ble_data_t sdu_buf; /**< SDU data buffer for reception. - - If @ref ble_data_t::p_data is non-NULL, initial credits are - issued to the peer. - - If @ref ble_data_t::p_data is NULL, no initial credits are - issued to the peer. */ -} ble_l2cap_ch_rx_params_t; - -/**@brief L2CAP channel setup parameters. */ -typedef struct -{ - ble_l2cap_ch_rx_params_t rx_params; /**< L2CAP channel RX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. Used when requesting - setup of an L2CAP channel, ignored otherwise. */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES. - Used when replying to a setup request of an L2CAP - channel, ignored otherwise. */ -} ble_l2cap_ch_setup_params_t; - -/**@brief L2CAP channel TX parameters. */ -typedef struct -{ - uint16_t tx_mtu; /**< The maximum L2CAP SDU size, in bytes, that L2CAP is able to - transmit on this L2CAP channel. */ - uint16_t peer_mps; /**< The maximum L2CAP PDU payload size, in bytes, that the peer is - able to receive on this L2CAP channel. */ - uint16_t tx_mps; /**< The maximum L2CAP PDU payload size, in bytes, that L2CAP is able - to transmit on this L2CAP channel. This is effective tx_mps, - selected by the SoftDevice as - MIN( @ref ble_l2cap_ch_tx_params_t::peer_mps, @ref ble_l2cap_conn_cfg_t::tx_mps ) */ - uint16_t credits; /**< Initial credits given by the peer. */ -} ble_l2cap_ch_tx_params_t; - -/**@brief L2CAP Channel Setup Request event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ - uint16_t le_psm; /**< LE Protocol/Service Multiplexer. */ -} ble_l2cap_evt_ch_setup_request_t; - -/**@brief L2CAP Channel Setup Refused event. */ -typedef struct -{ - uint8_t source; /**< Source, see @ref BLE_L2CAP_CH_SETUP_REFUSED_SRCS */ - uint16_t status; /**< Status code, see @ref BLE_L2CAP_CH_STATUS_CODES */ -} ble_l2cap_evt_ch_setup_refused_t; - -/**@brief L2CAP Channel Setup Completed event. */ -typedef struct -{ - ble_l2cap_ch_tx_params_t tx_params; /**< L2CAP channel TX parameters. */ -} ble_l2cap_evt_ch_setup_t; - -/**@brief L2CAP Channel SDU Data Duffer Released event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< Returned reception or transmission SDU data buffer. The SoftDevice - returns SDU data buffers supplied by the application, which have - not yet been returned previously via a @ref BLE_L2CAP_EVT_CH_RX or - @ref BLE_L2CAP_EVT_CH_TX event. */ -} ble_l2cap_evt_ch_sdu_buf_released_t; - -/**@brief L2CAP Channel Credit received event. */ -typedef struct -{ - uint16_t credits; /**< Additional credits given by the peer. */ -} ble_l2cap_evt_ch_credit_t; - -/**@brief L2CAP Channel received SDU event. */ -typedef struct -{ - uint16_t sdu_len; /**< Total SDU length, in bytes. */ - ble_data_t sdu_buf; /**< SDU data buffer. - @note If there is not enough space in the buffer - (sdu_buf.len < sdu_len) then the rest of the SDU will be - silently discarded by the SoftDevice. */ -} ble_l2cap_evt_ch_rx_t; - -/**@brief L2CAP Channel transmitted SDU event. */ -typedef struct -{ - ble_data_t sdu_buf; /**< SDU data buffer. */ -} ble_l2cap_evt_ch_tx_t; - -/**@brief L2CAP event structure. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which the event occured. */ - uint16_t local_cid; /**< Local Channel ID of the L2CAP channel, or - @ref BLE_L2CAP_CID_INVALID if not present. */ - union - { - ble_l2cap_evt_ch_setup_request_t ch_setup_request; /**< L2CAP Channel Setup Request Event Parameters. */ - ble_l2cap_evt_ch_setup_refused_t ch_setup_refused; /**< L2CAP Channel Setup Refused Event Parameters. */ - ble_l2cap_evt_ch_setup_t ch_setup; /**< L2CAP Channel Setup Completed Event Parameters. */ - ble_l2cap_evt_ch_sdu_buf_released_t ch_sdu_buf_released;/**< L2CAP Channel SDU Data Buffer Released Event Parameters. */ - ble_l2cap_evt_ch_credit_t credit; /**< L2CAP Channel Credit Received Event Parameters. */ - ble_l2cap_evt_ch_rx_t rx; /**< L2CAP Channel SDU Received Event Parameters. */ - ble_l2cap_evt_ch_tx_t tx; /**< L2CAP Channel SDU Transmitted Event Parameters. */ - } params; /**< Event Parameters. */ -} ble_l2cap_evt_t; - -/** @} */ - -/**@addtogroup BLE_L2CAP_FUNCTIONS Functions - * @{ */ - -/**@brief Set up an L2CAP channel. - * - * @details This function is used to: - * - Request setup of an L2CAP channel: sends an LE Credit Based Connection Request packet to a peer. - * - Reply to a setup request of an L2CAP channel (if called in response to a - * @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST event): sends an LE Credit Based Connection - * Response packet to a peer. - * - * @note A call to this function will require the application to keep the SDU data buffer alive - * until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX or - * @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_SETUP, Setup successful.} - * @event{@ref BLE_L2CAP_EVT_CH_SETUP_REFUSED, Setup failed.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_SETUP_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in,out] p_local_cid Pointer to a uint16_t containing Local Channel ID of the L2CAP channel: - * - As input: @ref BLE_L2CAP_CID_INVALID when requesting setup of an L2CAP - * channel or local_cid provided in the @ref BLE_L2CAP_EVT_CH_SETUP_REQUEST - * event when replying to a setup request of an L2CAP channel. - * - As output: local_cid for this channel. - * @param[in] p_params L2CAP channel parameters. - * - * @retval ::NRF_SUCCESS Successfully queued request or response for transmission. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Supplied higher rx_mps than has been configured on this link. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (L2CAP channel already set up). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES The limit has been reached for available L2CAP channels, - * see @ref ble_l2cap_conn_cfg_t::ch_count. - */ -SVCALL(SD_BLE_L2CAP_CH_SETUP, uint32_t, sd_ble_l2cap_ch_setup(uint16_t conn_handle, uint16_t *p_local_cid, ble_l2cap_ch_setup_params_t const *p_params)); - -/**@brief Release an L2CAP channel. - * - * @details This sends a Disconnection Request packet to a peer. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RELEASED, Release complete.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RELEASE_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * - * @retval ::NRF_SUCCESS Successfully queued request for transmission. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_RELEASE, uint32_t, sd_ble_l2cap_ch_release(uint16_t conn_handle, uint16_t local_cid)); - -/**@brief Receive an SDU on an L2CAP channel. - * - * @details This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_RX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::rx_queue_size SDU data buffers - * for reception per L2CAP channel. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_RX, The SDU is received.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_RX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Buffer accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_RESOURCES Too many SDU data buffers supplied. Wait for a - * @ref BLE_L2CAP_EVT_CH_RX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_RX, uint32_t, sd_ble_l2cap_ch_rx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Transmit an SDU on an L2CAP channel. - * - * @note A call to this function will require the application to keep the memory pointed by - * @ref ble_data_t::p_data alive until the SDU data buffer is returned in @ref BLE_L2CAP_EVT_CH_TX - * or @ref BLE_L2CAP_EVT_CH_SDU_BUF_RELEASED event. - * - * @note The SoftDevice can queue up to @ref ble_l2cap_conn_cfg_t::tx_queue_size SDUs for - * transmission per L2CAP channel. - * - * @note The application can keep track of the available credits for transmission by following - * the procedure below: - * - Store initial credits given by the peer in a variable. - * (Initial credits are provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Decrement the variable, which stores the currently available credits, by - * ceiling((@ref ble_data_t::len + 2) / tx_mps) when a call to this function returns - * @ref NRF_SUCCESS. (tx_mps is provided in a @ref BLE_L2CAP_EVT_CH_SETUP event.) - * - Increment the variable, which stores the currently available credits, by additional - * credits given by the peer in a @ref BLE_L2CAP_EVT_CH_CREDIT event. - * - * @events - * @event{@ref BLE_L2CAP_EVT_CH_TX, The SDU is transmitted.} - * @endevents - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_TX_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel. - * @param[in] p_sdu_buf Pointer to the SDU data buffer. - * - * @retval ::NRF_SUCCESS Successfully queued L2CAP SDU for transmission. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for the L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - * @retval ::NRF_ERROR_DATA_SIZE Invalid SDU length supplied, must not be more than - * @ref ble_l2cap_ch_tx_params_t::tx_mtu provided in - * @ref BLE_L2CAP_EVT_CH_SETUP event. - * @retval ::NRF_ERROR_RESOURCES Too many SDUs queued for transmission. Wait for a - * @ref BLE_L2CAP_EVT_CH_TX event and retry. - */ -SVCALL(SD_BLE_L2CAP_CH_TX, uint32_t, sd_ble_l2cap_ch_tx(uint16_t conn_handle, uint16_t local_cid, ble_data_t const *p_sdu_buf)); - -/**@brief Advanced SDU reception flow control. - * - * @details Adjust the way the SoftDevice issues credits to the peer. - * This may issue additional credits to the peer using an LE Flow Control Credit packet. - * - * @mscs - * @mmsc{@ref BLE_L2CAP_CH_FLOW_CONTROL_MSC} - * @endmscs - * - * @param[in] conn_handle Connection Handle. - * @param[in] local_cid Local Channel ID of the L2CAP channel or @ref BLE_L2CAP_CID_INVALID to set - * the value that will be used for newly created channels. - * @param[in] credits Number of credits that the SoftDevice will make sure the peer has every - * time it starts using a new reception buffer. - * - @ref BLE_L2CAP_CREDITS_DEFAULT is the default value the SoftDevice will - * use if this function is not called. - * - If set to zero, the SoftDevice will stop issuing credits for new reception - * buffers the application provides or has provided. SDU reception that is - * currently ongoing will be allowed to complete. - * @param[out] p_credits NULL or pointer to a uint16_t. If a valid pointer is provided, it will be - * written by the SoftDevice with the number of credits that is or will be - * available to the peer. If the value written by the SoftDevice is 0 when - * credits parameter was set to 0, the peer will not be able to send more - * data until more credits are provided by calling this function again with - * credits > 0. This parameter is ignored when local_cid is set to - * @ref BLE_L2CAP_CID_INVALID. - * - * @note Application should take care when setting number of credits higher than default value. In - * this case the application must make sure that the SoftDevice always has reception buffers - * available (see @ref sd_ble_l2cap_ch_rx) for that channel. If the SoftDevice does not have - * such buffers available, packets may be NACKed on the Link Layer and all Bluetooth traffic - * on the connection handle may be stalled until the SoftDevice again has an available - * reception buffer. This applies even if the application has used this call to set the - * credits back to default, or zero. - * - * @retval ::NRF_SUCCESS Flow control parameters accepted. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_STATE Invalid State to perform operation (Setup or release is - * in progress for an L2CAP channel). - * @retval ::NRF_ERROR_NOT_FOUND CID not found. - */ -SVCALL(SD_BLE_L2CAP_CH_FLOW_CONTROL, uint32_t, sd_ble_l2cap_ch_flow_control(uint16_t conn_handle, uint16_t local_cid, uint16_t credits, uint16_t *p_credits)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // BLE_L2CAP_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_ranges.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_ranges.h deleted file mode 100644 index 0935bca071..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_ranges.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_ranges Module specific SVC, event and option number subranges - @{ - - @brief Definition of SVC, event and option number subranges for each API module. - - @note - SVCs, event and option numbers are split into subranges for each API module. - Each module receives its entire allocated range of SVC calls, whether implemented or not, - but return BLE_ERROR_NOT_SUPPORTED for unimplemented or undefined calls in its range. - - Note that the symbols BLE__SVC_LAST is the end of the allocated SVC range, - rather than the last SVC function call actually defined and implemented. - - Specific SVC, event and option values are defined in each module's ble_.h file, - which defines names of each individual SVC code based on the range start value. -*/ - -#ifndef BLE_RANGES_H__ -#define BLE_RANGES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define BLE_SVC_BASE 0x60 /**< Common BLE SVC base. */ -#define BLE_SVC_LAST 0x6B /**< Common BLE SVC last. */ - -#define BLE_GAP_SVC_BASE 0x6C /**< GAP BLE SVC base. */ -#define BLE_GAP_SVC_LAST 0x9A /**< GAP BLE SVC last. */ - -#define BLE_GATTC_SVC_BASE 0x9B /**< GATTC BLE SVC base. */ -#define BLE_GATTC_SVC_LAST 0xA7 /**< GATTC BLE SVC last. */ - -#define BLE_GATTS_SVC_BASE 0xA8 /**< GATTS BLE SVC base. */ -#define BLE_GATTS_SVC_LAST 0xB7 /**< GATTS BLE SVC last. */ - -#define BLE_L2CAP_SVC_BASE 0xB8 /**< L2CAP BLE SVC base. */ -#define BLE_L2CAP_SVC_LAST 0xBF /**< L2CAP BLE SVC last. */ - - -#define BLE_EVT_INVALID 0x00 /**< Invalid BLE Event. */ - -#define BLE_EVT_BASE 0x01 /**< Common BLE Event base. */ -#define BLE_EVT_LAST 0x0F /**< Common BLE Event last. */ - -#define BLE_GAP_EVT_BASE 0x10 /**< GAP BLE Event base. */ -#define BLE_GAP_EVT_LAST 0x2F /**< GAP BLE Event last. */ - -#define BLE_GATTC_EVT_BASE 0x30 /**< GATTC BLE Event base. */ -#define BLE_GATTC_EVT_LAST 0x4F /**< GATTC BLE Event last. */ - -#define BLE_GATTS_EVT_BASE 0x50 /**< GATTS BLE Event base. */ -#define BLE_GATTS_EVT_LAST 0x6F /**< GATTS BLE Event last. */ - -#define BLE_L2CAP_EVT_BASE 0x70 /**< L2CAP BLE Event base. */ -#define BLE_L2CAP_EVT_LAST 0x8F /**< L2CAP BLE Event last. */ - - -#define BLE_OPT_INVALID 0x00 /**< Invalid BLE Option. */ - -#define BLE_OPT_BASE 0x01 /**< Common BLE Option base. */ -#define BLE_OPT_LAST 0x1F /**< Common BLE Option last. */ - -#define BLE_GAP_OPT_BASE 0x20 /**< GAP BLE Option base. */ -#define BLE_GAP_OPT_LAST 0x3F /**< GAP BLE Option last. */ - -#define BLE_GATT_OPT_BASE 0x40 /**< GATT BLE Option base. */ -#define BLE_GATT_OPT_LAST 0x5F /**< GATT BLE Option last. */ - -#define BLE_GATTC_OPT_BASE 0x60 /**< GATTC BLE Option base. */ -#define BLE_GATTC_OPT_LAST 0x7F /**< GATTC BLE Option last. */ - -#define BLE_GATTS_OPT_BASE 0x80 /**< GATTS BLE Option base. */ -#define BLE_GATTS_OPT_LAST 0x9F /**< GATTS BLE Option last. */ - -#define BLE_L2CAP_OPT_BASE 0xA0 /**< L2CAP BLE Option base. */ -#define BLE_L2CAP_OPT_LAST 0xBF /**< L2CAP BLE Option last. */ - - -#define BLE_CFG_INVALID 0x00 /**< Invalid BLE configuration. */ - -#define BLE_CFG_BASE 0x01 /**< Common BLE configuration base. */ -#define BLE_CFG_LAST 0x1F /**< Common BLE configuration last. */ - -#define BLE_CONN_CFG_BASE 0x20 /**< BLE connection configuration base. */ -#define BLE_CONN_CFG_LAST 0x3F /**< BLE connection configuration last. */ - -#define BLE_GAP_CFG_BASE 0x40 /**< GAP BLE configuration base. */ -#define BLE_GAP_CFG_LAST 0x5F /**< GAP BLE configuration last. */ - -#define BLE_GATT_CFG_BASE 0x60 /**< GATT BLE configuration base. */ -#define BLE_GATT_CFG_LAST 0x7F /**< GATT BLE configuration last. */ - -#define BLE_GATTC_CFG_BASE 0x80 /**< GATTC BLE configuration base. */ -#define BLE_GATTC_CFG_LAST 0x9F /**< GATTC BLE configuration last. */ - -#define BLE_GATTS_CFG_BASE 0xA0 /**< GATTS BLE configuration base. */ -#define BLE_GATTS_CFG_LAST 0xBF /**< GATTS BLE configuration last. */ - -#define BLE_L2CAP_CFG_BASE 0xC0 /**< L2CAP BLE configuration base. */ -#define BLE_L2CAP_CFG_LAST 0xDF /**< L2CAP BLE configuration last. */ - - - - - -#ifdef __cplusplus -} -#endif -#endif /* BLE_RANGES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_types.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_types.h deleted file mode 100644 index 88c93180c8..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/ble_types.h +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON - @{ - @defgroup ble_types Common types and macro definitions - @{ - - @brief Common types and macro definitions for the BLE SoftDevice. - */ - -#ifndef BLE_TYPES_H__ -#define BLE_TYPES_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_TYPES_DEFINES Defines - * @{ */ - -/** @defgroup BLE_CONN_HANDLES BLE Connection Handles - * @{ */ -#define BLE_CONN_HANDLE_INVALID 0xFFFF /**< Invalid Connection Handle. */ -#define BLE_CONN_HANDLE_ALL 0xFFFE /**< Applies to all Connection Handles. */ -/** @} */ - - -/** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs - * @{ */ -/* Generic UUIDs, applicable to all services */ -#define BLE_UUID_UNKNOWN 0x0000 /**< Reserved UUID. */ -#define BLE_UUID_SERVICE_PRIMARY 0x2800 /**< Primary Service. */ -#define BLE_UUID_SERVICE_SECONDARY 0x2801 /**< Secondary Service. */ -#define BLE_UUID_SERVICE_INCLUDE 0x2802 /**< Include. */ -#define BLE_UUID_CHARACTERISTIC 0x2803 /**< Characteristic. */ -#define BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP 0x2900 /**< Characteristic Extended Properties Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_USER_DESC 0x2901 /**< Characteristic User Description Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG 0x2902 /**< Client Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG 0x2903 /**< Server Characteristic Configuration Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT 0x2904 /**< Characteristic Presentation Format Descriptor. */ -#define BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT 0x2905 /**< Characteristic Aggregate Format Descriptor. */ -/* GATT specific UUIDs */ -#define BLE_UUID_GATT 0x1801 /**< Generic Attribute Profile. */ -#define BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED 0x2A05 /**< Service Changed Characteristic. */ -/* GAP specific UUIDs */ -#define BLE_UUID_GAP 0x1800 /**< Generic Access Profile. */ -#define BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME 0x2A00 /**< Device Name Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE 0x2A01 /**< Appearance Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR 0x2A03 /**< Reconnection Address Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_PPCP 0x2A04 /**< Peripheral Preferred Connection Parameters Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_CAR 0x2AA6 /**< Central Address Resolution Characteristic. */ -#define BLE_UUID_GAP_CHARACTERISTIC_RPA_ONLY 0x2AC9 /**< Resolvable Private Address Only Characteristic. */ -/** @} */ - - -/** @defgroup BLE_UUID_TYPES Types of UUID - * @{ */ -#define BLE_UUID_TYPE_UNKNOWN 0x00 /**< Invalid UUID type. */ -#define BLE_UUID_TYPE_BLE 0x01 /**< Bluetooth SIG UUID (16-bit). */ -#define BLE_UUID_TYPE_VENDOR_BEGIN 0x02 /**< Vendor UUID types start at this index (128-bit). */ -/** @} */ - - -/** @defgroup BLE_APPEARANCES Bluetooth Appearance values - * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml - * @{ */ -#define BLE_APPEARANCE_UNKNOWN 0 /**< Unknown. */ -#define BLE_APPEARANCE_GENERIC_PHONE 64 /**< Generic Phone. */ -#define BLE_APPEARANCE_GENERIC_COMPUTER 128 /**< Generic Computer. */ -#define BLE_APPEARANCE_GENERIC_WATCH 192 /**< Generic Watch. */ -#define BLE_APPEARANCE_WATCH_SPORTS_WATCH 193 /**< Watch: Sports Watch. */ -#define BLE_APPEARANCE_GENERIC_CLOCK 256 /**< Generic Clock. */ -#define BLE_APPEARANCE_GENERIC_DISPLAY 320 /**< Generic Display. */ -#define BLE_APPEARANCE_GENERIC_REMOTE_CONTROL 384 /**< Generic Remote Control. */ -#define BLE_APPEARANCE_GENERIC_EYE_GLASSES 448 /**< Generic Eye-glasses. */ -#define BLE_APPEARANCE_GENERIC_TAG 512 /**< Generic Tag. */ -#define BLE_APPEARANCE_GENERIC_KEYRING 576 /**< Generic Keyring. */ -#define BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 640 /**< Generic Media Player. */ -#define BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 704 /**< Generic Barcode Scanner. */ -#define BLE_APPEARANCE_GENERIC_THERMOMETER 768 /**< Generic Thermometer. */ -#define BLE_APPEARANCE_THERMOMETER_EAR 769 /**< Thermometer: Ear. */ -#define BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR 832 /**< Generic Heart rate Sensor. */ -#define BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT 833 /**< Heart Rate Sensor: Heart Rate Belt. */ -#define BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 896 /**< Generic Blood Pressure. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_ARM 897 /**< Blood Pressure: Arm. */ -#define BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 898 /**< Blood Pressure: Wrist. */ -#define BLE_APPEARANCE_GENERIC_HID 960 /**< Human Interface Device (HID). */ -#define BLE_APPEARANCE_HID_KEYBOARD 961 /**< Keyboard (HID Subtype). */ -#define BLE_APPEARANCE_HID_MOUSE 962 /**< Mouse (HID Subtype). */ -#define BLE_APPEARANCE_HID_JOYSTICK 963 /**< Joystick (HID Subtype). */ -#define BLE_APPEARANCE_HID_GAMEPAD 964 /**< Gamepad (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITIZERSUBTYPE 965 /**< Digitizer Tablet (HID Subtype). */ -#define BLE_APPEARANCE_HID_CARD_READER 966 /**< Card Reader (HID Subtype). */ -#define BLE_APPEARANCE_HID_DIGITAL_PEN 967 /**< Digital Pen (HID Subtype). */ -#define BLE_APPEARANCE_HID_BARCODE 968 /**< Barcode Scanner (HID Subtype). */ -#define BLE_APPEARANCE_GENERIC_GLUCOSE_METER 1024 /**< Generic Glucose Meter. */ -#define BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR 1088 /**< Generic Running Walking Sensor. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE 1089 /**< Running Walking Sensor: In-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE 1090 /**< Running Walking Sensor: On-Shoe. */ -#define BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP 1091 /**< Running Walking Sensor: On-Hip. */ -#define BLE_APPEARANCE_GENERIC_CYCLING 1152 /**< Generic Cycling. */ -#define BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER 1153 /**< Cycling: Cycling Computer. */ -#define BLE_APPEARANCE_CYCLING_SPEED_SENSOR 1154 /**< Cycling: Speed Sensor. */ -#define BLE_APPEARANCE_CYCLING_CADENCE_SENSOR 1155 /**< Cycling: Cadence Sensor. */ -#define BLE_APPEARANCE_CYCLING_POWER_SENSOR 1156 /**< Cycling: Power Sensor. */ -#define BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR 1157 /**< Cycling: Speed and Cadence Sensor. */ -#define BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 3136 /**< Generic Pulse Oximeter. */ -#define BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 3137 /**< Fingertip (Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN 3138 /**< Wrist Worn(Pulse Oximeter subtype). */ -#define BLE_APPEARANCE_GENERIC_WEIGHT_SCALE 3200 /**< Generic Weight Scale. */ -#define BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT 5184 /**< Generic Outdoor Sports Activity. */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP 5185 /**< Location Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP 5186 /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD 5187 /**< Location Pod (Outdoor Sports Activity subtype). */ -#define BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD 5188 /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */ -/** @} */ - -/** @brief Set .type and .uuid fields of ble_uuid_struct to specified UUID value. */ -#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ - instance.type = BLE_UUID_TYPE_BLE; \ - instance.uuid = value;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t pointer. Both pointers must be valid/non-null. */ -#define BLE_UUID_COPY_PTR(dst, src) do {\ - (dst)->type = (src)->type; \ - (dst)->uuid = (src)->uuid;} while(0) - -/** @brief Copy type and uuid members from src to dst ble_uuid_t struct. */ -#define BLE_UUID_COPY_INST(dst, src) do {\ - (dst).type = (src).type; \ - (dst).uuid = (src).uuid;} while(0) - -/** @brief Compare for equality both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_EQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type == (p_uuid2)->type) && ((p_uuid1)->uuid == (p_uuid2)->uuid)) - -/** @brief Compare for difference both type and uuid members of two (valid, non-null) ble_uuid_t pointers. */ -#define BLE_UUID_NEQ(p_uuid1, p_uuid2) \ - (((p_uuid1)->type != (p_uuid2)->type) || ((p_uuid1)->uuid != (p_uuid2)->uuid)) - -/** @} */ - -/** @addtogroup BLE_TYPES_STRUCTURES Structures - * @{ */ - -/** @brief 128 bit UUID values. */ -typedef struct -{ - uint8_t uuid128[16]; /**< Little-Endian UUID bytes. */ -} ble_uuid128_t; - -/** @brief Bluetooth Low Energy UUID type, encapsulates both 16-bit and 128-bit UUIDs. */ -typedef struct -{ - uint16_t uuid; /**< 16-bit UUID value or octets 12-13 of 128-bit UUID. */ - uint8_t type; /**< UUID type, see @ref BLE_UUID_TYPES. If type is @ref BLE_UUID_TYPE_UNKNOWN, the value of uuid is undefined. */ -} ble_uuid_t; - -/**@brief Data structure. */ -typedef struct -{ - uint8_t *p_data; /**< Pointer to the data buffer provided to/from the application. */ - uint16_t len; /**< Length of the data buffer, in bytes. */ -} ble_data_t; - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* BLE_TYPES_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf52/nrf_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf52/nrf_mbr.h deleted file mode 100644 index e0c80e278c..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf52/nrf_mbr.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_mbr_api Master Boot Record API - @{ - - @brief APIs for updating SoftDevice and BootLoader - -*/ - -#ifndef NRF_MBR_H__ -#define NRF_MBR_H__ - -#include "nrf_svc.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_MBR_DEFINES Defines - * @{ */ - -/**@brief MBR SVC Base number. */ -#define MBR_SVC_BASE (0x18) - -/**@brief Page size in words. */ -#define MBR_PAGE_SIZE_IN_WORDS (1024) - -/** @brief The size that must be reserved for the MBR when a SoftDevice is written to flash. -This is the offset where the first byte of the SoftDevice hex file is written.*/ -#define MBR_SIZE (0x1000) - -/** @} */ - -/** @addtogroup NRF_MBR_ENUMS Enumerations - * @{ */ - -/**@brief nRF Master Boot Record API SVC numbers. */ -enum NRF_MBR_SVCS -{ - SD_MBR_COMMAND = MBR_SVC_BASE, /**< ::sd_mbr_command */ -}; - -/**@brief Possible values for ::sd_mbr_command_t.command */ -enum NRF_MBR_COMMANDS -{ - SD_MBR_COMMAND_COPY_BL, /**< Copy a new BootLoader. @see ::sd_mbr_command_copy_bl_t*/ - SD_MBR_COMMAND_COPY_SD, /**< Copy a new SoftDevice. @see ::sd_mbr_command_copy_sd_t*/ - SD_MBR_COMMAND_INIT_SD, /**< Initialize forwarding interrupts to SD, and run reset function in SD. Does not require any parameters in ::sd_mbr_command_t params.*/ - SD_MBR_COMMAND_COMPARE, /**< This command works like memcmp. @see ::sd_mbr_command_compare_t*/ - SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET, /**< Change the address the MBR starts after a reset. @see ::sd_mbr_command_vector_table_base_set_t*/ - SD_MBR_COMMAND_RESERVED, - SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, /**< Start forwarding all interrupts to this address. @see ::sd_mbr_command_irq_forward_address_set_t*/ -}; - -/** @} */ - -/** @addtogroup NRF_MBR_TYPES Types - * @{ */ - -/**@brief This command copies part of a new SoftDevice - * - * The destination area is erased before copying. - * If dst is in the middle of a flash page, that whole flash page will be erased. - * If (dst+len) is in the middle of a flash page, that whole flash page will be erased. - * - * The user of this function is responsible for setting the BPROT registers. - * - * @retval ::NRF_SUCCESS indicates that the contents of the memory blocks where copied correctly. - * @retval ::NRF_ERROR_INTERNAL indicates that the contents of the memory blocks where not verified correctly after copying. - */ -typedef struct -{ - uint32_t *src; /**< Pointer to the source of data to be copied.*/ - uint32_t *dst; /**< Pointer to the destination where the content is to be copied.*/ - uint32_t len; /**< Number of 32 bit words to copy. Must be a multiple of @ref MBR_PAGE_SIZE_IN_WORDS words.*/ -} sd_mbr_command_copy_sd_t; - - -/**@brief This command works like memcmp, but takes the length in words. - * - * @retval ::NRF_SUCCESS indicates that the contents of both memory blocks are equal. - * @retval ::NRF_ERROR_NULL indicates that the contents of the memory blocks are not equal. - */ -typedef struct -{ - uint32_t *ptr1; /**< Pointer to block of memory. */ - uint32_t *ptr2; /**< Pointer to block of memory. */ - uint32_t len; /**< Number of 32 bit words to compare.*/ -} sd_mbr_command_compare_t; - - -/**@brief This command copies a new BootLoader. - * - * With this command, destination of BootLoader is always the address written in - * NRF_UICR->BOOTADDR. - * - * Destination is erased by this function. - * If (destination+bl_len) is in the middle of a flash page, that whole flash page will be erased. - * - * This function will use the flash protect peripheral (BPROT or ACL) to protect the flash that is - * not intended to be written. - * - * On success, this function will not return. It will start the new BootLoader from reset-vector as normal. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_FORBIDDEN if NRF_UICR->BOOTADDR is not set. - * @retval ::NRF_ERROR_INVALID_LENGTH if parameters attempts to read or write outside flash area. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t *bl_src; /**< Pointer to the source of the Bootloader to be be copied.*/ - uint32_t bl_len; /**< Number of 32 bit words to copy for BootLoader. */ -} sd_mbr_command_copy_bl_t; - -/**@brief Change the address the MBR starts after a reset - * - * Once this function has been called, this address is where the MBR will start to forward - * interrupts to after a reset. - * - * To restore default forwarding this function should be called with @ref address set to 0. The - * MBR will then start forwarding interrupts to the address in NFR_UICR->BOOTADDR or to the - * SoftDevice if the BOOTADDR is not set. - * - * On success, this function will not return. It will reset the device. - * - * @retval ::NRF_ERROR_INTERNAL indicates an internal error that should not happen. - * @retval ::NRF_ERROR_INVALID_ADDR if parameter address is outside of the flash size. - * @retval ::NRF_ERROR_NO_MEM if no parameter page is provided (see SoftDevice Specification for more info) - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_vector_table_base_set_t; - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the MBR - * - * Unlike sd_mbr_command_vector_table_base_set_t, this function does not reset, and it does not - * change where the MBR starts after reset. - * - * @retval ::NRF_SUCCESS - */ -typedef struct -{ - uint32_t address; /**< The base address of the interrupt vector table for forwarded interrupts.*/ -} sd_mbr_command_irq_forward_address_set_t; - -/**@brief Input structure containing data used when calling ::sd_mbr_command - * - * Depending on what command value that is set, the corresponding params value type must also be - * set. See @ref NRF_MBR_COMMANDS for command types and corresponding params value type. If command - * @ref SD_MBR_COMMAND_INIT_SD is set, it is not necessary to set any values under params. - */ -typedef struct -{ - uint32_t command; /**< Type of command to be issued. See @ref NRF_MBR_COMMANDS. */ - union - { - sd_mbr_command_copy_sd_t copy_sd; /**< Parameters for copy SoftDevice.*/ - sd_mbr_command_compare_t compare; /**< Parameters for verify.*/ - sd_mbr_command_copy_bl_t copy_bl; /**< Parameters for copy BootLoader. Requires parameter page. */ - sd_mbr_command_vector_table_base_set_t base_set; /**< Parameters for vector table base set. Requires parameter page.*/ - sd_mbr_command_irq_forward_address_set_t irq_forward_address_set; /**< Parameters for irq forward address set*/ - } params; /**< Command parameters. */ -} sd_mbr_command_t; - -/** @} */ - -/** @addtogroup NRF_MBR_FUNCTIONS Functions - * @{ */ - -/**@brief Issue Master Boot Record commands - * - * Commands used when updating a SoftDevice and bootloader. - * - * The @ref SD_MBR_COMMAND_COPY_BL and @ref SD_MBR_COMMAND_VECTOR_TABLE_BASE_SET requires - * parameters to be retained by the MBR when resetting the IC. This is done in a separate flash - * page provided by the application. The UICR register UICR.NRFFW[1] must be set to an address - * corresponding to a page in the application flash space. This page will be cleared by the MBR and - * used to store the command before reset. When the UICR.NRFFW[1] field is set the page it refers - * to must not be used by the application. If the UICR.NRFFW[1] is set to 0xFFFFFFFF (the default) - * MBR commands which use flash will be unavailable and return @ref NRF_ERROR_NO_MEM. - * - * @param[in] param Pointer to a struct describing the command. - * - * @note For return values, see ::sd_mbr_command_copy_sd_t, ::sd_mbr_command_copy_bl_t, - * ::sd_mbr_command_compare_t, ::sd_mbr_command_vector_table_base_set_t, - * ::sd_mbr_command_irq_forward_address_set_t - * - * @retval ::NRF_ERROR_NO_MEM if UICR.NRFFW[1] is not set (i.e. is 0xFFFFFFFF). - * @retval ::NRF_ERROR_INVALID_PARAM if an invalid command is given. -*/ -SVCALL(SD_MBR_COMMAND, uint32_t, sd_mbr_command(sd_mbr_command_t* param)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_MBR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_ble.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_ble.h deleted file mode 100644 index 9ebb41f538..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_ble.h +++ /dev/null @@ -1,622 +0,0 @@ -/* - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup BLE_COMMON BLE SoftDevice Common - @{ - @defgroup ble_api Events, type definitions and API calls - @{ - - @brief Module independent events, type definitions and API calls for the BLE SoftDevice. - - */ - -#ifndef BLE_H__ -#define BLE_H__ - -#include -#include "nrf_svc.h" -#include "nrf_error.h" -#include "ble_err.h" -#include "ble_gap.h" -#include "ble_l2cap.h" -#include "ble_gatt.h" -#include "ble_gattc.h" -#include "ble_gatts.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup BLE_COMMON_ENUMERATIONS Enumerations - * @{ */ - -/** - * @brief Common API SVC numbers. - */ -enum BLE_COMMON_SVCS -{ - SD_BLE_ENABLE = BLE_SVC_BASE, /**< Enable and initialize the BLE stack */ - SD_BLE_EVT_GET, /**< Get an event from the pending events queue. */ - SD_BLE_UUID_VS_ADD, /**< Add a Vendor Specific UUID. */ - SD_BLE_UUID_DECODE, /**< Decode UUID bytes. */ - SD_BLE_UUID_ENCODE, /**< Encode UUID bytes. */ - SD_BLE_VERSION_GET, /**< Get the local version information (company ID, Link Layer Version, Link Layer Subversion). */ - SD_BLE_USER_MEM_REPLY, /**< User Memory Reply. */ - SD_BLE_OPT_SET, /**< Set a BLE option. */ - SD_BLE_OPT_GET, /**< Get a BLE option. */ - SD_BLE_CFG_SET, /**< Add a configuration to the BLE stack. */ -}; - -/** - * @brief BLE Module Independent Event IDs. - */ -enum BLE_COMMON_EVTS -{ - BLE_EVT_USER_MEM_REQUEST = BLE_EVT_BASE + 0, /**< User Memory request. @ref ble_evt_user_mem_request_t */ - BLE_EVT_USER_MEM_RELEASE = BLE_EVT_BASE + 1, /**< User Memory release. @ref ble_evt_user_mem_release_t */ -}; - -/**@brief BLE Connection Configuration IDs. - * - * IDs that uniquely identify a connection configuration. - */ -enum BLE_CONN_CFGS -{ - BLE_CONN_CFG_GAP = BLE_CONN_CFG_BASE + 0, /**< BLE GAP specific connection configuration. */ - BLE_CONN_CFG_GATTC = BLE_CONN_CFG_BASE + 1, /**< BLE GATTC specific connection configuration. */ - BLE_CONN_CFG_GATTS = BLE_CONN_CFG_BASE + 2, /**< BLE GATTS specific connection configuration. */ - BLE_CONN_CFG_GATT = BLE_CONN_CFG_BASE + 3, /**< BLE GATT specific connection configuration. */ - BLE_CONN_CFG_L2CAP = BLE_CONN_CFG_BASE + 4, /**< BLE L2CAP specific connection configuration. */ -}; - -/**@brief BLE Common Configuration IDs. - * - * IDs that uniquely identify a common configuration. - */ -enum BLE_COMMON_CFGS -{ - BLE_COMMON_CFG_VS_UUID = BLE_CFG_BASE, /**< Vendor specific UUID configuration */ -}; - -/**@brief Common Option IDs. - * IDs that uniquely identify a common option. - */ -enum BLE_COMMON_OPTS -{ - BLE_COMMON_OPT_PA_LNA = BLE_OPT_BASE + 0, /**< PA and LNA options */ - BLE_COMMON_OPT_CONN_EVT_EXT = BLE_OPT_BASE + 1, /**< Extended connection events option */ -}; - -/** @} */ - -/** @addtogroup BLE_COMMON_DEFINES Defines - * @{ */ - -/** @brief Required pointer alignment for BLE Events. -*/ -#define BLE_EVT_PTR_ALIGNMENT 4 - -/** @brief Leaves the maximum of the two arguments. -*/ -#define BLE_MAX(a, b) ((a) < (b) ? (b) : (a)) - -/** @brief Maximum possible length for BLE Events. - * @note The highest value used for @ref ble_gatt_conn_cfg_t::att_mtu in any connection configuration shall be used as a parameter. - * If that value has not been configured for any connections then @ref BLE_GATT_ATT_MTU_DEFAULT must be used instead. -*/ -#define BLE_EVT_LEN_MAX(ATT_MTU) ( \ - offsetof(ble_evt_t, evt.gattc_evt.params.prim_srvc_disc_rsp.services) + ((ATT_MTU) - 1) / 4 * sizeof(ble_gattc_service_t) \ -) - -/** @defgroup BLE_USER_MEM_TYPES User Memory Types - * @{ */ -#define BLE_USER_MEM_TYPE_INVALID 0x00 /**< Invalid User Memory Types. */ -#define BLE_USER_MEM_TYPE_GATTS_QUEUED_WRITES 0x01 /**< User Memory for GATTS queued writes. */ -/** @} */ - -/** @defgroup BLE_UUID_VS_COUNTS Vendor Specific UUID counts - * @{ - */ -#define BLE_UUID_VS_COUNT_DEFAULT 10 /**< Default VS UUID count. */ -#define BLE_UUID_VS_COUNT_MAX 254 /**< Maximum VS UUID count. */ -/** @} */ - -/** @defgroup BLE_COMMON_CFG_DEFAULTS Configuration defaults. - * @{ - */ -#define BLE_CONN_CFG_TAG_DEFAULT 0 /**< Default configuration tag, SoftDevice default connection configuration. */ - -/** @} */ - -/** @} */ - -/** @addtogroup BLE_COMMON_STRUCTURES Structures - * @{ */ - -/**@brief User Memory Block. */ -typedef struct -{ - uint8_t *p_mem; /**< Pointer to the start of the user memory block. */ - uint16_t len; /**< Length in bytes of the user memory block. */ -} ble_user_mem_block_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_REQUEST. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ -} ble_evt_user_mem_request_t; - -/**@brief Event structure for @ref BLE_EVT_USER_MEM_RELEASE. */ -typedef struct -{ - uint8_t type; /**< User memory type, see @ref BLE_USER_MEM_TYPES. */ - ble_user_mem_block_t mem_block; /**< User memory block */ -} ble_evt_user_mem_release_t; - -/**@brief Event structure for events not associated with a specific function module. */ -typedef struct -{ - uint16_t conn_handle; /**< Connection Handle on which this event occurred. */ - union - { - ble_evt_user_mem_request_t user_mem_request; /**< User Memory Request Event Parameters. */ - ble_evt_user_mem_release_t user_mem_release; /**< User Memory Release Event Parameters. */ - } params; /**< Event parameter union. */ -} ble_common_evt_t; - -/**@brief BLE Event header. */ -typedef struct -{ - uint16_t evt_id; /**< Value from a BLE__EVT series. */ - uint16_t evt_len; /**< Length in octets including this header. */ -} ble_evt_hdr_t; - -/**@brief Common BLE Event type, wrapping the module specific event reports. */ -typedef struct -{ - ble_evt_hdr_t header; /**< Event header. */ - union - { - ble_common_evt_t common_evt; /**< Common Event, evt_id in BLE_EVT_* series. */ - ble_gap_evt_t gap_evt; /**< GAP originated event, evt_id in BLE_GAP_EVT_* series. */ - ble_gattc_evt_t gattc_evt; /**< GATT client originated event, evt_id in BLE_GATTC_EVT* series. */ - ble_gatts_evt_t gatts_evt; /**< GATT server originated event, evt_id in BLE_GATTS_EVT* series. */ - ble_l2cap_evt_t l2cap_evt; /**< L2CAP originated event, evt_id in BLE_L2CAP_EVT* series. */ - } evt; /**< Event union. */ -} ble_evt_t; - - -/** - * @brief Version Information. - */ -typedef struct -{ - uint8_t version_number; /**< Link Layer Version number. See https://www.bluetooth.org/en-us/specification/assigned-numbers/link-layer for assigned values. */ - uint16_t company_id; /**< Company ID, Nordic Semiconductor's company ID is 89 (0x0059) (https://www.bluetooth.org/apps/content/Default.aspx?doc_id=49708). */ - uint16_t subversion_number; /**< Link Layer Sub Version number, corresponds to the SoftDevice Config ID or Firmware ID (FWID). */ -} ble_version_t; - -/** - * @brief Configuration parameters for the PA and LNA. - */ -typedef struct -{ - uint8_t enable :1; /**< Enable toggling for this amplifier */ - uint8_t active_high :1; /**< Set the pin to be active high */ - uint8_t gpio_pin :6; /**< The GPIO pin to toggle for this amplifier */ -} ble_pa_lna_cfg_t; - -/** - * @brief PA & LNA GPIO toggle configuration - * - * This option configures the SoftDevice to toggle pins when the radio is active for use with a power amplifier and/or - * a low noise amplifier. - * - * Toggling the pins is achieved by using two PPI channels and a GPIOTE channel. The hardware channel IDs are provided - * by the application and should be regarded as reserved as long as any PA/LNA toggling is enabled. - * - * @note @ref sd_ble_opt_get is not supported for this option. - * @note Setting this option while the radio is in use (i.e. any of the roles are active) may have undefined consequences - * and must be avoided by the application. - */ -typedef struct -{ - ble_pa_lna_cfg_t pa_cfg; /**< Power Amplifier configuration */ - ble_pa_lna_cfg_t lna_cfg; /**< Low Noise Amplifier configuration */ - - uint8_t ppi_ch_id_set; /**< PPI channel used for radio pin setting */ - uint8_t ppi_ch_id_clr; /**< PPI channel used for radio pin clearing */ - uint8_t gpiote_ch_id; /**< GPIOTE channel used for radio pin toggling */ -} ble_common_opt_pa_lna_t; - -/** - * @brief Configuration of extended BLE connection events. - * - * When enabled the SoftDevice will dynamically extend the connection event when possible. - * - * The connection event length is controlled by the connection configuration as set by @ref ble_gap_conn_cfg_t::event_length. - * The connection event can be extended if there is time to send another packet pair before the start of the next connection interval, - * and if there are no conflicts with other BLE roles requesting radio time. - * - * @note @ref sd_ble_opt_get is not supported for this option. - */ -typedef struct -{ - uint8_t enable : 1; /**< Enable extended BLE connection events, disabled by default. */ -} ble_common_opt_conn_evt_ext_t; - -/**@brief Option structure for common options. */ -typedef union -{ - ble_common_opt_pa_lna_t pa_lna; /**< Parameters for controlling PA and LNA pin toggling. */ - ble_common_opt_conn_evt_ext_t conn_evt_ext; /**< Parameters for enabling extended connection events. */ -} ble_common_opt_t; - -/**@brief Common BLE Option type, wrapping the module specific options. */ -typedef union -{ - ble_common_opt_t common_opt; /**< COMMON options, opt_id in @ref BLE_COMMON_OPTS series. */ - ble_gap_opt_t gap_opt; /**< GAP option, opt_id in @ref BLE_GAP_OPTS series. */ -} ble_opt_t; - -/**@brief BLE connection configuration type, wrapping the module specific configurations, set with - * @ref sd_ble_cfg_set. - * - * @note Connection configurations don't have to be set. - * In the case that no configurations has been set, or fewer connection configurations has been set than enabled connections, - * the default connection configuration will be automatically added for the remaining connections. - * When creating connections with the default configuration, @ref BLE_CONN_CFG_TAG_DEFAULT should be used in - * place of @ref ble_conn_cfg_t::conn_cfg_tag. - * - * @sa sd_ble_gap_adv_start() - * @sa sd_ble_gap_connect() - * - * @mscs - * @mmsc{@ref BLE_CONN_CFG} - * @endmscs - - */ -typedef struct -{ - uint8_t conn_cfg_tag; /**< The application chosen tag it can use with the - @ref sd_ble_gap_adv_start() and @ref sd_ble_gap_connect() calls - to select this configuration when creating a connection. - Must be different for all connection configurations added and not @ref BLE_CONN_CFG_TAG_DEFAULT. */ - union { - ble_gap_conn_cfg_t gap_conn_cfg; /**< GAP connection configuration, cfg_id is @ref BLE_CONN_CFG_GAP. */ - ble_gattc_conn_cfg_t gattc_conn_cfg; /**< GATTC connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTC. */ - ble_gatts_conn_cfg_t gatts_conn_cfg; /**< GATTS connection configuration, cfg_id is @ref BLE_CONN_CFG_GATTS. */ - ble_gatt_conn_cfg_t gatt_conn_cfg; /**< GATT connection configuration, cfg_id is @ref BLE_CONN_CFG_GATT. */ - ble_l2cap_conn_cfg_t l2cap_conn_cfg; /**< L2CAP connection configuration, cfg_id is @ref BLE_CONN_CFG_L2CAP. */ - } params; /**< Connection configuration union. */ -} ble_conn_cfg_t; - -/** - * @brief Configuration of Vendor Specific UUIDs, set with @ref sd_ble_cfg_set. - * - * @retval ::NRF_ERROR_INVALID_PARAM Too many UUIDs configured. - */ -typedef struct -{ - uint8_t vs_uuid_count; /**< Number of 128-bit Vendor Specific UUID bases to allocate memory for. - Default value is @ref BLE_UUID_VS_COUNT_DEFAULT. Maximum value is - @ref BLE_UUID_VS_COUNT_MAX. */ -} ble_common_cfg_vs_uuid_t; - -/**@brief Common BLE Configuration type, wrapping the common configurations. */ -typedef union -{ - ble_common_cfg_vs_uuid_t vs_uuid_cfg; /**< Vendor specific UUID configuration, cfg_id is @ref BLE_COMMON_CFG_VS_UUID. */ -} ble_common_cfg_t; - -/**@brief BLE Configuration type, wrapping the module specific configurations. */ -typedef union -{ - ble_conn_cfg_t conn_cfg; /**< Connection specific configurations, cfg_id in @ref BLE_CONN_CFGS series. */ - ble_common_cfg_t common_cfg; /**< Global common configurations, cfg_id in @ref BLE_COMMON_CFGS series. */ - ble_gap_cfg_t gap_cfg; /**< Global GAP configurations, cfg_id in @ref BLE_GAP_CFGS series. */ - ble_gatts_cfg_t gatts_cfg; /**< Global GATTS configuration, cfg_id in @ref BLE_GATTS_CFGS series. */ -} ble_cfg_t; - -/** @} */ - -/** @addtogroup BLE_COMMON_FUNCTIONS Functions - * @{ */ - -/**@brief Enable the BLE stack - * - * @param[in, out] p_app_ram_base Pointer to a variable containing the start address of the - * application RAM region (APP_RAM_BASE). On return, this will - * contain the minimum start address of the application RAM region - * required by the SoftDevice for this configuration. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note The value of *p_app_ram_base when the app has done no custom configuration of the - * SoftDevice, i.e. the app has not called @ref sd_ble_cfg_set before @ref sd_ble_enable, can - * be found in the release notes. - * - * @note At runtime the IC's RAM is split into 2 regions: The SoftDevice RAM region is located - * between 0x20000000 and APP_RAM_BASE-1 and the application's RAM region is located between - * APP_RAM_BASE and the start of the call stack. - * - * @details This call initializes the BLE stack, no BLE related function other than @ref - * sd_ble_cfg_set can be called before this one. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The BLE stack has been initialized successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized and cannot be reinitialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by *p_app_ram_base is not - * large enough to fit this configuration's memory requirement. Check *p_app_ram_base - * and set the start address of the application RAM region accordingly. - */ -SVCALL(SD_BLE_ENABLE, uint32_t, sd_ble_enable(uint32_t * p_app_ram_base)); - -/**@brief Add configurations for the BLE stack - * - * @param[in] cfg_id Config ID, see @ref BLE_CONN_CFGS, @ref BLE_COMMON_CFGS, @ref - * BLE_GAP_CFGS or @ref BLE_GATTS_CFGS. - * @param[in] p_cfg Pointer to a ble_cfg_t structure containing the configuration value. - * @param[in] app_ram_base The start address of the application RAM region (APP_RAM_BASE). - * See @ref sd_ble_enable for details about APP_RAM_BASE. - * - * @note The memory requirement for a specific configuration will not increase between SoftDevices - * with the same major version number. - * - * @note If a configuration is set more than once, the last one set is the one that takes effect on - * @ref sd_ble_enable. - * - * @note Any part of the BLE stack that is NOT configured with @ref sd_ble_cfg_set will have default - * configuration. - * - * @note @ref sd_ble_cfg_set may be called at any time when the SoftDevice is enabled (see @ref - * sd_softdevice_enable) while the BLE part of the SoftDevice is not enabled (see @ref - * sd_ble_enable). - * - * @note Error codes for the configurations are described in the configuration structs. - * - * @mscs - * @mmsc{@ref BLE_COMMON_ENABLE} - * @endmscs - * - * @retval ::NRF_SUCCESS The configuration has been added successfully. - * @retval ::NRF_ERROR_INVALID_STATE The BLE stack had already been initialized. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid cfg_id supplied. - * @retval ::NRF_ERROR_NO_MEM The amount of memory assigned to the SoftDevice by app_ram_base is not - * large enough to fit this configuration's memory requirement. - */ -SVCALL(SD_BLE_CFG_SET, uint32_t, sd_ble_cfg_set(uint32_t cfg_id, ble_cfg_t const * p_cfg, uint32_t app_ram_base)); - -/**@brief Get an event from the pending events queue. - * - * @param[out] p_dest Pointer to buffer to be filled in with an event, or NULL to retrieve the event length. - * This buffer must be aligned to the extend defined by @ref BLE_EVT_PTR_ALIGNMENT. - * The buffer should be interpreted as a @ref ble_evt_t struct. - * @param[in, out] p_len Pointer the length of the buffer, on return it is filled with the event length. - * - * @details This call allows the application to pull a BLE event from the BLE stack. The application is signaled that - * an event is available from the BLE stack by the triggering of the SD_EVT_IRQn interrupt. - * The application is free to choose whether to call this function from thread mode (main context) or directly from the - * Interrupt Service Routine that maps to SD_EVT_IRQn. In any case however, and because the BLE stack runs at a higher - * priority than the application, this function should be called in a loop (until @ref NRF_ERROR_NOT_FOUND is returned) - * every time SD_EVT_IRQn is raised to ensure that all available events are pulled from the BLE stack. Failure to do so - * could potentially leave events in the internal queue without the application being aware of this fact. - * - * Sizing the p_dest buffer is equally important, since the application needs to provide all the memory necessary for the event to - * be copied into application memory. If the buffer provided is not large enough to fit the entire contents of the event, - * @ref NRF_ERROR_DATA_SIZE will be returned and the application can then call again with a larger buffer size. - * The maximum possible event length is defined by @ref BLE_EVT_LEN_MAX. The application may also "peek" the event length - * by providing p_dest as a NULL pointer and inspecting the value of *p_len upon return: - * - * \code - * uint16_t len; - * errcode = sd_ble_evt_get(NULL, &len); - * \endcode - * - * @mscs - * @mmsc{@ref BLE_COMMON_IRQ_EVT_MSC} - * @mmsc{@ref BLE_COMMON_THREAD_EVT_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Event pulled and stored into the supplied buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or not sufficiently aligned pointer supplied. - * @retval ::NRF_ERROR_NOT_FOUND No events ready to be pulled. - * @retval ::NRF_ERROR_DATA_SIZE Event ready but could not fit into the supplied buffer. - */ -SVCALL(SD_BLE_EVT_GET, uint32_t, sd_ble_evt_get(uint8_t *p_dest, uint16_t *p_len)); - - -/**@brief Add a Vendor Specific base UUID. - * - * @details This call enables the application to add a vendor specific base UUID to the BLE stack's table, for later - * use with all other modules and APIs. This then allows the application to use the shorter, 24-bit @ref ble_uuid_t - * format when dealing with both 16-bit and 128-bit UUIDs without having to check for lengths and having split code - * paths. This is accomplished by extending the grouping mechanism that the Bluetooth SIG standard base UUID uses - * for all other 128-bit UUIDs. The type field in the @ref ble_uuid_t structure is an index (relative to - * @ref BLE_UUID_TYPE_VENDOR_BEGIN) to the table populated by multiple calls to this function, and the UUID field - * in the same structure contains the 2 bytes at indexes 12 and 13. The number of possible 128-bit UUIDs available to - * the application is therefore the number of Vendor Specific UUIDs added with the help of this function times 65536, - * although restricted to modifying bytes 12 and 13 for each of the entries in the supplied array. - * - * @note Bytes 12 and 13 of the provided UUID will not be used internally, since those are always replaced by - * the 16-bit uuid field in @ref ble_uuid_t. - * - * @note If a UUID is already present in the BLE stack's internal table, the corresponding index will be returned in - * p_uuid_type along with an @ref NRF_SUCCESS error code. - * - * @param[in] p_vs_uuid Pointer to a 16-octet (128-bit) little endian Vendor Specific UUID disregarding - * bytes 12 and 13. - * @param[out] p_uuid_type Pointer to a uint8_t where the type field in @ref ble_uuid_t corresponding to this UUID will be stored. - * - * @retval ::NRF_SUCCESS Successfully added the Vendor Specific UUID. - * @retval ::NRF_ERROR_INVALID_ADDR If p_vs_uuid or p_uuid_type is NULL or invalid. - * @retval ::NRF_ERROR_NO_MEM If there are no more free slots for VS UUIDs. - */ -SVCALL(SD_BLE_UUID_VS_ADD, uint32_t, sd_ble_uuid_vs_add(ble_uuid128_t const *p_vs_uuid, uint8_t *p_uuid_type)); - - -/** @brief Decode little endian raw UUID bytes (16-bit or 128-bit) into a 24 bit @ref ble_uuid_t structure. - * - * @details The raw UUID bytes excluding bytes 12 and 13 (i.e. bytes 0-11 and 14-15) of p_uuid_le are compared - * to the corresponding ones in each entry of the table of vendor specific UUIDs populated with @ref sd_ble_uuid_vs_add - * to look for a match. If there is such a match, bytes 12 and 13 are returned as p_uuid->uuid and the index - * relative to @ref BLE_UUID_TYPE_VENDOR_BEGIN as p_uuid->type. - * - * @note If the UUID length supplied is 2, then the type set by this call will always be @ref BLE_UUID_TYPE_BLE. - * - * @param[in] uuid_le_len Length in bytes of the buffer pointed to by p_uuid_le (must be 2 or 16 bytes). - * @param[in] p_uuid_le Pointer pointing to little endian raw UUID bytes. - * @param[out] p_uuid Pointer to a @ref ble_uuid_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Successfully decoded into the @ref ble_uuid_t structure. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid UUID length. - * @retval ::NRF_ERROR_NOT_FOUND For a 128-bit UUID, no match in the populated table of UUIDs. - */ -SVCALL(SD_BLE_UUID_DECODE, uint32_t, sd_ble_uuid_decode(uint8_t uuid_le_len, uint8_t const *p_uuid_le, ble_uuid_t *p_uuid)); - - -/** @brief Encode a @ref ble_uuid_t structure into little endian raw UUID bytes (16-bit or 128-bit). - * - * @note The pointer to the destination buffer p_uuid_le may be NULL, in which case only the validity and size of p_uuid is computed. - * - * @param[in] p_uuid Pointer to a @ref ble_uuid_t structure that will be encoded into bytes. - * @param[out] p_uuid_le_len Pointer to a uint8_t that will be filled with the encoded length (2 or 16 bytes). - * @param[out] p_uuid_le Pointer to a buffer where the little endian raw UUID bytes (2 or 16) will be stored. - * - * @retval ::NRF_SUCCESS Successfully encoded into the buffer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid UUID type. - */ -SVCALL(SD_BLE_UUID_ENCODE, uint32_t, sd_ble_uuid_encode(ble_uuid_t const *p_uuid, uint8_t *p_uuid_le_len, uint8_t *p_uuid_le)); - - -/**@brief Get Version Information. - * - * @details This call allows the application to get the BLE stack version information. - * - * @param[out] p_version Pointer to a ble_version_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Version information stored successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy (typically doing a locally-initiated disconnection procedure). - */ -SVCALL(SD_BLE_VERSION_GET, uint32_t, sd_ble_version_get(ble_version_t *p_version)); - - -/**@brief Provide a user memory block. - * - * @note This call can only be used as a response to a @ref BLE_EVT_USER_MEM_REQUEST event issued to the application. - * - * @param[in] conn_handle Connection handle. - * @param[in] p_block Pointer to a user memory block structure or NULL if memory is managed by the application. - * - * @mscs - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_NOAUTH_MSC} - * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC} - * @endmscs - * - * @retval ::NRF_SUCCESS Successfully queued a response to the peer. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::NRF_ERROR_BUSY The stack is busy, process pending events and retry. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_LENGTH Invalid user memory block length supplied. - * @retval ::NRF_ERROR_INVALID_STATE Invalid Connection state or no user memory request pending. - */ -SVCALL(SD_BLE_USER_MEM_REPLY, uint32_t, sd_ble_user_mem_reply(uint16_t conn_handle, ble_user_mem_block_t const *p_block)); - -/**@brief Set a BLE option. - * - * @details This call allows the application to set the value of an option. - * - * @mscs - * @mmsc{@ref BLE_GAP_PERIPH_BONDING_STATIC_PK_MSC} - * @endmscs - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[in] p_opt Pointer to a ble_opt_t structure containing the option value. - * - * @retval ::NRF_SUCCESS Option set successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to set the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - */ -SVCALL(SD_BLE_OPT_SET, uint32_t, sd_ble_opt_set(uint32_t opt_id, ble_opt_t const *p_opt)); - - -/**@brief Get a BLE option. - * - * @details This call allows the application to retrieve the value of an option. - * - * @param[in] opt_id Option ID, see @ref BLE_COMMON_OPTS and @ref BLE_GAP_OPTS. - * @param[out] p_opt Pointer to a ble_opt_t structure to be filled in. - * - * @retval ::NRF_SUCCESS Option retrieved successfully. - * @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied. - * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid parameter(s) supplied, check parameter limits and constraints. - * @retval ::NRF_ERROR_INVALID_STATE Unable to retrieve the parameter at this time. - * @retval ::NRF_ERROR_BUSY The BLE stack is busy or the previous procedure has not completed. - * @retval ::NRF_ERROR_NOT_SUPPORTED This option is not supported. - * - */ -SVCALL(SD_BLE_OPT_GET, uint32_t, sd_ble_opt_get(uint32_t opt_id, ble_opt_t *p_opt)); - -/** @} */ -#ifdef __cplusplus -} -#endif -#endif /* BLE_H__ */ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error.h deleted file mode 100644 index 6badee98e5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2014 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @defgroup nrf_error SoftDevice Global Error Codes - @{ - - @brief Global Error definitions -*/ - -/* Header guard */ -#ifndef NRF_ERROR_H__ -#define NRF_ERROR_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** @defgroup NRF_ERRORS_BASE Error Codes Base number definitions - * @{ */ -#define NRF_ERROR_BASE_NUM (0x0) ///< Global error base -#define NRF_ERROR_SDM_BASE_NUM (0x1000) ///< SDM error base -#define NRF_ERROR_SOC_BASE_NUM (0x2000) ///< SoC error base -#define NRF_ERROR_STK_BASE_NUM (0x3000) ///< STK error base -/** @} */ - -#define NRF_SUCCESS (NRF_ERROR_BASE_NUM + 0) ///< Successful command -#define NRF_ERROR_SVC_HANDLER_MISSING (NRF_ERROR_BASE_NUM + 1) ///< SVC handler is missing -#define NRF_ERROR_SOFTDEVICE_NOT_ENABLED (NRF_ERROR_BASE_NUM + 2) ///< SoftDevice has not been enabled -#define NRF_ERROR_INTERNAL (NRF_ERROR_BASE_NUM + 3) ///< Internal Error -#define NRF_ERROR_NO_MEM (NRF_ERROR_BASE_NUM + 4) ///< No Memory for operation -#define NRF_ERROR_NOT_FOUND (NRF_ERROR_BASE_NUM + 5) ///< Not found -#define NRF_ERROR_NOT_SUPPORTED (NRF_ERROR_BASE_NUM + 6) ///< Not supported -#define NRF_ERROR_INVALID_PARAM (NRF_ERROR_BASE_NUM + 7) ///< Invalid Parameter -#define NRF_ERROR_INVALID_STATE (NRF_ERROR_BASE_NUM + 8) ///< Invalid state, operation disallowed in this state -#define NRF_ERROR_INVALID_LENGTH (NRF_ERROR_BASE_NUM + 9) ///< Invalid Length -#define NRF_ERROR_INVALID_FLAGS (NRF_ERROR_BASE_NUM + 10) ///< Invalid Flags -#define NRF_ERROR_INVALID_DATA (NRF_ERROR_BASE_NUM + 11) ///< Invalid Data -#define NRF_ERROR_DATA_SIZE (NRF_ERROR_BASE_NUM + 12) ///< Invalid Data size -#define NRF_ERROR_TIMEOUT (NRF_ERROR_BASE_NUM + 13) ///< Operation timed out -#define NRF_ERROR_NULL (NRF_ERROR_BASE_NUM + 14) ///< Null Pointer -#define NRF_ERROR_FORBIDDEN (NRF_ERROR_BASE_NUM + 15) ///< Forbidden Operation -#define NRF_ERROR_INVALID_ADDR (NRF_ERROR_BASE_NUM + 16) ///< Bad Memory Address -#define NRF_ERROR_BUSY (NRF_ERROR_BASE_NUM + 17) ///< Busy -#define NRF_ERROR_CONN_COUNT (NRF_ERROR_BASE_NUM + 18) ///< Maximum connection count exceeded. -#define NRF_ERROR_RESOURCES (NRF_ERROR_BASE_NUM + 19) ///< Not enough resources for operation - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_sdm.h deleted file mode 100644 index 530959b9d6..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_sdm.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - /** - @addtogroup nrf_sdm_api - @{ - @defgroup nrf_sdm_error SoftDevice Manager Error Codes - @{ - - @brief Error definitions for the SDM API -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SDM_H__ -#define NRF_ERROR_SDM_H__ - -#include "nrf_error.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN (NRF_ERROR_SDM_BASE_NUM + 0) ///< Unknown LFCLK source. -#define NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION (NRF_ERROR_SDM_BASE_NUM + 1) ///< Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts). -#define NRF_ERROR_SDM_INCORRECT_CLENR0 (NRF_ERROR_SDM_BASE_NUM + 2) ///< Incorrect CLENR0 (can be caused by erroneous SoftDevice flashing). - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SDM_H__ - -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_soc.h deleted file mode 100644 index 1e784b8db3..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_error_soc.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @addtogroup nrf_soc_api - @{ - @defgroup nrf_soc_error SoC Library Error Codes - @{ - - @brief Error definitions for the SoC library - -*/ - -/* Header guard */ -#ifndef NRF_ERROR_SOC_H__ -#define NRF_ERROR_SOC_H__ - -#include "nrf_error.h" -#ifdef __cplusplus -extern "C" { -#endif - -/* Mutex Errors */ -#define NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN (NRF_ERROR_SOC_BASE_NUM + 0) ///< Mutex already taken - -/* NVIC errors */ -#define NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE (NRF_ERROR_SOC_BASE_NUM + 1) ///< NVIC interrupt not available -#define NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED (NRF_ERROR_SOC_BASE_NUM + 2) ///< NVIC interrupt priority not allowed -#define NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 3) ///< NVIC should not return - -/* Power errors */ -#define NRF_ERROR_SOC_POWER_MODE_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 4) ///< Power mode unknown -#define NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN (NRF_ERROR_SOC_BASE_NUM + 5) ///< Power POF threshold unknown -#define NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN (NRF_ERROR_SOC_BASE_NUM + 6) ///< Power off should not return - -/* Rand errors */ -#define NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES (NRF_ERROR_SOC_BASE_NUM + 7) ///< RAND not enough values - -/* PPI errors */ -#define NRF_ERROR_SOC_PPI_INVALID_CHANNEL (NRF_ERROR_SOC_BASE_NUM + 8) ///< Invalid PPI Channel -#define NRF_ERROR_SOC_PPI_INVALID_GROUP (NRF_ERROR_SOC_BASE_NUM + 9) ///< Invalid PPI Group - -#ifdef __cplusplus -} -#endif -#endif // NRF_ERROR_SOC_H__ -/** - @} - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_nvic.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_nvic.h deleted file mode 100644 index f5c7e8e028..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_nvic.h +++ /dev/null @@ -1,486 +0,0 @@ -/* - * Copyright (c) 2016 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_nvic_api SoftDevice NVIC API - * @{ - * - * @note In order to use this module, the following code has to be added to a .c file: - * \code - * nrf_nvic_state_t nrf_nvic_state = {0}; - * \endcode - * - * @note Definitions and declarations starting with __ (double underscore) in this header file are - * not intended for direct use by the application. - * - * @brief APIs for the accessing NVIC when using a SoftDevice. - * - */ - -#ifndef NRF_NVIC_H__ -#define NRF_NVIC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_NVIC_DEFINES Defines - * @{ */ - -/**@defgroup NRF_NVIC_ISER_DEFINES SoftDevice NVIC internal definitions - * @{ */ - -#define __NRF_NVIC_NVMC_IRQn (30) /**< The peripheral ID of the NVMC. IRQ numbers are used to identify peripherals, but the NVMC doesn't have an IRQ number in the MDK. */ - -#define __NRF_NVIC_ISER_COUNT (2) /**< The number of ISER/ICER registers in the NVIC that are used. */ - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 0-31. */ -#define __NRF_NVIC_SD_IRQS_0 ((uint32_t)( \ - (1U << POWER_CLOCK_IRQn) \ - | (1U << RADIO_IRQn) \ - | (1U << RTC0_IRQn) \ - | (1U << TIMER0_IRQn) \ - | (1U << RNG_IRQn) \ - | (1U << ECB_IRQn) \ - | (1U << CCM_AAR_IRQn) \ - | (1U << TEMP_IRQn) \ - | (1U << __NRF_NVIC_NVMC_IRQn) \ - | (1U << (uint32_t)SWI5_IRQn) \ - )) - -/**@brief Interrupts used by the SoftDevice, with IRQn in the range 32-63. */ -#define __NRF_NVIC_SD_IRQS_1 ((uint32_t)0) - -/**@brief Interrupts available for to application, with IRQn in the range 0-31. */ -#define __NRF_NVIC_APP_IRQS_0 (~__NRF_NVIC_SD_IRQS_0) - -/**@brief Interrupts available for to application, with IRQn in the range 32-63. */ -#define __NRF_NVIC_APP_IRQS_1 (~__NRF_NVIC_SD_IRQS_1) - -/**@} */ - -/**@} */ - -/**@addtogroup NRF_NVIC_VARIABLES Variables - * @{ */ - -/**@brief Type representing the state struct for the SoftDevice NVIC module. */ -typedef struct -{ - uint32_t volatile __irq_masks[__NRF_NVIC_ISER_COUNT]; /**< IRQs enabled by the application in the NVIC. */ - uint32_t volatile __cr_flag; /**< Non-zero if already in a critical region */ -} nrf_nvic_state_t; - -/**@brief Variable keeping the state for the SoftDevice NVIC module. This must be declared in an - * application source file. */ -extern nrf_nvic_state_t nrf_nvic_state; - -/**@} */ - -/**@addtogroup NRF_NVIC_INTERNAL_FUNCTIONS SoftDevice NVIC internal functions - * @{ */ - -/**@brief Disables IRQ interrupts globally, including the SoftDevice's interrupts. - * - * @retval The value of PRIMASK prior to disabling the interrupts. - */ -__STATIC_INLINE int __sd_nvic_irq_disable(void); - -/**@brief Enables IRQ interrupts globally, including the SoftDevice's interrupts. - */ -__STATIC_INLINE void __sd_nvic_irq_enable(void); - -/**@brief Checks if IRQn is available to application - * @param[in] IRQn IRQ to check - * - * @retval 1 (true) if the IRQ to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn); - -/**@brief Checks if priority is available to application - * @param[in] priority priority to check - * - * @retval 1 (true) if the priority to check is available to the application - */ -__STATIC_INLINE uint32_t __sd_nvic_is_app_accessible_priority(uint32_t priority); - -/**@} */ - -/**@addtogroup NRF_NVIC_FUNCTIONS SoftDevice NVIC public functions - * @{ */ - -/**@brief Enable External Interrupt. - * @note Corresponds to NVIC_EnableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_EnableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was enabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt has a priority not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn); - -/**@brief Disable External Interrupt. - * @note Corresponds to NVIC_DisableIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_DisableIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt was disabled. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE The interrupt is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn); - -/**@brief Get Pending Interrupt. - * @note Corresponds to NVIC_GetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPendingIRQ documentation in CMSIS. - * @param[out] p_pending_irq Return value from NVIC_GetPendingIRQ. - * - * @retval ::NRF_SUCCESS The interrupt is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq); - -/**@brief Set Pending Interrupt. - * @note Corresponds to NVIC_SetPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt is set pending. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn); - -/**@brief Clear Pending Interrupt. - * @note Corresponds to NVIC_ClearPendingIRQ in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_ClearPendingIRQ documentation in CMSIS. - * - * @retval ::NRF_SUCCESS The interrupt pending flag is cleared. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn); - -/**@brief Set Interrupt Priority. - * @note Corresponds to NVIC_SetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * @pre Priority is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_SetPriority documentation in CMSIS. - * @param[in] priority A valid IRQ priority for use by the application. - * - * @retval ::NRF_SUCCESS The interrupt and priority level is available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE IRQn is not available for the application. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED The interrupt priority is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority); - -/**@brief Get Interrupt Priority. - * @note Corresponds to NVIC_GetPriority in CMSIS. - * - * @pre IRQn is valid and not reserved by the stack. - * - * @param[in] IRQn See the NVIC_GetPriority documentation in CMSIS. - * @param[out] p_priority Return value from NVIC_GetPriority. - * - * @retval ::NRF_SUCCESS The interrupt priority is returned in p_priority. - * @retval ::NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE - IRQn is not available for the application. - */ -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority); - -/**@brief System Reset. - * @note Corresponds to NVIC_SystemReset in CMSIS. - * - * @retval ::NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN - */ -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void); - -/**@brief Enter critical region. - * - * @post Application interrupts will be disabled. - * @note sd_nvic_critical_region_enter() and ::sd_nvic_critical_region_exit() must be called in matching pairs inside each - * execution context - * @sa sd_nvic_critical_region_exit - * - * @param[out] p_is_nested_critical_region If 1, the application is now in a nested critical region. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region); - -/**@brief Exit critical region. - * - * @pre Application has entered a critical region using ::sd_nvic_critical_region_enter. - * @post If not in a nested critical region, the application interrupts will restored to the state before ::sd_nvic_critical_region_enter was called. - * - * @param[in] is_nested_critical_region If this is set to 1, the critical region won't be exited. @sa sd_nvic_critical_region_enter. - * - * @retval ::NRF_SUCCESS - */ -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region); - -/**@} */ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE int __sd_nvic_irq_disable(void) -{ - int pm = __get_PRIMASK(); - __disable_irq(); - return pm; -} - -__STATIC_INLINE void __sd_nvic_irq_enable(void) -{ - __enable_irq(); -} - -__STATIC_INLINE uint32_t __sd_nvic_app_accessible_irq(IRQn_Type IRQn) -{ - if (IRQn < 32) - { - return ((1UL<= (1 << __NVIC_PRIO_BITS)) - { - return 0; - } - if( priority == 0 - || priority == 1 - || priority == 4 - ) - { - return 0; - } - return 1; -} - - -__STATIC_INLINE uint32_t sd_nvic_EnableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - if (!__sd_nvic_is_app_accessible_priority(NVIC_GetPriority(IRQn))) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] |= (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); - } - else - { - NVIC_EnableIRQ(IRQn); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_DisableIRQ(IRQn_Type IRQn) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__irq_masks[(uint32_t)((int32_t)IRQn) >> 5] &= ~(1UL << ((uint32_t)(IRQn) & 0x1F)); - } - else - { - NVIC_DisableIRQ(IRQn); - } - - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPendingIRQ(IRQn_Type IRQn, uint32_t * p_pending_irq) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_pending_irq = NVIC_GetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_SetPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_ClearPendingIRQ(IRQn_Type IRQn) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - NVIC_ClearPendingIRQ(IRQn); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if (!__sd_nvic_app_accessible_irq(IRQn)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } - - if (!__sd_nvic_is_app_accessible_priority(priority)) - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_PRIORITY_NOT_ALLOWED; - } - - NVIC_SetPriority(IRQn, (uint32_t)priority); - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_GetPriority(IRQn_Type IRQn, uint32_t * p_priority) -{ - if (__sd_nvic_app_accessible_irq(IRQn)) - { - *p_priority = (NVIC_GetPriority(IRQn) & 0xFF); - return NRF_SUCCESS; - } - else - { - return NRF_ERROR_SOC_NVIC_INTERRUPT_NOT_AVAILABLE; - } -} - -__STATIC_INLINE uint32_t sd_nvic_SystemReset(void) -{ - NVIC_SystemReset(); - return NRF_ERROR_SOC_NVIC_SHOULD_NOT_RETURN; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_enter(uint8_t * p_is_nested_critical_region) -{ - int was_masked = __sd_nvic_irq_disable(); - if (!nrf_nvic_state.__cr_flag) - { - nrf_nvic_state.__cr_flag = 1; - nrf_nvic_state.__irq_masks[0] = ( NVIC->ICER[0] & __NRF_NVIC_APP_IRQS_0 ); - NVIC->ICER[0] = __NRF_NVIC_APP_IRQS_0; - nrf_nvic_state.__irq_masks[1] = ( NVIC->ICER[1] & __NRF_NVIC_APP_IRQS_1 ); - NVIC->ICER[1] = __NRF_NVIC_APP_IRQS_1; - *p_is_nested_critical_region = 0; - } - else - { - *p_is_nested_critical_region = 1; - } - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - return NRF_SUCCESS; -} - -__STATIC_INLINE uint32_t sd_nvic_critical_region_exit(uint8_t is_nested_critical_region) -{ - if (nrf_nvic_state.__cr_flag && (is_nested_critical_region == 0)) - { - int was_masked = __sd_nvic_irq_disable(); - NVIC->ISER[0] = nrf_nvic_state.__irq_masks[0]; - NVIC->ISER[1] = nrf_nvic_state.__irq_masks[1]; - nrf_nvic_state.__cr_flag = 0; - if (!was_masked) - { - __sd_nvic_irq_enable(); - } - } - - return NRF_SUCCESS; -} - -#endif /* SUPPRESS_INLINE_IMPLEMENTATION */ - -#ifdef __cplusplus -} -#endif - -#endif // NRF_NVIC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sd_def.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sd_def.h deleted file mode 100644 index c9ab241872..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sd_def.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef NRF_SD_DEF_H__ -#define NRF_SD_DEF_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define SD_PPI_CHANNELS_USED 0xFFFE0000uL /**< PPI channels utilized by SotfDevice (not available to the application). */ -#define SD_PPI_GROUPS_USED 0x0000000CuL /**< PPI groups utilized by SoftDevice (not available to the application). */ -#define SD_TIMERS_USED 0x00000001uL /**< Timers used by SoftDevice. */ -#define SD_SWI_USED 0x0000003CuL /**< Software interrupts used by SoftDevice */ - - -#ifdef __cplusplus -} -#endif - -#endif /* NRF_SD_DEF_H__ */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sdm.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sdm.h deleted file mode 100644 index 8c48d93678..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_sdm.h +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2015 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - @defgroup nrf_sdm_api SoftDevice Manager API - @{ - - @brief APIs for SoftDevice management. - -*/ - -#ifndef NRF_SDM_H__ -#define NRF_SDM_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_sdm.h" -#include "nrf_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ -#ifdef NRFSOC_DOXYGEN -/// Declared in nrf_mbr.h -#define MBR_SIZE 0 -#warning test -#endif - -/** @brief The major version for the SoftDevice binary distributed with this header file. */ -#define SD_MAJOR_VERSION (6) - -/** @brief The minor version for the SoftDevice binary distributed with this header file. */ -#define SD_MINOR_VERSION (0) - -/** @brief The bugfix version for the SoftDevice binary distributed with this header file. */ -#define SD_BUGFIX_VERSION (0) - -/** @brief The full version number for the SoftDevice binary this header file was distributed - * with, as a decimal number in the form Mmmmbbb, where: - * - M is major version (one or more digits) - * - mmm is minor version (three digits) - * - bbb is bugfix version (three digits). */ -#define SD_VERSION (SD_MAJOR_VERSION * 1000000 + SD_MINOR_VERSION * 1000 + SD_BUGFIX_VERSION) - -/** @brief SoftDevice Manager SVC Base number. */ -#define SDM_SVC_BASE 0x10 - -/** @brief SoftDevice unique string size in bytes. */ -#define SD_UNIQUE_STR_SIZE 20 - -/** @brief Invalid info field. Returned when an info field does not exist. */ -#define SDM_INFO_FIELD_INVALID (0) - -/** @brief Defines the SoftDevice Information Structure location (address) as an offset from -the start of the SoftDevice (without MBR)*/ -#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) - -/** @brief Defines the absolute SoftDevice Information Structure location (address) when the - * SoftDevice is installed just above the MBR (the usual case). */ -#define SOFTDEVICE_INFO_STRUCT_ADDRESS (SOFTDEVICE_INFO_STRUCT_OFFSET + MBR_SIZE) - -/** @brief Defines the offset for the SoftDevice Information Structure size value relative to the - * SoftDevice base address. The size value is of type uint8_t. */ -#define SD_INFO_STRUCT_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET) - -/** @brief Defines the offset for the SoftDevice size value relative to the SoftDevice base address. - * The size value is of type uint32_t. */ -#define SD_SIZE_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x08) - -/** @brief Defines the offset for FWID value relative to the SoftDevice base address. The FWID value - * is of type uint16_t. */ -#define SD_FWID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x0C) - -/** @brief Defines the offset for the SoftDevice ID relative to the SoftDevice base address. The ID - * is of type uint32_t. */ -#define SD_ID_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x10) - -/** @brief Defines the offset for the SoftDevice version relative to the SoftDevice base address in - * the same format as @ref SD_VERSION, stored as an uint32_t. */ -#define SD_VERSION_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x14) - -/** @brief Defines the offset for the SoftDevice unique string relative to the SoftDevice base address. - * The SD_UNIQUE_STR is stored as an array of uint8_t. The size of array is @ref SD_UNIQUE_STR_SIZE. - */ -#define SD_UNIQUE_STR_OFFSET (SOFTDEVICE_INFO_STRUCT_OFFSET + 0x18) - -/** @brief Defines a macro for retrieving the actual SoftDevice Information Structure size value - * from a given base address. Use @ref MBR_SIZE as the argument when the SoftDevice is - * installed just above the MBR (the usual case). */ -#define SD_INFO_STRUCT_SIZE_GET(baseaddr) (*((uint8_t *) ((baseaddr) + SD_INFO_STRUCT_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice size value from a given base - * address. Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above - * the MBR (the usual case). */ -#define SD_SIZE_GET(baseaddr) (*((uint32_t *) ((baseaddr) + SD_SIZE_OFFSET))) - -/** @brief Defines a macro for retrieving the actual FWID value from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the usual - * case). */ -#define SD_FWID_GET(baseaddr) (*((uint16_t *) ((baseaddr) + SD_FWID_OFFSET))) - -/** @brief Defines a macro for retrieving the actual SoftDevice ID from a given base address. Use - * @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR (the - * usual case). */ -#define SD_ID_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_ID_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_ID_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the actual SoftDevice version from a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_VERSION_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (*((uint32_t *) ((baseaddr) + SD_VERSION_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/** @brief Defines a macro for retrieving the address of SoftDevice unique str based on a given base address. - * Use @ref MBR_SIZE as the argument when the SoftDevice is installed just above the MBR - * (the usual case). */ -#define SD_UNIQUE_STR_ADDR_GET(baseaddr) ((SD_INFO_STRUCT_SIZE_GET(baseaddr) > (SD_UNIQUE_STR_OFFSET - SOFTDEVICE_INFO_STRUCT_OFFSET)) \ - ? (((uint8_t *) ((baseaddr) + SD_UNIQUE_STR_OFFSET))) : SDM_INFO_FIELD_INVALID) - -/**@defgroup NRF_FAULT_ID_RANGES Fault ID ranges - * @{ */ -#define NRF_FAULT_ID_SD_RANGE_START 0x00000000 /**< SoftDevice ID range start. */ -#define NRF_FAULT_ID_APP_RANGE_START 0x00001000 /**< Application ID range start. */ -/**@} */ - -/**@defgroup NRF_FAULT_IDS Fault ID types - * @{ */ -#define NRF_FAULT_ID_SD_ASSERT (NRF_FAULT_ID_SD_RANGE_START + 1) /**< SoftDevice assertion. The info parameter is reserved for future used. */ -#define NRF_FAULT_ID_APP_MEMACC (NRF_FAULT_ID_APP_RANGE_START + 1) /**< Application invalid memory access. The info parameter will contain 0x00000000, - in case of SoftDevice RAM access violation. In case of SoftDevice peripheral - register violation the info parameter will contain the sub-region number of - PREGION[0], on whose address range the disallowed write access caused the - memory access fault. */ -/**@} */ - -/** @} */ - -/** @addtogroup NRF_SDM_ENUMS Enumerations - * @{ */ - -/**@brief nRF SoftDevice Manager API SVC numbers. */ -enum NRF_SD_SVCS -{ - SD_SOFTDEVICE_ENABLE = SDM_SVC_BASE, /**< ::sd_softdevice_enable */ - SD_SOFTDEVICE_DISABLE, /**< ::sd_softdevice_disable */ - SD_SOFTDEVICE_IS_ENABLED, /**< ::sd_softdevice_is_enabled */ - SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, /**< ::sd_softdevice_vector_table_base_set */ - SVC_SDM_LAST /**< Placeholder for last SDM SVC */ -}; - -/** @} */ - -/** @addtogroup NRF_SDM_DEFINES Defines - * @{ */ - -/**@defgroup NRF_CLOCK_LF_ACCURACY Clock accuracy - * @{ */ - -#define NRF_CLOCK_LF_ACCURACY_250_PPM (0) /**< Default: 250 ppm */ -#define NRF_CLOCK_LF_ACCURACY_500_PPM (1) /**< 500 ppm */ -#define NRF_CLOCK_LF_ACCURACY_150_PPM (2) /**< 150 ppm */ -#define NRF_CLOCK_LF_ACCURACY_100_PPM (3) /**< 100 ppm */ -#define NRF_CLOCK_LF_ACCURACY_75_PPM (4) /**< 75 ppm */ -#define NRF_CLOCK_LF_ACCURACY_50_PPM (5) /**< 50 ppm */ -#define NRF_CLOCK_LF_ACCURACY_30_PPM (6) /**< 30 ppm */ -#define NRF_CLOCK_LF_ACCURACY_20_PPM (7) /**< 20 ppm */ -#define NRF_CLOCK_LF_ACCURACY_10_PPM (8) /**< 10 ppm */ -#define NRF_CLOCK_LF_ACCURACY_5_PPM (9) /**< 5 ppm */ -#define NRF_CLOCK_LF_ACCURACY_2_PPM (10) /**< 2 ppm */ -#define NRF_CLOCK_LF_ACCURACY_1_PPM (11) /**< 1 ppm */ - -/** @} */ - -/**@defgroup NRF_CLOCK_LF_SRC Possible LFCLK oscillator sources - * @{ */ - -#define NRF_CLOCK_LF_SRC_RC (0) /**< LFCLK RC oscillator. */ -#define NRF_CLOCK_LF_SRC_XTAL (1) /**< LFCLK crystal oscillator. */ -#define NRF_CLOCK_LF_SRC_SYNTH (2) /**< LFCLK Synthesized from HFCLK. */ - -/** @} */ - -/** @} */ - -/** @addtogroup NRF_SDM_TYPES Types - * @{ */ - -/**@brief Type representing LFCLK oscillator source. */ -typedef struct -{ - uint8_t source; /**< LF oscillator clock source, see @ref NRF_CLOCK_LF_SRC. */ - uint8_t rc_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: Calibration timer interval in 1/4 second - units (nRF52: 1-32). - @note To avoid excessive clock drift, 0.5 degrees Celsius is the - maximum temperature change allowed in one calibration timer - interval. The interval should be selected to ensure this. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. */ - uint8_t rc_temp_ctiv; /**< Only for ::NRF_CLOCK_LF_SRC_RC: How often (in number of calibration - intervals) the RC oscillator shall be calibrated if the temperature - hasn't changed. - 0: Always calibrate even if the temperature hasn't changed. - 1: Only calibrate if the temperature has changed (legacy - nRF51 only). - 2-33: Check the temperature and only calibrate if it has changed, - however calibration will take place every rc_temp_ctiv - intervals in any case. - - @note Must be 0 if source is not ::NRF_CLOCK_LF_SRC_RC. - - @note For nRF52, the application must ensure calibration at least once - every 8 seconds to ensure +/-500 ppm clock stability. The - recommended configuration for ::NRF_CLOCK_LF_SRC_RC on nRF52 is - rc_ctiv=16 and rc_temp_ctiv=2. This will ensure calibration at - least once every 8 seconds and for temperature changes of 0.5 - degrees Celsius every 4 seconds. See the Product Specification - for the nRF52 device being used for more information.*/ - uint8_t accuracy; /**< External clock accuracy used in the LL to compute timing - windows, see @ref NRF_CLOCK_LF_ACCURACY.*/ -} nrf_clock_lf_cfg_t; - -/**@brief Fault Handler type. - * - * When certain unrecoverable errors occur within the application or SoftDevice the fault handler will be called back. - * The protocol stack will be in an undefined state when this happens and the only way to recover will be to - * perform a reset, using e.g. CMSIS NVIC_SystemReset(). - * If the application returns from the fault handler the SoftDevice will call NVIC_SystemReset(). - * - * @note This callback is executed in HardFault context, thus SVC functions cannot be called from the fault callback. - * - * @param[in] id Fault identifier. See @ref NRF_FAULT_IDS. - * @param[in] pc The program counter of the instruction that triggered the fault. - * @param[in] info Optional additional information regarding the fault. Refer to each Fault identifier for details. - * - * @note When id is set to @ref NRF_FAULT_ID_APP_MEMACC, pc will contain the address of the instruction being executed at the time when - * the fault is detected by the CPU. The CPU program counter may have advanced up to 2 instructions (no branching) after the one that triggered the fault. - */ -typedef void (*nrf_fault_handler_t)(uint32_t id, uint32_t pc, uint32_t info); - -/** @} */ - -/** @addtogroup NRF_SDM_FUNCTIONS Functions - * @{ */ - -/**@brief Enables the SoftDevice and by extension the protocol stack. - * - * @note Some care must be taken if a low frequency clock source is already running when calling this function: - * If the LF clock has a different source then the one currently running, it will be stopped. Then, the new - * clock source will be started. - * - * @note This function has no effect when returning with an error. - * - * @post If return code is ::NRF_SUCCESS - * - SoC library and protocol stack APIs are made available. - * - A portion of RAM will be unavailable (see relevant SDS documentation). - * - Some peripherals will be unavailable or available only through the SoC API (see relevant SDS documentation). - * - Interrupts will not arrive from protected peripherals or interrupts. - * - nrf_nvic_ functions must be used instead of CMSIS NVIC_ functions for reliable usage of the SoftDevice. - * - Interrupt latency may be affected by the SoftDevice (see relevant SDS documentation). - * - Chosen low frequency clock source will be running. - * - * @param p_clock_lf_cfg Low frequency clock source and accuracy. - If NULL the clock will be configured as an RC source with rc_ctiv = 16 and .rc_temp_ctiv = 2 - In the case of XTAL source, the PPM accuracy of the chosen clock source must be greater than or equal to the actual characteristics of your XTAL clock. - * @param fault_handler Callback to be invoked in case of fault, cannot be NULL. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_ADDR Invalid or NULL pointer supplied. - * @retval ::NRF_ERROR_INVALID_STATE SoftDevice is already enabled, and the clock source and fault handler cannot be updated. - * @retval ::NRF_ERROR_SDM_INCORRECT_INTERRUPT_CONFIGURATION SoftDevice interrupt is already enabled, or an enabled interrupt has an illegal priority level. - * @retval ::NRF_ERROR_SDM_LFCLK_SOURCE_UNKNOWN Unknown low frequency clock source selected. - * @retval ::NRF_ERROR_INVALID_PARAM Invalid clock source configuration supplied in p_clock_lf_cfg. - */ -SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); - - -/**@brief Disables the SoftDevice and by extension the protocol stack. - * - * Idempotent function to disable the SoftDevice. - * - * @post SoC library and protocol stack APIs are made unavailable. - * @post All interrupts that was protected by the SoftDevice will be disabled and initialized to priority 0 (highest). - * @post All peripherals used by the SoftDevice will be reset to default values. - * @post All of RAM become available. - * @post All interrupts are forwarded to the application. - * @post LFCLK source chosen in ::sd_softdevice_enable will be left running. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_DISABLE, uint32_t, sd_softdevice_disable(void)); - -/**@brief Check if the SoftDevice is enabled. - * - * @param[out] p_softdevice_enabled If the SoftDevice is enabled: 1 else 0. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_IS_ENABLED, uint32_t, sd_softdevice_is_enabled(uint8_t * p_softdevice_enabled)); - -/**@brief Sets the base address of the interrupt vector table for interrupts forwarded from the SoftDevice - * - * This function is only intended to be called when a bootloader is enabled. - * - * @param[in] address The base address of the interrupt vector table for forwarded interrupts. - - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_SOFTDEVICE_VECTOR_TABLE_BASE_SET, uint32_t, sd_softdevice_vector_table_base_set(uint32_t address)); - -/** @} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SDM_H__ - -/** - @} -*/ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_soc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_soc.h deleted file mode 100644 index 3fa177281e..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_soc.h +++ /dev/null @@ -1,1036 +0,0 @@ -/* - * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @defgroup nrf_soc_api SoC Library API - * @{ - * - * @brief APIs for the SoC library. - * - */ - -#ifndef NRF_SOC_H__ -#define NRF_SOC_H__ - -#include -#include "nrf.h" -#include "nrf_svc.h" -#include "nrf_error.h" -#include "nrf_error_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@addtogroup NRF_SOC_DEFINES Defines - * @{ */ - -/**@brief The number of the lowest SVC number reserved for the SoC library. */ -#define SOC_SVC_BASE (0x20) /**< Base value for SVCs that are available when the SoftDevice is disabled. */ -#define SOC_SVC_BASE_NOT_AVAILABLE (0x2C) /**< Base value for SVCs that are not available when the SoftDevice is disabled. */ - -/**@brief Guaranteed time for application to process radio inactive notification. */ -#define NRF_RADIO_NOTIFICATION_INACTIVE_GUARANTEED_TIME_US (62) - -/**@brief The minimum allowed timeslot extension time. */ -#define NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US (200) - -/**@brief The maximum processing time to handle a timeslot extension. */ -#define NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US (17) - -/**@brief The latest time before the end of a timeslot the timeslot can be extended. */ -#define NRF_RADIO_MIN_EXTENSION_MARGIN_US (79) - -#define SOC_ECB_KEY_LENGTH (16) /**< ECB key length. */ -#define SOC_ECB_CLEARTEXT_LENGTH (16) /**< ECB cleartext length. */ -#define SOC_ECB_CIPHERTEXT_LENGTH (SOC_ECB_CLEARTEXT_LENGTH) /**< ECB ciphertext length. */ - -#define SD_EVT_IRQn (SWI2_IRQn) /**< SoftDevice Event IRQ number. Used for both protocol events and SoC events. */ -#define SD_EVT_IRQHandler (SWI2_IRQHandler) /**< SoftDevice Event IRQ handler. Used for both protocol events and SoC events. - The default interrupt priority for this handler is set to 4 */ -#define RADIO_NOTIFICATION_IRQn (SWI1_IRQn) /**< The radio notification IRQ number. */ -#define RADIO_NOTIFICATION_IRQHandler (SWI1_IRQHandler) /**< The radio notification IRQ handler. - The default interrupt priority for this handler is set to 4 */ -#define NRF_RADIO_LENGTH_MIN_US (100) /**< The shortest allowed radio timeslot, in microseconds. */ -#define NRF_RADIO_LENGTH_MAX_US (100000) /**< The longest allowed radio timeslot, in microseconds. */ - -#define NRF_RADIO_DISTANCE_MAX_US (128000000UL - 1UL) /**< The longest timeslot distance, in microseconds, allowed for the distance parameter (see @ref nrf_radio_request_normal_t) in the request. */ - -#define NRF_RADIO_EARLIEST_TIMEOUT_MAX_US (128000000UL - 1UL) /**< The longest timeout, in microseconds, allowed when requesting the earliest possible timeslot. */ - -#define NRF_RADIO_START_JITTER_US (2) /**< The maximum jitter in @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START relative to the requested start time. */ - -/**@} */ - -/**@addtogroup NRF_SOC_ENUMS Enumerations - * @{ */ - -/**@brief The SVC numbers used by the SVC functions in the SoC library. */ -enum NRF_SOC_SVCS -{ - SD_PPI_CHANNEL_ENABLE_GET = SOC_SVC_BASE, - SD_PPI_CHANNEL_ENABLE_SET = SOC_SVC_BASE + 1, - SD_PPI_CHANNEL_ENABLE_CLR = SOC_SVC_BASE + 2, - SD_PPI_CHANNEL_ASSIGN = SOC_SVC_BASE + 3, - SD_PPI_GROUP_TASK_ENABLE = SOC_SVC_BASE + 4, - SD_PPI_GROUP_TASK_DISABLE = SOC_SVC_BASE + 5, - SD_PPI_GROUP_ASSIGN = SOC_SVC_BASE + 6, - SD_PPI_GROUP_GET = SOC_SVC_BASE + 7, - SD_FLASH_PAGE_ERASE = SOC_SVC_BASE + 8, - SD_FLASH_WRITE = SOC_SVC_BASE + 9, - SD_PROTECTED_REGISTER_WRITE = SOC_SVC_BASE + 11, - SD_MUTEX_NEW = SOC_SVC_BASE_NOT_AVAILABLE, - SD_MUTEX_ACQUIRE = SOC_SVC_BASE_NOT_AVAILABLE + 1, - SD_MUTEX_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 2, - SD_RAND_APPLICATION_POOL_CAPACITY_GET = SOC_SVC_BASE_NOT_AVAILABLE + 3, - SD_RAND_APPLICATION_BYTES_AVAILABLE_GET = SOC_SVC_BASE_NOT_AVAILABLE + 4, - SD_RAND_APPLICATION_VECTOR_GET = SOC_SVC_BASE_NOT_AVAILABLE + 5, - SD_POWER_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 6, - SD_POWER_SYSTEM_OFF = SOC_SVC_BASE_NOT_AVAILABLE + 7, - SD_POWER_RESET_REASON_GET = SOC_SVC_BASE_NOT_AVAILABLE + 8, - SD_POWER_RESET_REASON_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 9, - SD_POWER_POF_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 10, - SD_POWER_POF_THRESHOLD_SET = SOC_SVC_BASE_NOT_AVAILABLE + 11, - SD_POWER_POF_THRESHOLDVDDH_SET = SOC_SVC_BASE_NOT_AVAILABLE + 12, - SD_POWER_RAM_POWER_SET = SOC_SVC_BASE_NOT_AVAILABLE + 13, - SD_POWER_RAM_POWER_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 14, - SD_POWER_RAM_POWER_GET = SOC_SVC_BASE_NOT_AVAILABLE + 15, - SD_POWER_GPREGRET_SET = SOC_SVC_BASE_NOT_AVAILABLE + 16, - SD_POWER_GPREGRET_CLR = SOC_SVC_BASE_NOT_AVAILABLE + 17, - SD_POWER_GPREGRET_GET = SOC_SVC_BASE_NOT_AVAILABLE + 18, - SD_POWER_DCDC_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 19, - SD_POWER_DCDC0_MODE_SET = SOC_SVC_BASE_NOT_AVAILABLE + 20, - SD_APP_EVT_WAIT = SOC_SVC_BASE_NOT_AVAILABLE + 21, - SD_CLOCK_HFCLK_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 22, - SD_CLOCK_HFCLK_RELEASE = SOC_SVC_BASE_NOT_AVAILABLE + 23, - SD_CLOCK_HFCLK_IS_RUNNING = SOC_SVC_BASE_NOT_AVAILABLE + 24, - SD_RADIO_NOTIFICATION_CFG_SET = SOC_SVC_BASE_NOT_AVAILABLE + 25, - SD_ECB_BLOCK_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 26, - SD_ECB_BLOCKS_ENCRYPT = SOC_SVC_BASE_NOT_AVAILABLE + 27, - SD_RADIO_SESSION_OPEN = SOC_SVC_BASE_NOT_AVAILABLE + 28, - SD_RADIO_SESSION_CLOSE = SOC_SVC_BASE_NOT_AVAILABLE + 29, - SD_RADIO_REQUEST = SOC_SVC_BASE_NOT_AVAILABLE + 30, - SD_EVT_GET = SOC_SVC_BASE_NOT_AVAILABLE + 31, - SD_TEMP_GET = SOC_SVC_BASE_NOT_AVAILABLE + 32, - SD_POWER_USBPWRRDY_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 33, - SD_POWER_USBDETECTED_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 34, - SD_POWER_USBREMOVED_ENABLE = SOC_SVC_BASE_NOT_AVAILABLE + 35, - SD_POWER_USBREGSTATUS_GET = SOC_SVC_BASE_NOT_AVAILABLE + 36, - SVC_SOC_LAST = SOC_SVC_BASE_NOT_AVAILABLE + 37 -}; - -/**@brief Possible values of a ::nrf_mutex_t. */ -enum NRF_MUTEX_VALUES -{ - NRF_MUTEX_FREE, - NRF_MUTEX_TAKEN -}; - -/**@brief Power modes. */ -enum NRF_POWER_MODES -{ - NRF_POWER_MODE_CONSTLAT, /**< Constant latency mode. See power management in the reference manual. */ - NRF_POWER_MODE_LOWPWR /**< Low power mode. See power management in the reference manual. */ -}; - - -/**@brief Power failure thresholds */ -enum NRF_POWER_THRESHOLDS -{ - NRF_POWER_THRESHOLD_V17 = 4UL, /**< 1.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V18, /**< 1.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V19, /**< 1.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V20, /**< 2.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V21, /**< 2.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V22, /**< 2.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V23, /**< 2.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V24, /**< 2.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V25, /**< 2.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V26, /**< 2.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLD_V28 /**< 2.8 Volts power failure threshold. */ -}; - -/**@brief Power failure thresholds for high voltage */ -enum NRF_POWER_THRESHOLDVDDHS -{ - NRF_POWER_THRESHOLDVDDH_V27, /**< 2.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V28, /**< 2.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V29, /**< 2.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V30, /**< 3.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V31, /**< 3.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V32, /**< 3.2 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V33, /**< 3.3 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V34, /**< 3.4 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V35, /**< 3.5 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V36, /**< 3.6 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V37, /**< 3.7 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V38, /**< 3.8 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V39, /**< 3.9 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V40, /**< 4.0 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V41, /**< 4.1 Volts power failure threshold. */ - NRF_POWER_THRESHOLDVDDH_V42 /**< 4.2 Volts power failure threshold. */ -}; - - -/**@brief DC/DC converter modes. */ -enum NRF_POWER_DCDC_MODES -{ - NRF_POWER_DCDC_DISABLE, /**< The DCDC is disabled. */ - NRF_POWER_DCDC_ENABLE /**< The DCDC is enabled. */ -}; - -/**@brief Radio notification distances. */ -enum NRF_RADIO_NOTIFICATION_DISTANCES -{ - NRF_RADIO_NOTIFICATION_DISTANCE_NONE = 0, /**< The event does not have a notification. */ - NRF_RADIO_NOTIFICATION_DISTANCE_800US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_1740US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_2680US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_3620US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_4560US, /**< The distance from the active notification to start of radio activity. */ - NRF_RADIO_NOTIFICATION_DISTANCE_5500US /**< The distance from the active notification to start of radio activity. */ -}; - - -/**@brief Radio notification types. */ -enum NRF_RADIO_NOTIFICATION_TYPES -{ - NRF_RADIO_NOTIFICATION_TYPE_NONE = 0, /**< The event does not have a radio notification signal. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_ACTIVE, /**< Using interrupt for notification when the radio will be enabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE, /**< Using interrupt for notification when the radio has been disabled. */ - NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, /**< Using interrupt for notification both when the radio will be enabled and disabled. */ -}; - -/**@brief The Radio signal callback types. */ -enum NRF_RADIO_CALLBACK_SIGNAL_TYPE -{ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_START, /**< This signal indicates the start of the radio timeslot. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0, /**< This signal indicates the NRF_TIMER0 interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO, /**< This signal indicates the NRF_RADIO interrupt. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_FAILED, /**< This signal indicates extend action failed. */ - NRF_RADIO_CALLBACK_SIGNAL_TYPE_EXTEND_SUCCEEDED /**< This signal indicates extend action succeeded. */ -}; - -/**@brief The actions requested by the signal callback. - * - * This code gives the SOC instructions about what action to take when the signal callback has - * returned. - */ -enum NRF_RADIO_SIGNAL_CALLBACK_ACTION -{ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_NONE, /**< Return without action. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND, /**< Request an extension of the current - timeslot. Maximum execution time for this action: - @ref NRF_RADIO_MAX_EXTENSION_PROCESSING_TIME_US. - This action must be started at least - @ref NRF_RADIO_MIN_EXTENSION_MARGIN_US before - the end of the timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_END, /**< End the current radio timeslot. */ - NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END /**< Request a new radio timeslot and end the current timeslot. */ -}; - -/**@brief Radio timeslot high frequency clock source configuration. */ -enum NRF_RADIO_HFCLK_CFG -{ - NRF_RADIO_HFCLK_CFG_XTAL_GUARANTEED, /**< The SoftDevice will guarantee that the high frequency clock source is the - external crystal for the whole duration of the timeslot. This should be the - preferred option for events that use the radio or require high timing accuracy. - @note The SoftDevice will automatically turn on and off the external crystal, - at the beginning and end of the timeslot, respectively. The crystal may also - intentionally be left running after the timeslot, in cases where it is needed - by the SoftDevice shortly after the end of the timeslot. */ - NRF_RADIO_HFCLK_CFG_NO_GUARANTEE /**< This configuration allows for earlier and tighter scheduling of timeslots. - The RC oscillator may be the clock source in part or for the whole duration of the timeslot. - The RC oscillator's accuracy must therefore be taken into consideration. - @note If the application will use the radio peripheral in timeslots with this configuration, - it must make sure that the crystal is running and stable before starting the radio. */ -}; - -/**@brief Radio timeslot priorities. */ -enum NRF_RADIO_PRIORITY -{ - NRF_RADIO_PRIORITY_HIGH, /**< High (equal priority as the normal connection priority of the SoftDevice stack(s)). */ - NRF_RADIO_PRIORITY_NORMAL, /**< Normal (equal priority as the priority of secondary activities of the SoftDevice stack(s)). */ -}; - -/**@brief Radio timeslot request type. */ -enum NRF_RADIO_REQUEST_TYPE -{ - NRF_RADIO_REQ_TYPE_EARLIEST, /**< Request radio timeslot as early as possible. This should always be used for the first request in a session. */ - NRF_RADIO_REQ_TYPE_NORMAL /**< Normal radio timeslot request. */ -}; - -/**@brief SoC Events. */ -enum NRF_SOC_EVTS -{ - NRF_EVT_HFCLKSTARTED, /**< Event indicating that the HFCLK has started. */ - NRF_EVT_POWER_FAILURE_WARNING, /**< Event indicating that a power failure warning has occurred. */ - NRF_EVT_FLASH_OPERATION_SUCCESS, /**< Event indicating that the ongoing flash operation has completed successfully. */ - NRF_EVT_FLASH_OPERATION_ERROR, /**< Event indicating that the ongoing flash operation has timed out with an error. */ - NRF_EVT_RADIO_BLOCKED, /**< Event indicating that a radio timeslot was blocked. */ - NRF_EVT_RADIO_CANCELED, /**< Event indicating that a radio timeslot was canceled by SoftDevice. */ - NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN, /**< Event indicating that a radio timeslot signal callback handler return was invalid. */ - NRF_EVT_RADIO_SESSION_IDLE, /**< Event indicating that a radio timeslot session is idle. */ - NRF_EVT_RADIO_SESSION_CLOSED, /**< Event indicating that a radio timeslot session is closed. */ - NRF_EVT_POWER_USB_POWER_READY, /**< Event indicating that a USB 3.3 V supply is ready. */ - NRF_EVT_POWER_USB_DETECTED, /**< Event indicating that voltage supply is detected on VBUS. */ - NRF_EVT_POWER_USB_REMOVED, /**< Event indicating that voltage supply is removed from VBUS. */ - NRF_EVT_NUMBER_OF_EVTS -}; - -/**@} */ - - -/**@addtogroup NRF_SOC_STRUCTURES Structures - * @{ */ - -/**@brief Represents a mutex for use with the nrf_mutex functions. - * @note Accessing the value directly is not safe, use the mutex functions! - */ -typedef volatile uint8_t nrf_mutex_t; - -/**@brief Parameters for a request for a timeslot as early as possible. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t length_us; /**< The radio timeslot length (in the range 100 to 100,000] microseconds). */ - uint32_t timeout_us; /**< Longest acceptable delay until the start of the requested timeslot (up to @ref NRF_RADIO_EARLIEST_TIMEOUT_MAX_US microseconds). */ -} nrf_radio_request_earliest_t; - -/**@brief Parameters for a normal radio timeslot request. */ -typedef struct -{ - uint8_t hfclk; /**< High frequency clock source, see @ref NRF_RADIO_HFCLK_CFG. */ - uint8_t priority; /**< The radio timeslot priority, see @ref NRF_RADIO_PRIORITY. */ - uint32_t distance_us; /**< Distance from the start of the previous radio timeslot (up to @ref NRF_RADIO_DISTANCE_MAX_US microseconds). */ - uint32_t length_us; /**< The radio timeslot length (in the range [100..100,000] microseconds). */ -} nrf_radio_request_normal_t; - -/**@brief Radio timeslot request parameters. */ -typedef struct -{ - uint8_t request_type; /**< Type of request, see @ref NRF_RADIO_REQUEST_TYPE. */ - union - { - nrf_radio_request_earliest_t earliest; /**< Parameters for requesting a radio timeslot as early as possible. */ - nrf_radio_request_normal_t normal; /**< Parameters for requesting a normal radio timeslot. */ - } params; /**< Parameter union. */ -} nrf_radio_request_t; - -/**@brief Return parameters of the radio timeslot signal callback. */ -typedef struct -{ - uint8_t callback_action; /**< The action requested by the application when returning from the signal callback, see @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION. */ - union - { - struct - { - nrf_radio_request_t * p_next; /**< The request parameters for the next radio timeslot. */ - } request; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_REQUEST_AND_END. */ - struct - { - uint32_t length_us; /**< Requested extension of the radio timeslot duration (microseconds) (for minimum time see @ref NRF_RADIO_MINIMUM_TIMESLOT_LENGTH_EXTENSION_TIME_US). */ - } extend; /**< Additional parameters for return_code @ref NRF_RADIO_SIGNAL_CALLBACK_ACTION_EXTEND. */ - } params; /**< Parameter union. */ -} nrf_radio_signal_callback_return_param_t; - -/**@brief The radio timeslot signal callback type. - * - * @note In case of invalid return parameters, the radio timeslot will automatically end - * immediately after returning from the signal callback and the - * @ref NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN event will be sent. - * @note The returned struct pointer must remain valid after the signal callback - * function returns. For instance, this means that it must not point to a stack variable. - * - * @param[in] signal_type Type of signal, see @ref NRF_RADIO_CALLBACK_SIGNAL_TYPE. - * - * @return Pointer to structure containing action requested by the application. - */ -typedef nrf_radio_signal_callback_return_param_t * (*nrf_radio_signal_callback_t) (uint8_t signal_type); - -/**@brief AES ECB parameter typedefs */ -typedef uint8_t soc_ecb_key_t[SOC_ECB_KEY_LENGTH]; /**< Encryption key type. */ -typedef uint8_t soc_ecb_cleartext_t[SOC_ECB_CLEARTEXT_LENGTH]; /**< Cleartext data type. */ -typedef uint8_t soc_ecb_ciphertext_t[SOC_ECB_CIPHERTEXT_LENGTH]; /**< Ciphertext data type. */ - -/**@brief AES ECB data structure */ -typedef struct -{ - soc_ecb_key_t key; /**< Encryption key. */ - soc_ecb_cleartext_t cleartext; /**< Cleartext data. */ - soc_ecb_ciphertext_t ciphertext; /**< Ciphertext data. */ -} nrf_ecb_hal_data_t; - -/**@brief AES ECB block. Used to provide multiple blocks in a single call - to @ref sd_ecb_blocks_encrypt.*/ -typedef struct -{ - soc_ecb_key_t const * p_key; /**< Pointer to the Encryption key. */ - soc_ecb_cleartext_t const * p_cleartext; /**< Pointer to the Cleartext data. */ - soc_ecb_ciphertext_t * p_ciphertext; /**< Pointer to the Ciphertext data. */ -} nrf_ecb_hal_data_block_t; - -/**@} */ - -/**@addtogroup NRF_SOC_FUNCTIONS Functions - * @{ */ - -/**@brief Initialize a mutex. - * - * @param[in] p_mutex Pointer to the mutex to initialize. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_NEW, uint32_t, sd_mutex_new(nrf_mutex_t * p_mutex)); - -/**@brief Attempt to acquire a mutex. - * - * @param[in] p_mutex Pointer to the mutex to acquire. - * - * @retval ::NRF_SUCCESS The mutex was successfully acquired. - * @retval ::NRF_ERROR_SOC_MUTEX_ALREADY_TAKEN The mutex could not be acquired. - */ -SVCALL(SD_MUTEX_ACQUIRE, uint32_t, sd_mutex_acquire(nrf_mutex_t * p_mutex)); - -/**@brief Release a mutex. - * - * @param[in] p_mutex Pointer to the mutex to release. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_MUTEX_RELEASE, uint32_t, sd_mutex_release(nrf_mutex_t * p_mutex)); - -/**@brief Query the capacity of the application random pool. - * - * @param[out] p_pool_capacity The capacity of the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_POOL_CAPACITY_GET, uint32_t, sd_rand_application_pool_capacity_get(uint8_t * p_pool_capacity)); - -/**@brief Get number of random bytes available to the application. - * - * @param[out] p_bytes_available The number of bytes currently available in the pool. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RAND_APPLICATION_BYTES_AVAILABLE_GET, uint32_t, sd_rand_application_bytes_available_get(uint8_t * p_bytes_available)); - -/**@brief Get random bytes from the application pool. - * - * @param[out] p_buff Pointer to unit8_t buffer for storing the bytes. - * @param[in] length Number of bytes to take from pool and place in p_buff. - * - * @retval ::NRF_SUCCESS The requested bytes were written to p_buff. - * @retval ::NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES No bytes were written to the buffer, because there were not enough bytes available. -*/ -SVCALL(SD_RAND_APPLICATION_VECTOR_GET, uint32_t, sd_rand_application_vector_get(uint8_t * p_buff, uint8_t length)); - -/**@brief Gets the reset reason register. - * - * @param[out] p_reset_reason Contents of the NRF_POWER->RESETREAS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_GET, uint32_t, sd_power_reset_reason_get(uint32_t * p_reset_reason)); - -/**@brief Clears the bits of the reset reason register. - * - * @param[in] reset_reason_clr_msk Contains the bits to clear from the reset reason register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RESET_REASON_CLR, uint32_t, sd_power_reset_reason_clr(uint32_t reset_reason_clr_msk)); - -/**@brief Sets the power mode when in CPU sleep. - * - * @param[in] power_mode The power mode to use when in CPU sleep, see @ref NRF_POWER_MODES. @sa sd_app_evt_wait - * - * @retval ::NRF_SUCCESS The power mode was set. - * @retval ::NRF_ERROR_SOC_POWER_MODE_UNKNOWN The power mode was unknown. - */ -SVCALL(SD_POWER_MODE_SET, uint32_t, sd_power_mode_set(uint8_t power_mode)); - -/**@brief Puts the chip in System OFF mode. - * - * @retval ::NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN - */ -SVCALL(SD_POWER_SYSTEM_OFF, uint32_t, sd_power_system_off(void)); - -/**@brief Enables or disables the power-fail comparator. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_FAILURE_WARNING) when the power failure warning occurs. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] pof_enable True if the power-fail comparator should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_POF_ENABLE, uint32_t, sd_power_pof_enable(uint8_t pof_enable)); - -/**@brief Enables or disables the USB power ready event. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_POWER_READY) when a USB 3.3 V supply is ready. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] usbpwrrdy_enable True if the power ready event should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBPWRRDY_ENABLE, uint32_t, sd_power_usbpwrrdy_enable(uint8_t usbpwrrdy_enable)); - -/**@brief Enables or disables the power USB-detected event. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_DETECTED) when a voltage supply is detected on VBUS. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] usbdetected_enable True if the power ready event should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBDETECTED_ENABLE, uint32_t, sd_power_usbdetected_enable(uint8_t usbdetected_enable)); - -/**@brief Enables or disables the power USB-removed event. - * - * Enabling this will give a SoftDevice event (NRF_EVT_POWER_USB_REMOVED) when a voltage supply is removed from VBUS. - * The event can be retrieved with sd_evt_get(); - * - * @param[in] usbremoved_enable True if the power ready event should be enabled, false if it should be disabled. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBREMOVED_ENABLE, uint32_t, sd_power_usbremoved_enable(uint8_t usbremoved_enable)); - -/**@brief Get USB supply status register content. - * - * @param[out] usbregstatus The content of USBREGSTATUS register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_USBREGSTATUS_GET, uint32_t, sd_power_usbregstatus_get(uint32_t * usbregstatus)); - -/**@brief Sets the power failure comparator threshold value. - * - * @note: Power failure comparator threshold setting. This setting applies both for normal voltage - * mode (supply connected to both VDD and VDDH) and high voltage mode (supply connected to - * VDDH only). - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLD_SET, uint32_t, sd_power_pof_threshold_set(uint8_t threshold)); - -/**@brief Sets the power failure comparator threshold value for high voltage. - * - * @note: Power failure comparator threshold setting for high voltage mode (supply connected to - * VDDH only). This setting does not apply for normal voltage mode (supply connected to both - * VDD and VDDH). - * - * @param[in] threshold The power-fail threshold value to use, see @ref NRF_POWER_THRESHOLDVDDHS. - * - * @retval ::NRF_SUCCESS The power failure threshold was set. - * @retval ::NRF_ERROR_SOC_POWER_POF_THRESHOLD_UNKNOWN The power failure threshold is unknown. - */ -SVCALL(SD_POWER_POF_THRESHOLDVDDH_SET, uint32_t, sd_power_pof_thresholdvddh_set(uint8_t threshold)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERSET register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERSET register to write to. - * @param[in] ram_powerset Contains the word to write to the NRF_POWER->RAM[index].POWERSET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_SET, uint32_t, sd_power_ram_power_set(uint8_t index, uint32_t ram_powerset)); - -/**@brief Writes the NRF_POWER->RAM[index].POWERCLR register. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWERCLR register to write to. - * @param[in] ram_powerclr Contains the word to write to the NRF_POWER->RAM[index].POWERCLR register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_CLR, uint32_t, sd_power_ram_power_clr(uint8_t index, uint32_t ram_powerclr)); - -/**@brief Get contents of NRF_POWER->RAM[index].POWER register, indicates power status of RAM[index] blocks. - * - * @param[in] index Contains the index in the NRF_POWER->RAM[index].POWER register to read from. - * @param[out] p_ram_power Content of NRF_POWER->RAM[index].POWER register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_RAM_POWER_GET, uint32_t, sd_power_ram_power_get(uint8_t index, uint32_t * p_ram_power)); - -/**@brief Set bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be set in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_SET, uint32_t, sd_power_gpregret_set(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Clear bits in the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[in] gpregret_msk Bits to be clear in the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_CLR, uint32_t, sd_power_gpregret_clr(uint32_t gpregret_id, uint32_t gpregret_msk)); - -/**@brief Get contents of the general purpose retention registers (NRF_POWER->GPREGRET*). - * - * @param[in] gpregret_id 0 for GPREGRET, 1 for GPREGRET2. - * @param[out] p_gpregret Contents of the GPREGRET register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_POWER_GPREGRET_GET, uint32_t, sd_power_gpregret_get(uint32_t gpregret_id, uint32_t *p_gpregret)); - -/**@brief Enable or disable the DC/DC regulator for the regulator stage 1 (REG1). - * - * @param[in] dcdc_mode The mode of the DCDC, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The DCDC mode is invalid. - */ -SVCALL(SD_POWER_DCDC_MODE_SET, uint32_t, sd_power_dcdc_mode_set(uint8_t dcdc_mode)); - -/**@brief Enable or disable the DC/DC regulator for the regulator stage 0 (REG0). - * - * For more details on the REG0 stage, please see product specification. - * - * @param[in] dcdc_mode The mode of the DCDC0, see @ref NRF_POWER_DCDC_MODES. - * - * @retval ::NRF_SUCCESS - * @retval ::NRF_ERROR_INVALID_PARAM The dcdc_mode is invalid. - */ -SVCALL(SD_POWER_DCDC0_MODE_SET, uint32_t, sd_power_dcdc0_mode_set(uint8_t dcdc_mode)); - -/**@brief Request the high frequency crystal oscillator. - * - * Will start the high frequency crystal oscillator, the startup time of the crystal varies - * and the ::sd_clock_hfclk_is_running function can be polled to check if it has started. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_release - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_REQUEST, uint32_t, sd_clock_hfclk_request(void)); - -/**@brief Releases the high frequency crystal oscillator. - * - * Will stop the high frequency crystal oscillator, this happens immediately. - * - * @see sd_clock_hfclk_is_running - * @see sd_clock_hfclk_request - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_RELEASE, uint32_t, sd_clock_hfclk_release(void)); - -/**@brief Checks if the high frequency crystal oscillator is running. - * - * @see sd_clock_hfclk_request - * @see sd_clock_hfclk_release - * - * @param[out] p_is_running 1 if the external crystal oscillator is running, 0 if not. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_CLOCK_HFCLK_IS_RUNNING, uint32_t, sd_clock_hfclk_is_running(uint32_t * p_is_running)); - -/**@brief Waits for an application event. - * - * An application event is either an application interrupt or a pended interrupt when the interrupt - * is disabled. - * - * When the application waits for an application event by calling this function, an interrupt that - * is enabled will be taken immediately on pending since this function will wait in thread mode, - * then the execution will return in the application's main thread. - * - * In order to wake up from disabled interrupts, the SEVONPEND flag has to be set in the Cortex-M - * MCU's System Control Register (SCR), CMSIS_SCB. In that case, when a disabled interrupt gets - * pended, this function will return to the application's main thread. - * - * @note The application must ensure that the pended flag is cleared using ::sd_nvic_ClearPendingIRQ - * in order to sleep using this function. This is only necessary for disabled interrupts, as - * the interrupt handler will clear the pending flag automatically for enabled interrupts. - * - * @note If an application interrupt has happened since the last time sd_app_evt_wait was - * called this function will return immediately and not go to sleep. This is to avoid race - * conditions that can occur when a flag is updated in the interrupt handler and processed - * in the main loop. - * - * @post An application interrupt has happened or a interrupt pending flag is set. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_APP_EVT_WAIT, uint32_t, sd_app_evt_wait(void)); - -/**@brief Get PPI channel enable register contents. - * - * @param[out] p_channel_enable The contents of the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_GET, uint32_t, sd_ppi_channel_enable_get(uint32_t * p_channel_enable)); - -/**@brief Set PPI channel enable register. - * - * @param[in] channel_enable_set_msk Mask containing the bits to set in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_SET, uint32_t, sd_ppi_channel_enable_set(uint32_t channel_enable_set_msk)); - -/**@brief Clear PPI channel enable register. - * - * @param[in] channel_enable_clr_msk Mask containing the bits to clear in the PPI CHEN register. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ENABLE_CLR, uint32_t, sd_ppi_channel_enable_clr(uint32_t channel_enable_clr_msk)); - -/**@brief Assign endpoints to a PPI channel. - * - * @param[in] channel_num Number of the PPI channel to assign. - * @param[in] evt_endpoint Event endpoint of the PPI channel. - * @param[in] task_endpoint Task endpoint of the PPI channel. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_CHANNEL The channel number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_CHANNEL_ASSIGN, uint32_t, sd_ppi_channel_assign(uint8_t channel_num, const volatile void * evt_endpoint, const volatile void * task_endpoint)); - -/**@brief Task to enable a channel group. - * - * @param[in] group_num Number of the channel group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_ENABLE, uint32_t, sd_ppi_group_task_enable(uint8_t group_num)); - -/**@brief Task to disable a channel group. - * - * @param[in] group_num Number of the PPI group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_TASK_DISABLE, uint32_t, sd_ppi_group_task_disable(uint8_t group_num)); - -/**@brief Assign PPI channels to a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[in] channel_msk Mask of the channels to assign to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_ASSIGN, uint32_t, sd_ppi_group_assign(uint8_t group_num, uint32_t channel_msk)); - -/**@brief Gets the PPI channels of a channel group. - * - * @param[in] group_num Number of the channel group. - * @param[out] p_channel_msk Mask of the channels assigned to the group. - * - * @retval ::NRF_ERROR_SOC_PPI_INVALID_GROUP The group number is invalid. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_PPI_GROUP_GET, uint32_t, sd_ppi_group_get(uint8_t group_num, uint32_t * p_channel_msk)); - -/**@brief Configures the Radio Notification signal. - * - * @note - * - The notification signal latency depends on the interrupt priority settings of SWI used - * for notification signal. - * - To ensure that the radio notification signal behaves in a consistent way, the radio - * notifications must be configured when there is no protocol stack or other SoftDevice - * activity in progress. It is recommended that the radio notification signal is - * configured directly after the SoftDevice has been enabled. - * - In the period between the ACTIVE signal and the start of the Radio Event, the SoftDevice - * will interrupt the application to do Radio Event preparation. - * - Using the Radio Notification feature may limit the bandwidth, as the SoftDevice may have - * to shorten the connection events to have time for the Radio Notification signals. - * - * @param[in] type Type of notification signal, see @ref NRF_RADIO_NOTIFICATION_TYPES. - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE shall be used to turn off radio - * notification. Using @ref NRF_RADIO_NOTIFICATION_DISTANCE_NONE is - * recommended (but not required) to be used with - * @ref NRF_RADIO_NOTIFICATION_TYPE_NONE. - * - * @param[in] distance Distance between the notification signal and start of radio activity, see @ref NRF_RADIO_NOTIFICATION_DISTANCES. - * This parameter is ignored when @ref NRF_RADIO_NOTIFICATION_TYPE_NONE or - * @ref NRF_RADIO_NOTIFICATION_TYPE_INT_ON_INACTIVE is used. - * - * @retval ::NRF_ERROR_INVALID_PARAM The group number is invalid. - * @retval ::NRF_ERROR_INVALID_STATE A protocol stack or other SoftDevice is running. Stop all - * running activities and retry. - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_RADIO_NOTIFICATION_CFG_SET, uint32_t, sd_radio_notification_cfg_set(uint8_t type, uint8_t distance)); - -/**@brief Encrypts a block according to the specified parameters. - * - * 128-bit AES encryption. - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in, out] p_ecb_data Pointer to the ECB parameters' struct (two input - * parameters and one output parameter). - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCK_ENCRYPT, uint32_t, sd_ecb_block_encrypt(nrf_ecb_hal_data_t * p_ecb_data)); - -/**@brief Encrypts multiple data blocks provided as an array of data block structures. - * - * @details: Performs 128-bit AES encryption on multiple data blocks - * - * @note: - * - The application may set the SEVONPEND bit in the SCR to 1 to make the SoftDevice sleep while - * the ECB is running. The SEVONPEND bit should only be cleared (set to 0) from application - * main or low interrupt level. - * - * @param[in] block_count Count of blocks in the p_data_blocks array. - * @param[in,out] p_data_blocks Pointer to the first entry in a contiguous array of - * @ref nrf_ecb_hal_data_block_t structures. - * - * @retval ::NRF_SUCCESS - */ -SVCALL(SD_ECB_BLOCKS_ENCRYPT, uint32_t, sd_ecb_blocks_encrypt(uint8_t block_count, nrf_ecb_hal_data_block_t * p_data_blocks)); - -/**@brief Gets any pending events generated by the SoC API. - * - * The application should keep calling this function to get events, until ::NRF_ERROR_NOT_FOUND is returned. - * - * @param[out] p_evt_id Set to one of the values in @ref NRF_SOC_EVTS, if any events are pending. - * - * @retval ::NRF_SUCCESS An event was pending. The event id is written in the p_evt_id parameter. - * @retval ::NRF_ERROR_NOT_FOUND No pending events. - */ -SVCALL(SD_EVT_GET, uint32_t, sd_evt_get(uint32_t * p_evt_id)); - -/**@brief Get the temperature measured on the chip - * - * This function will block until the temperature measurement is done. - * It takes around 50 us from call to return. - * - * @param[out] p_temp Result of temperature measurement. Die temperature in 0.25 degrees Celsius. - * - * @retval ::NRF_SUCCESS A temperature measurement was done, and the temperature was written to temp - */ -SVCALL(SD_TEMP_GET, uint32_t, sd_temp_get(int32_t * p_temp)); - -/**@brief Flash Write -* -* Commands to write a buffer to flash -* -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the - * write has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - The data in the p_src buffer should not be modified before the @ref NRF_EVT_FLASH_OPERATION_SUCCESS -* or the @ref NRF_EVT_FLASH_OPERATION_ERROR have been received if the SoftDevice is enabled. -* - This call will make the SoftDevice trigger a hardfault when the page is written, if it is -* protected. -* -* -* @param[in] p_dst Pointer to start of flash location to be written. -* @param[in] p_src Pointer to buffer with data to be written. -* @param[in] size Number of 32-bit words to write. Maximum size is the number of words in one -* flash page. See the device's Product Specification for details. -* -* @retval ::NRF_ERROR_INVALID_ADDR Tried to write to a non existing flash address, or p_dst or p_src was unaligned. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_INVALID_LENGTH Size was 0, or higher than the maximum allowed size. -* @retval ::NRF_ERROR_FORBIDDEN Tried to write to an address outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_WRITE, uint32_t, sd_flash_write(uint32_t * p_dst, uint32_t const * p_src, uint32_t size)); - - -/**@brief Flash Erase page -* -* Commands to erase a flash page -* If the SoftDevice is enabled: -* This call initiates the flash access command, and its completion will be communicated to the -* application with exactly one of the following events: -* - @ref NRF_EVT_FLASH_OPERATION_SUCCESS - The command was successfully completed. -* - @ref NRF_EVT_FLASH_OPERATION_ERROR - The command could not be started. -* -* If the SoftDevice is not enabled no event will be generated, and this call will return @ref NRF_SUCCESS when the -* erase has been completed -* -* @note -* - This call takes control over the radio and the CPU during flash erase and write to make sure that -* they will not interfere with the flash access. This means that all interrupts will be blocked -* for a predictable time (depending on the NVMC specification in the device's Product Specification -* and the command parameters). -* - This call will make the SoftDevice trigger a hardfault when the page is erased, if it is -* protected. -* -* -* @param[in] page_number Page number of the page to erase -* -* @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. -* @retval ::NRF_ERROR_INVALID_ADDR Tried to erase to a non existing flash page. -* @retval ::NRF_ERROR_BUSY The previous command has not yet completed. -* @retval ::NRF_ERROR_FORBIDDEN Tried to erase a page outside the application flash area. -* @retval ::NRF_SUCCESS The command was accepted. -*/ -SVCALL(SD_FLASH_PAGE_ERASE, uint32_t, sd_flash_page_erase(uint32_t page_number)); - - - -/**@brief Opens a session for radio timeslot requests. - * - * @note Only one session can be open at a time. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) will be called when the radio timeslot - * starts. From this point the NRF_RADIO and NRF_TIMER0 peripherals can be freely accessed - * by the application. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_TIMER0) is called whenever the NRF_TIMER0 - * interrupt occurs. - * @note p_radio_signal_callback(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_RADIO) is called whenever the NRF_RADIO - * interrupt occurs. - * @note p_radio_signal_callback() will be called at ARM interrupt priority level 0. This - * implies that none of the sd_* API calls can be used from p_radio_signal_callback(). - * - * @param[in] p_radio_signal_callback The signal callback. - * - * @retval ::NRF_ERROR_INVALID_ADDR p_radio_signal_callback is an invalid function pointer. - * @retval ::NRF_ERROR_BUSY If session cannot be opened. - * @retval ::NRF_ERROR_INTERNAL If a new session could not be opened due to an internal error. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_OPEN, uint32_t, sd_radio_session_open(nrf_radio_signal_callback_t p_radio_signal_callback)); - -/**@brief Closes a session for radio timeslot requests. - * - * @note Any current radio timeslot will be finished before the session is closed. - * @note If a radio timeslot is scheduled when the session is closed, it will be canceled. - * @note The application cannot consider the session closed until the @ref NRF_EVT_RADIO_SESSION_CLOSED - * event is received. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened. - * @retval ::NRF_ERROR_BUSY If session is currently being closed. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_SESSION_CLOSE, uint32_t, sd_radio_session_close(void)); - -/**@brief Requests a radio timeslot. - * - * @note The request type is determined by p_request->request_type, and can be one of @ref NRF_RADIO_REQ_TYPE_EARLIEST - * and @ref NRF_RADIO_REQ_TYPE_NORMAL. The first request in a session must always be of type @ref NRF_RADIO_REQ_TYPE_EARLIEST. - * @note For a normal request (@ref NRF_RADIO_REQ_TYPE_NORMAL), the start time of a radio timeslot is specified by - * p_request->distance_us and is given relative to the start of the previous timeslot. - * @note A too small p_request->distance_us will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note Timeslots scheduled too close will lead to a @ref NRF_EVT_RADIO_BLOCKED event. - * @note See the SoftDevice Specification for more on radio timeslot scheduling, distances and lengths. - * @note If an opportunity for the first radio timeslot is not found before 100 ms after the call to this - * function, it is not scheduled, and instead a @ref NRF_EVT_RADIO_BLOCKED event is sent. - * The application may then try to schedule the first radio timeslot again. - * @note Successful requests will result in nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START). - * Unsuccessful requests will result in a @ref NRF_EVT_RADIO_BLOCKED event, see @ref NRF_SOC_EVTS. - * @note The jitter in the start time of the radio timeslots is +/- @ref NRF_RADIO_START_JITTER_US us. - * @note The nrf_radio_signal_callback_t(@ref NRF_RADIO_CALLBACK_SIGNAL_TYPE_START) call has a latency relative to the - * specified radio timeslot start, but this does not affect the actual start time of the timeslot. - * @note NRF_TIMER0 is reset at the start of the radio timeslot, and is clocked at 1MHz from the high frequency - * (16 MHz) clock source. If p_request->hfclk_force_xtal is true, the high frequency clock is - * guaranteed to be clocked from the external crystal. - * @note The SoftDevice will neither access the NRF_RADIO peripheral nor the NRF_TIMER0 peripheral - * during the radio timeslot. - * - * @param[in] p_request Pointer to the request parameters. - * - * @retval ::NRF_ERROR_FORBIDDEN If session not opened or the session is not IDLE. - * @retval ::NRF_ERROR_INVALID_ADDR If the p_request pointer is invalid. - * @retval ::NRF_ERROR_INVALID_PARAM If the parameters of p_request are not valid. - * @retval ::NRF_SUCCESS Otherwise. - */ - SVCALL(SD_RADIO_REQUEST, uint32_t, sd_radio_request(nrf_radio_request_t const * p_request)); - -/**@brief Write register protected by the SoftDevice - * - * This function writes to a register that is write-protected by the SoftDevice. Please refer to your - * SoftDevice Specification for more details about which registers that are protected by SoftDevice. - * This function can write to the following protected peripheral: - * - ACL - * - * @note Protected registers may be read directly. - * @note Register that are write-once will return @ref NRF_SUCCESS on second set, even the value in - * the register has not changed. See the Product Specification for more details about register - * properties. - * - * @param[in] p_register Pointer to register to be written. - * @param[in] value Value to be written to the register. - * - * @retval ::NRF_ERROR_INVALID_ADDR This function can not write to the reguested register. - * @retval ::NRF_SUCCESS Value successfully written to register. - * - */ -SVCALL(SD_PROTECTED_REGISTER_WRITE, uint32_t, sd_protected_register_write(volatile uint32_t * p_register, uint32_t value)); - -/**@} */ - -#ifdef __cplusplus -} -#endif -#endif // NRF_SOC_H__ - -/**@} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_svc.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_svc.h deleted file mode 100644 index 292c692982..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/headers/nrf_svc.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2012 - 2017, Nordic Semiconductor ASA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NRF_SVC__ -#define NRF_SVC__ - -#include "stdint.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SVCALL_AS_NORMAL_FUNCTION -#define SVCALL(number, return_type, signature) return_type signature -#else - -#ifndef SVCALL -#if defined (__CC_ARM) -#define SVCALL(number, return_type, signature) return_type __svc(number) signature -#elif defined (__GNUC__) -#ifdef __cplusplus -#define GCC_CAST_CPP (uint16_t) -#else -#define GCC_CAST_CPP -#endif -#define SVCALL(number, return_type, signature) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wreturn-type\"") \ - __attribute__((naked)) \ - __attribute__((unused)) \ - static return_type signature \ - { \ - __asm( \ - "svc %0\n" \ - "bx r14" : : "I" (GCC_CAST_CPP number) : "r0" \ - ); \ - } \ - _Pragma("GCC diagnostic pop") - -#elif defined (__ICCARM__) -#define PRAGMA(x) _Pragma(#x) -#define SVCALL(number, return_type, signature) \ -PRAGMA(swi_number = (number)) \ - __swi return_type signature; -#else -#define SVCALL(number, return_type, signature) return_type signature -#endif -#endif // SVCALL - -#endif // SVCALL_AS_NORMAL_FUNCTION - -#ifdef __cplusplus -} -#endif -#endif // NRF_SVC__ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_licence-agreement.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_licence-agreement.txt deleted file mode 100644 index a71adee7b9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_licence-agreement.txt +++ /dev/null @@ -1,35 +0,0 @@ -Copyright (c) 2007 - 2018, Nordic Semiconductor ASA -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form, except as embedded into a Nordic - Semiconductor ASA integrated circuit in a product or a software update for - such product, must reproduce the above copyright notice, this list of - conditions and the following disclaimer in the documentation and/or other - materials provided with the distribution. - -3. Neither the name of Nordic Semiconductor ASA nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -4. This software, with or without modification, must only be used with a - Nordic Semiconductor ASA integrated circuit. - -5. Any software provided in binary form under this license must not be reverse - engineered, decompiled, modified and/or disassembled. - -THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_softdevice.hex b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_softdevice.hex deleted file mode 100644 index 53327ec7fa..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/hex/s140_nrf52_6.0.0_softdevice.hex +++ /dev/null @@ -1,9281 +0,0 @@ -:020000040000FA -:10100000E0120020754D0200192F0000E74C02008D -:10101000192F0000192F0000192F000000000000F8 -:10102000000000000000000000000000CD4D0200A4 -:10103000192F000000000000192F0000192F0000D8 -:10104000354E02003B4E0200192F0000192F000000 -:10105000192F0000192F0000192F0000192F000070 -:10106000414E0200192F0000192F0000474E0200C8 -:10107000192F00004D4E0200534E0200594E02003F -:10108000192F0000192F0000192F0000192F000040 -:10109000192F0000192F0000192F0000192F000030 -:1010A000192F00005F4E0200192F0000192F0000B9 -:1010B000192F0000192F0000192F0000192F000010 -:1010C000654E0200192F0000192F0000192F000093 -:1010D000192F0000192F0000192F0000192F0000F0 -:1010E000192F0000192F0000192F0000192F0000E0 -:1010F000192F0000192F0000192F0000192F0000D0 -:10110000192F0000192F000000F002F823F01FFE35 -:101110000AA090E8000C82448344AAF10107DA4552 -:1011200001D123F014FEAFF2090EBAE80F0013F05C -:10113000010F18BFFB1A43F00103184734420200A5 -:10114000544202000A444FF0000C10F8013B13F027 -:10115000070408BF10F8014B1D1108BF10F8015B10 -:10116000641E05D010F8016B641E01F8016BF9D103 -:1011700013F0080F1EBF10F8014BAD1C0C1B09D15A -:101180006D1E58BF01F801CBFAD505E014F8016BCC -:1011900001F8016B6D1EF9D59142D6D3704700005E -:1011A0000023002400250026103A28BF78C1FBD870 -:1011B000520728BF30C148BF0B6070471FB500F011 -:1011C0003DF88DE80F001FBD1EF0040F0CBFEFF3BC -:1011D0000880EFF30980014A10470000752E0000D7 -:1011E0008269034981614FF001001044704700009B -:1011F000F511000001B41EB400B512F061FF01B496 -:101200000198864601BC01B01EBD0000F0B4404606 -:10121000494652465B460FB402A0013001B506486C -:10122000004700BF01BC86460FBC804689469246F7 -:101230009B46F0BC704700000911000023F084BDFC -:1012400070B51A4C054609202070A01C00F05FF80C -:101250005920A08029462046BDE8704008F060B8BB -:1012600008F069B870B50C461149097829B1A0F1A8 -:1012700060015E2908D3012013E0602804D06928AA -:1012800002D043F201000CE020CC0A4E94E80E009C -:1012900006EB8000A0F58050241FD0F8806E284611 -:1012A000B047206070BD012070470000080000209A -:1012B0001C000020CC4E020010B504460021012085 -:1012C00000F03DF800210B2000F039F8042119202E -:1012D00000F035F804210D2000F031F804210E2033 -:1012E00000F02DF804210F2000F029F80421C84354 -:1012F00000F025F80621162000F021F8062115201F -:1013000000F01DF82046FFF79BFF002010BDA9212B -:1013100001807047FFF7A4BF11487047104870471D -:10132000104A10B514680F4B0F4A08331A60FFF7C4 -:1013300099FF0C48001D046010BD704770474907B5 -:10134000090E002806DA00F00F0000F1E02080F816 -:10135000141D704700F1E02080F800147047000071 -:1013600003F900421005024001000001FE4800217F -:1013700001604160018170472DE9F743044692B056 -:101380009146406813F060F940B1606813F065F968 -:1013900020B9607800F00300022801D0012000E0AD -:1013A0000020F14E3072484613F00AF918B11020AF -:1013B00015B0BDE8F0834946012001F018FF002870 -:1013C000F6D101258DF842504FF4C050ADF84000E1 -:1013D000002210A9284606F04BFC0028E8D18DF821 -:1013E00042504FF428504FF00008ADF840004746F7 -:1013F0001C216846CDF81C8023F04DFC9DF81C0094 -:1014000008AA20F00F00401C20F0F00010308DF8EA -:101410001C0020788DF81D0061789DF81E0061F396 -:10142000420040F001008DF81E009DF800000AA95E -:1014300040F002008DF800002089ADF83000ADF8D2 -:101440003270608907AFADF834000B97606810AC5C -:101450000E900A94684606F000FA0028A8D1BDF85C -:10146000200030808DF8425042F60120ADF8400057 -:101470009DF81E0008AA20F00600801C20F0010044 -:101480008DF81E000220ADF83000ADF8340013A82E -:101490000E900AA9684606F0E0F9002888D1BDF848 -:1014A00020007080311D484600F033F9002887D1B4 -:1014B0008DF8425042F6A620ADF840001C21684647 -:1014C000CDF81C8023F0E7FB9DF81C00ADF83450EC -:1014D00020F00F00401C20F0F00010308DF81C00B0 -:1014E0009DF81D0008AA20F0FF008DF81D009DF852 -:1014F0001E000AA920F0060040F00100801C8DF8B3 -:101500001E009DF800008DF8445040F002008DF858 -:101510000000CDE90A4711A80E90ADF8305068469A -:1015200006F09BF9002899D1BDF82000F08000203A -:101530003EE73EB504460820ADF80000204613F013 -:101540003FF808B110203EBD2146012001F04FFEBA -:101550000028F8D12088ADF804006088ADF80600B6 -:10156000A088ADF80800E088ADF80A007E4801AB1D -:101570006A468088002106F075FDBDF80010082934 -:10158000E1D003203EBD1FB5044600200290082094 -:10159000ADF80800CDF80CD0204613F011F810B1CA -:1015A000102004B010BD704802AA81884FF6FF7069 -:1015B00006F09AFF0028F4D1BDF80810082901D0E0 -:1015C0000320EEE7BDF800102180BDF80210618015 -:1015D000BDF80410A180BDF80610E180E1E701B577 -:1015E00082B00220ADF800005F4802AB6A46408836 -:1015F000002106F037FDBDF80010022900D00320BD -:101600000EBD1CB5002100910221ADF80010019023 -:1016100012F0FCFF08B110201CBD53486A464188F7 -:101620004FF6FF7006F060FFBDF800100229F3D0FE -:1016300003201CBDFEB54C4C06461546207A0F46CD -:10164000C00705D0084612F0BBFF18B11020FEBD40 -:101650000F20FEBDF82D01D90C20FEBD304612F042 -:10166000AFFF18BB208801A905F040FE0028F4D187 -:1016700030788DF80500208801A906F0D2FC0028FA -:10168000EBD100909DF800009DF8051040F002009D -:101690008DF80000090703D040F008008DF8000025 -:1016A0002088694606F05AFC0028D6D1ADF80850CB -:1016B00020883B4602AA002106F0D4FCBDF80810A1 -:1016C000A942CAD00320FEBD7CB50546002000908B -:1016D00001900888ADF800000C462846019512F0EC -:1016E000B3FF18B9204612F091FF08B110207CBD5D -:1016F00015B1BDF8000050B11B486A4601884FF68D -:10170000FF7006F0F1FEBDF8001021807CBD0C20BA -:101710007CBD30B593B0044600200D4600901421E6 -:1017200001A823F0B8FA1C2108A823F0B4FA9DF808 -:101730000000CDF808D020F00F00401C20F0F00091 -:1017400010308DF800009DF8010020F0FF008DF8AA -:1017500001009DF8200040F002008DF820000120DB -:101760008DF8460002E000000C02002042F6042042 -:10177000ADF8440011A801902088ADF83C006088C5 -:10178000ADF83E00A088ADF84000E088ADF842001A -:101790009DF8020006AA20F00600801C20F001003F -:1017A0008DF802000820ADF80C00ADF810000FA86D -:1017B000059001A908A806F050F8002803D1BDF84B -:1017C00018002880002013B030BD0000F0B5007B69 -:1017D000059F1E4614460D46012800D0FFDF0C2051 -:1017E00030803A203880002C08D0287A032806D090 -:1017F000287B012800D0FFDF17206081F0BDA88979 -:10180000FBE72DE9F04786B0144691F80C900E9A4C -:101810000D46B9F1010F0BD01021007B2E8A8846AE -:10182000052807D0062833D0FFDF06B0BDE8F087D3 -:101830000221F2E7E8890C2100EB400001EB4000B7 -:10184000188033201080002CEFD0E88960810027B9 -:101850001AE00096688808F1020301AA696900F09D -:1018600084FF06EB0800801C07EB470186B204EBFF -:101870004102BDF8040090810DF1060140460E3290 -:1018800010F074FF7F1CBFB26089B842E1D8CCE78A -:1018900034201080E889B9F1010F11D0122148439A -:1018A0000E301880002CC0D0E88960814846B9F11C -:1018B000010F00D00220207300270DF1040A1FE061 -:1018C0000621ECE70096688808F1020301AA69691D -:1018D00000F04BFF06EB0800801C86B2B9F1010F47 -:1018E00012D007EBC70004EB4000BDF80410C18123 -:1018F00010220AF10201103023F02CF97F1CBFB234 -:101900006089B842DED890E707EB470104EB41025B -:10191000BDF80400D0810AF102014046103210F0F7 -:1019200025FFEBE72DE9F0470E4688B090F80CC094 -:1019300096F80C80378AF5890C20109902F10C0476 -:101940004FF0000ABCF1030F08D0BCF1040F3ED0E9 -:10195000BCF1070F7DD0FFDF08B067E705EB850C12 -:1019600000EB4C00188031200880002AF4D0A8F148 -:10197000060000F0FF09558125E0182101A823F099 -:101980008AF900977088434601AA716900F0EDFE5C -:10199000BDF804002080BDF80600E080BDF8080016 -:1019A0002081A21C0DF10A01484610F0DFFEB9F1BA -:1019B000000F00D018B184F804A0A4F802A007EB2F -:1019C000080087B20A346D1EADB2D6D2C4E705EB6B -:1019D000850C00EB4C00188032200880002ABBD018 -:1019E000A8F1050000F0FF09558137E000977088E5 -:1019F000434601AA716900F0B8FE9DF80600BDF8E3 -:101A00000410E1802179420860F3000162F3410192 -:101A1000820862F38201C20862F3C301020962F321 -:101A20000411420962F34511820962F386112171A2 -:101A3000C0096071BDF80700208122460DF109013F -:101A4000484610F093FE18B184F802A0A4F800A054 -:101A500000E007E007EB080087B20A346D1EADB264 -:101A6000C4D279E7A8F1020084B205FB08F000F1C6 -:101A70000E0CA3F800C035230B80002AA6D0558198 -:101A80009481009783B270880E32716900F06DFE08 -:101A900062E72DE9F84F1E460A9D0C4681462AB1A1 -:101AA000607A00F58070D080E089108199F80C0090 -:101AB0000C274FF000084FF00E0A0D2873D2DFE814 -:101AC00000F09E070E1C28303846556A7373730069 -:101AD000214648460095FFF779FEBDE8F88F207B48 -:101AE0009146082802D0032800D0FFDF378030203D -:101AF0000AE000BFA9F80A80EFE7207B914604289E -:101B000000D0FFDF378031202880B9F1000FF1D1FC -:101B1000E3E7207B9146042800D0FFDF37803220A6 -:101B2000F2E7207B9146022800D0FFDF3780332088 -:101B3000EAE7207B1746022800D0FFDF3420A6F812 -:101B400000A02880002FC8D0A7F80A80C5E7207B16 -:101B50001746042800D0FFDF3520A6F800A0288013 -:101B6000002FBAD04046A7F80A8012E0207B174623 -:101B7000052802D0062800D0FFDF10203080362054 -:101B80002880002FA9D0E0897881A7F80E80B9F8C5 -:101B90000E00B881A1E7207B9146072800D0FFDF27 -:101BA00037803720B0E72AE04FF0120018804FF05E -:101BB00038001700288090D0E0897881A7F80E803F -:101BC000A7F8108099F80C000A2805D00B2809D036 -:101BD0000C280DD0FFDF80E7207B0A2800D0FFDF34 -:101BE00001200AE0207B0B2800D0FFDF042004E066 -:101BF000207B0C2800D0FFDF052038736DE7FFDF66 -:101C00006BE770B50C46054601F025FC20B1007865 -:101C1000222804D2082070BD43F2020070BD0521C5 -:101C200028460FF021F8206008B1002070BD032085 -:101C300070BD30B44880087820F00F00C01C20F040 -:101C4000F000903001F8080B1DCA81E81D0030BC7F -:101C500007F0E7BB2DE9FF4784B0002782460297D3 -:101C600007989046894612300AF048F9401D20F046 -:101C70000306079828B907A95046FFF7C2FF0028B6 -:101C800054D1B9F1000F05D00798017B19BB052588 -:101C900004681BE098F80000092803D00D2812D032 -:101CA000FFDF46E0079903254868B0B3497B4288C7 -:101CB0007143914239D98AB2B3B2011D0EF047FE89 -:101CC0000446078002E0079C042508340CB12088F4 -:101CD00010B1032D29D02CE00798012112300AF011 -:101CE0003FF9ADF80C00024602AB2946504608F019 -:101CF000F4F9070001D1A01C029007983A4612306F -:101D0000C8F80400A8F802A003A94046029B0AF004 -:101D100034F9D8B10A2817D200E006E0DFE800F075 -:101D200007091414100B0D141412132014E60020CC -:101D300012E6112010E608200EE643F203000BE63F -:101D4000072009E60D2007E6032005E6BDF80C0094 -:101D50002346CDE900702A465046079900F015FD4C -:101D600057B9032D08D10798B3B2417B406871433E -:101D70008AB2011D0EF0FFFDB9F1000FD7D007990F -:101D800081F80C90D3E72DE9FE4F91461A881C4646 -:101D90008A468046FAB102AB494608F09EF9050032 -:101DA00019D04046A61C27880FF0A2F83246072615 -:101DB00029463B4600960EF0B0FC20882346CDE92C -:101DC00000504A465146404600F0DFFC002020808B -:101DD0000120BDE8FE8F0020FBE710B586B01C4651 -:101DE000AAB104238DF800301388ADF8083052886A -:101DF000ADF80A208A788DF80E200988ADF80C100D -:101E000000236A462146FFF725FF06B010BD1020CB -:101E1000FBE770B50D4605210EF026FF040000D14A -:101E2000FFDF294604F11200BDE870400AF081B8D6 -:101E30002DE9F8430D468046002607F0EFFA0446E8 -:101E40002878102878D2DFE800F0773B345331311E -:101E5000123131310831313131312879001FC0B2AE -:101E6000022801D0102810D114BBFFDF35E004B9DF -:101E7000FFDF052140460EF0F7FE007B032806D069 -:101E800004280BD0072828D0FFDF072655E0287943 -:101E9000801FC0B2022820D050B1F6E72879401F39 -:101EA000C0B2022819D0102817D0EEE704B9FFDF1E -:101EB00013E004B9FFDF287901280ED1172137E09C -:101EC000052140460EF0D0FE070000D1FFDF07F1EC -:101ED000120140460AF00AF82CB12A462146404633 -:101EE000FFF7A7FE29E01321404602F0A9FD24E0F8 -:101EF00004B9FFDF052140460EF0B6FE060000D112 -:101F0000FFDF694606F1120009F0FAFF060000D073 -:101F1000FFDFA988172901D2172200E00A46BDF881 -:101F20000000824202D9014602E005E01729C5D32C -:101F3000404600F03AFCD0E7FFDF3046BDE8F883CA -:101F4000401D20F0030219B102FB01F0001D00E06A -:101F500000201044704713B5009848B1002468462B -:101F60000EF09FFC002C02D1F74A009911601CBDB5 -:101F700001240020F4E72DE9F0470C461546242102 -:101F8000204622F088FE05B9FFDFA8786073288814 -:101F9000DFF8B4A3401D20F00301AF788946DAF8DA -:101FA00000000EF09CFC060000D1FFDF4FF000089F -:101FB0002660A6F8008077B109FB07F1091D0AD059 -:101FC000DAF800000EF08BFC060000D1FFDF66603F -:101FD000C6F8008001E0C4F80480298804F11200EA -:101FE000BDE8F04709F074BF2DE9F047804601F1E4 -:101FF00012000D46814609F081FF401DD24F20F0AE -:1020000003026E7B1446296838680EF093FC3EB1DB -:1020100004FB06F2121D03D0696838680EF08AFCD2 -:1020200005200EF0C9FD044605200EF0CDFD201A56 -:10203000012802D138680EF047FC49464046BDE809 -:10204000F04709F05ABF70B5054605210EF00CFEA9 -:10205000040000D1FFDF04F112012846BDE8704002 -:1020600009F044BF2DE9F04F91B04FF0000BADF8EF -:1020700034B0ADF804B047880C46054692460521B9 -:1020800038460EF0F1FD060000D1FFDF24B1A78035 -:10209000A4F806B0A4F808B0297809220B20B2EB06 -:1020A000111F7DD12A7A04F1100138274FF00C0856 -:1020B0004FF001090391102A73D2DFE802F072F2A7 -:1020C000F1F07F08D2888D9F3DDBF3EEB6B6307B12 -:1020D000022800D0FFDFA88908EBC001ADF804108A -:1020E0003021ADF83410002C25D06081B5F80E9069 -:1020F00000271DE004EBC708317C88F80E10F18939 -:10210000A8F80C10CDF800906888042304AA296967 -:1021100000F02BFBBDF81010A8F8101009F1040016 -:10212000BDF812107F1C1FFA80F9A8F81210BFB278 -:102130006089B842DED80DE1307B022800D0FFDF95 -:10214000E98908EBC100ADF804003020ADF8340097 -:10215000287B0A90001FC0B20F90002CEBD0618149 -:10216000B5F81090002725E0CDF8009068886969DF -:1021700003AA0A9B00F0F9FA0A9804EBC70848443E -:102180001FFA80F908F10C0204A90F9810F0EEFA7A -:1021900018B188F80EB0A8F80CB0BDF80C1001E02A -:1021A000D4E0CFE0A8F81010BDF80E107F1CA8F8FE -:1021B0001210BFB26089B842D6D8CBE00DA800900B -:1021C00001AB224629463046FFF71BFBC2E0307BBD -:1021D000082805D0FFDF03E0307B082800D0FFDFB0 -:1021E000E8891030ADF804003620ADF83400002C3A -:1021F0003FD0A9896181F189A18127E0307B09283D -:1022000000D0FFDFA88900F10C01ADF804103721E0 -:10221000ADF83410002C2CD06081E8890090AB8997 -:10222000688804F10C02296956E0E88939211030E8 -:1022300080B2ADF80400ADF83410002C74D0A98938 -:102240006181287A0E280AD002212173E989E1816F -:10225000288A0090EB8968886969039A3CE001212B -:10226000F3E70DA8009001AB224629463046FFF760 -:1022700059FB6FE0307B0A2800D0FFDF1220ADF859 -:102280000400ADF834704CB3A9896181A4F810B092 -:10229000A4F80EB084F80C905CE020E002E031E09D -:1022A00039E042E0307B0B2800D0FFDF288AADF810 -:1022B00034701230ADF8040084B104212173A9896F -:1022C0006181E989E181298A2182688A00902B8ACB -:1022D000688804F11202696900F047FA3AE0307B3D -:1022E0000C2800D0FFDF1220ADF80400ADF83470E8 -:1022F0003CB305212173A4F80AB0A4F80EB0A4F8E9 -:1023000010B027E00DA8009001AB224629463046C8 -:10231000FFF75CFA1EE00DA8009001AB22462946AB -:102320003046FFF7B6FB15E034E03B21ADF8040082 -:10233000ADF8341074B3A4F80690A4F808B084F88B -:102340000AB007E0FFDF05E010000020297A01292C -:1023500017D0FFDFBDF80400AAF800006CB1BDF88B -:1023600034002080BDF804006080BDF834003928B6 -:1023700003D03C2801D086F80CB011B00020BDE895 -:10238000F08F3C21ADF80400ADF8341014B1697A37 -:10239000A172DFE7AAF80000EFE72DE9F8435688BD -:1023A0000F4680461546052130460EF05DFC0400C0 -:1023B00000D1FFDF123400943B46414630466A6844 -:1023C00009F00FFFBAE570B50D4605210EF04CFC83 -:1023D000040000D1FFDF294604F11200BDE870407F -:1023E00009F099BD70B50D4605210EF03DFC0400C5 -:1023F00000D1FFDF294604F11200BDE8704009F06A -:10240000B7BD70B5054605210EF02EFC040000D1C5 -:10241000FFDF04F1080321462846BDE8704004228E -:10242000B1E470B5054605210EF01EFC040000D194 -:10243000FFDF214628462368BDE870400522A2E45C -:1024400070B5064605210EF00FFC040000D1FFDF39 -:1024500004F1120009F052FD401D20F0030511E0C7 -:10246000011D00880322431821463046FFF78BFCEC -:1024700000280BD0607BABB2684382B26068011D5C -:102480000EF0AFFA606841880029E9D170BD70B5DF -:102490000E46054606F0C2FF040000D1FFDF012012 -:1024A000207266726580207820F00F00C01C20F03A -:1024B000F00030302070BDE8704006F0B2BF2DE96A -:1024C000F0438BB00D461446814606A9FFF799FBF1 -:1024D000002814D14FF6FF7601274FF420588CB115 -:1024E00003208DF800001020ADF8100007A805901B -:1024F00007AA204604A910F058F978B107200BB0BC -:10250000BDE8F0830820ADF808508DF80E708DF806 -:102510000000ADF80A60ADF80C800CE00698A178D8 -:1025200001742188C1818DF80E70ADF80850ADF8A6 -:102530000C80ADF80A606A4602214846069BFFF708 -:1025400089FBDCE708B501228DF8022042F6020281 -:10255000ADF800200A4603236946FFF73EFC08BD9C -:1025600008B501228DF8022042F60302ADF80020E2 -:102570000A4604236946FFF730FC08BD00B587B062 -:1025800079B102228DF800200A88ADF80820498828 -:10259000ADF80A1000236A460521FFF75BFB07B080 -:1025A00000BD1020FBE709B1072316E407207047A0 -:1025B00070B588B00D461446064606A9FFF721FB04 -:1025C00000280ED17CB10620ADF808508DF800002F -:1025D000ADF80A40069B6A460821DC813046FFF7C9 -:1025E00039FB08B070BD05208DF80000ADF808502B -:1025F000F0E700B587B059B107238DF80030ADF88A -:102600000820039100236A460921FFF723FBC6E750 -:102610001020C4E770B588B00C460646002506A910 -:10262000FFF7EFFA0028DCD106980121123009F0FB -:1026300097FC9CB12178062921D2DFE801F0200522 -:1026400005160318801E80B2C01EE28880B20AB14F -:10265000A3681BB1824203D90C20C2E71020C0E757 -:10266000042904D0A08850B901E00620B9E7012967 -:1026700013D0022905D004291CD005292AD007200F -:10268000AFE709208DF800006088ADF80800E08809 -:10269000ADF80A00A068039023E00A208DF800003E -:1026A0006088ADF80800E088ADF80A00A0680A2547 -:1026B000039016E00B208DF800006088ADF808004C -:1026C000A088ADF80A00E088ADF80C00A0680B25E2 -:1026D000049006E00C208DF8000060788DF808006A -:1026E0000C256A4629463046069BFFF7B3FA78E781 -:1026F00000B587B00D228DF80020ADF8081000233A -:102700006A461946FFF7A6FA49E700B587B071B1E6 -:1027100002228DF800200A88ADF808204988ADF81B -:102720000A1000236A460621FFF794FA37E71020C3 -:1027300035E770B586B0064601200D46ADF80810A5 -:102740008DF80000014600236A463046FFF782FA02 -:10275000040008D12946304605F09EFC0021304691 -:1027600005F0B8FC204606B070BDF8B51C4615460D -:102770000E46069F0EF0AAFB2346FF1DBCB2314653 -:102780002A4600940DF095FFF8BD30B41146DDE9FE -:1027900002423CB1032903D0002330BC08F026BB21 -:1027A0000123FAE71A8030BC704770B50C46054625 -:1027B000FFF72FFB2146284605F07DFC2846BDE8A3 -:1027C0007040012105F086BC4FF0E0224FF400413B -:1027D0000020C2F88011204908702049900208604A -:1027E000704730B51C4D04462878A04218BF002C15 -:1027F00002D0002818BFFFDF2878A04208BF30BDF4 -:102800002C701749154A0020ECB1164DDFF858C05E -:10281000131F012C0DD0022C1CBFFFDF30BD086040 -:1028200003200860CCF800504FF4000010601860DE -:1028300030BD086002200860CCF800504FF04070B6 -:102840001060186030BD086008604FF06070106064 -:1028500030BD00B5FFDF00BD1800002008F50140C5 -:1028600000F500408C02002014F5004070B50B20EC -:1028700000F0B5F9082000F0B2F900210B2000F0BB -:10288000C4F90021082000F0C0F9EC4C0125656076 -:10289000A5600020C4F84001C4F84401C4F8480110 -:1028A0000B2000F0A7F9082000F0A4F90B2000F09D -:1028B0008BF9256070BD10B50B2000F090F9082051 -:1028C00000F08DF9DD48012141608160DC490A6832 -:1028D000002AFCD10021C0F84011C0F84411C0F812 -:1028E00048110B2000F086F9BDE81040082000F0E8 -:1028F00081B910B50B2000F07DF9BDE8104008202B -:1029000000F078B900B530B1012806D0022806D011 -:10291000FFDF002000BDCB4800BDCB4800BDCA484A -:10292000001D00BD70B5C9494FF000400860C84D9A -:10293000C00BC5F80803C74800240460C5F840412F -:102940000820C43500F04BF9C5F83C41C24804707A -:1029500070BD08B5B94A002128B1012811D002285C -:102960001CD0FFDF08BD4FF48030C2F80803C2F866 -:102970004803B3483C300160C2F84011BDE808404C -:10298000D0E74FF40030C2F80803C2F84803AC485F -:1029900040300160C2F84411AB480CE04FF4802095 -:1029A000C2F80803C2F84803A54844300160C2F8E1 -:1029B0004811A548001D0068009008BD70B5164676 -:1029C0000D460446022800D9FFDF00229B48012360 -:1029D00004F110018B4000EB8401C1F8405526B191 -:1029E000C1F84021C0F8043303E0C0F80833C1F84F -:1029F0004021C0F8443370BD2DE9F0411C46154616 -:102A000030B1012834D0022839D0FFDFBDE8F08191 -:102A1000891E002221F07F411046FFF7CFFF012CD5 -:102A200024D000208C4E8A4F012470703C6189496B -:102A300000203C3908600220091D086085490420F7 -:102A40003039086083483D350560C7F800420820EA -:102A500000F0D0F82004C7F80403082000F0B4F810 -:102A60007A49E007091F08603470CFE70120D9E7F1 -:102A7000012B02D00022012005E00122FBE7012BFF -:102A800004D000220220BDE8F04197E70122F9E7D7 -:102A90006B480068704770B500F0C7F8674C054692 -:102AA000D4F840010026012809D1D4F80803C00356 -:102AB00005D54FF48030C4F80803C4F84061D4F859 -:102AC000440101280CD1D4F80803800308D54FF441 -:102AD0000030C4F80803C4F84461012010F029FE56 -:102AE000D4F8480101280CD1D4F80803400308D5D4 -:102AF0004FF48020C4F80803C4F84861022010F0A5 -:102B000018FE5648056070BD70B500F08EF8524D45 -:102B10000446287858B1FFF705FF687820B10020F7 -:102B200085F8010010F005FE4C48046070BD0320DC -:102B3000F8E74FF0E0214FF40010C1F800027047B1 -:102B4000152000F057B8424901200861082000F024 -:102B500051B83F494FF47C10C1F8080300200246E9 -:102B600001EB8003C3F84025C3F84021401CC0B2EC -:102B70000628F5D37047410A43F609525143C0F382 -:102B8000080010FB02F000F5807001EB5020704748 -:102B900010B5430B48F2376463431B0C5C020C60B6 -:102BA0002F4C03FB04002F4B4CF2F72443435B0DE7 -:102BB00013FB04F404EB402000F580704012107009 -:102BC00008681844086010BD00F01F020121914000 -:102BD0004009800000F1E020C0F80011704700F0CB -:102BE0001F02012191404009800000F1E020C0F85F -:102BF0008011704700F01F020121914040098000C0 -:102C000000F1E020C0F8801270474907090E002843 -:102C100006DA00F00F0000F1E02080F8141D704784 -:102C200000F1E02080F8001470470C48001F006895 -:102C30000A4A0D49121D11607047000000B00040A3 -:102C400004B500404081004044B1004008F5014017 -:102C500000800040408500403800002014050240FC -:102C6000F7C2FFFF6F0C0100010000010A4810B518 -:102C70000468094909480831086010F0EEFD06486B -:102C8000001D046010BD0649002008604FF0E021DF -:102C90000220C1F8800270471005024001000001C7 -:102CA000FC1F004010B50D2000F06FF8C4B26FF0AB -:102CB000040000F06AF8C0B2844200D0FFDF3A4955 -:102CC0000120086010BD70B50D2000F048F8374CA9 -:102CD0000020C4F800010125C4F804530D2000F0C1 -:102CE00049F825604FF0E0216014C1F8000170BD83 -:102CF00010B50D2000F033F82C480121416000216F -:102D0000C0F80011BDE810400D2000F033B828488D -:102D100010B5046826492748083108602349D1F8CE -:102D20000001012804D0FFDF2148001D046010BD10 -:102D30001D48001D00680022C0B2C1F8002111F03A -:102D400039F9F1E710B51948D0F800110029FBD086 -:102D5000FFF7DDFFBDE810400D2000F00BB800F0DC -:102D60001F02012191404009800000F1E020C0F8DD -:102D70008011704700F01F0201219140400980003E -:102D800000F1E020C0F880127047002806DA00F059 -:102D90000F0000F1E02090F8140D03E000F1E020B6 -:102DA00090F800044009704704D5004000D000406E -:102DB000100502400100000110B5202000F082F84B -:102DC000202000F08AF84A49202081F8000449496F -:102DD00000060860091D48480860FEF79DFA45494D -:102DE000C83108604548D0F8041341F00101C0F82B -:102DF0000413D0F8041341F08071C0F804133C4967 -:102E000001201C39C1F8000110BD10B5202000F0D0 -:102E100059F8384800210160001D0160354A481EFC -:102E2000E83A1060354AC2F80803324BC8331960DB -:102E3000C2F80001C2F8600131490860BDE81040E5 -:102E4000202000F04AB82B492E48EC390860704722 -:102E500028492C48E8390860704726480160001D61 -:102E6000521E0260704723490120E8390860BFF311 -:102E70004F8F704770B51F4A8069E83A2149116049 -:102E80001E49D1F8006100231F4D1D4A5C1E1EB172 -:102E9000A84206D300210FE0D1F8606186B1A842B4 -:102EA00009D2C1F80031C1F860311460BDE870404A -:102EB000202000F012B81168BDE8704021F012BF68 -:102EC000FFDF70BD00F01F0201219140400980002A -:102ED00000F1E020C0F88011704700F01F020121CE -:102EE00091404009800000F1E020C0F88012704756 -:102EF00020E000E000060240C41400200000024070 -:102F00000004024001000001006002000F4A126844 -:102F10000D498A420CD118470C4A12680A4B9A4252 -:102F200006D101B511F0C0F8FFF78DFFBDE80140F3 -:102F3000074909680958084706480749054A064BE2 -:102F40007047000000000000BEBAFECAB0000020BA -:102F500004000020E0120020E012002070B50C46B2 -:102F6000054609F0DBFA21462846BDE870400AF024 -:102F7000C0BB10B511F01EFDFFF726FC11F09EFB43 -:102F8000BDE8104011F050BC012081070860704777 -:102F9000012081074860704712480068C00700D0D0 -:102FA000012070470F48001F0068C00700D00120B3 -:102FB00070470C4808300068C00700D001207047F7 -:102FC000084810300068704706490C310A68D2037F -:102FD00006D5096801F00301814201D10120704743 -:102FE000002070470C0400407047704770477047DE -:102FF000704770477047704770470004050600002F -:103000002CFFFFFFDBE5B15100600200A900FFFFCC -:103010008C000000808D5B0016425791AD5F58BC5C -:103020008E702F5A0FAA100DBCD52BFD30B5FC4D5C -:103030000446062CA9780ED2DFE804F0030E0E0E2B -:103040000509FFDF08E0022906D0FFDF04E00329BD -:1030500002D0FFDF00E0FFDFAC7030BD30B50446CA -:103060001038EF4D07280CD2DFE800F0040C060CF6 -:103070000C0C0C00FFDF05E0287E112802D0FFDFDA -:1030800000E0FFDF2C7630BD2DE9F0410FF0F8FCB9 -:10309000044610F08CFE201AC5B206200DF08CFDFF -:1030A000044606200DF090FD211ADD4C207E1228EA -:1030B00018D000200F1807200DF07EFD06460720CF -:1030C0000DF082FD301A3918207E13280CD0002014 -:1030D0000144A078042809D000200844281AC0B26E -:1030E000BDE8F0810120E5E70120F1E70120F4E7E8 -:1030F000CB4810B590F825004108C94800F12600DA -:1031000005D00BF0EBFABDE8104005F0B3BF0BF0B3 -:10311000BEFAF8E730B50446A1F120000D460A28B2 -:103120004AD2DFE800F005070C1C2328353A3F445B -:10313000FFDF42E0207820283FD1FFDF3DE0B848A4 -:103140008178052939D0007E122836D020782428AD -:1031500033D0252831D023282FD0FFDF2DE0207851 -:1031600022282AD0232828D8FFDF26E0207822280A -:1031700023D0FFDF21E0207822281ED024281CD075 -:1031800026281AD0272818D0292816D0FFDF14E0C7 -:103190002078252811D0FFDF0FE0207825280CD0DB -:1031A000FFDF0AE02078252807D0FFDF05E0207840 -:1031B000282802D0FFDF00E0FFDF257030BD10B50A -:1031C000012803D0022805D0FFDF10BDBDE8104064 -:1031D00003202BE79248007E122800D0FFDF002159 -:1031E000052011F0A1F9BDE81040112036E71FB508 -:1031F00004466A46002001F01FFEB4B1BDF802206B -:103200004FF6FF700621824201D1ADF80210BDF8E1 -:103210000420824201D1ADF80410BDF808108142AB -:1032200003D14FF44860ADF8080068460CF06AF925 -:1032300005F020FF04B010BD70B514460D460646DB -:1032400011F0BEF958B90DB1A54201D90C2070BDDD -:10325000002408E056F8240011F0B2F908B110205B -:1032600070BD641CE4B2AC42F4D3002070BD2DE903 -:10327000F04105461F4690460E460024006811F0B6 -:10328000ECF908B110202BE728680028A88802D0A4 -:10329000B84202D84FE00028F5D0092020E728687E -:1032A000025DB2B1611C475C152F2DD03BDC3AD2D8 -:1032B000DFE807F03912222228282A2A3131393949 -:1032C00039393939393939392200025D32BB641C48 -:1032D000A4B2A142F9D833E0022ADED1A21C805C5C -:1032E00088F80000072801D2400701D40A20F7E639 -:1032F000307840F0010015E0D043C00707E0012A14 -:1033000007D010E00620EBE61007A0F1805000285F -:10331000F5D01846E4E63078820701D50B20DFE6C9 -:1033200040F0020030702868005D084484B2A8882C -:10333000A04202D2B1E74FF4485381B2A142AED8C5 -:103340000020CDE610B5027843F202235408012292 -:10335000022C12D003DC3CB1012C16D106E0032C68 -:1033600010D07F2C11D112E0002011E080790324CD -:10337000B4EB901F09D10A700BE08079B2EB901F7B -:1033800003D1F8E780798009F5D0184610BDFF20F9 -:103390000870002010BD224991F82E2042B191F80A -:1033A0002F10022909D0032909D043F202207047C7 -:1033B00001461B48253001F092BD032100E00121A8 -:1033C00001700020704738B50C460546694601F08B -:1033D00086FD00280DD19DF80010207861F347008C -:1033E000207055F8010FC4F80100A888A4F8050062 -:1033F000002038BD38B51378B0B1022814D0FF28AA -:103400001BD008A46D46246800944C7905EB9414F5 -:10341000247864F34703137003280AD010E00000F7 -:10342000D80100200302FF0123F0FE0313700228DD -:10343000F2D1D8B240F0010005E043F0FE00107078 -:10344000107820F0010010700868C2F80100888828 -:10345000A2F8050038BD02210DF006BC38B50C46B7 -:103460000978222901D2082038BDADF800008DF876 -:10347000022068460BF079F905F0FCFD050003D148 -:1034800021212046FFF746FE284638BD1CB5002006 -:103490008DF80000CDF80100ADF80500FE4890F869 -:1034A0002E00022801D0012000E000208DF8070046 -:1034B00068460BF092FB002800D0FFDF1CBD002205 -:1034C0000A80437892B263F345120A8043785B081E -:1034D00063F386120A8000780C282BD2DFE800F014 -:1034E0002A06090E1116191C1F220C2742F0110082 -:1034F00009E042F01D0008800020704742F01100F2 -:1035000012E042F0100040F00200F4E742F0100038 -:10351000F1E742F00100EEE742F0010004E042F082 -:103520000200E8E742F0020040F00400E3E742F066 -:103530000400E0E7072070472DE9FF478AB0002527 -:10354000BDF82C6082461C4691468DF81C507007D1 -:1035500003D5606811F034F868B9CF4F4FF0010817 -:1035600097F82E0058B197F82F00022807D160680D -:1035700011F073F818B110200EB0BDE8F0873007D5 -:1035800002D5A08980283DD8700705D4B9F1000F75 -:1035900002D097F8240098B3E07DC0F300108DF8B6 -:1035A0001B00627D072003215AB3012A2CD0022A76 -:1035B000E2D0042AE0D18DF81710F00627D4A27DBE -:1035C000072022B3012A22D0022A23D0042AD3D1F1 -:1035D0008DF819108DF81590606810B307A9FFF7E2 -:1035E000B1FE0028C8D19DF81C00FF2816D06068E5 -:1035F00050F8011FCDF80F108088ADF8130014E0CB -:1036000000E001E00720B7E78DF81780D5E78DF8D7 -:103610001980DFE702208DF81900DBE743F2022072 -:10362000AAE7CDF80F50ADF81350E07B40B9207CED -:1036300030B9607C20B9A07C10B9E07CC00601D014 -:10364000062099E78DF800A0BDF82C00ADF8020027 -:10365000A0680190A068029004F10F0001F033FC13 -:103660008DF80C000DF10D00FFF795FE00B1FFDFA6 -:103670009DF81C008DF80E008DF816508DF818502E -:10368000E07D08A900F00F008DF81A0068460CF0E4 -:10369000F8F805F0EFFC6FE7F0B59DB000228DF86B -:1036A00068208DF858208DF8602005468DF86C2034 -:1036B000129213921492159219B10FC912AC84E8A8 -:1036C0000F00754CA078052801D004280CD1129861 -:1036D0006168884200D120B91498E168884203D11A -:1036E00010B108201DB0F0BD1F26334618AA1AA934 -:1036F00012A8FFF7BCFD0028F4D133461BAA16A977 -:1037000014A8FFF7B4FD0028ECD19DF85800C007BD -:1037100001D00A20E6E7A08A410708D4A17D31B193 -:103720009DF86010890702D043F20120DAE79DF886 -:103730006010C90709D0400707D4208818B144F2A7 -:103740005061884201D90720CCE78DF8005003264C -:103750008DF8016001278DF80270BDF84C208DF8BE -:10376000032001A8129921F0F5F968460CF0F0F851 -:1037700005F080FC0028B5D18DF824508DF8256027 -:103780008DF82670BDF854208DF827200AA81499CA -:1037900021F0E0F909A80CF028F905F06BFC0028ED -:1037A000A0D112AD241D95E80F0084E80F00002081 -:1037B00098E770B586B00D46040005D010F04DFFB7 -:1037C00020B1102006B070BD0820FBE72078C107AB -:1037D000A98802D0FF2902D303E01F2901D20920C2 -:1037E000F0E7800761D4FFF74FFC38B12078C0F3D1 -:1037F000C101012904D0032902D005E01320E1E72B -:10380000254991F8241041B1C0074FF000054FF051 -:10381000010604D08DF80F6003E00720D2E78DF891 -:103820000F506846FFF7B7FD00B1FFDF2078C0F307 -:10383000C1008DF801008DF80250607808B98DF84C -:1038400002606078C00705D09DF8020040F00100DA -:103850008DF802006078800705D59DF8020040F0E1 -:1038600002008DF802006078400705D59DF802003F -:1038700040F004008DF802002078C0F380008DF83D -:1038800003006088ADF80600A088ADF80A00207A31 -:1038900058B9607A48B901E0D8010020A07A20B96F -:1038A000E07A10B9207BC00601D006208AE704F137 -:1038B000080001F008FB8DF80E0068460BF090FA46 -:1038C00005F0D8FB00288BD18DF810608DF81150D1 -:1038D000ADF81250ADF8145004A80BF0CBFA05F077 -:1038E000C9FB00288BD1E08864280AD248B10120A6 -:1038F00001F0FFFA002891D12078C00705D01520EB -:1039000004E06421B0FBF1F0F2E71320FFF7A6FB1F -:10391000002057E72DE9FF470220FF4E8DF80400F5 -:103920000027708EADF80600B84643F202094CE05D -:1039300001A80DF000F9050006D0708EA8B3A6F816 -:103940003280ADF806803EE0039CA07F01072DD5B4 -:1039500004F124000090A28EBDF80800214604F175 -:10396000360301F056FC050005D04D452AD0112D37 -:103970003CD0FFDF3AE0A07F20F00801E07F420862 -:1039800062F3C711A177810861F30000E07794F832 -:10399000210000F01F0084F820002078282826D17C -:1039A00029212046FFF7B6FB21E014E040070AD5A5 -:1039B000BDF8080004F10E0101F0A9FA05000DD0D0 -:1039C0004D4510D100257F1CFFB202200DF0F4F808 -:1039D000401CB842ACD8052D11D008E0A07F20F0E3 -:1039E0000400A07703E0112D00D0FFDF0025BDF813 -:1039F00006007086052D04D0284604B0BDE5A6F863 -:103A000032800020F9E770B50646FFF724FD054631 -:103A100005F004FD040000D1FFDF6680207820F06F -:103A20000F00801C20F0F000203020700620207253 -:103A300095F83E006072BDE8704005F0F2BC2DE9DB -:103A4000F04786B0040000D1FFDF2078B24D20F0AF -:103A50000F00801C20F0F00070302070606801784A -:103A6000491F1B2933D2DFE801F0FE32323255FD07 -:103A7000320EFDFD42FC32323278FCFCFB32323237 -:103A8000FCFCFAF9FC00C6883046FFF7E4FC05466A -:103A9000304607F0A9F8E0B16068007A85F83E008A -:103AA00021212846FFF736FB3046FEF7CCFA304698 -:103AB00003F018FE3146012010F036FDA87F20F0FB -:103AC0001000A877FFF726FF002800D0FFDF06B020 -:103AD00053E5207820F0F00020302070062020727E -:103AE00066806068007A607205F09BFCD8E7C58844 -:103AF0002846FFF7B0FC00B9FFDF606800790128B5 -:103B000000D0FFDF6068017A06B02846BDE8F047C4 -:103B100007F046BCC6883046FFF79DFC050000D183 -:103B2000FFDF05F07EFC606831460089288160680F -:103B30004089688160688089A881012010F0F4FCC8 -:103B40000020A875A87F00F003000228BFD1FFF76E -:103B5000E1FE0028BBD0FFDFB9E70079022811D0D1 -:103B600000B1FFDF05F05DFC6668B6F806A0307AAC -:103B7000361D01280CD0687E814605F0E7F9070064 -:103B800009D107E006B00220BDE8F047FFF717BBF8 -:103B9000E878F1E7FFDF0022022150460DF05BF8E4 -:103BA000040000D1FFDF22212046FFF7B3FA30796D -:103BB000012800D00220A17F804668F30101A1778F -:103BC000308B2081708B6081B08BA08184F8229033 -:103BD0008DF80880B8680090F86801906A46032163 -:103BE00050460DF038F800B9FFDFB888ADF8100086 -:103BF000B8788DF8120004AA052150460DF02BF874 -:103C000000B9FFDFB888ADF80C00F8788DF80E0029 -:103C100003AA042150460DF01EF800B9FFDF06216B -:103C200006F1120001F091F938B37079800700D5E0 -:103C3000FFDF7179E07D61F34700E075D6F806009B -:103C4000A0617089A083062106F10C0001F07DF9C6 -:103C5000E8B195F825004108607805E032E02AE0F7 -:103C600047E03FE021E035E061F347006070D5F8C0 -:103C70002600C4F80200688D12E0E07D20F0FE000E -:103C8000801CE075D6F81200A061F08ADAE760784F -:103C900020F0FE00801C6070F068C4F80200308ADA -:103CA000E0804046FFF78BFA11E706B02046BDE8FA -:103CB000F04701F037BD05F0B4FB15F8300F40F0C8 -:103CC000020005E005F0ADFB15F8300F40F00400F0 -:103CD0002870FCE6287E132809D01528E4D1162088 -:103CE000FFF7BCF906B0BDE8F04705F09ABB142019 -:103CF000F6E7A978052909D00429D5D105F091FB6B -:103D0000022006B0BDE8F047FFF790B9007900281F -:103D1000CAD0E87802E00000D801002001F0BAF82B -:103D200005F07FFB0320ECE72DE9F05F0546007806 -:103D30004FF000080009DFF820A891460C464646DF -:103D400001287AD001274FF0020C4FF6FF730228AA -:103D500074D007280BD00A2871D0FFDFA9F80060C3 -:103D600014B1A4F8008066800020BDE8F09F696867 -:103D700004F108000A78172A70D010DC4FF0000B0D -:103D8000142A31D006DC052A6DD0092A0FD0102A5A -:103D90007ED11FE0152A7CD0162AF9D1F0E01B3A1B -:103DA000052A75D2DFE802F009C5FDDAFC00C888F3 -:103DB0004FF012081026214675E14FF01C080A2624 -:103DC000D4B38888A0806868807920726868C079D8 -:103DD0006072C3E74FF01B0814266CB303202072F7 -:103DE00068688088A080B9E70A793C2AB6D00D1DA2 -:103DF0004FF010082C26FCB16988A180298B6182C4 -:103E0000298B2182698BA182A98BE1826B79024681 -:103E1000A91D1846FFF7EEFA2879012810D084F87A -:103E20000FC0FF202076C4F81CB0C4F820B0C4F83E -:103E300024B0C4F828B091E712E013E13BE135E18A -:103E4000E7730AF1040084F818B090E80E00DAF87D -:103E50001000C4E90930C4E907127FE7A8E002E0D6 -:103E6000A9F8006080E72C264FF01D08002CF7D041 -:103E70000546A380887B2A880F1D60F300022A80F4 -:103E8000887B400860F341022A80887B800801E03B -:103E9000E6E0ADE060F382022A80887BB91CC008AE -:103EA00060F3C3022A80B87A0011401C60F3041248 -:103EB00002F07F0028807878AA1CFFF79BFA387DF3 -:103EC00005F1090207F11501FFF794FA387B01F0BB -:103ED0004BF82874787B01F047F86874F87EA87472 -:103EE000787AE87497F83B002875B87B6875A5F870 -:103EF00016B0DAF81C00A861397ABAF820008842B6 -:103F000001D2014610E0B87AC0F3411002280BD06C -:103F1000012809D0288820F060002880A1840A4662 -:103F200007F11C01A86998E0288820F06000403063 -:103F3000F3E711264FF02008002C91D0A380686889 -:103F400004F10A02007920726868007B6072696877 -:103F50008B1D48791946FFF74DFAFFE60A264FF008 -:103F60002108002CE9D08888A080686880792072B8 -:103F70006868C07960729AF8301021F004018BE013 -:103F80000B264FF02208002CD7D0C888A080686884 -:103F9000007920726868007A00F0E6FF607201E044 -:103FA00052E039E06868407A00F0DEFFA072D5E6A2 -:103FB0001C264FF02608002CBFD0A38068684079EB -:103FC00060726868007AA0720AF1040090E80E003E -:103FD000DAF81000C4E90530C4E903126868007912 -:103FE0003C2803D043287DD0FFDFB7E62772B5E633 -:103FF00010264FF02408002C9FD08888A080686885 -:10400000807920816868807A608168680089A081F1 -:1040100068688089E081A1E610264FF02308002C13 -:104020008BD08888A0806868C088208168680089F3 -:10403000608168684089A08168688089E0819AF819 -:10404000301021F0020127E030264FF02508002C27 -:1040500088D0A38069682822496820F07BFD7DE62E -:104060004A4677E0287A012803D0022817D0FFDFDC -:1040700074E610264FF01F08002C85D06888A080B9 -:10408000A8892081E8896081288AA081688AE081E6 -:104090009AF8301021F001018AF830105EE64FF0F6 -:1040A00012081026688800F03DFF57E62846BDE854 -:1040B000F05F01F0C1BC287A07284DD2DFE800F09C -:1040C0004C38384A4A4A040009264FF01108002C9F -:1040D00092D06F883846FFF7BEF990F822A0A780EB -:1040E000687A00E02DE02072042138460CF0CEFD05 -:1040F000052138460CF0CAFD002138460CF0C6FDFB -:10410000012138460CF0C2FD032138460CF0BEFDFB -:10411000022138460CF0BAFD062138460CF0B6FDF7 -:10412000072138460CF0B2FD504600F0B3FE15E60C -:1041300014264FF01B08002C8AD0A380287A01286F -:1041400002D084F808C009E62772DAE90710C4E94A -:10415000031003E62146A9E7FFDFFFE570B5FE4D3A -:10416000287E122801D0082070BD0BF094F904F0CD -:1041700081FF040002D1687E00F08CFE0021052042 -:1041800010F0D2F9204670BD1CB5F348007E13280C -:1041900001D208201CBD00208DF8000068460AF0FE -:1041A00069FE04F067FF0028F4D10021052010F01B -:1041B000BBF91120FEF752FF00201CBD70B501288D -:1041C00005D0052825D0062800D0FFDF70BD8DB2B0 -:1041D0002846FFF740F9040000D1FFDF20782128AE -:1041E000F4D005F01BF968B1017821F00F01891CAA -:1041F00021F0F00110310170022101724580002090 -:10420000A07528E021462846BDE870401322FFF73C -:1042100025B9D148047EA4F1120005281FD2DFE899 -:1042200000F0060303030300FFF7AEFF01E0FFF712 -:1042300095FF0028CAD105F0F1F80028C6D0017812 -:1042400021F00F01891C21F0F00120310170132CA5 -:1042500007D002210172BDE8704005F0E2B8FFDF2F -:1042600070BD0121F6E72DE9F04116460C008046AD -:1042700000D1FFDF307820F00F00801C20F0F0002C -:10428000103030702078012804D0022818D0FFDFC9 -:10429000BDE8F0814046FFF7DEF8050000D1FFDF02 -:1042A0000320A87505F0BDF894E80F00083686E8ED -:1042B0000F00A94810F8301F41F001010170E7E735 -:1042C0004046FFF7C8F8050000D1FFDFA1884FF690 -:1042D000FF700027814202D1E288824203D08142EE -:1042E00001D1E08840B105F09CF894E80F00083651 -:1042F00086E80F00AF75CBE7A87D0128C8D17823E9 -:104300000022414610F066F80220A875C0E738B5D3 -:1043100005460C46084610F053F918BB203D062D03 -:104320004AD2DFE805F0031B373C4230002106206B -:1043300010F0D0F808B1112038BDA01C0BF07EF9A8 -:1043400004F098FE050038D100220823114606200B -:1043500010F040F8062830D0FFDF2EE0606810F043 -:1043600073F908B1102038BD618820886A460BF0C7 -:104370003BFD04F07FFE05001FD16068E8B1BDF889 -:104380000010018019E0A07800F0010120880BF0F6 -:1043900061FD0EE0206801F0FDFD05460DE020788E -:1043A00000F001000AF066F903E0618820880BF054 -:1043B000A0FC04F05FFEF0E70725284638BD70B585 -:1043C00005460C46084610F021F908B1102070BDD2 -:1043D000202D07D0212D0DD0222D0BD0252D09D039 -:1043E000072070BD2088A11C0AF039FABDE8704092 -:1043F00004F040BE062070BD57482530704708B510 -:104400003421554820F047FC0120FEF70FFE112013 -:10441000FEF724FE50496846263104F095FF4E48C9 -:104420009DF8002010F8251F62F3470121F00101DB -:104430000170002141724FF46171A0F80710022150 -:104440008172FEF755FE00B1FFDFFCF78FFF01F030 -:1044500034F908BD10B50C464021204620F0F9FB88 -:10446000A07F20F00300A077202020700020A075FE -:1044700084F8230010BD70472DE9FC41074610F079 -:104480009FF810B11020BDE8FC81334E06F12501E4 -:10449000D6F825000090B6F82950ADF8045096F8EB -:1044A0002B408DF806403846FEF78DFF0028EAD1F4 -:1044B000FEF71EFE0028E6D0009946F8251FB580BD -:1044C000B471E0E710B5044610F0A0F808B1102070 -:1044D00010BD21482049224690F825002631400889 -:1044E000FEF788FF002010BDFEB50D4604004FF01A -:1044F000000712D00822FEF79FFE002812D10026E6 -:1045000009E000BF54F826006946FEF71BFF0028AB -:1045100008D1761CF6B2AE42F4D309F0AEFF10B16A -:1045200043F20320FEBD0C4E86F8247024B300270E -:104530001EE000BF54F8270002A9FEF703FF00B1F8 -:10454000FFDF9DF808008DF8000054F8270050F8B0 -:10455000011FCDF8011001E0D80100208088ADF8DE -:104560000500684609F0D3FF00B1FFDF7F1CFFB2F2 -:10457000AF42DFD386F824500020FEBD2DE9F0477E -:104580008AB01546894604001ED00F4608222946E7 -:10459000FEF752FE002810D1002613E054F8260042 -:1045A0006946103000F09BFC002806D147B157F84F -:1045B000260010F005F818B110200AB0BDE8F08709 -:1045C000761CF6B2AE42E9D30026A5F101081BE045 -:1045D00006F1010A0AF0FF0712E000BF54F82600B6 -:1045E000017C4A0854F827100B7CB2EB530F05D11D -:1045F00006221130113120F081FA58B17F1CFFB230 -:10460000AF42EBD30AF0FF064645E1DB4E4624B14C -:10461000012003E043F20520CFE7002009F0A8FFC6 -:1046200010B909F0B9FF10B143F20420C5E75CB33B -:1046300000270DF1170825E054F8270069461030CF -:1046400000F04DFC00B1FFDF54F82700102250F8B5 -:10465000111FCDF801108088ADF8050054F827101F -:104660000DF1070020F076FA96B156F827101022C7 -:10467000404620F06FFA684609F022FF00B1FFDFE4 -:104680007F1CFFB2AF42D7D3FEF700FF002094E7B4 -:10469000404601F073FCEEE730B585B004460FF0FC -:1046A0008FFF18B960680FF0D8FF10B1102005B067 -:1046B00030BD60884AF2B811884206D82078FB4D98 -:1046C00028B1012806D0022804D00720EFE7FEF722 -:1046D0000FFD18E06078022804D0032802D043F2CE -:1046E0000220E4E785F82F00C1B200200090ADF869 -:1046F000040002292CD0032927D0FFDF684609F0E7 -:10470000EDFF04F0B7FC0028D1D1606801F029FC6E -:10471000207858B101208DF800000DF1010001F062 -:104720002DFC68460BF0F5FB00B1FFDF207885F823 -:104730002E00FEF7ABFE608860B1A88580B209F05C -:104740000FFF00B1FFDF0020B1E78DF80500D5E7CE -:104750004020FAE74FF46170EFE710B504460FF020 -:1047600055FF20B9606838B10FF06EFF08B1102016 -:1047700010BD606801F002FCCC4830F82C1F61804D -:10478000C178617080782070002010BD2DE9F84359 -:104790001446894606460FF039FFA0B948460FF087 -:1047A0005CFF80B920460FF058FF60B9BF4DA87874 -:1047B000012800D13CB13178FF2906D049B143F23C -:1047C0000400BDE8F8831020FBE7012801D0042095 -:1047D000F7E74FF00008A4B3052811D004280FD044 -:1047E00069462046FEF76BFE0028EAD1207D48B1DD -:1047F000012809D0022809D0032809D00720E0E7C2 -:104800000820DEE7424604E0012202E0022200E046 -:1048100003222346174600200099FEF78DFE00284C -:10482000CFD1A0892880A07BE875BDF80000A882C0 -:10483000AF75BDF80000000701D5A08988B1A08937 -:10484000288049460020FEF727FF0028B9D1A87824 -:1048500005280BD0042809D0287DC00703D00320E9 -:1048600002E08020ECE70220FEF7E0FB86F8008003 -:104870000020A6E77CB58D4C05460E46A0780228A0 -:1048800003D0032801D008207CBD15B143F20400F9 -:104890007CBD07200CF098F910B9A078032806D049 -:1048A000FEF7F2FB28B1A078032804D009E012201B -:1048B0007CBD13207CBD304600F0CBFA0028F9D136 -:1048C000E67001208DF800008DF801008DF802508F -:1048D0002088ADF80400E07D8DF8060068460BF0F6 -:1048E000C6F904F0C7FB0028E4D1A078032805D05E -:1048F0005FF00400FEF79AFB00207CBDE07800F03A -:10490000B8FA0520F6E71CB510B143F204001CBD4F -:10491000664CA078042803D0052801D008201CBDCF -:1049200000208DF8000001218DF801108DF80200A3 -:1049300068460BF09CF904F09DFB0028EFD1A078AD -:10494000052805D05FF00200FEF770FB00201CBDBB -:10495000E07800F09FFA0320F6E72DE9FC4180465D -:104960000E46032508460FF078FE002866D1404623 -:10497000FEF771FD040004D02078222804D208201C -:1049800081E543F202007EE5A07F00F003073EB11F -:10499000012F0CD000203146FEF729FC0500EFD195 -:1049A000012F06D0022F1AD0FFDF28466BE5012029 -:1049B000F1E7A07D3146022801D011B107E01120B6 -:1049C00061E56846FCF7DFFD0028D9D1694640461D -:1049D00006F0A9FC0500E8D10120A075E5E7A07D5F -:1049E000032804D1314890F83000C00701D02EB31D -:1049F0000EE026B1A07F40071ED4002100E0012177 -:104A0000404606F0B0FC0500CFD1A075002ECCD0FA -:104A10003146404600F07BFA05461128C5D1A07FFB -:104A20004107C2D4316844F80E1F7168616040F0DC -:104A3000040020740025B8E71125B6E7102022E510 -:104A400070B50C460546FEF706FD010005D022466E -:104A50002846BDE87040FEF701BD43F2020070BD7C -:104A600010B5012807D1114B9B78012B00D011B153 -:104A700043F2040010BD09F0B6FDBDE8104004F09B -:104A8000F9BA012300F010BA00231A46194600F0C3 -:104A90000BBA70B506460C4608460FF091FD18B9E2 -:104AA00020680FF0B3FD18B1102070BDD8010020B0 -:104AB000F64D2A7E112A04D0132A00D33EB10820D5 -:104AC000F3E721463046FEF774FE60B1EDE70920BA -:104AD000132A0DD0142A0BD0A188FF29E5D3152065 -:104AE000FEF7BCFA0020D4E90012C5E90712DCE7A2 -:104AF000A1881F29D9D31320F2E72DE9F047DFF869 -:104B00008C93804690B099F818009A4615460C464A -:104B1000132803D3FFF738FB002836D120460FF0C7 -:104B20004FFD88BB28460FF04BFD68BB20784FF047 -:104B30000107C0074FF0000602D08DF83A7001E07F -:104B40008DF83A602078C0F3C1008DF800006178DC -:104B50000720E1B101291AD0022916D0042914D165 -:104B600004208DF809006088ADF80A00A088ADF82F -:104B700010002078C0F3C100012825D0032823D0DD -:104B800040460FF01DFD28B1102010B016E58DF83D -:104B90000970E8E798F80000400808D0012809D01B -:104BA000022807D0032805D043F20220EDE78DF854 -:104BB000026001E08DF80270404650F8011FCDF808 -:104BC00003108088ADF807000DF10100FEF7E3FB4C -:104BD00008B10320D9E72888ADF816006888ADF839 -:104BE0001C00A888ADF82200E888ADF82800ADF8D0 -:104BF0002E60ADF8346068460AF057FAE8B999F8C3 -:104C000018004D46112801D00820BEE706200BF001 -:104C1000DBFF38B12078C0F3C100012804D003289D -:104C200002D004E01220B0E795F8240028B1FEF786 -:104C30002BFA022803D21320A7E70720A5E7504646 -:104C400000F007F90028A0D185F819A068460AF0FD -:104C50001FFC04F00FFA002897D1687E00F009F9D4 -:104C6000E08864280BD250B15FF0010000F041F9F8 -:104C700004008AD11220FEF7F1F9204685E764216D -:104C8000B0FBF1F0F2E770B5064615460C46084653 -:104C90000FF0BCFC18B928460FF0B8FC08B1102082 -:104CA00003E72A46214630460BF081F804F0E2F98A -:104CB0000028F5D121787F29F2D10520F5E67CB5D1 -:104CC00005460C4608460FF07BFC08B110207CBD61 -:104CD0002846FEF7C0FB20B10078222804D2082025 -:104CE0007CBD43F202007CBD684890F8300040076C -:104CF00001D511207CBD2078C00802D16078C008A1 -:104D000001D007207CBDADF8005020788DF802005E -:104D100060788DF803000220ADF8040068460AF0C0 -:104D200055F804F0A7F97CBD70B586B014460D4661 -:104D30000646FEF790FB28B10078222805D208200D -:104D400006B0B2E643F20200FAE728460FF085FC0F -:104D500020B944B120460FF077FC08B11020EFE7EE -:104D600000202060A080494890F83000800701D5DD -:104D70001120E5E703A9304609F0F7FD18B100BF9F -:104D800004F078F9DCE7ADF80060BDF81400ADF888 -:104D90000200BDF81600ADF80400BDF81000BDF823 -:104DA0001210ADF80600ADF808107DB1298809B1E0 -:104DB000ADF80610698809B1ADF80210A98809B1EB -:104DC000ADF80810E98809B1ADF80410DCB1BDF800 -:104DD0000610814201D9081A2080BDF80210BDF8E2 -:104DE0001400814201D9081A6080BDF80800BDF89E -:104DF0000410BDF816200144BDF812001044814291 -:104E000001D9081AA080684609F0E6FEB8E71CB58B -:104E10001F490968CDE9001068460AF048F904F016 -:104E200029F91CBD1CB500200090019068460AF0CD -:104E30003EF904F01FF91CBD108008885080488896 -:104E40009080C88810818888D0800020508190810F -:104E5000704710B5044604F079F830B1407830B1AD -:104E6000204604F082FB002010BD052010BD12205A -:104E700010BD10B504F06AF8040000D1FFDF6078BF -:104E800000B9FFDF6078401E607010BDD8010020BF -:104E90004050020010B504F059F8040000D1FFDFC3 -:104EA0006078401C607010BD1CB5ADF800008DF836 -:104EB00002308DF803108DF8042068460AF03CFF9C -:104EC00004F0D8F81CBD0CB52FA2D2E90012CDE930 -:104ED00000120079694601EB501000780CBD027891 -:104EE000520804D0012A02D043F202207047FEF794 -:104EF00029BA10B548B183000022114605200FF0F1 -:104F000069FA052801D0032010BD002010BD1FB58F -:104F10006A46FFF791FF68460AF01DFB04F0AAF805 -:104F200004B010BD70B50C0006460DD0FEF793FA24 -:104F3000050000D1FFDFA6802889208128896081B3 -:104F40006889A081A889E081AFE510B500231A46E1 -:104F500003E0845C2343521CD2B28A42F9D30BB1E2 -:104F6000002010BD012010BD00B540B1012805D0C2 -:104F7000022803D0032804D0FFDF002000BDFF205B -:104F800000BD042000BD0000070605040302010067 -:104F900010B504460FF014FB08B1102010BD2078A6 -:104FA000C0F30210042807D86078072804D3A1783A -:104FB000102901D8814201D2072010BDE0784107B5 -:104FC00006D421794A0703D4000701D4080701D584 -:104FD000062010BD002010BD10B513785C08837F3B -:104FE00064F3C713837713789C08C37F64F30003CB -:104FF000C3771078C309487863F341004870137889 -:105000001C090B7864F347130B701378DB0863F308 -:10501000000048705078487110BD10B5C4780B7806 -:1050200064F300030B70C478640864F341030B70ED -:10503000C478A40864F382030B70C478E40864F3B2 -:10504000C3030B700379117863F3000111700379C6 -:105050005B0863F34101117003799B0863F38201DC -:1050600011700079C00860F3C301117010BD70B5F4 -:1050700014460D46064604F0D1F980B10178182295 -:1050800021F00F01891C21F0F001A03100F8081B6C -:1050900021461FF0A4FDBDE8704004F0C2B92946C6 -:1050A0003046BDE870401322FEF7D8B92DE9F0472D -:1050B000064608A8894690E830041F469046142109 -:1050C00028461FF0E8FD0021CAF80010B8F1000FD3 -:1050D00003D0B9F1000F03D114E03878C00711D024 -:1050E00020680FF093FAC0BBB8F1000F07D1206819 -:1050F000123028602068143068602068A860216839 -:10510000CAF800103878800724D560680FF09CFA40 -:1051100018BBB9F1000F21D0FFF76EF90168C6F88E -:1051200068118188A6F86C11807986F86E0101F00B -:1051300002FDF94FEF60626862B196F8680106F20D -:10514000691140081032FEF755F91022394660689F -:105150001FF000FD0020BDE8F08706E0606820B188 -:10516000E8606068C6F86401F4E71020F3E730B542 -:10517000054608780C4620F00F00401C20F0F00196 -:10518000103121700020607095F8230030B10428A0 -:105190000FD0052811D0062814D0FFDF2078012178 -:1051A000B1EB101F04D295F8200000F01F006070D2 -:1051B00030BD21F0F000203002E021F0F00030306E -:1051C0002070EBE721F0F0004030F9E7F0B591B046 -:1051D000022715460C4606463A46ADF808700921E6 -:1051E00003AB04F07AFF0490002810D004208DF85F -:1051F00004008DF80170E034099605948DF818507C -:105200000AA968460DF022FA00B1FFDF012011B0B3 -:10521000F0BD10B588B00C460A99ADF80000C3B1D6 -:105220001868CDF802005868CDF80600ADF80A20DD -:10523000102203A81FF08EFC68460AF02FFA03F034 -:1052400019FF002803D1A17F41F01001A17708B018 -:1052500010BD0020CDF80200E6E72DE9F84F064624 -:10526000808A0D4680B28246FEF7F5F80446307813 -:10527000DFF8A48200274FF00509A8F120080F28C5 -:1052800070D2DFE800F06FF23708387D8CC8F1F09B -:10529000EFF35FF3F300A07F00F00300022809D0D2 -:1052A0005FF0000080F0010150460BF0DDFC0500CE -:1052B00003D101E00120F5E7FFDF98F85C10C90792 -:1052C00002D0D8F860000BE0032105F11D000EF0BC -:1052D00052FED5F81D009149B0FBF1F201FB12001E -:1052E000C5F81D0070686867B068A8672078252831 -:1052F00000D0FFDFCAE0A07F00F00300022809D041 -:105300005FF0000080F0010150460BF0ADFC06009C -:1053100003D101E00120F5E7FFDF3078810702D5F6 -:105320002178252904D040F001003070BDE8F88FC5 -:1053300002202870307F287106F11D002D36C5E946 -:105340000206F3E7A07F00F00300022808D0002047 -:1053500080F0010150460BF087FC040004D102E00C -:105360000120F5E7A7E1FFDF2078C10604D507207B -:1053700028703D346C60D9E740F008002070D5E714 -:10538000E07F000700D5FFDF307CB28800F001032A -:1053900001B05046BDE8F04F092105F027BD04B922 -:1053A000FFDF716821B1102204F124001FF0D2FB4D -:1053B00028212046FDF7AEFEA07F00F00300022862 -:1053C0000ED104F12400002300901A4621465046D5 -:1053D000FFF71FFF112807D029212046FDF79AFE6D -:1053E000307A84F82000A1E7A07F000700D5FFDF16 -:1053F00014F81E0F40F008002070E782A761E761F3 -:10540000C109607861F34100014660F38201617077 -:10541000307AE0708AE7A07F00F00300022809D00C -:105420005FF0000080F0010150460BF01DFC04000D -:1054300003D101E00120F5E7FFDF022104F185003F -:105440000EF099FD0420287004F5B4706860B4F87B -:1054500085002882304810387C346C61C5E90280B0 -:1054600064E703E024E15BE02DE015E0A07F00F0BD -:105470000300022807D0002080F0010150460BF005 -:10548000F3FB18B901E00120F6E7FFDF32462146C1 -:105490005046BDE8F84FEAE504B9FFDF207821283F -:1054A000A1D93079012803D1E07F40F00800E077EE -:1054B000324621465046FFF7DAFD2046BDE8F84F58 -:1054C0002321FDF727BE3279AA8005F108030921BF -:1054D000504604F002FEE86010B185F8009025E720 -:1054E000A07F00F00300022808D0002080F0010116 -:1054F00050460BF0B9FB040003D101E00120F5E7B1 -:10550000FFDF04F1620102231022081F0BF033FABF -:1055100007703179417009E73802002040420F00DE -:10552000A07F00F00300022808D0002080F00101D5 -:1055300050460BF099FB050003D101E00120F5E78F -:10554000FFDF95F8840000F0030001287AD1A07FE6 -:1055500000F00307E07F10F0010602D0022F04D113 -:1055600033E095F8A000C0072BD0D5F8601121B327 -:1055700095F88320087C62F387000874A17FCA092C -:10558000D5F8601162F341000874D5F8601166F334 -:1055900000000874AEB1D5F86001102204F12401B6 -:1055A00088351FF0D7FA287E40F001002876287849 -:1055B00020F0010005F8880900E016B1022F04D0A0 -:1055C0002DE095F88800C00727D0D5F85C1121B3ED -:1055D00095F88320087C62F387000874A17FCA09CC -:1055E000D5F85C1162F341000874D5F85C1166F3DC -:1055F000000008748EB1D5F85C01102204F124017A -:1056000088351FF0A7FA287840F0010005F8180B3C -:10561000287820F0010005F8A009022F44D00020CE -:1056200000EB400005EBC00090F88800800709D52A -:1056300095F87C00D5F86421400805F17D01103211 -:10564000FDF7D8FE8DF8009095F884006A4600F0CA -:1056500003008DF8010095F888108DF8021095F878 -:10566000A0008DF803002146504601F04DFA207845 -:10567000252805D0212807D0FFDF2078222803D94C -:1056800022212046FDF746FDA07F00F003000228FE -:105690000CD0002080F0010150460BF0F7FA0028F2 -:1056A0003FF44FAEFFDF41E60120B9E70120F1E70B -:1056B000706847703AE6FFDF38E670B5FE4C0025AB -:1056C00084F85C5025660CF08EFF04F11001204632 -:1056D00003F060FE84F8305070BD70B50D46FDF7E4 -:1056E000BAFE040000D1FFDF4FF4B87128461FF066 -:1056F000D2FA04F124002861A07F00F00300022800 -:1057000008D0012105F1E0000CF06EFF002800D068 -:10571000FFDF70BD0221F5E70A46014602F1E00015 -:105720000CF082BF70B50546406886B001780A2942 -:1057300006D00D2933D00E292FD0FFDF06B070BD63 -:1057400086883046FDF787FE040000D1FFDF207811 -:105750002128F3D028281BD1686802210E3001F0DF -:10576000C8F9A8B168680821801D01F0C2F978B1B4 -:1057700004F1240130460AF07CFA03F07BFC00B10E -:10578000FFDF06B02046BDE870402921FDF7C2BC0E -:1057900006B0BDE8704003F044BE012101726868A4 -:1057A000C6883046FDF757FE040000D1FFDFA07F1A -:1057B00000F00301022902D120F01000A077207828 -:1057C00021280AD06868017A09B1007980B1A07FE8 -:1057D00000F00300022862D0FFDFA07F00F003008A -:1057E0000228ABD1FEF796F80028A7D0FFDFA5E787 -:1057F00003F017FEA17F08062BD5E07FC00705D078 -:1058000094F8200000F01F00102820D05FF0050061 -:1058100084F82300207829281DD02428DDD13146A2 -:1058200004200EF081FE22212046FDF773FCA07FAC -:1058300000F00300022830D05FF0000080F001018A -:1058400030460BF023FA0028C7D0FFDFC5E706205B -:10585000DEE70420DCE701F00300022808D0002086 -:1058600080F0010130460BF0FFF9050003D101E0A3 -:105870000120F5E7FFDF25212046FDF74BFC032043 -:105880008DF80000694605F1E0000CF0C4FE022826 -:10589000A3D00028A1D0FFDF9FE70120CEE703F0CF -:1058A000C0FD9AE72DE9F04387B099461646884631 -:1058B0000746FDF7D0FD04004BD02078222848D3BE -:1058C000232846D0E07F000743D4A07F00F00300E8 -:1058D000022809D05FF0000080F0010138460BF08B -:1058E000C3F9050002D00CE00120F5E7A07F00F02D -:1058F0000300022805D00121002238460BF0ABF945 -:1059000005466946284601F026F9009800B9FFDFF0 -:1059100045B10098E03505612078222806D024287A -:1059200004D007E000990020086103E0252120460B -:10593000FDF7F0FB0098012141704762868001A9C4 -:10594000C0E902890CF082FE022802D0002800D0B3 -:10595000FFDF07B0BDE8F08370B586B00546FDF700 -:105960007AFD017822291ED9807F00F003000228E9 -:1059700008D0002080F0010128460BF075F90400E2 -:105980002FD101E00120F5E7FFDF2AE0B4F85E0047 -:1059900004F1620630440178427829B12146284654 -:1059A000FFF714FCB0B9C9E6ADF804200921284678 -:1059B00002AB04F092FB03900028F4D005208DF890 -:1059C0000000694604F1E0000CF025FE022801D039 -:1059D00000B1FFDF02231022314604F15E000BF01C -:1059E00000F8B4F860000028D0D1A7E610B586B062 -:1059F0000446FDF730FD017822291BD9807F00F095 -:105A00000300022808D0002080F0010120460BF09E -:105A10002BF9040003D101E00120F5E7FFDF0620A8 -:105A20008DF80000694604F1E0000CF0F4FD002858 -:105A300000D0FFDF06B010BD2DE9F05F05460C4633 -:105A400000270078904601093E4604F1080BBA464B -:105A500002297DD0072902D00A2909D146E06868C9 -:105A600001780A2905D00D2930D00E292ED0FFDF6C -:105A7000BCE114271C26002C6BD08088A080FDF789 -:105A8000EAFC5FEA000900D1FFDF99F817005A46E7 -:105A9000400809F11801FDF7ADFC6868C089208253 -:105AA000696851F8060FC4F812004868C4F8160077 -:105AB000A07E20F0060001E01802002040F0010066 -:105AC000A07699F81E0040F020014DE01A270A2622 -:105AD000002CD1D0C088A080FDF7BDFC050000D10E -:105AE000FFDF59462846FFF742FB7FE10CB1A88B48 -:105AF000A080287A0B287DD006DC01287BD00228E4 -:105B000008D0032804D135E00D2875D00E2874D0B4 -:105B1000FFDF6BE11E270926002CADD0A088FDF722 -:105B20009AFC5FEA000900D1FFDF287B00F0030048 -:105B30000128207A1BD020F001002072297B8908DF -:105B400061F341002072297BC90861F3820001E002 -:105B500041E1F2E02072297B090961F3C300207260 -:105B600099F81E0040F0400189F81E103EE140F017 -:105B70000100E2E713270D26002CAAD0A088FDF72C -:105B80006AFC8146807F00F00300022808D00020D4 -:105B900080F00101A0880BF067F8050003D101E057 -:105BA0000120F5E7FFDF99F81E0000F00302022A4A -:105BB00050D0686F817801F003010129217A4BD020 -:105BC00021F00101217283789B0863F34101217266 -:105BD0008378DB0863F38201217283781B0963F306 -:105BE000C3012172037863F306112172437863F3D2 -:105BF000C71103E061E0A9E090E0A1E0217284F820 -:105C000009A0C178A172022A29D00279E17A62F34F -:105C10000001E1720279520862F34101E1720279F6 -:105C2000920862F38201E1720279D20862F3C30141 -:105C3000E1724279217B62F30001217342795208BB -:105C400062F3410121734279920862F38201217368 -:105C5000407928E0A86FADE741F00101B2E7427951 -:105C6000E17A62F30001E1724279520862F3410184 -:105C7000E1724279920862F38201E1724279D208BC -:105C800062F3C301E1720279217B62F300012173A7 -:105C90000279520862F3410121730279920862F39A -:105CA000820121730079C00860F3C301217399F860 -:105CB0000000232831D9262140E018271026E4B31C -:105CC000A088FDF7C8FB8346807F00F00300022810 -:105CD00009D0002080F00101A0880AF0C5FF5FEA2A -:105CE000000903D101E00120F4E7FFDFE868A060CC -:105CF00099F8000040F0040189F8001099F80100BB -:105D0000800708D5012020739BF8000023286DD957 -:105D10002721584651E084F80CA067E015270F268C -:105D20005CB1A088FDF797FB814606225946E868DA -:105D300008F089F90120A073A2E041E048463CE068 -:105D400016270926E4B3287B20724FE0287B192709 -:105D50000E26ACB3C4F808A0A4F80CA0012807D004 -:105D6000022805D0032805D0042803D0FFDF0DE06A -:105D7000207207E0697B042801F00F0141F08001E7 -:105D800021721ED0607A20F003006072A088FDF7B7 -:105D900062FB05460078212828D0232800D0FFDFA9 -:105DA000A87F00F00300022813D0002080F001013A -:105DB000A0880AF06BFF22212846FDF7ABF915E019 -:105DC00004E0607A20F00300401CDEE7A8F80060E1 -:105DD00011E00120EAE70CB16888A080287A032846 -:105DE0002ED004280AD0052850D0FFDFA8F8006084 -:105DF0000CB1278066800020BDE8F09F15270F2694 -:105E0000002CE3D0A088FDF726FB807F00F0030084 -:105E1000022809D05FF0000080F00101A0880AF09C -:105E200023FF050003D101E00120F5E7FFDFD5F8EE -:105E30001D000622594608F006F984F80EA0D5E7A1 -:105E400017270926002CC1D0A088FDF704FB814646 -:105E5000807F00F00300022808D0002080F00101BC -:105E6000A0880AF001FF050003D101E00120F5E759 -:105E7000FFDF6878800701D5022000E00120207252 -:105E800099F800002328B1D9272157E719270E26B2 -:105E9000002C9BD0A088FDF7DEFA5FEA000900D154 -:105EA000FFDFC4F808A0A4F80CA084F808A0A07A2A -:105EB00040F00300A07299F81E10C90961F3820036 -:105EC000A07299F81F2099F81E1012EAD11F05D070 -:105ED00099F8201001F01F0110292BD020F00800A4 -:105EE000A07299F81F10607A61F3C3006072697A3A -:105EF00001F003010129A2D140F00400607299F879 -:105F00001E0000F003000228E87A16D0217B60F31F -:105F100000012173AA7A607B62F300006073EA7A61 -:105F2000520862F341012173A97A490861F34100E3 -:105F300060735BE740F00800D2E7617B60F300012B -:105F40006173AA7A207B62F300002073EA7A520818 -:105F500062F341016173A97A490861F3410020733A -:105F600044E710B5FE4C30B10146102204F1200088 -:105F70001EF0F0FD012084F8300010BD10B504467D -:105F800000F0D9FDF64920461022BDE8104020312E -:105F90001EF0E0BD70B5F24D06004FF0000413D0C6 -:105FA0000EF00EFB08B110240CE00621304608F07C -:105FB00031F8411C05D028665FF0010085F85C00CF -:105FC00000E00724204670BD0020F7E7007810F0BD -:105FD0000F0204D0012A05D0022A0CD110E00009DA -:105FE00009D10AE00009012807D0022805D00328BA -:105FF00003D0042801D007207047087000207047A4 -:106000000620704705282AD2DFE800F003070F17A3 -:106010001F00087820F0FF001EE0087820F00F0035 -:10602000401C20F0F000103016E0087820F00F003F -:10603000401C20F0F00020300EE0087820F00F0027 -:10604000401C20F0F000303006E0087820F00F000F -:10605000401C20F0F00040300870002070470720FE -:1060600070472DE9F041804688B00D46002708466C -:106070000EF0F3FAA8B94046FDF7EDF9040003D09D -:106080002078222815D104E043F2020008B0BDE8D0 -:10609000F08145B9A07F410603D500F00300022836 -:1060A00001D01020F2E7A07FC10601D4010702D57C -:1060B0000DB10820EAE7E17F090701D50D20E5E7EA -:1060C00000F00300022805D125B12846FEF760FF45 -:1060D0000700DBD1A07F00F00300022808D00020D9 -:1060E00080F0010140460AF0BFFD060002D00FE03B -:1060F0000120F5E7A07F00F0030002280ED0002069 -:1061000080F00101002240460AF0A5FD060007D0FC -:10611000A07F00F00300022804D009E00120EFE78F -:106120000420B3E725B12A4631462046FEF754FF46 -:106130006946304600F00FFD009800B9FFDF009976 -:10614000022006F1E0024870C1F824804A61002272 -:106150000A81A27F02F00302022A1CD001200871EA -:10616000287800F00102087E62F3010008762A78A0 -:10617000520862F3820008762A78920862F3C3001C -:1061800008762A78D20862F3041008762421204683 -:10619000FCF7C0FF33E035B30871301D88613078FB -:1061A000400908777078C0F340004877287800F0FD -:1061B0000102887F62F301008877A27FD20962F32F -:1061C00082008877E27F62F3C3008877727862F397 -:1061D00004108877A878C87701F121022846203179 -:1061E000FEF71BFF03E00320087105200876252138 -:1061F0002046FCF78FFFA07F20F04000A07701A988 -:1062000000980CF023FA022801D000B1FFDF3846D5 -:106210003CE72DE9FF4F534A0D4699B09A4607CA0D -:106220000BAB002783E807001998FDF714F9060067 -:1062300006D03078262806D008201DB0BDE8F08FA3 -:1062400043F20200F9E7B07F00F00309B9F1020F51 -:1062500003D00020284302D006E00120FAE71B9873 -:10626000FEF796FE0028E8D1B07F00F00300022878 -:1062700001D11B9979BB022808D0002080F00101D0 -:1062800019980AF0F1FC040003D101E00120F5E7C0 -:10629000FFDF852D28D007DCF5B1812D1ED0822DA2 -:1062A0001ED0832D08D11DE0862D1FD0882D1FD034 -:1062B000892D1FD08A2D1FD00F2020710F281DD0AF -:1062C00003F0ACF8E0B101208DF84000201D1190E2 -:1062D0002079B8B167E111E00020EEE70120ECE79A -:1062E0000220EAE70320E8E70520E6E70620E4E7E6 -:1062F0000820E2E70920E0E70A20DEE707209CE724 -:1063000011209AE7B9F1020F03D0A56F03D1A06F56 -:1063100002E0656FFAE7606F804632D04FF001000F -:1063200000904FF002000190214630461B9AFEF784 -:1063300053FE1B98007800F00101A87861F301007A -:10634000A870B17FC90961F38200A870F17F61F381 -:10635000C300A870617861F30410A870207803E08E -:106360001802002048500200400928706078C0F3ED -:10637000400068701B988078E87000206871287170 -:1063800003E00220009001200190A87898F8021004 -:10639000C0F3C000C1F3C00108405FEA000B2CD07D -:1063A00050460EF00DF990BBDAF80C000EF008F92B -:1063B00068BBDAF81C000EF003F940BBDAF80C00F9 -:1063C000A060DAF81C00E06098F80100617800F045 -:1063D000010041EA4000607098F80210C0B2C1F3B9 -:1063E0000011891E0840607000202077019906F195 -:1063F000170002290CD001210BE098F801106078F9 -:1064000001F00101FD2242EA41010840E3E732E0E8 -:10641000002104EB810148610099701C022901D020 -:10642000012100E0002104EB81014861A87800F01F -:106430000300012858D198F8020000F00300012859 -:1064400052D1B9F1020F04D02A1D691D1B98FEF725 -:10645000E4FD297998F8040001408DF83810687936 -:1064600098F8052010408DF83C0001433CD0504680 -:106470000EF0A6F808B11020DFE60AF11001049131 -:10648000B9F1020F18D008465FF0000104F18C0347 -:10649000CDE9000304F5AE7202920EAB5A462046D7 -:1064A000FEF704FE0028E7D1B9F1020F08D05046EC -:1064B00008D14FF0010107E050464FF00101E5E738 -:1064C0000498F5E74FF0000104F1A403CDE90003BF -:1064D00004F5B072029281F001010FAB5A462046DA -:1064E000FEF7E4FD0028C7D16078800734D4A8788F -:1064F00098F80210C0F38000C1F3800108432BD04C -:10650000297898F800000BAAB9F1020F06D032F8EA -:1065100011204300DA4002F003070AE032F81020AD -:106520004B00DA4012F0030705D0012F0BD0022FE9 -:106530000BD0032F07D0BBF1000F0DD0012906D0DF -:10654000042904D008E00227F5E70127F3E7012832 -:1065500001D0042800D10427B07F40F08000B0773C -:10656000F17F6BF30001F177607881074FF0030052 -:106570000CD5A071BBF1000F15D100BF8DF85C00E8 -:1065800017AA3146199800F0BFFA0CE00221022F39 -:1065900018D0012F18D0042F22D00020A071B07F76 -:1065A00020F08000B07725213046FCF7B3FD10A91C -:1065B00004F1E0000CF02FF810B1022800D0FFDF4A -:1065C00000203AE6A171D9E7A1710D2104F1200064 -:1065D0001EF061FB207840F0020020700420CDE71F -:1065E0000120A071DFE72DE9F04387B0904689468E -:1065F00004460025FCF72FFF060006D03078272838 -:1066000006D0082007B0BDE8F08343F20200F9E7A6 -:10661000B07F00F00300022808D0002080F00101C4 -:1066200020460AF021FB040003D101E00120F5E738 -:10663000FFDFA7795FEA090005D0012821D0B9F171 -:10664000020F26D110E0B8F1000F22D1012F05D0A2 -:10665000022F05D0032F05D0FFDF2DE00C252BE006 -:10666000012529E0022527E040460DF0A9FFB0B939 -:10667000032F0ED11022414604F11D001EF06AFACC -:106680001AE0012F02D0022F03D104E0B8F1000F6D -:1066900012D00720B6E740460DF092FF08B1102057 -:1066A000B0E7102104F11D001EF0D3FA0621404688 -:1066B00007F0B0FCC4F81D002078252140F002004E -:1066C00020703046FCF726FD2078C10713D020F05B -:1066D0000100207002208DF8000004F11D000290DE -:1066E0008DF804506946C3300BF095FF022803D0A3 -:1066F00010B1FFDF00E02577002083E730B587B0D9 -:106700000D460446FCF7A7FEA0B1807F00F0030011 -:10671000022812D05FF0000080F0010120460AF04C -:10672000A3FA04000ED028460DF04AFF38B110201D -:1067300007B030BD43F20200FAE70120ECE7207811 -:10674000400701D40820F3E7294604F13D00202248 -:1067500005461EF0FFF9207840F010002070010778 -:106760000FD520F00800207007208DF80000694642 -:1067700004F1E00001950BF04EFF022801D000B1BA -:10678000FFDF0020D4E770B50D460646FCF763FE38 -:1067900018B10178272921D102E043F2020070BD2F -:1067A000807F00F00300022808D0002080F0010163 -:1067B00030460AF059FA040003D101E00120F5E760 -:1067C000FFDFA079022809D16078C00706D02A46E9 -:1067D00021463046FEF7FAFC10B10FE0082070BDEC -:1067E000B4F860000E280BD204F1620102231022DB -:1067F000081F0AF0C0F8012101704570002070BD2B -:10680000112070BD70B5064614460D4608460DF0C1 -:10681000D7FE18B920460DF0F9FE08B1102070BD62 -:10682000A6F57F40FF380ED03046FCF714FE38B195 -:10683000417822464B08811C1846FCF7DBFD07E037 -:1068400043F2020070BD2046FDF73CFE0028F9D15E -:106850001021E01D0DF08FFBE21D294604F1170009 -:1068600000F089F9002070BD2DE9F04104468AB09E -:1068700015468846002708460DF0EFFE18B9284651 -:106880000DF0EBFE18B110200AB0BDE8F0812046F3 -:10689000FCF7E1FD060003D0307827281BD102E089 -:1068A00043F20200F0E7B07F00F00300022809D0B5 -:1068B0005FF0000080F0010120460AF0D5F90400E5 -:1068C00003D101E00120F5E7FFDF2078400702D582 -:1068D0006078800701D40820D6E7B07F00F003007D -:1068E000022803D0A06F03D1A16F02E0606FFAE726 -:1068F000616F407800B19DB1487810B1B8F1000FD8 -:106900000ED0ADB1EA1D06A8E16800F034F91022FE -:1069100006A905F117001EF0F1F818B1042707E0E9 -:106920000720B1E71022E91D04F12D001EF012F935 -:10693000B8F1000F06D0102208F1070104F11D0084 -:106940001EF008F92078252140F002002070304622 -:10695000FCF7E0FB2078C10715D020F00100207083 -:1069600002208DF8000004F11D0002901030039009 -:106970008DF804706946B3300BF04DFE022803D049 -:1069800010B1FFDF00E0277700207DE7F8B515465E -:106990000E460746FCF75FFD040004D0207822284D -:1069A00004D00820F8BD43F20200F8BDA07F00F03B -:1069B0000300022802D043F20500F8BD30460DF076 -:1069C000FFFD18B928460DF0FBFD08B11020F8BDF9 -:1069D00000953288B31C21463846FEF71AFC112870 -:1069E00015D00028F3D1297C4A08A17F62F3C71192 -:1069F000A177297CE27F61F30002E277297C890894 -:106A000084F82010A17F21F04001A177F8BDA17F7B -:106A10000907FBD4D6F80200C4F83600D6F8060001 -:106A2000C4F83A003088A0861022294604F12400D8 -:106A30001EF090F8287C4108E07F61F34100E07788 -:106A4000297C61F38200E077287C800884F82100AB -:106A5000A07F40F00800A0770020D3E770B50D4676 -:106A600006460BB1072070BDFCF7F5FC040007D00B -:106A70002078222802D3A07F800604D4082070BD8D -:106A800043F2020070BDADB12946304609F0F1F87D -:106A900002F0F0FA297C4A08A17F62F3C711A177BE -:106AA000297CE27F61F30002E277297C890884F87F -:106AB000201004E0304609F004F902F0DBFAA17F6F -:106AC00021F02001A17770BD70B50D46FCF7C3FC25 -:106AD000040005D028460DF099FD20B1102070BDAE -:106AE00043F2020070BD29462046FEF740FB00201D -:106AF00070BD04E010F8012B0AB100207047491E58 -:106B000089B2F7D20120704770B51546064602F0EB -:106B100085FC040000D1FFDF207820F00F00801CEE -:106B200020F0F0002030207066802868A060BDE86A -:106B3000704002F076BC10B5134C94F83000002879 -:106B400008D104F12001A1F110000BF0A6FD0120F5 -:106B500084F8300010BD10B190F8B9202AB10A486D -:106B600090F8350018B1002003E0B83001E0064885 -:106B700034300860704708B50023009313460A4676 -:106B80000AF06DFA08BD00001802002018B18178E3 -:106B9000012938D101E010207047018842F6011226 -:106BA000881A914231D018DC42F60102A1EB0200B2 -:106BB00091422AD00CDC41B3B1F5C05F25D06FF40F -:106BC000C050081821D0A0F57060FF381BD11CE020 -:106BD00001281AD002280AD117E0B0F5807F14D01E -:106BE00008DC012811D002280FD003280DD0FF287F -:106BF00009D10AE0B0F5817F07D0A0F58070033895 -:106C000003D0012801D0002070470F2070470A28C8 -:106C10001ED007DC18D2DFE800F0191B1F1F171F5A -:106C2000231D1F21102815D008DC0B2812D00C289A -:106C300010D00D2816D00F2806D10DE011280BD04A -:106C400084280BD087280FD003207047002070477E -:106C500005207047072070470F20704704207047B9 -:106C6000062070470C20704743F20200704738B589 -:106C70000C46050041D06946FFF7A8F9002819D154 -:106C80009DF80010607861F3020060706946681C2E -:106C9000FFF79CF900280DD19DF80010607861F392 -:106CA000C5006070A978C1F34101012903D0022910 -:106CB00005D0072038BD217821F0200102E021789D -:106CC00041F020012170410704D0A978C90861F37F -:106CD00086106070607810F0380F07D0A978090925 -:106CE00061F3C710607010F0380F02D16078400671 -:106CF00003D5207840F040002070002038BD70B5EA -:106D000004460020088015466068FFF7B0FF0028A1 -:106D100016D12089A189884211D860688078C0077F -:106D20000AD0B1F5007F0AD840F20120B1FBF0F2A1 -:106D300000FB1210288007E0B1F5FF7F01D90C207D -:106D400070BD01F201212980002070BD10B50478CA -:106D5000137864F3000313700478640864F3410348 -:106D600013700478A40864F3820313700478E408B1 -:106D700064F3C30313700478240964F304131370D9 -:106D80000478640964F3451313700078800960F394 -:106D90008613137031B10878C10701D1800701D57E -:106DA000012000E0002060F3C713137010BD42788B -:106DB000530702D002F0070306E012F0380F02D0AA -:106DC000C2F3C20300E001234A7863F302024A706F -:106DD000407810F0380F02D0C0F3C20005E043073E -:106DE00002D000F0070000E0012060F3C5024A7005 -:106DF00070472DE9F04F95B00D00824612D0122158 -:106E000028461DF026FF4FF6FF7B05AA01215846B4 -:106E100006F04BFF0024264637464FF420586FF407 -:106E2000205972E0102015B0BDE8F08F9DF81E00CB -:106E300001280AD1BDF81C1041450BD011EB090007 -:106E40000AD001280CD002280CD0042C0ED0052C1E -:106E50000FD10DE0012400E00224BDF81A6008E023 -:106E6000032406E00424BDF81A7002E0052400E0C3 -:106E70000624BDF81A10514547D12C74BEB34FF00B -:106E8000000810AA4FF0070ACDE90282CDE900A858 -:106E90000DF13C091023CDF810904246314658467A -:106EA00006F0B6FF08BBBDF83C002A46C0B210A9E8 -:106EB0000BF05CFCC8B9AE81CFB1CDE900A80DF1F3 -:106EC000080C0AAE40468CE84102132300223946E2 -:106ED000584606F09DFF40B9BDF83C00F11CC01EAD -:106EE000C0B22A1D0BF042FC10B103209BE70AE060 -:106EF000BDF82900E881062C05D19DF81E00A87276 -:106F0000BDF81C00288100208DE705A806F0D9FEF9 -:106F100000288BD0FFF77BFE85E72DE9F0471C4664 -:106F2000DDE90978DDF8209015460E00824600D193 -:106F3000FFDF0CB1208818B1D5B11120BDE8F08772 -:106F4000022D01D0012100E0002106F1140005F01E -:106F50009BFDA8F8000002463B462946504603F038 -:106F6000BCF8C9F8000008B9A41C3C600020E5E7A3 -:106F70001320E3E7F0B41446DDE904528DB1002399 -:106F800014B1022C09D101E0012306E00D7CEE07CB -:106F900003D025F0010501230D742146F0BC03F058 -:106FA00025BF1A80F0BC70472DE9FE4F91461A8824 -:106FB0001C468A468046FAB102AB494603F08DF87A -:106FC000050019D04046A61C278809F091FF3246DB -:106FD000072629463B46009609F09FFB208823465A -:106FE000CDE900504A4651464046FFF7C3FF002016 -:106FF00020800120BDE8FE8F0020FBE72DE9F0474F -:1070000086B09146DDE90E460F46824603AA05A9E1 -:1070100004A8109D8DE80700984632462146504648 -:10702000FFF77BFF049909B1012200E000222A70DA -:10703000002818D1F94A03AB1060059A009104F1B9 -:107040001400CDE901204A463946504606F0D3F8EF -:10705000A8B1092811D2DFE800F005080510100AD0 -:107060000C0C0E00002006B068E71120FBE707209B -:10707000F9E70820F7E70D20F5E70320F3E7BDF86F -:107080000C100498CDE90001434632462146504693 -:10709000FFF770FFE6E72DE9F04389B00D46DDE923 -:1070A000108781461C461646142103A81DF0F3FDE7 -:1070B000012002218DF810108DF80C008DF8117050 -:1070C000ADF8146064B1A278D20709D08DF816002B -:1070D000E088ADF81A00A088ADF81800A068079005 -:1070E00008A80095CDE90110424603A948466B68FF -:1070F000FFF784FF09B0BDE8F083F0B58BB0002442 -:107100000646069407940727089405A80994019455 -:1071100000970294CDE903400D46102322463046E5 -:1071200006F076FE78B90AA806A9019400970294A1 -:10713000CDE90310BDF8143000222946304606F090 -:107140003DFC002801D0FFF762FD0BB0F0BD06F05A -:10715000DDBA2DE9FC410C468046002602F05EF9BE -:10716000054620780D287DD2DFE800F0BC0713B378 -:1071700025BD49496383AF959B00A848006820B1AD -:10718000417841F010014170ADE0404602F076F9DF -:10719000A9E00421404609F067FD070000D1FFDFA8 -:1071A00007F11401404605F003FCA5BB132140463E -:1071B000FDF746FC97E00421404609F055FD070025 -:1071C00000D1FFDFE088ADF800000020B8819DF815 -:1071D0000000010704D5C00602D5A088B88105E0EB -:1071E0009DF8010040067ED5A088F88105B9FFDF33 -:1071F00022462946404601F063FC022673E0E188FE -:10720000ADF800109DF8011009060FD5072803D02E -:1072100006280AD00AE024E00421404609F024FDB3 -:10722000060000D1FFDFA088F0810226CDB9FFDF84 -:1072300017E00421404609F017FD070000D1FFDFE9 -:1072400007F1140006F099FA90F0010F02D1E079ED -:10725000000648D5387C022640F00200387405B993 -:10726000FFDF00E03EE022462946404601F028FCD0 -:1072700039E00421404609F0F7FC017C002D01F0C3 -:107280000206C1F340016171017C21F00201017429 -:10729000E7D1FFDFE5E702260121404602F020F9B1 -:1072A00021E00421404609F0DFFC054660680090BB -:1072B0002089ADF8040001226946404602F031F908 -:1072C000287C20F0020028740DE0002DC9D1FFDFDA -:1072D000C7E7022600214046FBF784F8002DC0D105 -:1072E000FFDFBEE7FFDF3046BDE8FC813EB50C00A6 -:1072F00009D001466B4601AA002006F00BFE20B122 -:10730000FFF785FC3EBD10203EBD00202080A07010 -:107310009DF8050002A900F00700FEF773FE50B9C2 -:107320009DF8080020709DF8050002A9C0F3C20076 -:10733000FEF768FE08B103203EBD9DF808006070AE -:107340009DF80500C109A07861F30410A0709DF8B4 -:107350000510890961F3C300A0709DF80410890627 -:1073600001D5022100E0012161F342009DF80010E7 -:1073700061F30000A07000203EBD70B514460646C3 -:107380000D4651EA040005D075B108460DF05CF9D0 -:1073900078B901E0072070BD2946304606F01BFE93 -:1073A00010B1BDE8704032E454B120460DF04CF904 -:1073B00008B1102070BD21463046BDE8704095E709 -:1073C000002070BD2DE9FC5F0C4690460546002765 -:1073D00001780822007A3E46B2EB111F7ED104F1FB -:1073E0000A0100910A31821E4FF0020A04F1080BD3 -:1073F0000191092A73D2DFE802F0ECDF05F42727B8 -:107400007AA9CD006888042109F02EFC060000D17D -:10741000FFDFB08920B152270726C2E07C0200209E -:1074200051271026002C7DD06888A0800120A071F3 -:10743000A88900220099FFF7A0FF002873D1A8892E -:107440002081288AE081D1E0B5F81290072824D164 -:10745000E87B000621D5512709F1140086B2002CE3 -:10746000E1D0A88900220099FFF787FF00285AD1B0 -:107470006888A08084F806A0A88920810120A073D4 -:10748000288A2082A4F81290A88A009068884B4627 -:10749000A969019A01F0F1FAA8E0502709F1120058 -:1074A00086B2002C3ED0A88900225946FFF765FF1E -:1074B000002838D16888A080A889E080287A072829 -:1074C00013D002202073288AE081E87BC009607312 -:1074D000A4F81090A88A0090688801E083E080E01A -:1074E0004B4604F11202A969D4E70120EAE7B5F896 -:1074F0001290512709F1140086B2002C66D06888DA -:10750000042109F0B1FB83466888A080A889002285 -:107510000099FFF732FF00286ED184F806A0A889F1 -:10752000208101E052E067E00420A073288A2082D5 -:10753000A4F81290A88A009068884B46A969019A1D -:1075400001F09BFAA989ABF80E104FE06888FBF7B1 -:1075500082FF07466888042109F086FB064607B9C2 -:10756000FFDF06B9FFDF687BC00702D05127142672 -:1075700001E0502712264CB36888A080502F06D017 -:1075800084F806A0287B594601F087FA2EE0287B74 -:10759000A11DF9E7FE49A8894989814205D15427EF -:1075A00006269CB16888A08020E053270BE06888FD -:1075B000A080A889E08019E06888042109F054FBC4 -:1075C00000B9FFDF55270826002CF0D1A8F800608D -:1075D00011E056270726002CF8D06888A0800020EC -:1075E00013E0FFDF02E0012808D0FFDFA8F8006009 -:1075F0000CB1278066800020BDE8FC9F5727072636 -:10760000002CE3D06888A080687AA071EEE7401D66 -:1076100020F0030009B14143091D01EB4000704710 -:1076200013B5DB4A00201071009848B10024684669 -:1076300009F037F9002C02D1D64A009911601CBD1F -:1076400001240020F4E770B50D46064686B01446C6 -:107650005C2128461DF01FFB04B9FFDFA078687489 -:10766000A2782188284601F042FA0020A881E8810A -:10767000228805F11401304605F07FF96A460121A0 -:10768000304606F012FB19E09DF80300000715D5FF -:10769000BDF806103046FFF730FD9DF80300BDF839 -:1076A000061040F010008DF80300BDF80300ADF89F -:1076B0001400FF233046059A06F058FC684606F091 -:1076C00000FB0028E0D006B070BD10B50C4601F1FB -:1076D000140005F089F90146627C2046BDE810409F -:1076E00001F03ABA70B50546042109F0BDFA04006C -:1076F00000D1FFDF04F114010C46284605F058F9CB -:1077000021462846BDE8704005F059B970B58AB0E9 -:107710000C460646FBF79FFE050014D02878222869 -:1077200027D30CB1A08890B101208DF80C00032064 -:107730008DF8100000208DF8110054B1A088ADF82C -:107740001800206807E043F202000AB070BD09206B -:10775000FBE7ADF8180005900421304609F084FAE3 -:10776000040000D1FFDF04F1140005F054F9000714 -:1077700001D40820E9E701F051FE60B108A8022118 -:107780000094CDE9011095F8232003A930466368E1 -:10779000FFF734FCD9E71120D7E72DE9F04FB2F815 -:1077A00002A0834689B0154689465046FBF753FE32 -:1077B00007460421504609F057FA0026044605966C -:1077C0004FF002080696ADF81C6007B9FFDF04B958 -:1077D000FFDF4146504603F070FE50B907AA06A9E4 -:1077E00005A88DE807004246214650466368FFF72A -:1077F00094FB674807AB0660DDE9051204F114004D -:10780000CDF80090CDE90320CDE9013197F8232090 -:10781000594650466B6805F047F906000AD0022E1B -:1078200004D0032E14D0042E00D0FFDF09B0304660 -:10783000BDE8F08FBDF81C000028F7D00599CDE910 -:1078400000104246214650466368FFF793FBEDE780 -:10785000687840F008006870E8E72DE9F04F9BB0C9 -:1078600004464FF000084A48ADF85480ADF8308027 -:10787000ADF85080A0F80880ADF81480ADF81880FD -:10788000ADF82080ADF81C80007916460D464746BD -:10789000012808D0022806D0032804D0042802D0EA -:1078A00008201BB0C4E720460CF08AFED0BB284657 -:1078B0000CF086FEB0BB60680CF0CFFE90BB606839 -:1078C00048B160892189884202D8B1F5007F01D989 -:1078D0000C20E6E780460BAA06A92846FFF70FFA18 -:1078E0000028DED168688078C0F34100022808D102 -:1078F0009DF8190010F0380F03D028690CF0A4FE91 -:1079000080B905A92069FFF7B2F90028C9D120691B -:1079100050B1607880079DF8150000F0380002D55E -:10792000D0B301E011E0B8BB9DF8140080060ED57D -:107930009DF8150010F0380F03D060680CF084FE3D -:1079400018B960680CF089FE08B11020A9E707A9F2 -:107950006069FFF78CF90028A3D1606940B19DF8F8 -:107960001D0000F0070101293FD110F0380F3CD075 -:1079700008A9A069FFF77BF9002892D19DF81C00A7 -:10798000800632D49DF8200080062ED4A06904E041 -:107990007C0200201400002027E040B19DF8210067 -:1079A00000F00701012920D110F0380F1DD0E06848 -:1079B00018B10078C8B11C2817D20EAA611C204645 -:1079C000FFF7C4F90120B94660F30F27BA4607460E -:1079D0008DF84E0042F60300ADF84C000DF13B026D -:1079E00017A928680AF0E1FE08B1072059E79DF8B9 -:1079F0005C0016A9CDF80090C01CCDE9019100F003 -:107A0000FF0B00230BF20122514613A806F090F859 -:107A1000F0BBBDF858000990FE482A8929690092F8 -:107A2000CDE901106B89BDF82C202868069906F075 -:107A30007FF801007ED120784FF0020AC10601D400 -:107A400080062BD5ADF80C90606950B907A906A83F -:107A5000FFF7ADF99DF81D0020F00700401C8DF8E0 -:107A60001D009DF81C008DF84E7040F0C8008DF888 -:107A70001C0042F60210ADF84C000CA903AACDF888 -:107A800000A0CDE90121002340F2032213A800E069 -:107A90001EE0079906F04CF801004BD1DD484D4639 -:107AA00008385B460089ADF839000EA8CDE9029090 -:107AB000CDF80490CDF810904FF007090022CDF8D2 -:107AC0000090BDF858104FF6FF7005F077FF10B129 -:107AD000FFF79DF8E5E69DF83800000625D5294614 -:107AE000012060F30F218DF84E704FF42450ADF853 -:107AF0004C00ADF8105062789DF81000002362F33E -:107B000000008DF810006278CDF800A0520862F3F2 -:107B100041008DF8100004AACDE9012540F20322AE -:107B200013A806F005F8010004D1606888B3206945 -:107B3000A8B900E086E005A906A8FFF738F9607843 -:107B4000800706D49DF8150020F038008DF8150048 -:107B500005E09DF8140040F040008DF814008DF809 -:107B60004E7042F60110ADF84C00208940F2012120 -:107B7000B0FBF1F201FB1202606814ABCDF800809B -:107B8000CDE90103002313A8059905F0D1FF0100F9 -:107B900058D12078C00729D0ADF80C50A06950B951 -:107BA00008A906A8FFF703F99DF8210020F00700B7 -:107BB000401C8DF821009DF820008DF84E7040F09B -:107BC00040008DF8200042F60310ADF84C0015A9D6 -:107BD00003AACDF800A0CDE90121002340F2032241 -:107BE00013A8089905F0A4FF01002BD1E06868B341 -:107BF0002946012060F30F218DF84E7042F60410E3 -:107C0000ADF84C00E068002302788DF860204078E1 -:107C10008DF86100E06818AA4088ADF86200E0685D -:107C200000798DF86400E068C088ADF86500CDF893 -:107C30000090CDE901254FF4027213A805F078FFFA -:107C4000010003D0099800F0B3FF2AE67148032130 -:107C50000838017156B100893080BDF8500070803D -:107C6000BDF83000B080BDF85400F080002018E668 -:107C700070B501258AB016460B46012802D00228AD -:107C800016D104E08DF80E504FF4205003E08DF82B -:107C90000E5042F60100ADF80C005BB10024601CF0 -:107CA00060F30F2404AA08A918460AF07EFD18B153 -:107CB00007204AE5102048E504A99DF820205548F2 -:107CC000CDE90021801E02900023214603A802F284 -:107CD000012205F02DFF10B1FEF799FF35E54D4863 -:107CE00008380EB1C1883180057100202DE5F0B54E -:107CF00093B0074601268DF83E6041F60100ADF8CD -:107D00003C0012AA0FA93046FFF7B2FF002848D165 -:107D1000404C0025083CE7B31C2102A81CF0BBFF27 -:107D20009DF808008DF83E6040F020008DF80800B6 -:107D300042F60520ADF83C000E959DF83A001195ED -:107D400020F00600801C8DF83A009DF838006A4645 -:107D500020F0FF008DF838009DF8390009A920F0C7 -:107D6000FF008DF839000420ADF82C00ADF830008C -:107D70000EA80A9011A80D900FA80990ADF82E50EA -:107D800002A8FFF76AFD00280BD1BDF80000608152 -:107D900000E008E0BDF80400A081401CE0812571EE -:107DA000002013B0F0BD6581A581BDF84800F4E75F -:107DB0002DE9F74F1749A0B00024083917940A7924 -:107DC000A146012A04D0022A02D0082023B02FE5C0 -:107DD000CA88824201D00620F8E721988A4682426A -:107DE00001D10720F2E701202146ADF848004FF607 -:107DF000FF7860F30F21ADF84A808DF86E0042F6EF -:107E0000020B06918DF87240ADF86CB0ADF8704081 -:107E10001CA901E0840200201391ADF8508012A843 -:107E200005F073FF00252E462F460DAB072212A941 -:107E3000404605F06DFF78B10A285DD195B38EB349 -:107E4000ADF86450ADF866609DF85E008DF81440A2 -:107E500019AC012864D06BE09DF83A001FB30128EB -:107E600059D1BDF8381059451FD118A809A9019456 -:107E70000294CDE9031007200090BDF836101023BE -:107E80000022404605F0C4FFB0BBBDF860000428E6 -:107E900001D006284AD1BDF82410219881423AD158 -:107EA0000F2093E73AE0012835D1BDF83800B0F54E -:107EB000205F03D042F6010188422CD1BAF80600B7 -:107EC000BDF83610884201D1012700E0002705B136 -:107ED0009EB1219881421ED118A809AA019402944A -:107EE000CDE90320072000900D46102300224046D4 -:107EF00005F08EFF00B902E02DE04E460BE0BDF824 -:107F00006000022801D0102810D1C0B217AA09A918 -:107F10000AF02CFC50B9BDF8369086E7052055E7ED -:107F200005A917A8221D0AF040FC08B103204DE75F -:107F30009DF814000023001DC2B28DF81420229871 -:107F40000092CDE901401BA8069905F0F1FD10B99A -:107F500002228AF80420FEF75AFE37E710B50B46D6 -:107F6000401E88B084B205AA00211846FEF7EEFE36 -:107F700000200DF1080C06AA05A901908CE8070065 -:107F8000072000900123002221464FF6FF7005F0E4 -:107F900015FD0446BDF81800012800D0FFDF20467B -:107FA000FEF735FE08B010BDF0B5FF4F044687B0B0 -:107FB00038790E46032804D0042802D0082007B0E0 -:107FC000F0BD04AA03A92046FEF799FE0500F6D1EC -:107FD00060688078C0F3410002280AD19DF80D0046 -:107FE00010F0380F05D020690CF02EFB08B11020DE -:107FF000E5E7208905AA21698DE807006389BDF8B6 -:1080000010202068039905F093FD10B1FEF7FFFDE5 -:10801000D5E716B1BDF81400308004203871284629 -:10802000CDE7F8B50C0006460BD001464FF6FF75BC -:1080300000236A46284605F06DFF20B1FEF7E7FDF4 -:10804000F8BD1020F8BD69462046FEF710FE002856 -:10805000F8D1A078314600F001032846009A05F0D7 -:1080600085FFEBE730B587B0144600220DF1080C10 -:1080700005AD01928CE82C00072200920A460146C9 -:1080800023884FF6FF7005F099FCBDF8141021808D -:10809000FEF7BDFD07B030BD70B50D46042108F0F8 -:1080A000E3FD040000D1FFDF294604F11400BDE820 -:1080B000704004F0A9BC70B50D46042108F0D4FD51 -:1080C000040000D1FFDF294604F11400BDE8704030 -:1080D00004F0BDBC70B50D46042108F0C5FD0400D8 -:1080E00000D1FFDF294604F11400BDE8704004F020 -:1080F000D5BC70B50546042108F0B6FD040000D1DA -:10810000FFDF214628462368BDE870400122FEF7C4 -:108110004BBF70B50646042108F0A6FD040000D14F -:10812000FFDF04F1140004F05FFC401D20F00305A4 -:1081300011E0011D00880022431821463046FEF759 -:1081400033FF00280BD0607CABB2684382B2A068DA -:10815000011D08F046FCA06841880029E9D170BDE6 -:1081600070B50546042108F07FFD040000D1FFDF53 -:10817000214628466368BDE870400222FEF714BF1E -:1081800070B50E46054601F049F9040000D1FFDF45 -:108190000120207266726580207820F00F00001D9B -:1081A00020F0F00040302070BDE8704001F039B997 -:1081B00010B50446012900D0FFDF2046BDE810407D -:1081C0000121FAF70FB92DE9F04F97B04FF0000AEF -:1081D0000C008346ADF814A0D04619D0E06830B149 -:1081E000A068A8B10188ADF81410A0F800A0584606 -:1081F000FBF731F9070043F2020961D038782228F1 -:108200005CD30421584608F02FFD050005D103E09A -:10821000102017B0BDE8F08FFFDF05F1140004F067 -:10822000E3FB401D20F00306A078012803D00228BC -:1082300001D00720EDE7218807AA584605F035FD53 -:1082400030BB07A805F03DFD10BB07A805F039FDC0 -:1082500048B99DF82600012805D1BDF82400A0F5F5 -:108260002451023902D04FF45050D2E7E068B0B147 -:10827000CDE902A00720009005AACDF804A0049241 -:10828000A2882188BDF81430584605F097FB10B13C -:10829000FEF7BDFCBDE7A168BDF8140008809DF89D -:1082A0001F00C00602D543F20140B2E70B9838B177 -:1082B000A1780078012905D080071AD40820A8E702 -:1082C0004846A6E7C007F9D002208DF83C00A86810 -:1082D0004FF00009A0B1697C4288714391420FD9E7 -:1082E0008AB2B3B2011D08F032FB8046A0F800A0AC -:1082F00006E003208DF83C00D5F800804FF001091E -:108300009DF8200010F0380F00D1FFDF9DF820000D -:108310002649C0F3C200084497F8231010F8010C56 -:10832000884201D90F2074E72088ADF8400014A9D5 -:108330000095CDE90191434607220FA95846FEF763 -:108340005DFE002891D19DF8500050B9A078012819 -:1083500007D1687CB3B2704382B2A868011D08F0EF -:108360000AFB002055E770B5064615460C46084640 -:10837000FEF70CFC002805D12A4621463046BDE810 -:10838000704075E470BD13E570B51E4614460D00CF -:108390000ED06CB1616859B160B10349C98881429E -:1083A00008D0072070BD00007C020020FA2F0000DA -:1083B0001020F7E72068FEF7E9FB0028F2D13246EB -:1083C00021462846BDE87040FFF747BA70B515460C -:1083D0000C0006D038B1FE490989814203D007203C -:1083E000E0E71020DEE72068FEF7D0FB0028D9D1B7 -:1083F00029462046BDE87040D6E570B5064686B0F1 -:108400000D46144610460CF001F9D0BB60680CF024 -:1084100024F9B0BBA6F57F40FF3803D03046FBF708 -:108420001AF880B128466946FEF7E3FC00280CD113 -:108430009DF810100F2008293CD2DFE801F0080653 -:108440000606060A0A0843F2020006B0AAE703205D -:10845000FBE79DF80210012908D1BDF80010B1F525 -:10846000C05FF2D06FF4C052D142EED09DF806103A -:1084700001290DD1BDF80410A1F52851062907D214 -:1084800000E028E0DFE801F0030304030303DCE776 -:108490009DF80A1001290ED1BDF80810B1F5245F2E -:1084A000D3D0A1F524510239CFD00129CDD0022952 -:1084B00001D1CAE7FFDF606878B9002305AA294621 -:1084C000304605F027FD10B1FEF7A1FBBDE79DF892 -:1084D0001400800601D41020B7E7618822462846A0 -:1084E0006368FFF7BFFDB0E72DE9F043814687B031 -:1084F0008846144610460CF089F818B1102007B0D1 -:10850000BDE8F083002306AA4146484605F002FD77 -:1085100018B100BFFEF77BFBF1E79DF81800C0061D -:1085200002D543F20140EAE70025072705A8019597 -:1085300000970295CDE9035062884FF6FF734146DC -:10854000484605F065FC060013D160680CF05EF843 -:1085500060B960680195CDE90250009704952388C1 -:1085600062884146484605F053FC0646BDF81400B3 -:1085700020803046CEE739B1954B0A889B899A42D4 -:1085800002D843F2030070471DE610B586B0904C48 -:108590000423ADF81430638943B1A4898C4201D21D -:1085A000914205D943F2030006B010BD0620FBE757 -:1085B000ADF81010002100910191ADF800300221BA -:1085C0008DF8021005A9029104A90391ADF81220BB -:1085D0006946FFF7F8FDE7E72DE9FC4781460E46BF -:1085E00008460BF0EDFF88BB4846FAF734FF5FEA18 -:1085F00000080AD098F80000222829D30421484610 -:1086000008F032FB070005D103E043F20200BDE8A9 -:10861000FC87FFDF07F1140004F0FDF90546307810 -:10862000012803D0022804D00720F0E7A8070FD5BF -:1086300002E015F01C0F0BD0B079341DC00709D033 -:10864000E08838B1A0680BF0BBFF18B11020DEE75E -:108650000820DCE732782088002628B3A0F2011336 -:108660000721112B18D20CD2DFE803F00B090D0BF8 -:108670001D0B121D100B0B1D1D1D1D0B1D00022AB5 -:1086800011D10846C3E7012AFBD00CE02A0700E01D -:10869000EA06002AF5DA06E0A0F5C0721F2A02D920 -:1086A0007D3A022AEDD8C6B200F0B8FE50B198F873 -:1086B0002300CDE90006FA89234639464846FEF7ED -:1086C000EAFCA4E71120A2E72DE9F04F8BB01F468A -:1086D00015460C4683460026FAF7BDFE28B1007801 -:1086E000222805D208200BB094E543F20200FAE7F5 -:1086F000B80801D00720F6E7032F00D100274FF676 -:10870000FF79CCB1022D73D320460BF0A6FF30B910 -:1087100004EB0508A8F101000BF09FFF08B1102041 -:10872000E1E7AD1EAAB22146484605F09DFC38F8A7 -:10873000021C88425CD1ADB22549B80702D58889B0 -:10874000401C00E001201FFA80F8F80701D08F8953 -:1087500000E04F4605AA4146584605F0A6FA4FF0FC -:10876000070A4FF00009ACB3204608E04088102803 -:108770003ED8361D304486B2AE4239D2A0190288A6 -:108780004245F3D354E000BF9DF8170002074FD5D0 -:1087900084B304EB0608361DB8F80230B6B2102BCD -:1087A00026D89A19AA4223D8B8F8002091421FD19E -:1087B000C00620D5CDE900A90DF1080C0AAAA1191F -:1087C00048468CE80700B8F800100022584603E03D -:1087D0007C0200202CE00BE005F0F0F810B1FEF771 -:1087E00016FA80E7B8F80200BDF82810884202D0D7 -:1087F0000B2078E704E0B8F80200304486B206E0C7 -:10880000C00604D55846FEF778FC002888D19DF8AC -:108810001700BDF81A1020F010008DF81700BDF8F1 -:108820001700ADF80000FF235846009A05F09EFBA4 -:1088300005A805F046FA18B9BDF81A10B942A3D92F -:108840000421584608F010FA040000D1FFDFA28985 -:108850005AB1CDE900A94D46002321465846FEF7FE -:108860001AFC0028BDD1A5813DE700203BE72DE99A -:10887000FF4F8BB01E4617000D464FF0000412D07C -:10888000B00802D007200FB0C4E4032E00D10026A8 -:108890005DB108460BF0D8FE28B93888691E084437 -:1088A0000BF0D2FE08B11020EDE7C74AB00701D5A2 -:1088B000D18900E00121F0074FF6FF7802D0D0897E -:1088C000401E00E0404686B206AA0B9805F0EDF97E -:1088D0004FF000094FF0070B0DF1140A39E000BF0B -:1088E0009DF81B00000734D5CDF80490CDF800B0FA -:1088F000CDF80890CDE9039A434600220B9805F085 -:1089000087FA60BB05B3BDF814103A8821442819D2 -:10891000091D8A4230D3BDF81E2020F8022BBDF875 -:10892000142020F8022BCDE900B9CDE90290CDF852 -:1089300010A0BDF81E10BDF8143000220B9805F0F1 -:1089400067FA08B103209EE7BDF814002044001D1B -:1089500084B206A805F0B5F920B10A2806D0FEF7C2 -:1089600056F990E7BDF81E10B142B9D934B17DB1C6 -:108970003888A11C884203D20C2084E7052082E7B6 -:1089800022462946404605F06FFB01462819018022 -:10899000A41C3C80002076E710B504460BF036FEA0 -:1089A00008B1102010BD8848C0892080002010BD6B -:1089B000F0B58BB00D460646142103A81CF06BF9E8 -:1089C00001208DF80C008DF8100000208DF81100AA -:1089D000ADF814503046FAF73EFD48B10078222831 -:1089E00012D30421304608F03FF9040005D103E01A -:1089F00043F202000BB0F0BDFFDF04F114000746A4 -:108A000004F009F8800601D40820F3E7207C022155 -:108A100040F00100207409A80094CDE9011007225C -:108A200003A930466368FEF7E9FA20B1217C21F002 -:108A300001012174DEE729463046F9F7C4FC08A994 -:108A4000384603F0D7FF00B1FFDFBDF82040172CF8 -:108A500001D2172000E02046A84201D92C4602E0AE -:108A6000172C00D2172421463046FFF724FB21465D -:108A70003046F9F7CEF90020BCE7F8B51C4615469C -:108A80000E46069F08F022FA2346FF1DBCB231466F -:108A90002A46009407F00DFEF8BD70B50C46054659 -:108AA0000E2120461CF0D5F8002020802DB1012D8C -:108AB00001D0FFDF76E4062000E00520A07171E41C -:108AC00010B548800878134620F00F00001D20F0F4 -:108AD000F00080300C4608701422194604F108009A -:108AE0001CF07DF800F09DFC3748046010BD2DE9B6 -:108AF000F047DFF8D890491D064621F003011746DC -:108B00000C46D9F8000007F0EAFE050000D1FFDFAF -:108B10004FF000083560A5F800802146D9F8000024 -:108B200007F0DDFE050000D1FFDF7560A5F80080CD -:108B30007FB104FB07F1091D0BD0D9F8000007F045 -:108B4000CEFE040000D1FFDFB460C4F80080BDE8B1 -:108B5000F087C6F80880FAE72DE9F0411746491D6D -:108B600021F00302194D064601681446286807F0F3 -:108B7000E1FE22467168286807F0DCFE3FB104FB85 -:108B800007F2121D03D0B168286807F0D3FE042055 -:108B900008F012F80446042008F016F8201A0128FC -:108BA00004D12868BDE8F04107F08EBEBDE8F08131 -:108BB00010B50C4605F045F800B1FFDF2046BDE8D2 -:108BC0001040FEF724B800007C02002014000020B2 -:108BD00038B50C468288817B19B14189914200D910 -:108BE0000A462280C188121D90B26A4607F06DF9CC -:108BF000BDF80000032800D30320C1B2208800F094 -:108C0000A3FF38BD38B50C468288817B19B1018934 -:108C1000914200D90A462280C188121D90B26A464C -:108C200007F053F9BDF80000022800D30220C1B2BA -:108C3000208800F089FF401CC0B238BD2DE9FE4FEE -:108C40000C46FD4981464022D1E90201CDE90101EE -:108C500009F1030020F00301C91C21F00301009178 -:108C60006846114607F01DFEF44E002C02D1F44A6E -:108C700000999160009901440091357F05F101054B -:108C800004D1E8B209F018FD00B1FFDF009800EB55 -:108C90000510C01C20F0030100915CB9707AB27A13 -:108CA0001044C2B200200870308C80B204F051FE33 -:108CB00000B1FFDF0098316A084400902146684601 -:108CC00000F00DFF0098C01C20F003000090B37A64 -:108CD000F27A717A04B1002007F0D9FE00990844B5 -:108CE00000902146684600F03AFF00273D46B24614 -:108CF00096F801800CE0284600F0D4FE0646817804 -:108D00008088F9F71DF971786D1C00FB0177EDB2D1 -:108D10004545F0D10098C01C20F00300009004B13C -:108D200000203946F9F717F9009900270844009008 -:108D30003D469AF801800CE0284600F0B3FE064656 -:108D4000C1788088FEF763FC71786D1C00FB0177A9 -:108D5000EDB24545F0D10098C01C20F00300009012 -:108D600004B100203946FEF75BFC00994FF0000883 -:108D70000844009045469AF801700EE0284600F03D -:108D800091FE0646807B30B106F1080001F0DDFE61 -:108D9000727800FB02886D1CEDB2BD42EED10098E6 -:108DA000C01C20F00300009004B10020414601F0F7 -:108DB000D0FE0099084400902146684600F049FE24 -:108DC0000098C01D20F0070200922CBB9D49002096 -:108DD000FAF743F8FBF713FB984801AA002110307B -:108DE000F8F7CAFA00B1FFDF9AF81D00FEF77FFF1F -:108DF00000B1FFDF91484FF4F67144301BF04BFF98 -:108E00008E480421443080F8E91180F8EA110621E7 -:108E100080F8EB11032101710099A1EB0900BDE875 -:108E2000FE8F70B5854C06464434207804EB40151F -:108E3000E078083590B9A01990F8E80100280ED024 -:108E4000A0780F2800D3FFDF202128461BF023FF46 -:108E5000687866F3020068700120E070284670BDF3 -:108E60002DE9F04105460C46002700780521904683 -:108E70003E46B1EB101F00D0FFDF287A50B1012829 -:108E80000ED0FFDFA8F800600CB1278066800020BC -:108E9000BDE8F0810127092674B16888A08008E048 -:108EA0000227142644B16888A0802869E060A88A57 -:108EB0002082287B2072E5E7A8F80060E7E710B57C -:108EC0005F4C6068C11D21F00701814200D0FFDFC7 -:108ED0005A4801210022017042700172417203233D -:108EE0008372C17202730274052202831F224283BD -:108EF000417455A242610A22027741774FF4B06172 -:108F000001626168416010BD30B54D4C1568636801 -:108F100010339D4202D20420136030BD474B5D7870 -:108F20005A6802EB0512107051700320D080172090 -:108F300090800120D0709070002090735878401C71 -:108F40005870606810306060002030BD70B5064613 -:108F50003A480024457807E0204600F0A3FD017858 -:108F6000B14204D0641CE4B2AC42F5D1002070BD23 -:108F7000F7B5074608780C4610B3FFF7E7FF05463C -:108F8000A7F12006202F06D0052E19D2DFE806F023 -:108F90000F2B2B151A0000F090FD0DB1697800E041 -:108FA0000021401AA17880B20844FF2808D8A07890 -:108FB00030B1A088022824D202E06088172820D28D -:108FC0000720FEBD207AE0B161881729F8D3A18877 -:108FD0001729F5D3A1790029F2D0E1790029EFD042 -:108FE000402804D9ECE7242F0BD1207A48B16188BE -:108FF0004FF6FB70814202D8A188814201D904203A -:10900000FEBD65B9207802AA0121FFF77DFF002887 -:10901000F6D12078FFF79AFF050000D1FFDF052E7B -:1090200025D2DFE806F003181B151E00A078687033 -:10903000A088E8801CE00000545002009803002043 -:109040001C000020000000206E5246357800000011 -:109050006088A8800CE0A078A87009E0A078E8708B -:1090600006E054F8020FA8606068E86000E0FFDFE7 -:109070000020FEBD1A2835D00DDC132832D2DFE8DF -:1090800000F01B31203131272723252D31312931A3 -:109090003131312F0F00302802D003DC1E2821D1BE -:1090A000072070473A3809281CD2DFE800F0151B6A -:1090B0000F1B1B1B1B1B07000020704743F2040003 -:1090C000704743F202007047042070470D2070473C -:1090D0000F207047082070471120704713207047F9 -:1090E000062070470320704710B5007800F001009B -:1090F00006F0E2FEBDE81040BCE70EB5017801F0D5 -:1091000001018DF80010417801F001018DF8011086 -:109110000178C1F340018DF802104178C1F340019C -:109120008DF80310017889088DF8041041788908BA -:109130008DF8051081788DF80610C1788DF807102C -:1091400000798DF80800684605F0DDFAFFF792FF18 -:109150000EBD2DE9F84FDFF8F883FE4C00261FE026 -:10916000012000F03FFD0120FFF75BFE0546402196 -:109170004746D8F8080007F0B2FB686000B9FFDF87 -:10918000686805F06EF8A8B12846FAF758FC28463A -:1091900000F02EFD20B940226968B86807F0CAFBCC -:1091A00094F9E9010428DBDA022007F005FD0746FF -:1091B0000025A6E040226968D8F8080007F0BAFB4D -:1091C000F2E7B8F802104046491C89B2A8F802102C -:1091D000B94201D3002141800221B8F8020007F012 -:1091E00043FD002865D0B8F80200694606F0CBFDC3 -:1091F000FFF740FF00B1FFDF9DF8000078B1B8F83D -:10920000020007F075FE5FEA000900D1FFDF484663 -:1092100007F0E3F818B1B8F8020002F03DF9B8F829 -:10922000020007F053FE5FEA000900D1FFDF484665 -:1092300007F0CBF8E8BB0321B8F8020007F014FDF3 -:109240005FEA000B48D1FFDF46E000BFDBF810000B -:1092500010B10078FF2849D0022000F0C3FC0220A2 -:10926000FFF7DFFD8246484607F0BBF9CAF8040065 -:1092700000B9FFDFDAF8040007F083FA002100905C -:109280000170B8F802105046AAF8021001F00AFE68 -:10929000484607F078FA00B9FFDF504600F0A8FC16 -:1092A00018B99AF80100000704D50099CBF81010FE -:1092B00012E024E0DBF8100038B10178491C11F00D -:1092C000FF01017008D1FFDF06E000221146484689 -:1092D00000F0BDFB00B9FFDF94F9EA01022805DBCD -:1092E000B8F8020001F0A3FD0028AFD194F9E9011C -:1092F000042804DB484607F0AAFA00B101266D1CD9 -:10930000EDB2BD4204D294F9EA010228BFF659AF8A -:10931000002E7FF423AFBDE8F84F032000F062BCBD -:1093200010B58B4CE06008682061AFF2D91002F0F4 -:1093300042FD607010BD87480021443801708448A8 -:10934000017085494160704770B505464FF0805007 -:109350000C46D0F8A410491C05D1D0F8A810C94378 -:109360000904090C0BD050F8A01F01F0010129706D -:10937000416821608068A080287830B970BD0621DE -:1093800020460AF0F8FD01202870607940F0C00006 -:10939000607170BD70B54FF080540D46D4F88010E8 -:1093A000491C0BD1D4F88410491C07D1D4F888107B -:1093B000491C03D1D4F88C10491C0CD0D4F880106F -:1093C0000160D4F884104160D4F888108160D4F82A -:1093D0008C10C16002E010210AF0CDFDD4F890009D -:1093E000401C0BD1D4F89400401C07D1D4F898004D -:1093F000401C03D1D4F89C00401C09D054F8900FB5 -:10940000286060686860A068A860E068E86070BD77 -:109410002846BDE8704010210AF0ADBD4D480079E6 -:10942000FFE470B54B4CE07830B3207804EB40108B -:10943000407A00F00700204490F9E801002800DCA1 -:10944000FFDF2078002504EB4010407A00F0070091 -:10945000011991F8E801401E81F8E8012078401CCC -:10946000C0B220700F2800D12570A078401CA070D9 -:109470000AF0E4FCE57070BDFFDF70BD3EB5054647 -:10948000032107F0F1FB0446284607F01FFD0546BF -:1094900004B9FFDF206918B10078FF2800D1FFDF91 -:1094A00001AA6946284600F0D2FA60B9FFDF0AE057 -:1094B000002202A9284600F0CAFA00B9FFDF9DF891 -:1094C000080000B1FFDF9DF80000411E8DF800107C -:1094D000EED220690199884201D1002020613EBD71 -:1094E00070B50546A0F57F400C46FF3800D1FFDF80 -:1094F000012C01D0FFDF70BDFFF790FF040000D109 -:10950000FFDF207820F00F00401D20F0F0005030E9 -:10951000207065800020207201202073BDE870401B -:109520007FE72DE9F04116460D460746FFF776FF27 -:10953000040000D1FFDF207820F00F00401D20F054 -:10954000F00050302070678001202072286805E00C -:109550001C000020DC030020C81400202061A88823 -:10956000A0822673BDE8F0415BE77FB5FFF7EEFC14 -:10957000040000D1FFDF02A92046FFF729FB0546C2 -:1095800003A92046FFF73EFB8DF800508DF801003F -:10959000BDF80800001DADF80200BDF80C00001D6C -:1095A000ADF80400E088ADF80600684606F066FCF9 -:1095B000002800D0FFDF7FBD2DE9F047DFF8FC93E6 -:1095C0000546002799F8000010B10820BDE8F08793 -:1095D00028460BF01BF808B11020F7E7F84C20786C -:1095E00008B9FFF76CFCA07A617A0844C6B200F0B3 -:1095F00064FAB04207D2301AC1B22A460020FFF7FF -:1096000083FC0700E2D1D9F804004E46C01C20F0CC -:109610000300C9F8040000F040FB716800EB01088A -:1096200001214046FFF70AFB06462968404488426C -:1096300002D8B6F5803F15D328600020FFF786FCDE -:1096400005000DD005F11300D9F8041020F0030037 -:109650004E46884200D0FFDF6078401E6070756023 -:109660000420B3E700214046FFF7E8FA0446A6428B -:1096700000D0FFDF04EB0801C9F8041029604FF6A1 -:10968000FF71A9F80210012189F8001038469DE702 -:109690002DE9F0410446C94817460E46007810B13E -:1096A0000820BDE8F08108460AF08AFF08B11020C2 -:1096B000F7E7C34D287808B9FFF701FC601E1E28A4 -:1096C00007D8012C22D13078FE281FD82877002017 -:1096D000E7E7A4F120001F2805D8E0B23A4631465A -:1096E000BDE8F04144E4A4F140001F2805D831460C -:1096F0002046BDE8F04100F0A3BAA4F1A0001F2865 -:1097000004D80020A02C03D0A12C06D00720C8E745 -:10971000317801F001016977C3E731680922F8293E -:1097200001D38B0701D01046BBE76B7C03F003032A -:10973000012B04D16B8BD7339CB28C42F3D82962B6 -:10974000AFE72DE9F04781460E4608460AF05EFF76 -:1097500048B948460AF078FF28B909F1030020F01B -:109760000301494501D0102030E795484FF0000A29 -:109770004430817869B14178804600EB4114083467 -:10978000378832460021204600F040FA050004D018 -:1097900027E0A6F800A0052018E7B9F1000F24D0B3 -:1097A0003088B84201D90C251FE0607800F0070529 -:1097B000284600F017FA08EB0507324697F8E8014B -:1097C0004946401C87F8E801204607F5F47700F089 -:1097D0001DFA05463878401E3870032000F002FA62 -:1097E0002DB10C2D01D0A6F800A02846EEE6607839 -:1097F000724E00F00701012923D002290CD0032961 -:1098000033D0FFDF98F801104046491CC9B288F8F0 -:1098100001100F2934D035E0616821B1000702D46E -:109820006088FFF72BFE98F8EA014746012802D12D -:10983000707802F0DFFA97F9EA010428E2DBFFDF33 -:10984000E0E7616819B14022B06807F073F898F852 -:10985000E9014746032802D1707802F0CBFA97F964 -:10986000E9010428CEDBFFDFCCE7C00602D5608823 -:10987000FFF704FE98F9EB010628C3DBFFDFC1E721 -:1098800080F801A08178491E8170617801F007019C -:1098900001EB080090F8E811491C80F8E811A4E7F2 -:1098A00070B50D4604460AF08BFE18B928460AF03A -:1098B000ADFE08B1102070BD29462046BDE87040BD -:1098C00008F031BF70B5044615460E4608460AF04A -:1098D00077FE18B928460AF099FE08B1102070BD2D -:1098E000022C03D0102C01D0092070BD2A4631462D -:1098F000204608F03BFF0028F7D0052070BD70B56A -:1099000014460D4606460AF05BFE38B928460AF0B2 -:109910007DFE18B920460AF097FE08B1102070BDF0 -:1099200022462946304608F040FF0028F7D007209D -:1099300070BD3EB504460AF069FE08B110203EBD78 -:10994000684604F03FFEFFF795FB0028F7D19DF82D -:1099500006002070BDF808006080BDF80A00A080F5 -:1099600000203EBD70B505460C4608460AF06CFE68 -:1099700020B93CB120680AF049FE08B1102070BD42 -:10998000A08828B121462846BDE87040FDF7BEBE3C -:10999000092070BD70B504460D4608460AF010FE59 -:1099A00030B9601E1E2818D828460AF009FE08B1F2 -:1099B000102070BD022C05D9072070BD1C000020AE -:1099C0009803002004B9FFDFF94800EB840050F849 -:1099D000041C2846BDE870400847A4F120001F2859 -:1099E00005D829462046BDE87040FAF790BCF02C17 -:1099F000E2D1A8680AF0E4FD0028D9D1284606F093 -:109A0000A6FABDE87040FFF735BB70B504460D46B9 -:109A100008460AF0FBFD30B9601E1E280DD8284606 -:109A20000AF0CEFD08B11020C7E7012C01D0022CAE -:109A300001D10620C1E70720BFE7A4F120001F28BD -:109A4000F9D829462046BDE87040FAF7B8BC06F0C0 -:109A50008BBC38B50446D748007B00F00105D9B966 -:109A6000F9F787FA0DB1226800E00022D248417868 -:109A7000C06804F09EFBD0481030C0788DF800001C -:109A800010B1012802D004E0012000E000208DF890 -:109A90000000684604F010FE002D02D02068283037 -:109AA000206038BD30B5C34D04466878A04200D868 -:109AB000FFDF686800EB041030BD70B5BD480025BD -:109AC0002C46467807E02046FFF7ECFF4078641C00 -:109AD0002844C5B2E4B2B442F5D128466DE72DE979 -:109AE000F0410C46064600F006F907463068C01CF7 -:109AF00020F00302326014BBAE483B4608212430FC -:109B00000AF038FC002409E0082C10D2DFE804F049 -:109B1000060408080A040406A84804E0A84802E06D -:109B2000A84800E0A8480AF045FC054600E0FFDF31 -:109B3000A54200D0FFDF641CE4B2082CE4D33068F7 -:109B400000EB07103060ACE5021D5143452900D2FF -:109B500045210844C01CB0FBF2F0C0B270472DE9AB -:109B6000FC5F064693484FF000088B464746444644 -:109B700090F8019022E02046FFF794FF050000D105 -:109B8000FFDF687869463844C7B22846FFF720F8F7 -:109B9000824601A92846FFF735F80346BDF80400C0 -:109BA0005246001D81B2BDF80000001D80B207F0D2 -:109BB000D9F86A78641C00FB0288E4B24C45DAD11B -:109BC0003068C01C20F003003060BBF1000F00D0F3 -:109BD00000204246394607F0D3F831680844306027 -:109BE000BDE8FC9F7349443108710020C87070477C -:109BF00070494431CA782AB10A7801EB4211083120 -:109C0000814201D001207047002070472DE9F041CA -:109C100006460078154600F00F0400201080601EF4 -:109C20000F46052800D3FFDF61482A46103000EBBD -:109C30008400394650F8043C3046BDE8F0411847EE -:109C400070B50C46402802D0412806D120E0A0780B -:109C500061780D18E178814201D90720ADE62078BE -:109C6000012801D91320A8E6FF2D08D808F008FF25 -:109C700006460AF09CF8301A801EA84201DA12202B -:109C80009BE64C482168816021790173002094E6AD -:109C9000BDE87040084600F05EB82DE9F0470027A7 -:109CA000DFF810A13E463D46B9463C469AF8018091 -:109CB0000AE02046FFF7F6FE4178807B0E4410FB59 -:109CC0000155641CE4B27F1C4445F2D109EB8700C6 -:109CD000C6EBC60100EB81009AF8092000EB850174 -:109CE00001EBC2019AF80A209AF80B0001EBC201BD -:109CF00001EB80006AE42DE9F047DFF8B890002618 -:109D0000344699F8090099F80A2099F8017002443C -:109D1000D5B299F80B20104400F0FF0808E0204667 -:109D2000FFF7C0FE817B407811FB0066641CE4B243 -:109D3000BC42F4D199F8090099F80A102844284443 -:109D40004044401C01B1012108448419FF2C00D972 -:109D5000FFDFE0B23AE438B50446407800F0030093 -:109D6000012803D002280BD0072038BD606858B105 -:109D70000AF073FCD0B960680AF066FC20B915E0FF -:109D800060680AF01DFC88B969462046FCF71EF998 -:109D90000028EAD1607800F00300022816D19DF86F -:109DA000000098B160680AF04FFC78B1102038BD0F -:109DB00054500200980300201C000020BD41000008 -:109DC0001FAC00005D2F0000AB2401006189F82961 -:109DD0000DD8208988420AD8607800F003020A482A -:109DE000012A06D1D731026A89B28A4201D20920FA -:109DF000DDE794E80E0000F1100585E80E000AB9D1 -:109E0000002101830020D2E7980300202DE9F041D2 -:109E1000074614468846084601F01CFD064608EB36 -:109E200088001C22796802EBC0000D18688C58B1BC -:109E30004146384601F016FD014678680078C200B8 -:109E4000082305F120000CE0E88CA8B14146384613 -:109E500001F00FFD0146786808234078C20005F143 -:109E6000240006F0BEFD38B1062121726681D0E9DA -:109E70000010C4E9031009E0287809280BD0052058 -:109E8000207266816868E060002028702046BDE886 -:109E9000F04101F0D5BC072020726681F4E72DE97E -:109EA000F04116460D460746406801EB85011C222D -:109EB00002EBC1014418204601F0FDFC40B1002135 -:109EC000708865F30F2160F31F4107200AF02CFB17 -:109ED00009202070324629463846BDE8F04195E712 -:109EE0002DE9F0410E46074600241C21F07816E0CB -:109EF00004EB8403726801EBC303D25C6AB1FFF721 -:109F00008DFA050000D1FFDF6F802A4621463046DA -:109F1000FFF7C5FF0120BDE8F081641CE4B2A04258 -:109F2000E6D80020F7E770B5064600241C21C0786B -:109F30000AE000BF04EB8403726801EBC303D51889 -:109F40002A782AB1641CE4B2A042F3D8402070BD44 -:109F5000282128461AF07DFE7068808928812046D5 -:109F600070BD70B5034600201C25DC780DE000BFF5 -:109F700000EB80065A6805EBC6063244167816B127 -:109F8000128A8A4204D0401CC0B28442F0D84020D9 -:109F900070BDF0B5044600201C26E5780EE000BF39 -:109FA00000EB8007636806EBC7073B441F788F42CE -:109FB00002D15B78934204D0401CC0B28542EFD8F6 -:109FC0004020F0BD0078032801D000207047012018 -:109FD00070470078022801D00020704701207047A8 -:109FE0000078072801D000207047012070472DE934 -:109FF000F041064688461078F1781546884200D32D -:10A00000FFDF2C781C27641CF078E4B2A04201D852 -:10A01000201AC4B204EB8401706807EBC101084444 -:10A02000017821B14146884708B12C7073E7287840 -:10A03000A042E8D1402028706DE770B514460B8827 -:10A040000122A240134207D113430B8001230A22AD -:10A05000011D06F090FC047070BD2DE9FF4F81B02A -:10A060000878DDE90E7B9A4691460E4640072CD4CF -:10A07000019806F03DFF040000D1FFDF07F104085E -:10A0800020461FFA88F106F07CF8050000D1FFDFBA -:10A09000204629466A4606F0C6FA0098A0F80370E2 -:10A0A000A0F805A0284606F06CFB017869F30601CC -:10A0B0006BF3C711017020461FFA88F106F0A4F86F -:10A0C00000B9FFDF019803F0E9FF06EB0900017F0B -:10A0D000491C017705B0BDE8F08F2DE9F84F0E4619 -:10A0E0009A4691460746032106F0BEFD0446008DC0 -:10A0F000DFF8B485002518B198F80000B0421ED1F1 -:10A10000384606F0F5FE070000D1FFDF09F1040133 -:10A11000384689B206F035F8050010D03846294691 -:10A120006A4606F080FA009800210A460180817094 -:10A1300004F084F80098C01DCAF8000021E098F8E7 -:10A140000000B04216D104F1260734F8341F012074 -:10A1500000FA06F911EA090F00D0FFDF2088012379 -:10A1600040EA090020800A22391D384606F01EFC0C -:10A17000067006E0324604F1340104F12600FFF7D0 -:10A180005CFF0A2188F800102846BDE8F88FFEB56C -:10A1900014460D46064602AB0C220621FFF79DFF32 -:10A1A000002826D00299687812220A70801C487014 -:10A1B00008224A80A870208888806088C880A0888B -:10A1C0000881E088488100240C20CDE900040523A3 -:10A1D000062229463046FFF740FF2146002266F35B -:10A1E0001F41F02310460AF0F5F86878801C68706B -:10A1F0000120FEBDFEB514460D460622064602AB02 -:10A200001146FFF76AFF002812D0029B132000219D -:10A210001870A8785870022058809C800620CDE9DC -:10A2200000010246052329463046FFF716FF0120AC -:10A23000FEBD2DE9FE430C46804644E002AB0E22F3 -:10A2400007214046FFF749FF002841D060681C22E3 -:10A2500067788678BF1C06EB860102EBC1014518C2 -:10A2600002981421017047700A214180698A018196 -:10A27000E98A4181A9888180A9898181304601F0DC -:10A28000E9FA029905230722C8806F70042028701C -:10A2900000250E20CDE9000521464046FFF7DDFEF2 -:10A2A000294666F30F2168F31F41F023002207209F -:10A2B0000AF090F86078FD49801C60706268204662 -:10A2C000921CFFF794FE606880784028B6D1012088 -:10A2D000BDE8FE83FEB50D46064638E002AB0E2211 -:10A2E00007213046FFF7F9FE002835D068681C23A7 -:10A2F000C17801EB810203EBC20284180298152297 -:10A300000270627842700A224280A2894281A28849 -:10A310008281084601F09EFA014602988180618A96 -:10A32000C180E18A0181A088B8B10020207000219D -:10A330000E20CDE900010523072229463046FFF70C -:10A340008CFE6A68DA492846D21CFFF750FE68681E -:10A35000C0784028C2D10120FEBD0620E6E72DE9E5 -:10A36000FE430C46814644E0204601F08EFAD0B30D -:10A3700002AB082207214846FFF7AFFE0028A7D00E -:10A3800060681C2265780679AD1C06EB860102EB3D -:10A39000C10147180298B7F8108006210170457076 -:10A3A00004214180304601F055FA01460298052308 -:10A3B0000722C180A0F804807D7008203870002535 -:10A3C000CDE9000521464846FFF747FE294666F3DA -:10A3D0000F2169F31F41F0230022072009F0FAFF43 -:10A3E0006078801C60706268B2492046121DFFF7D9 -:10A3F000FEFD606801794029B6D1012068E72DE9AA -:10A40000F34F83B00E4680E0304601F03EFA00285C -:10A4100075D071681C2091F8068008EB880200EB6B -:10A42000C2000C184146304601F023FA0146A078DC -:10A43000C30070684078C20004F1240006F0EDFA11 -:10A4400007468088E18B401A80B2002581B3AA4676 -:10A45000218B814200D808468146024602AB072183 -:10A460000398FFF73AFE010028D0BAF1000F03D09D -:10A47000029AB888022510808B46E28B3968A9EBD6 -:10A4800005001FFA80FA0A440398009206F030FD96 -:10A49000ED1D009A59465346009506F03EF9E08BB3 -:10A4A000504480B2E083B988884209D1012508E090 -:10A4B000FFE7801C4FF0010A80B2C9E7002009E6DF -:10A4C0000025CDE90095238A072231460398FFF73E -:10A4D000C4FDE089401EE0818DB1A078401CA070D1 -:10A4E0007068F178427811FB02F1CAB281690123E8 -:10A4F0000E3006F040FA80F800800020E083726899 -:10A500006D493046921DFFF772FD706881794029D0 -:10A510007FF47AAF0120DDE570B5064648680D4648 -:10A5200014468179402910D104EB84011C2202EBEE -:10A53000C101084401F0E0F9002806D06868294606 -:10A5400084713046BDE8704059E770BDFEB50C46D9 -:10A550000746002645E0204601F097F9D8B3606829 -:10A560001C22417901EB810102EBC1014518688988 -:10A5700000B9FFDF02AB082207213846FFF7ADFD27 -:10A58000002833D00299607816220A70801C487027 -:10A59000042048806068407901F05CF90146029827 -:10A5A0000523072281806989C1800820CDE9000642 -:10A5B00021463846FFF751FD6078801C6070A889FD -:10A5C00069890844B0F5803F00D3FFDFA889698915 -:10A5D0000844A8816E81626838492046521DFFF701 -:10A5E00006FD606841794029B5D10120FEBD30B536 -:10A5F000438C458BC3F3C704002345B1838B641E92 -:10A60000ED1AC38A6D1E1D4495FBF3F3E4B22CB121 -:10A61000008918B1A04200D8204603444FF6FF70CD -:10A62000834200D3034613800C7030BD2DE9FC41FA -:10A63000074616460D46486802EB86011C2202EBCF -:10A64000C10144186A4601A92046FFF7D0FFA0893E -:10A65000618901448AB2BDF80010914212D0081AF3 -:10A6600000D5002060816868407940280AD12046E2 -:10A6700001F038F9002805D0686829464671384647 -:10A68000FFF764FFBDE8FC812DE9FE4F8946804657 -:10A6900015465088032106F0E7FA8346B8F8020011 -:10A6A00040280DD240200CE030000020C59F000063 -:10A6B000D39F0000E19F0000F9B80000E5B800005A -:10A6C000403880B282460146584601F0DEF8002844 -:10A6D0007ED00AEB8A001C22DBF8041002EBC000DB -:10A6E0000C18204601F0E7F8002877D1B8F80000F0 -:10A6F000E18A88423CD8A189D1B348456ED1002671 -:10A700005146584601F0AEF8218C0F18608B48B9BD -:10A71000B9F1020F62D3B8F804006083618A8842FD -:10A7200026D80226A9EB06001FFA80F9B888A28B6A -:10A73000801A002814DD4946814500DA084683B2B4 -:10A7400068886968029139680A44CDE9003206F0E8 -:10A75000BDFBDDE90121F61D009B009605F0A9FF78 -:10A76000A18B01EB090080B2A083618B884207D9DD -:10A77000688803B052465946BDE8F04F01F0D9B899 -:10A780001FD14FF009002872B8F802006881D7E99C -:10A790000001C5E90401608BA881284601F050F84A -:10A7A0005146584601F05EF80146DBF804000823E4 -:10A7B0000078C20004F1200006F013F90020A08305 -:10A7C0006083A0890AF0FF02401EA081688800E033 -:10A7D00004E003B05946BDE8F04F27E7BDE8FE8F1F -:10A7E0002DE9F041064615460F461C46184609F06D -:10A7F000E7FE18B9206809F009FF08B1102015E438 -:10A800007168688C0978B0EBC10F01D313200DE497 -:10A810003946304601F026F8014670680823007872 -:10A82000C20005F1200006F0A6F8D4E90012C0E944 -:10A8300000120020E3E710B50446032106F014FAE5 -:10A840000146007800F00300022805D02046BDE84C -:10A85000104001F114029AE48A8A2046BDE81040B3 -:10A86000C8E470B50446032106F0FEF9054601462A -:10A870002046FFF774FD002816D029462046FFF732 -:10A8800065FE002810D029462046FFF723FD00284A -:10A890000AD029462046FFF7CCFC002804D02946E0 -:10A8A0002046BDE87040AAE570BD2DE9F0410C4698 -:10A8B00080461EE0E178427811FB02F1CAB281695C -:10A8C00001230E3006F08DF8077860681C22C179EC -:10A8D000491EC17107EB8701606802EBC101461890 -:10A8E0003946204600F0D1FF18B1304600F0DCFFB9 -:10A8F00020B16068C1790029DCD180E7FEF78EFDC8 -:10A90000050000D1FFDF0A202872384600F0A2FFC0 -:10A9100068813946204600F0ACFF01466068082394 -:10A920004078C20006F1240006F05BF8D0E9001080 -:10A93000C5E90310A5F80280284600F081FFB07831 -:10A9400000B9FFDFB078401EB07058E770B50C4614 -:10A950000546032106F088F901464068C279224481 -:10A96000C2712846BDE870409FE72DE9FE4F824640 -:10A97000507814460F464FF0000800284FD00128A9 -:10A9800007D0022822D0FFDF2068B8606068F86036 -:10A9900024E702AB0E2208215046FFF79EFB002859 -:10A9A000F2D00298152105230170217841700A2107 -:10A9B0004180C0F80480C0F80880A0F80C8062884C -:10A9C00082810E20CDE90008082221E0A6783046D9 -:10A9D00000F040FF054606EB86012C22786802EB6A -:10A9E000C1010822465A02AB11465046FFF775FBDB -:10A9F0000028C9D0029807210170217841700421F4 -:10AA0000418008218580C680CDE9001805230A46CB -:10AA100039465046FFF721FB87F80880DEE6A67826 -:10AA2000022516B1022E13D0FFDF2A1D914602AB7C -:10AA300008215046FFF751FB0028A5D002980121BC -:10AA4000022E0170217841704580868002D005E099 -:10AA50000625EAE7A188C180E1880181CDE9009857 -:10AA60000523082239465046D4E710B50446032191 -:10AA700006F0FAF8014600F108022046BDE8104051 -:10AA800073E72DE9F05F0C4601281DD0957992F807 -:10AA90000480567905EB85011F2202EBC10121F0EC -:10AAA000030B08EB060111FB05F14FF6FF7202EAFA -:10AAB000C10909F1030115FB0611F94F21F0031A31 -:10AAC00040B101283DD124E06168E57891F800802B -:10AAD0004E78DFE75946786805F001FF606000B9FD -:10AAE000FFDF594660681AF0D6F8E570514678687D -:10AAF00005F0F5FE6168486100B9FFDF60684269F2 -:10AB000002EB09018161606880F80080606846702E -:10AB100017E0606852464169786805F00BFF5A46B5 -:10AB20006168786805F006FF032006F045F80446E2 -:10AB3000032006F049F8201A012802D1786805F0B0 -:10AB4000C3FE0BEB0A00BDE8F09F02460021022085 -:10AB500097E773B5D24D0A202870009848B10024B9 -:10AB60004FEA0D0005F09DFE002C01D100996960AF -:10AB70007CBD01240020F5E770B50C461546382150 -:10AB800020461AF088F8012666700A2104F11C009C -:10AB90001AF081F805B9FFDF297A207861F3010006 -:10ABA0002070A879002817D02A4621460020FFF7F8 -:10ABB00068FF6168402088706168C87061680871CA -:10ABC0006168487161688871616828880881616876 -:10ABD000688848816068868170BDC878002802D086 -:10ABE000002201204DE7704770B50546002165F34E -:10ABF0001F41002009F098FC0321284606F034F894 -:10AC0000040000D1FFDF21462846FFF769F900283C -:10AC100004D0207840F010002070012070BD2DE994 -:10AC2000FF4180460E460F0CFEF7F8FB050007D0EB -:10AC30006F800321384606F017F8040008D106E0BB -:10AC400004B03846BDE8F0411321F9F7F9BEFFDF43 -:10AC50005FEA080005D0B8F1070F18D0FFDFBDE8A4 -:10AC6000FF8120782A4620F0080020700020ADF8EF -:10AC7000020002208DF800004FF6FF70ADF80400CE -:10AC8000ADF8060069463846F9F7EDFAE7E7C6F38E -:10AC9000072101EB81021C23606803EBC202805C88 -:10ACA000042803D008280AD0FFDFD8E7012000904D -:10ACB0004FF440432A46204600F004FECFE704B09C -:10ACC0002A462046BDE8F041FFF7E9B82DE9F05FDC -:10ACD0000027B0F80A9090460C4605463E46B9F16A -:10ACE000400F01D2402001E0A9F140001FFA80FA94 -:10ACF000287AC01E08286BD2DFE800F00D04192066 -:10AD000058363C4772271026002C6CD0D5E9030139 -:10AD1000C4E902015CE070271226002C63D00A22ED -:10AD200005F10C0104F1080019F059FF50E07127FA -:10AD30000C26002C57D0E868A06049E07427102644 -:10AD40009CB3D5E90301C4E902016888032105F039 -:10AD50008BFF8346FEF762FB0246688850805146AF -:10AD60005846FFF753F833E075270A26ECB1A88957 -:10AD700020812DE076271426BCB105F10C0004F1EA -:10AD8000080307C883E8070022E07727102664B18C -:10AD9000D5E90301C4E902016888032105F064FFD5 -:10ADA00001466888FFF781FD12E01CE07327082642 -:10ADB000CCB16888032105F057FF01460078C00632 -:10ADC00006D56888FFF78CF810B96888F8F71BFE7D -:10ADD000A8F800602CB12780A4F8069066806888E7 -:10ADE000A0800020AFE6A8F80060FAE72DE9FC415A -:10ADF0000C461E4617468046032105F035FF0546E2 -:10AE00000A2C0AD2DFE804F0050505050505090945 -:10AE10000907042303E0062301E0FFDF0023CDE957 -:10AE20000076224629464046FFF717F92AE438B54E -:10AE30000546A0F57F40FF3830D0284606F046F89A -:10AE4000040000D1FFDF204605F0CBFB002815D021 -:10AE500001466A46204605F0E6FB00980321B0F85B -:10AE60000540284605F000FF0546052C03D0402C80 -:10AE700005D2402404E0007A80B1002038BD403C77 -:10AE8000A4B2214600F001FD40B1686804EB8401E2 -:10AE90003E2202EBC101405A0028EFD0012038BD0C -:10AEA000300000202DE9F04F044689B0408806F0BC -:10AEB0000DF8050000D1FFDF06AA2846616800F002 -:10AEC000BDFC069D001F81B235F8032F6B888A42B6 -:10AED00005D1042B0AD0052B1DD0062B15D02246F8 -:10AEE0002846FFF7D1FB09B0BDE8F08F16462D1DAF -:10AEF000224629463046F7F750FA0828F3D1224671 -:10AF000029463046FCF749FCEDE76088291D636857 -:10AF1000FAF7C8FCE7E717466088032105F0A4FEAE -:10AF20004FF000088DF804800646ADF80680042F27 -:10AF3000D9D36A79002AD6D028794FF6FF794FF015 -:10AF40001C0A13282CD008DC012878D0062847D00A -:10AF5000072875D0122874D106E0142872D015285D -:10AF600071D016286DD1ACE10C2F6AD1307800F089 -:10AF70000301022965D140F0080030706879B07093 -:10AF800001208DF804002889ADF808006889ADF823 -:10AF90000A00A889ADF80C00E889ADF80E0019E0A8 -:10AFA000B07890429FD1307801079CD5062F9AD176 -:10AFB00020F0080030706088414660F31F41002097 -:10AFC00009F0B2FA02208DF80400ADF80890288943 -:10AFD000ADF80A006088224601A9F9F744F982E732 -:10AFE000082F80D12F89B5F80A90402F01D2402038 -:10AFF00001E0A7F1400080B280460146304600F0F3 -:10B0000044FC08B3716808EB88002C2202EBC000F6 -:10B01000095A4945E3D1FE4807AAD0E90210CDE913 -:10B02000071068798DF81C0008F0FF058DF81E5098 -:10B0300060883146FFF799FC2246294639E0B6E0A0 -:10B0400014E03CE039E0E6E0F148D0E90010CDE959 -:10B0500007106879ADF820708DF81C00ADF82290CB -:10B06000608807AA3146FFF780FC3CE7082FB6D17D -:10B070006889B5F80880402801D2402000E04038B7 -:10B0800087B23946304600F000FC0028A7D007EB15 -:10B09000870271680AEBC2000844028A42459ED1C9 -:10B0A000017808299BD140786979884297D1F9B213 -:10B0B00022463046FEF7F3FE15E70E2F07D0CDF8F7 -:10B0C0001C80CDF8208068798DF81C00C8E769895C -:10B0D000EF898B46B5F80C903046FEF742FFABF196 -:10B0E0004001402901D309204AE0B9F1170F01D3EB -:10B0F000172F01D20B2043E040280ED000EB800236 -:10B1000071680AEBC20008440178012903D1407834 -:10B1100069798842A9D00A2032E03046FEF703FF61 -:10B12000014640282BD001EB810372680AEBC30073 -:10B1300002EB0008012288F800206A7988F80120D3 -:10B1400070682A894089B84200D938462D8A03237D -:10B150002372A282E7812082A4F80C9065820846BF -:10B1600000F078FB6081A8F81490A8F81870A8F88F -:10B170000E50A8F810B0204600F062FBB3E60420A1 -:10B1800005212172A4F80A80E08101212173A049E0 -:10B19000D1E90421CDE9072169798DF81C10ADF8BA -:10B1A0001E00608807AA3146FFF7DFFBE3E7062FA2 -:10B1B000E4D3B078904215D13078010712D520F051 -:10B1C000080030706088414660F31F41002009F09C -:10B1D000ABF902208DF804002889ADF80800ADF81D -:10B1E0000A90F7E604213046FEF7D3FE05464028D4 -:10B1F000C4D002208303009022462946304600F046 -:10B2000061FB4146608865F30F2160F31F41072011 -:10B2100009F08AF967E60E2FB0D104213046FEF717 -:10B22000B8FE81464028A9D04146608869F30F21C5 -:10B2300060F31F41072009F077F9288A0790E88911 -:10B2400000907068AF894089B84200D9384683467B -:10B25000B5F80A8028890590484600F0FBFA60811D -:10B26000079840B10220079B00902246494630468D -:10B2700000F028FB37E6B8F1170F1ED3172F1CD3A9 -:10B280000420207200986082E781A4F810B0A4F82E -:10B290000C8009EB890271680AEBC2000D18009955 -:10B2A0000598A5F81480A5F818B0E98128822046F1 -:10B2B00000F0C6FA0620287015E601200B23009046 -:10B2C000D3E7082FA6D129893046FEF74AFE074664 -:10B2D00040289FD007EB870271680AEBC200084440 -:10B2E000804600F0E8FA002894D16D89B8F80E0085 -:10B2F0002844B0F5803F05D360883A46314600F0D7 -:10B3000018FBF0E5002D85D0A8F80E0060883A46BD -:10B310003146FFF701F908202072384600F09AFA0A -:10B320006081A58127E770B50D460646032105F02B -:10B330009BFC040004D02078000704D5112070BDC8 -:10B3400043F2020070BD2A4621463046FEF71FFF39 -:10B3500018B9286860616868A061207840F008002A -:10B360002070002070BD70B50D460646032105F023 -:10B370007BFC040004D02078000704D4082070BDB2 -:10B3800043F2020070BD2A4621463046FEF732FFE6 -:10B3900000B9A582207820F008002070002070BD40 -:10B3A0002DE9F04F0E4691B08046032105F05CFC7C -:10B3B0000446404605F09CFD074600200790089093 -:10B3C0000990ADF830000A9002900390049004B9FF -:10B3D000FFDF0DF1080917BBFFDF20E038460BA99E -:10B3E000002204F0C1FF9DF82C0000F07F050A2D1B -:10B3F00000D3FFDF6019017F491E01779DF82C0003 -:10B4000000060CD52A460CA907A8FEF716FE01E097 -:10B410007C50020019F80510491C09F80510761E29 -:10B42000F6B2DBD204F13400FA4D04F1260BDFF85A -:10B43000E8A304F12A07069010E05846069900F0A8 -:10B440006AFA064628700A2800D3FFDF5AF8261049 -:10B4500040468847E08CC05DB04202D0208D002875 -:10B46000EBD10A202870EC4D4E4628350EE00CA991 -:10B4700007A800F050FA0446375D55F8240000B9DB -:10B48000FFDF55F82420394640469047BDF81E009E -:10B490000028ECD111B027E510B5032105F0E4FB3D -:10B4A000040000D1FFDF0A2104F11C0019F0F3FBB6 -:10B4B000207840F00400207010BD10B50C46032128 -:10B4C00005F0D2FB2044007F002800D0012010BDF1 -:10B4D0002DE9F84F894615468246032105F0C4FB45 -:10B4E000070004D0284609F06BF840B903E043F2A6 -:10B4F0000200BDE8F88F484609F088F808B110202E -:10B50000F7E7786828B169880089814201D9092064 -:10B51000EFE7B9F800001C2418B1402809D24020F8 -:10B5200008E03846FEF7FFFC8046402819D113207A -:10B53000DFE7403880B280460146384600F0A5F982 -:10B5400048B108EB8800796804EBC000085C01286A -:10B5500003D00820CDE70520CBE7FDF75FFF06000D -:10B560000BD008EB8800796804EBC0000C18B9F820 -:10B57000000020B1E88910B113E01120B9E7288854 -:10B58000172802D36888172801D20720B1E7686816 -:10B5900038B12B1D224641463846FFF721F90028D5 -:10B5A000A7D104F10C0269462046FFF720F828884D -:10B5B00060826888E082B9F8000030B10220207013 -:10B5C000E889A080E889A0B12BE003202070A88939 -:10B5D000A08078688178402905D180F802803946BA -:10B5E0005046FEF726FE404600F034F9A9F8000068 -:10B5F00021E07868218B4089884200D90846208361 -:10B60000A6F802A004203072B9F800007081E08929 -:10B610007082F181208B3082A08AB081304600F0A8 -:10B620000FF97868C178402905D180F80380394640 -:10B630005046FEF74FFE00205BE770B50D4606460C -:10B64000032105F011FB040003D0402D04D2402556 -:10B6500003E043F2020070BD403DADB2294600F068 -:10B6600014F958B105EB85011C22606802EBC10199 -:10B67000084400F020F918B1082070BD052070BD05 -:10B680002A462146304600F054F9002070BD2DE9CD -:10B69000F0410D4616468046032105F0E5FA0446C2 -:10B6A000402D01D2402500E0403DADB28CB129468D -:10B6B00000F0EBF880B105EB85011C22606802EB1D -:10B6C000C1014718384600F0F6F838B10820BDE847 -:10B6D000F08143F20200FAE70520F8E733463A46E4 -:10B6E00029462046FFF77CF80028F0D1EAB221462F -:10B6F0004046FEF79BFF0020E9E72DE9F0410D46AB -:10B7000016468046032105F0AFFA0446402D01D2CB -:10B71000402500E0403DAFB224B1304608F050FF74 -:10B7200038B902E043F20200D1E7306808F048FF80 -:10B7300008B11020CBE73946204600F0A6F860B1EA -:10B7400007EB87011C22606802EBC10145182846FF -:10B7500000F0B1F818B10820B9E70520B7E7B088C4 -:10B76000A98A884201D90C20B1E76168E88C497840 -:10B77000B0EBC10F01D31320A9E73946204600F0F2 -:10B7800078F80146606808234078C20005F124007B -:10B7900005F0F1F8D6E90012C0E90012FAB221462C -:10B7A0004046FEF7B9FE002091E72DE9F0470D462F -:10B7B0001F4690468146032105F056FA0446402D67 -:10B7C00001D2402001E0A5F1400086B23CB14DB16C -:10B7D000384608F039FF50B11020BDE8F08743F239 -:10B7E0000200FAE76068C8B1A0F80C8024E0314696 -:10B7F000204600F04AF888B106EB86011C226068FA -:10B8000002EBC1014518284600F055F840B1082068 -:10B81000E3E7000030000020945002000520DCE740 -:10B82000A5F80880F2B221464846FEF7FFFE1FB198 -:10B83000A8896989084438800020CEE704F0F3BE67 -:10B84000017821F00F01491C21F0F0011031017045 -:10B85000FDF7E7BD10B50446402800D9FFDF4034AE -:10B86000A0B210BD406842690078484302EBC000B6 -:10B870007047C2784068037812FB03F2437840694E -:10B8800001FB032100EBC1007047C2788A4209D94D -:10B89000406801EB81011C2202EBC101405C08B150 -:10B8A00001207047002070470078062801D9012048 -:10B8B0007047002070470078062801D001207047AB -:10B8C00000207047F0B401EB81061C27446807EBA9 -:10B8D000C6063444049D05262670E3802571F0BC1D -:10B8E000FEF794BA10B5418911B1FFF7DDFF08B139 -:10B8F000002010BD012010BD10B5C18C8278B1EBC5 -:10B90000C20F04D9C18911B1FFF7CEFF08B10020E1 -:10B9100010BD012010BD10B50C4601230A22011DE7 -:10B9200005F05FF800782188012282409143218050 -:10B9300010BDF0B402EB82051C264C6806EBC50571 -:10B94000072363554B681C79402C03D11A71F0BC56 -:10B95000FEF705BDF0BC704710B5EFF3108000F0A6 -:10B96000010472B6F7484178491C417040780128BB -:10B9700001D1F7F709FB002C00D162B610BD70B5FC -:10B98000F04CE07848B90125E570FFF7E5FFF7F7DF -:10B9900003FB20B1002008F058FA002070BD4FF0E2 -:10B9A00080406571C0F80453F7E770B5EFF310807D -:10B9B00000F0010572B6E34C607800B9FFDF6078F3 -:10B9C000401E6070607808B9F7F7E2FA002D00D1E8 -:10B9D00062B670BDDB4810B5C17821B1002141715C -:10B9E000C170FFF7E2FF002010BD10B50446F7F765 -:10B9F000D3FAD449C978084000D001202060002043 -:10BA000010BD2DE9F05FDFF83C934278817889F82A -:10BA10000620002589F80710064689F808500078A6 -:10BA20002F4620B101280FD002280FD0FFDFF7F7F3 -:10BA3000C0FA98B1F7F7C4FAA8420FD12846F7F731 -:10BA4000C3FA0028FAD047E00125F0E7FFF784FFAA -:10BA5000F7F7A2FA0028FBD00225E8E701208407C7 -:10BA6000E060C4F80471B8490D600107D1F84412D0 -:10BA7000B54AC1F3423124321160B3493431086010 -:10BA80004FF0020BC4F804B3A060DFF8C0A2DAF8EC -:10BA90000010C94341F3001101F10108DAF8001068 -:10BAA00041F01001CAF8001000E020BFD4F80401F2 -:10BAB0000028FAD02846F7F787FA0028FAD0B8F11C -:10BAC000000F05D1DAF8001021F01001CAF80010BB -:10BAD000C4F808B3C4F8047199F807004C4670B173 -:10BAE000307860B9F7F758FA064608F00BFB6FF0AC -:10BAF000004116B1C4E9031001E0C4E9030115B126 -:10BB00002771BDE8F09F01202071BDE8F05F00F0D3 -:10BB1000D9B870B5050000D1FFDF4FF080424FF07B -:10BB2000FF30C2F808030021C2F80011C2F8041166 -:10BB3000C2F80C11C2F81011824C6170F7F732FA9A -:10BB400010B10120E07060702846BDE8704058E7F1 -:10BB50002DE9FE4F7E4800687D4A7E49083211601B -:10BB60008C070290D4F8080108B1012600E00026F5 -:10BB7000D4F8240100B101208146D4F81C0100B1A1 -:10BB800001208346D4F8200100B101200190D4F8AF -:10BB9000000110B14FF0010801E04FF00008D4F8A7 -:10BBA000040108B1012700E00027D4F80C0100B11E -:10BBB00001200090D4F8100108B1012100E000211B -:10BBC0008A4646EA080127EA01000099884320EAEC -:10BBD0000A0020EA090030EA0B0000D0FFDF002550 -:10BBE00026B1C4F80851012008F02FF9B9F1000F6F -:10BBF00004D0C4F82451092008F027F9BBF1000F44 -:10BC000004D0C4F81C510A2008F01FF9019820B193 -:10BC1000C4F820510B2008F018F9DFF83C91494E88 -:10BC20004FF0010BB8F1000F11D0C4F8005170793A -:10BC300018B17571002008F008F9307838B1357006 -:10BC400086F802B00222C9F80020C4F810B00FB183 -:10BC5000C4F80451009858B1C4F80C51B07800B938 -:10BC6000FFDFC9F80050B570C4F814B0FFF79DFEAF -:10BC7000BAF1000F05D0C4F81051307908B100F0C6 -:10BC800045F833490298091D0860BDE8FE8F70B57C -:10BC90002C4DE87808B9F7F77BF901208407A061FB -:10BCA000A87850B1D4F80C0120B90020F7F78CF92E -:10BCB0000028F7D10020C4F80C014FF0FF30C4F881 -:10BCC000080370BD2DE9F0411926B407C4F80863D4 -:10BCD0000125A5610020C4F80001C4F80C01C4F8D6 -:10BCE0001001F7F759F9174F28B11B49BD70022011 -:10BCF0000860256100E03D70FFF72EFE1249B8791B -:10BD000020310860C4F80463BDE8F0812DE9F041FA -:10BD10000C4C4FF080470125E07940B3012803D057 -:10BD2000217A401E814224DAF7F736F9064608F0F8 -:10BD3000E9F9E179012902D9217A491C21726EB110 -:10BD400021690CE03C0000201805004010ED00E0E7 -:10BD50001005024001000001340C0040E168411A66 -:10BD6000022902DA11F1020F0EDC0EB1206100E0AF -:10BD7000E060FFF7F1FDF7F70FF938B10549022050 -:10BD800008603D61A57002E07D61BDE7257000207F -:10BD90002072B9E7340C00404FF0E0214FF0007002 -:10BDA000C1F88001C1F88002384B802283F800245A -:10BDB000C1F80001704700B502460420344903E091 -:10BDC00001EBC0031B792BB1401EC0B2F8D2FFDFDC -:10BDD000FF2000BD41F8302001EBC00100224A7174 -:10BDE0008A7101220A7100BD294A002102EBC000BC -:10BDF0000171704710B50446042800D3FFDF2448C2 -:10BE000000EBC4042079012800D0FFDF6079A1791C -:10BE1000401CC0B2814200D060714FF0E0214FF071 -:10BE20000070C1F8000210BD2DE9F0411948056805 -:10BE300018491948083108601448042690F800048D -:10BE4000134F4009154C042818D0FFDF16E0217865 -:10BE500007EBC1000279012A08D1427983799A421D -:10BE600004D04279827157F8310080472078401C15 -:10BE7000C0B22070042801D300202070761EF6B2D4 -:10BE8000E5D20448001D0560BDE8F08119E000E03E -:10BE9000C8050020100502400100000150000020EC -:10BEA000F8B51D46DDE906470E000AD005F020F87A -:10BEB0002346FF1DBCB231462A46009404F02DFCF7 -:10BEC000F8BDD0192246194618F044FE2046F8BDA8 -:10BED00070B50D460446102118F0BBFE25811720D1 -:10BEE0006081A07B40F00A00A07370BD4FF6FF7226 -:10BEF0000A800146022008F017BB7047008970478E -:10BF0000827BD30701D1920703D480890880002067 -:10BF1000704705207047827B920700D5818170476A -:10BF200001460020098841F6FE52114200D001204E -:10BF3000704700B50346807BC00701D0052000BDD7 -:10BF400059811846FFF7ECFFC00703D0987B40F0FB -:10BF500004009873987B40F001009873002000BDA6 -:10BF6000827B520700D509B140897047172070477E -:10BF7000827B61F3C302827370472DE9FC5F0E463A -:10BF8000044601789646012000FA01F14DF6FF5271 -:10BF900001EA020962684FF6FF7B1188594502D118 -:10BFA0000920BDE8FC9FB9F1000F05D041F6FE5510 -:10BFB000294201D00120F4E741EA090111801D0066 -:10BFC00014D04FF0000C85F800C02378052103221F -:10BFD00067464FF0020A0E2B74D2DFE803F0F8092F -:10BFE000252F47626974479092B3D0D70420D8E7D1 -:10BFF000616820898B7B9B077DD5172848D30B89E7 -:10C00000834245D38989172901D3814240D185F8DC -:10C0100000A0A5F801003280616888816068817B9A -:10C0200021F002018173C5E0042028702089A5F861 -:10C0300001006089A5F803003180BBE0208A3188C7 -:10C04000C01D1FFA80F8414522D3062028702089A0 -:10C05000A5F801006089A5F80300A089A5F80500EE -:10C060000721208ACDE9000163693EE0082B10D04A -:10C07000082028702089A5F801006089A5F8030030 -:10C0800031806A1D694604F10C0006F08EFB10B188 -:10C090005FE01020EDE730889DF800100844308004 -:10C0A00088E00A2028702089A5F80100328045E048 -:10C0B0000C2028702089A5F801006089A5F80300EC -:10C0C00031803BE083E02189338800EB41021FFA95 -:10C0D00082F843453DD3B8F1050F3AD30E222A70BA -:10C0E0000BEA4101CDE90010E36860882A467146F9 -:10C0F000FFF7D6FE00E04DE0A6F800805AE04020B1 -:10C10000287060893188C01C1FFA80F8414520D30F -:10C110002878714620F03F00123028702089A5F859 -:10C1200001006089CDE9000260882A46E368FFF7D4 -:10C13000B7FEA6F80080287840063BD461682089C5 -:10C14000888037E0A0893288401D1FFA80F8424578 -:10C1500001D204273EE0162028702089A5F80100AE -:10C160006089A5F80300A089CDE9000160882A460E -:10C1700071462369FFF794FEA6F80080DEE71820D9 -:10C180002870207A6870A6F800A013E061680A8819 -:10C19000920401D405271DE0C9882289914201D06B -:10C1A000062717E01E21297030806068018821F47D -:10C1B00000510180B9F1000F0CD061887823002272 -:10C1C000022008F007F961682078887007E0A6F877 -:10C1D00000C003276068018821EA09010180384610 -:10C1E000DFE62DE9FF4F85B01746129C0D001E4675 -:10C1F0001CD03078C10703D000F03F00192801D9C6 -:10C20000012100E000212046FFF7AAFEA8420DD33D -:10C210002088A0F57F41FF3908D03078410601D44D -:10C22000000605D5082009B0BDE8F08F0720FAE721 -:10C2300000208DF800008DF8010030786B1E00F0B2 -:10C240003F0C0121A81E4FF0050A4FF002094FF0E4 -:10C25000030B9AB2BCF1200F75D2DFE80CF08B1003 -:10C26000745E7468748C749C74B674BB74C974D531 -:10C2700074E2747474F274F074EF74EE748B052DC0 -:10C2800078D18DF80090A0788DF804007088ADF812 -:10C29000060030798DF80100707800F03F000C281E -:10C2A00029D00ADCA0F10200092863D2DFE800F0FF -:10C2B000126215621A621D622000122824D004DC6A -:10C2C0000E281BD01028DBD11BE016281FD0182801 -:10C2D000D6D11FE02078800701E0207840070028B1 -:10C2E00048DAEFE020780007F9E72078C006F6E7A3 -:10C2F00020788006F3E720784006F0E720780006F3 -:10C30000EDE72088C005EAE720884005E7E72088B8 -:10C310000005E4E72088C004E1E72078800729D5FC -:10C32000032D27D18DF800B0B6F8010082E0217806 -:10C3300049071FD5062D1DD381B27078012803D07F -:10C34000022817D102E0CAE0022000E010200422F7 -:10C350008DF8002072788DF80420801CB1FBF0F27B -:10C36000ADF8062092B242438A4203D10397ADF85A -:10C370000890A7E07AE02078000777D598B2820885 -:10C380008DF800A0ADF80420B0EB820F6ED10297BB -:10C39000ADF8061096E02178C90667D5022D65D361 -:10C3A00081B206208DF80000707802285ED300BFAD -:10C3B000B1FBF0F28DF80400ADF8062092B24243D2 -:10C3C0008A4253D1ADF808907BE0207880064DD5A5 -:10C3D000072003E0207840067FD508208DF8000074 -:10C3E000A088ADF80400ADF80620ADF8081068E0AC -:10C3F0002078000671D50920ADF804208DF80000E2 -:10C40000ADF8061002975DE02188C90565D5022DBB -:10C4100063D381B20A208DF80000707804285CD3C1 -:10C42000C6E72088400558D5012D56D10B208DF840 -:10C430000000A088ADF8040044E021E026E016E00A -:10C44000FFE72088000548D5052D46D30C208DF840 -:10C450000000A088ADF80400B6F803006D1FADF829 -:10C460000850ADF80600ADF80AA02AE035E02088B3 -:10C47000C00432D5012D30D10D208DF8000021E00F -:10C480002088800429D4B6F80100E080A07B000752 -:10C4900023D5032D21D3307800F03F001B2818D07E -:10C4A0000F208DF80000208840F40050A4F8000010 -:10C4B000B6F80100ADF80400ED1EADF80650ADF879 -:10C4C00008B0039769460598F5F7B2FC050008D057 -:10C4D00016E00E208DF80000EAE7072510E0082599 -:10C4E0000EE0307800F03F001B2809D01D2807D04F -:10C4F0000220059908F018F8208800F400502080E8 -:10C50000A07B400708D52046FFF70AFDC00703D1EE -:10C51000A07B20F00400A073284684E61FB5022803 -:10C5200006D101208DF8000088B26946F5F780FC3D -:10C530001FBD0000F8B51D46DDE906470E000AD014 -:10C5400004F0D6FC2346FF1DBCB231462A460094B7 -:10C5500004F0E3F8F8BDD0192246194618F0FAFAAB -:10C560002046F8BD2DE9FF4F8DB09B46DDE91B57F6 -:10C57000DDF87CA00C46082B05D0E06901F002F93B -:10C5800050B11020D2E02888092140F01000288006 -:10C590008AF80010022617E0E16901208871E2693B -:10C5A0004FF420519180E1698872E06942F60101FF -:10C5B0000181E069002181732888112140F0200069 -:10C5C00028808AF80010042638780A900A203870EB -:10C5D0004FF0020904F118004D460C9001F095FB54 -:10C5E000B04681E0BBF1100F0ED1022D0CD0A9EBAB -:10C5F0000800801C80B20221CDE9001005AB524634 -:10C600001E990D98FFF796FFBDF816101A988142F3 -:10C6100003D9F74800790F9004E003D10A9808B1D4 -:10C6200038702FE04FF00201CDE900190DF116032B -:10C6300052461E990D98FFF77DFF1D980088401BFC -:10C64000801B83B2C6F1FF00984200D203461E99B8 -:10C650000BA8D9B15FF00002DDF878C0CDE9032066 -:10C6600009EB060189B2CDE901C10F980090BDF830 -:10C67000161000220D9801F0CBFB387070B1C0B2DB -:10C68000832807D0BDF8160020833AE00AEB0901A1 -:10C690008A19E1E7022011B0BDE8F08FBDF82C0047 -:10C6A000811901F0FF08022D0DD09AF801204245B2 -:10C6B00006D1BDF82010814207D0B8F1FF0F04D099 -:10C6C0009AF801801FE08AF80180C9480068017863 -:10C6D000052902D1BDF81610818009EB08001FFA68 -:10C6E00080F905EB080085B2DDE90C1005AB0F9A67 -:10C6F00001F00EFB28B91D980088411B4145BFF68B -:10C7000071AF022D13D0BBF1100F0CD1A9EB0800B3 -:10C71000801C81B20220CDE9000105AB52461E9972 -:10C720000D98FFF707FF1D98058000203870002046 -:10C73000B1E72DE9F8439C46089E13460027B26BEB -:10C740009AB3491F8CB2F18FA1F57F45FF3D05D00B -:10C750005518AD882944891D8DB200E0002529199E -:10C76000B6F83C800831414520D82A44BCF8011075 -:10C7700022F8021BBCF8031022F8021B984622F88C -:10C78000024B914604F0A2FB4FF00C0C41464A4686 -:10C790002346CDF800C003F08CFFF587B16B002075 -:10C7A0002944A41D2144088003E001E0092700E09A -:10C7B00083273846BDE8F88310B50B88848F9C42E8 -:10C7C0000CD9846BE018048844B1848824F40044B4 -:10C7D000A41D23440B801060002010BD0A2010BD52 -:10C7E0002DE9F0478AB00025904689468246ADF88B -:10C7F000185007274BE0059806888088000446D427 -:10C80000A8F8006007A8019500970295CDE90350AC -:10C810004FF4007300223146504601F0F9FA04004B -:10C820003CD1BDF81800ADF8200005980488818837 -:10C83000B44216D10A0414D401950295039521F44B -:10C8400000410097049541F48043428821465046B8 -:10C8500001F0B4F804000BD10598818841F400413F -:10C86000818005AA08A94846FFF7A6FF0400DCD08E -:10C870000097059802950195039504950188BDF8E8 -:10C880001C300022504601F099F80A2C06D105AA66 -:10C8900006A94846FFF790FF0400ACD0ADF8185049 -:10C8A00004E00598818821F40041818005AA06A949 -:10C8B0004846FFF781FF0028F3D00A2C03D020461A -:10C8C0000AB0BDE8F0870020FAE710B50C46896B86 -:10C8D00086B051B10C218DF80010A18FADF8081071 -:10C8E000A16B01916946FAF734FC00204FF6FF7105 -:10C8F000A063E187A08706B010BD2DE9F0410D4689 -:10C900000746896B0020069E1446002911D0012B92 -:10C910000FD1324629463846FFF762FF002808D17A -:10C92000002C06D0324629463846BDE8F04100F0DA -:10C9300038BFBDE8F0812DE9FC411446DDE9087CF3 -:10C940000E46DDE90A15521DBCF800E092B296458C -:10C9500002D20720BDE8FC81ACF8002017222A7023 -:10C96000A5F80160A5F803300522CDE900423B4659 -:10C970002A46FFF7DFFD0020ECE770B50C461546B0 -:10C980004821204618F087F904F1080044F81C0FEC -:10C9900000204FF6FF71E06161842084A584172098 -:10C9A000E08494F82A0040F00A0084F82A0070BD60 -:10C9B0004FF6FF720A800146032007F0B5BD30B57F -:10C9C00085B00C460546FFF780FFA18E284629B1A9 -:10C9D00001218DF800106946FAF7BBFB0020E062E8 -:10C9E0002063606305B030BDB0F8400070470000C0 -:10C9F0005400002090F84620920703D44088088015 -:10CA00000020F3E70620F1E790F846209207EDD5E5 -:10CA1000A0F84410EAE70146002009880A0700D57B -:10CA2000012011F0F00F01D040F00200CA0501D53D -:10CA300040F004008A0501D540F008004A0501D500 -:10CA400040F010000905D1D540F02000CEE700B538 -:10CA5000034690F84600C00701D0062000BDA3F8A9 -:10CA600042101846FFF7D7FF10F03E0F05D093F89D -:10CA7000460040F0040083F8460013F8460F40F0EB -:10CA800001001870002000BD90F84620520700D524 -:10CA900011B1B0F84200A9E71720A7E710F8462F18 -:10CAA00061F3C3020270A1E72DE9FF4F9BB00E00B6 -:10CAB000DDE92B34DDE92978289D24D02878C107C9 -:10CAC00003D000F03F00192801D9012100E0002126 -:10CAD0002046FFF7D9FFB04215D32878410600F071 -:10CAE0003F010CD41E290CD0218811F47F6F0AD18C -:10CAF0003A8842B1A1F57F42FF3A04D001E0122901 -:10CB000001D1000602D504201FB0C5E5F9491D98E2 -:10CB10004FF0000A08718DF818A08DF83CA00FAAFC -:10CB20000A60ADF81CA0ADF850A02978994601F034 -:10CB30003F02701F5B1C04F1180C4FF0060E4FF003 -:10CB4000040BCDF858C01F2A7ED2DFE802F07D7DAD -:10CB5000107D267DAC7DF47DF37DF27DF17DF47D4D -:10CB6000F07D7D7DEF7DEE7D7D7D7D7DED0094F81A -:10CB70004610B5F80100890701D5032E02D08DF8C3 -:10CB800018B022E34FF40061ADF85010608003212B -:10CB90008DF83C10ADF84000D8E2052EEFD1B5F885 -:10CBA00001002083ADF81C00B5F80310618308B1C3 -:10CBB000884201D901207FE10020A07220814FF638 -:10CBC000FF702084169801F0A0F8052089F8000075 -:10CBD0000220029083460AAB1D9A16991B9801F019 -:10CBE00097F890BB9DF82E00012804D0022089F808 -:10CBF0000100102003E0012089F8010002200590C7 -:10CC0000002203A90BA805F0D0FDE8BB9DF80C009D -:10CC1000059981423DD13A88801CA2EB0B018142EB -:10CC200037DB02990220CDE900010DF12A034A46C3 -:10CC300041461B98FFF77EFC02980BF1020B801C0B -:10CC400080B217AA03A901E0A0E228E002900BA895 -:10CC500005F0ABFD02999DF80C00CDE9000117AB82 -:10CC60004A4641461B98FFF765FC9DF80C100AAB3D -:10CC70000BEB01001FFA80FB02981D9A084480B25A -:10CC8000029016991B9800E003E001F041F800289B -:10CC9000B6D0BBF1020F02D0A7F800B053E20A20D1 -:10CCA0008DF818004FE200210391072EFFF467AFC3 -:10CCB000B5F801002083ADF81C00B5F803206283AD -:10CCC00000283FF477AF90423FF674AF0120A07286 -:10CCD000B5F8050020810020A073E06900F052FD46 -:10CCE00078B9E16901208871E2694FF4205191809F -:10CCF000E1698872E06942F601010181E069002181 -:10CD00008173F01F20841E9860620720608416984B -:10CD100000F0FBFF072089F800000120049002903A -:10CD20000020ADF82A0028E01DE2A3E13AE1EAE0A4 -:10CD300016E2AEE086E049E00298012814D0E069EE -:10CD40008079012803D1BDF82800ADF80E000498C1 -:10CD500003ABCDE900B04A4641461B98FFF7EAFB1A -:10CD60000498001D80B20490BDF82A00ADF80C00B4 -:10CD7000ADF80E00059880B202900AAB1D9A169984 -:10CD80001B9800F0C5FF28B902983988001D05904E -:10CD90008142D1D20298012881D0E06980790128AE -:10CDA00005D0BDF82810A1F57F40FF3803D1BDF8AC -:10CDB0002800ADF80E00049803ABCDE900B04A4658 -:10CDC00041461B98FFF7B6FB0298BBE1072E02D045 -:10CDD000152E7FF4D4AEB5F801102183ADF81C10E8 -:10CDE000B5F80320628300293FF4E4AE91423FF698 -:10CDF000E1AE0121A1724FF0000BA4F808B084F855 -:10CE00000EB0052E07D0C0B2691DE26905F0AEFC78 -:10CE100000287FF444AF4FF6FF70208401A906AAD2 -:10CE200014A8CDF800B081E885032878214600F0E9 -:10CE30003F031D9A1B98FFF795FB8246208BADF8A8 -:10CE40001C0080E10120032EC3D14021ADF8501019 -:10CE5000B5F801102183ADF81C100AAAB8F1000F33 -:10CE600000D00023CDE9020304921D98CDF8048080 -:10CE7000009038880022401E83B21B9800F0C8FF43 -:10CE80008DF8180090BB0B2089F80000BDF8280031 -:10CE900037E04FF0010C052E9BD18020ADF85000FB -:10CEA000B5F801102183B5F803002084ADF81C10FB -:10CEB000B0F5007F03D907208DF8180085E140F414 -:10CEC0007C4222840CA8B8F1000F00D00023CDE9E9 -:10CED0000330CDE9018C1D9800903888401E83B244 -:10CEE0001B9800F095FF8DF8180028B18328A8D171 -:10CEF0000220BDE0540000200D2189F80010BDF88B -:10CF00003000401C1EE1032E04D248067FF537AEE8 -:10CF1000002017E1B5F80110ADF81C102878400684 -:10CF200002D58DF83CE002E007208DF83C004FF080 -:10CF300000080320CDE902081E9BCDF810801D9843 -:10CF40000193A6F1030B00901FFA8BF342461B9846 -:10CF500000F034FD8DF818008DF83C8029784906E2 -:10CF60000DD52088C00506D5208BBDF81C10884241 -:10CF700001D1C4F8248040468DF81880E2E083286F -:10CF800001D14FF0020A4FF48070ADF85000BDF8A7 -:10CF90001C002083A4F820B01E98606203206084E7 -:10CFA0001321CCE0052EFFF4EAADB5F80110ADF881 -:10CFB0001C10A28F62B3A2F57F43FE3B28D008224B -:10CFC0008DF83C204FF0000B0523CDE9023BDDF846 -:10CFD00078C0CDF810B01D9A80B2CDF804C040F4EE -:10CFE00000430092B5F803201B9800F0E7FC8DF891 -:10CFF0003CB04FF400718DF81800ADF85010832844 -:10D0000010D0F8B1A18FA1F57F40FE3807D0DCE049 -:10D010000B228DF83C204FF6FE72A287D2E7A4F8CF -:10D020003CB0D2E000942B4631461E9A1B98FFF785 -:10D0300080FB8DF8180008B183284BD1BDF81C0087 -:10D04000208355E700942B4631461E9A1B98FFF724 -:10D0500070FB8DF81800E8BBE18FA06B0844811DC0 -:10D060008DE882034388828801881B98FFF763FC60 -:10D07000824668E095F80180022E70D15FEA0800D0 -:10D0800002D0B8F1010F6AD109208DF83C0007A841 -:10D0900000908DF840804346002221461B98FFF700 -:10D0A0002CFC8DF842004FF0000B8DF843B050B9C6 -:10D0B000B8F1010F12D0B8F1000F04D1A18FA1F582 -:10D0C0007F40FF380AD0A08F40B18DF83CB04FF4BC -:10D0D000806000E037E0ADF850000DE00FA91B982C -:10D0E000FAF737F882468DF83CB04FF48060ADF81F -:10D0F0005000BAF1020F06D0FC480068C07928B190 -:10D100008DF8180027E0A4F8188044E0BAF1000F69 -:10D1100003D081208DF818003DE007A80090434619 -:10D12000012221461B98FFF7E8FB8DF818002146E5 -:10D130001B98FFF7CAFB9DF8180020B9192189F840 -:10D140000010012038809DF83C0020B10FA91B98E9 -:10D15000F9F7FFFF8246BAF1000F33D01BE018E069 -:10D160008DF818E031E02078000712D5012E10D19B -:10D170000A208DF83C00E088ADF8400003201B99A0 -:10D1800007F0D2F90820ADF85000C1E648067FF557 -:10D19000F6AC4FF0040A2088BDF8501008432080F8 -:10D1A000BDF8500080050BD5A18FA1F57F40FE385A -:10D1B00006D11E98E06228982063A6864FF0030AE5 -:10D1C0005046A1E49DF8180078B1012089F80000CC -:10D1D000297889F80110BDF81C10A9F802109DF8F3 -:10D1E000181089F80410052038802088BDF85010E8 -:10D1F00088432080E4E72DE9FF4F8846087895B002 -:10D20000012181404FF20900249C0140ADF820101B -:10D210002088DDF88890A0F57F424FF0000AFF3AA1 -:10D2200006D039B1000705D5012019B0BDE8F08F4F -:10D230000820FAE7239E4FF0000B0EA886F800B0F6 -:10D2400018995D460988ADF83410A8498DF81CB0CE -:10D25000179A0A718DF838B0086098F80000012814 -:10D260003BD0022809D003286FD1307820F03F004E -:10D270001D303070B8F80400E08098F800100320EA -:10D28000022904D1317821F03F011B31317094F82B -:10D290004610090759D505ABB9F1000F13D000218D -:10D2A00002AA82E80B000720CDE90009BDF834008E -:10D2B000B8F80410C01E83B20022159800F0A8FD33 -:10D2C0000028D1D101E0F11CEAE7B8F80400A6F883 -:10D2D0000100BDF81400C01C04E198F805108DF899 -:10D2E0001C1098F80400012806D04FF4007A022898 -:10D2F0002CD00328B8D16CE12188B8F8080011F4CB -:10D300000061ADF8201020D017281CD3B4F84010CD -:10D31000814218D3B4F84410172901D3814212D1A5 -:10D32000317821F03F01C91C3170A6F801000321BA -:10D33000ADF83410A4F8440094F8460020F0020040 -:10D3400084F8460065E105257EE177E1208808F153 -:10D35000080700F4FE60ADF8200010F0F00F1BD0BD -:10D3600010F0C00F03D03888228B9042EBD199B9CE -:10D37000B878C00710D0B9680720CDE902B1CDF860 -:10D3800004B00090CDF810B0FB88BA8839881598A1 -:10D3900000F014FB0028D6D12398BDF82010401CC3 -:10D3A00080294ED006DC10290DD020290BD0402931 -:10D3B00087D124E0B1F5807F6ED051457ED0B1F5A4 -:10D3C000806F97D1DEE0C80601D5082000E010206C -:10D3D00082460DA907AA0520CDE902218DF8380063 -:10D3E000ADF83CB0CDE9049608A93888CDE9000134 -:10D3F0005346072221461598FFF7B4F8A8E09DF898 -:10D400001C2001214FF00A0A002A9BD105ABB9F17B -:10D41000000F00D00020CDE902100720CDE900095F -:10D42000BDF834000493401E83B2218B002215986E -:10D4300000F0EEFC8DF81C000B203070BDF81400DD -:10D4400020E09DF81C2001214FF00C0A002A22D177 -:10D4500013ABB9F1000F00D00020CDE90210072076 -:10D46000CDE900090493BDF83400228C401E83B23C -:10D47000218B159800F0CCFC8DF81C000D2030702D -:10D48000BDF84C00401CADF8340005208DF8380084 -:10D49000208BADF83C00BCE03888218B88427FF4BB -:10D4A00052AF9DF81C004FF0120A00281CD1606A90 -:10D4B000A8B1B878C0073FF446AF00E018E0BA68FA -:10D4C0000720CDE902B2CDF804B00090CDF810B03D -:10D4D000FB88BA88159800F071FA8DF81C001320AB -:10D4E00030700120ADF8340093E0000054000020BB -:10D4F0003988208B8142D2D19DF81C004FF0160A4A -:10D500000028A06B08D0E0B34FF6FF7000215F4603 -:10D51000ADF808B0019027E068B1B978C907BED16D -:10D52000E18F0DAB0844821D03968DE80C02438801 -:10D530008288018809E0B878C007BCD0BA680DAB12 -:10D5400003968DE80C02BB88FA881598FFF7F3F96B -:10D5500005005ED0072D72D076E0019005AA02A9E1 -:10D560002046FFF729F90146E28FBDF80800824204 -:10D5700001D00029F1D0E08FA16B08440780019809 -:10D58000E08746E09DF81C004FF0180A40B1208B60 -:10D59000C8B13888208321461598FFF796F938E0FE -:10D5A00004F118000090237E012221461598FFF710 -:10D5B000A4F98DF81C000028EDD11920307001204D -:10D5C000ADF83400E7E7052521461598FFF77DF90A -:10D5D0003AE0208800F40070ADF8200050452DD1CD -:10D5E000A08FA0F57F41FE3901D006252CE0D8F8A8 -:10D5F00008004FF0160A48B1A063B8F80C10A187D4 -:10D600004FF6FF71E187A0F800B002E04FF6FF701F -:10D61000A087BDF8200030F47F611AD07823002263 -:10D620000320159906F0D6FE98F800002071208896 -:10D63000BDF82010084320800EE000E00725208878 -:10D64000BDF8201088432080208810F47F6F1CD004 -:10D650003AE02188814321809DF8380020B10EA94D -:10D660001598F9F776FD05469DF81C000028EBD0CB -:10D6700086F801A001203070208B70809DF81C007E -:10D6800030710520ADF83400DEE7A18EE1B11898C5 -:10D690000DAB0088ADF834002398CDE90304CDE943 -:10D6A0000139206B0090E36A179A1598FFF7FCF98F -:10D6B000054601208DF838000EA91598F9F749FDA7 -:10D6C00000B10546A4F834B094F8460040070AD5E6 -:10D6D0002046FFF7A0F910F03E0F04D114F8460FD2 -:10D6E00020F0040020701898BDF8341001802846FE -:10D6F0009BE500B585B0032806D102208DF8000017 -:10D7000088B26946F9F725FD05B000BD10B5384C63 -:10D710000B782268012B02D0022B2AD111E013785A -:10D720000BB1052B01D10423137023688A889A80DA -:10D730002268CB88D38022680B8913814989518163 -:10D740000DE08B8893802268CB88D38022680B8978 -:10D7500013814B8953818B899381096911612168F8 -:10D76000F9F7F7FC226800210228117003D0002885 -:10D7700000D0812010BD832010BD806B002800D018 -:10D78000012070478178012909D10088B0F5205F18 -:10D7900003D042F60101884201D1002070470720E2 -:10D7A0007047F0B587B0002415460E460746ADF821 -:10D7B000144010E0069801882980811DCDE90241BE -:10D7C0000721019404940091838842880188384697 -:10D7D00000F0F4F830B906AA05A93046FEF7ECFFD0 -:10D7E0000028E7D00A2800D1002007B0F0BD0000D3 -:10D7F0005400002010B58B7883B102789A4205D18D -:10D800000B885BB102E08B79091D4BB18B789A4292 -:10D81000F9D1B0F801300C88A342F4D1002010BD3A -:10D82000812010BD072826D012B1012A27D103E09C -:10D83000497801F0070102E04978C1F3C2010529E6 -:10D840001DD2DFE801F00318080C12000AB1032012 -:10D8500070470220704704280DD250B10DE0052812 -:10D8600009D2801E022808D303E0062803D003282B -:10D8700003D005207047002070470F20704781209B -:10D880007047C0B282060BD4000607D5FE48807AE6 -:10D890004143C01D01EBD00080B27047084670477D -:10D8A0000020704770B513880B800B781C0625D5B7 -:10D8B000F54CA47A844204D843F01000087000208C -:10D8C00070BD956800F0070605EBD0052D78F54092 -:10D8D00065F304130B701378D17803F0030341EA66 -:10D8E000032140F20123B1FBF3F503FB151192680C -:10D8F000E41D00FB012000EBD40070BD906870BDFA -:10D9000037B51446BDF8041011809DF804100A06BE -:10D910001ED5C1F30013DC49A568897A814208D875 -:10D92000FE2811D1C91DC9085A42284617F089F9A5 -:10D930000AE005EBD00100F00702012508789540C8 -:10D94000A843934018430870207820F010002070FE -:10D950003EBD2DE9F0410746C81C0E4620F00300ED -:10D96000B04202D08620BDE8F081C74D0020344689 -:10D970002E60AF802881AA72E8801AE0E988491CED -:10D98000E980810614D4E17800F0030041EA002028 -:10D9900040F20121B0FBF1F201FB12012068FFF718 -:10D9A00070FF2989084480B22881381A3044A06069 -:10D9B0000C3420784107E1D40020D4E72DE9FF4F53 -:10D9C00089B01646DDE9168A0F46994623F440458C -:10D9D000084600F00DFB04000FD0099803F00AF987 -:10D9E0000290207800060AD5A748817A02988142E1 -:10D9F00005D887200DB0BDE8F08F0120FAE7224658 -:10DA000001A90298FFF74EFF834600208DF80C0015 -:10DA10004046B8F1070F1AD001222146FFF702FF56 -:10DA20000028E7D12078400611D502208DF80C009F -:10DA3000ADF81070BDF80400ADF81200ADF8146038 -:10DA40001898ADF81650CDF81CA0ADF818005FEA94 -:10DA5000094004D500252E46A84601270CE0217870 -:10DA6000E07801F0030140EA012040F20121B0FB1F -:10DA7000F1F2804601FB12875FEA494009D5B845BB -:10DA800007D1A178207901F0030140EA0120B042DA -:10DA900001D3BE4201D90720ACE7A8191FFA80F9CB -:10DAA000B94501D90D20A5E79DF80C0028B103A9BF -:10DAB0000998F9F74CFB00289CD1B84507D1A0780C -:10DAC0004FEA192161F30100A07084F804901A98BC -:10DAD00000B10580199850EA0A0027D0199830B192 -:10DAE0000BEB06002A46199917F034F80EE00BEB01 -:10DAF00006085746189E099803F0E8F92B46F61DCC -:10DB0000B5B239464246009502F0D3FD224601A93E -:10DB10000298FFF7C7FE9DF80400224620F010008F -:10DB20008DF80400DDE90110FFF7EAFE002061E74F -:10DB30002DE9FF4FDFF8509182461746B9F80610DD -:10DB4000D9F8000001EB410100EB810440F2012013 -:10DB5000B2FBF0F185B000FB11764D46DDF84C804C -:10DB600031460698FFF78DFE29682A898B46611A8F -:10DB70000C3101441144AB8889B28B4202D8842015 -:10DB800009B038E70699CDB2290603D5A90601D513 -:10DB90000620F5E7B9F806C00CF1010C1FFA8CFC61 -:10DBA000A9F806C0149909B1A1F800C0A90602D5C8 -:10DBB000C4F8088007E0104480B2A9F80800191AD8 -:10DBC00001EB0B00A0602246FE200699FFF798FEAD -:10DBD000E77026712078390A61F30100320AA178D2 -:10DBE00040F0040062F30101A17020709AF8020075 -:10DBF0006071BAF80000E08000262673280602D57E -:10DC000099F80A7000E00127A80601D54FF0000836 -:10DC10004D4600244FF007090FE0CDE90268019658 -:10DC2000CDF800900496E9882046129B089AFFF7E9 -:10DC3000C5FE0028A4D1641CE4B2BC42EDD3002090 -:10DC40009EE72DE9F047804600F0D2F9070005D0A5 -:10DC5000002644460C4D40F2012919E00120BDE8A0 -:10DC6000F087204600F0C4F90278C17802F0030280 -:10DC700041EA0222B2FBF9F309FB13210068FFF726 -:10DC800000FE304486B201E0E8050020641CA4B226 -:10DC9000E988601E8142E4DCA8F10100E88028895F -:10DCA000801B288100203870D9E710B5144631B1A7 -:10DCB000491E218002F09EFFA070002010BD0120AF -:10DCC00010BD10B5D24904460088CA88904201D3DD -:10DCD0000A2010BD096800EB400001EB800250797A -:10DCE000A072D08820819178107901F0030140EA78 -:10DCF0000120A081A078E11CFFF7D4FD20612088DD -:10DD0000401C2080E080002010BD0121018270476E -:10DD10002DE9FF4F85B04FF6FF788246A3F80080CB -:10DD200048681F460D4680788DF8060048680088D0 -:10DD3000ADF8040000208DF80A00088A0C88A04283 -:10DD400000D304462C8241E0288A401C2882701DA2 -:10DD50006968FFF74FFDB8BB3988414501D1601EA6 -:10DD600038806888A04236D3B178307901F0030159 -:10DD700040EA012901A9701DFFF73CFD20BB29895C -:10DD800041452CD0002231460798FFF74BFDD8B90A -:10DD90002989494518D1E9680391B5F80AC0D6F830 -:10DDA00008B05046CDF800C003F090F8DDF800C090 -:10DDB0005A460CF1070C1FFA8CFC4B460399CDF820 -:10DDC00000C002F040FC50B1641CA4B2204600F038 -:10DDD0000FF90600B8D1641E2C820A20D0E67C80A0 -:10DDE0007079B871F088B8803178F07801F003016B -:10DDF00040EA01207881A7F80C90504602F0FAFE24 -:10DE0000324607F10801FFF74DFD38610020B7E603 -:10DE10002DE9FF4F87B081461C469246DDF860B081 -:10DE2000DDF85480089800F0E3F805000CD048466F -:10DE300002F0E0FE2978090608D57549897A814201 -:10DE400004D887200BB0D6E50120FBE7CAF309060A -:10DE50002A4601A9FFF726FD0746149807281CD07B -:10DE600000222946FFF7DEFC0028EBD12878400687 -:10DE700013D501208DF808000898ADF80C00BDF806 -:10DE80000400ADF80E00ADF81060ADF8124002A924 -:10DE90004846F9F75CF90028D4D12978E87801F0F0 -:10DEA000030140EA0121AA78287902F0030240EA3E -:10DEB0000220564507D0B1F5007F04D9611E81428A -:10DEC00001DD0B20BEE7864201D90720BAE7801B9F -:10DED00085B2A54200D92546BBF1000F01D0ABF8B1 -:10DEE0000050179818B1B9192A4616F033FEB8F148 -:10DEF000000F0DD03E4448464446169F02F0F8FFFE -:10DF00002146FF1DBCB232462B46009402F005FCB0 -:10DF1000002097E72DE9F04107461D4616460846C2 -:10DF200000F066F804000BD0384602F063FE21785A -:10DF3000090607D53649897A814203D8872012E538 -:10DF4000012010E522463146FFF7ACFC65B121788F -:10DF5000E07801F0030140EA0120B0F5007F01D82C -:10DF6000012000E0002028700020FCE42DE9F041B1 -:10DF700007461D461646084600F03AF804000BD046 -:10DF8000384602F037FE2178090607D52049897AFC -:10DF9000814203D88720E6E40120E4E422463146AA -:10DFA000FFF7AEFCFF2D14D02178E07801F00302DA -:10DFB00040EA022040F20122B0FBF2F302FB130020 -:10DFC00015B900F2012080B2E070000A60F301018F -:10DFD00021700020C7E410B50C4600F009F828B104 -:10DFE000C18821804079A070002010BD012010BDA3 -:10DFF0000749CA88824209D340B1096800EB400052 -:10E000006FF00B0202EB800008447047002070475D -:10E01000E805002070B50346002002466FF02F058A -:10E020000EE09C5CA4F130060A2E02D34FF0FF30C4 -:10E0300070BD00EB800005EB4000521C2044D2B2C2 -:10E040008A42EED370BD30B50A240AE0B0FBF4F387 -:10E0500004FB13008D18303005F8010C521E1846D1 -:10E06000D2B2002AF2D130BD30B500234FF6FF7591 -:10E0700010E0040A44EA002084B2C85C6040C0F3A7 -:10E080000314604005EA00344440E0B25B1C84EABB -:10E0900040109BB29342ECD330BD000010B582B06B -:10E0A000694601F07CFF002818BFFFDF9DF80000E3 -:10E0B000002448B1019890F8DD0028B1019880F85B -:10E0C000DD4001980AF0F1FAF8488068A0F8D240E3 -:10E0D00002B010BD2DE9F04704460D46062002F0BF -:10E0E0006BFD0646072002F067FD304400F0FF0894 -:10E0F000002718EB050618BF4FF000091DD0208837 -:10E10000401C80B22080B04228BFA4F8009025882F -:10E11000454501D3B54209D30621284602F0A4FDA6 -:10E1200020B90721284602F09FFD10B10020BDE86C -:10E13000F087781CC7B2BE42E1D84FF6FF7020804E -:10E140001220BDE8F08770B582B007F057FC0DF0E3 -:10E150007FFBD74C4FF6FF7600256683A683D5A1BB -:10E160002570D1E90001CDE9000165706946A01C68 -:10E1700016F0A6FEA11C601C14F073FC25721B2077 -:10E1800060814FF4A471A181E08121820321A174F7 -:10E190000422E274A082E082A4F13E002183057093 -:10E1A0004680C6480570A4F110000570468002B094 -:10E1B00070BDF8B5BD4D17460E466860297007F072 -:10E1C00097FB4FF6FF70ADF8000000216846FFF79F -:10E1D00081FFA0B90621BDF8000002F057FD0446FA -:10E1E0000721BDF8000002F051FD002C1CBF0028E3 -:10E1F000FFDF00216846FFF76DFF0028EAD0FFF738 -:10E20000A2FF287812F03CFC10F034F829786868F6 -:10E2100014F039FB28780CF01FFD30460AF051F954 -:10E2200007F004FD297868680BF094FB39462878DC -:10E2300015F0F5F9BDE8F8400DF00ABB10B5012462 -:10E24000002A1CBF002010BD002908BF022105D0F4 -:10E25000012918BF002401D0204610BD0FF02EF96F -:10E26000FAE72DE9F04F8BB0040008BFFFDF022171 -:10E270008F4E06F11C00FFF72DFF002818BFFFDFAF -:10E28000B6F81CA0062002F097FC0546072002F015 -:10E2900093FC284400F0FF0808F1010000F0FF099A -:10E2A0004FF0000BB78B474525D120460FF0C8FA39 -:10E2B000002840F0CE803078002800F0CE8084F82E -:10E2C00001B014202070C4F804B0C4F808B0C4F839 -:10E2D0000CB0C4F810B0C4F814B0C4F818B0C4F846 -:10E2E0001CB00220C4F820B0207186F800B00BB03A -:10E2F0000120BDE8F08F4F4520D1204607F030FCCB -:10E3000000287DD008F032F8002859D0207817284E -:10E3100056D12079002853D0E088072102F0A4FCD0 -:10E32000050008BFFFDF288807F0FBFAE088072117 -:10E3300002F0ACFC002818BFFFDF8AE004A93846D1 -:10E3400001F02DFE00285BD19DF8100048B107F0C8 -:10E3500062FCB84254D0214638460BF004FA80B330 -:10E3600077E00FF000FBB84277D02146384614F032 -:10E37000ABF900286DD1059800F1580590F8D00050 -:10E3800018B9E87E08B1012000E00020079095F858 -:10E39000370000281CBF95F8380010F0020F1CD081 -:10E3A00084F801B00120207084F804B0E78095F86B -:10E3B00039002072688F6081A88FA08185F837B0FE -:10E3C00047E0FFE7059800F1580590F80C01002898 -:10E3D000DBD1E87E0028D8D0D5E7384602F088FDAA -:10E3E0000290002808BFFFDF029801F097FF50B1AC -:10E3F00084F801B00F212170E7802081012000E026 -:10E400002BE0207125E0384602F060FD02900028E4 -:10E4100008BFFFDF079800B3029801F0D6FFE0B114 -:10E420009DF8100038B90598D0F8F8004188B94235 -:10E4300008BF80F800B0384607F073FA84F801B0DE -:10E440000C20207084F804B0E780287F207285F8C3 -:10E450001BB00BB00120BDE8F08F022106F11C00BB -:10E46000FFF738FE18B9B08B50457FF41BAF0BB0E7 -:10E470002046BDE8F04F15F018B910B513F08CF830 -:10E48000042803D013F088F8052802D110F00FF902 -:10E4900028B90AF0EBFA20B107F08AFD08B10C2088 -:10E4A00010BD0DF021FA002010BD00005C0000201E -:10E4B00032060020FFFFFFFF1F0000006800002061 -:10E4C00010B50446007800281EBF0128122010BD98 -:10E4D00013F062F8042806D013F05EF8052802D085 -:10E4E0000AF0C4FA28B10DF04EFB00281CBF0C2026 -:10E4F00010BD2078002816BF02280020012004F15A -:10E500001703E21D611CBDE810400DF045BA10B5BF -:10E510000446007800281EBF0128122010BD13F009 -:10E520003BF8042803D013F037F8052802D110F087 -:10E53000BEF828B90AF09AFA20B107F039FD08B1FF -:10E540000C2010BD2078002816BF022800200120D2 -:10E55000611C0DF08FF9002814BF0020072010BDAA -:10E5600010B50DF013FB002814BF0020302010BDA3 -:10E5700010B5044613F010F8042806D013F00CF878 -:10E58000052802D00AF072FA08B10C2010BD20460E -:10E590000DF0F6FA002010BD10B512F0FDFF0428B2 -:10E5A00006D012F0F9FF052802D00AF05FFA28B170 -:10E5B0000DF0E9FA00281CBF0C2010BD0DF045FA43 -:10E5C000002010BDFF2181704FF6FF718180FE4950 -:10E5D00049680A7882718A880281498841810121CB -:10E5E00041700020704710B5002482B0022A18D074 -:10E5F00014DC12F10C0F14D008DC12F1280F1CBF30 -:10E6000012F1140F12F1100F11D10AE012F1080FDC -:10E610001CBF12F1040F002A09D102E0D31E052B02 -:10E6200005D8012807D0022809D003280BD01224CE -:10E6300002B0204610BD104607F093FEF8E71046E2 -:10E640000FF0D4FDF4E708461446694601F0A7FC34 -:10E65000002818BF0224EBD19DF80000019880F833 -:10E6600057400024E4E710B5134601220EF029F9C3 -:10E67000002010BD10B5044612F08EFF052804BF1F -:10E680000C2010BD204612F0E9F9002010BD10B595 -:10E69000044612F081FF042806D012F07DFF052801 -:10E6A00002D00AF0E3F908B10C2010BD2146002089 -:10E6B00007F0A5F9002010BD10B5044612F078FA55 -:10E6C00050B10AF0C6F938B1207809F01EFF207861 -:10E6D00010F026F8002010BD0C2010BD10B5044627 -:10E6E00012F05AFF042806D012F056FF052802D077 -:10E6F0000AF0BCF908B10C2010BD2146012007F03A -:10E700007EF9002010BD38B504464FF6FF70ADF815 -:10E710000000A079E179884213D021791F299CBF9C -:10E7200061791F290DD80022114615F0B1FB40B9BF -:10E730000022E079114615F0ABFB10B9207A0728CA -:10E7400001D9122038BD0AF091F960B912F024FF06 -:10E7500048B900216846FFF7BDFC20B1204606F00D -:10E760007CF9002038BD0C2038BD70B50446807897 -:10E77000002582B01A2825D00EDC162844D2DFE806 -:10E7800000F0434343434321434343434343434311 -:10E7900043434343432121212A2835D00BDCA0F1F8 -:10E7A0001E000C2830D2DFE800F02F2F2F2F2F2F44 -:10E7B0002F2F2F2F2F0D3A38042825D2DFE800F015 -:10E7C000240224022088B0F5706F1DD2012669460C -:10E7D00001F0E5FB00281EBF022002B070BD9DF8CD -:10E7E0000000002801980BBF00F1F40100F5B8719A -:10E7F00000F1F50300F27113024612D192F8D00035 -:10E8000092F8732052B903E002B04FF0120070BDCD -:10E81000002818BF042801D0087868B102B00C2085 -:10E8200070BD92F80C0192F87320002AF6D10028EE -:10E8300018BF0428F0D1F1E70E70A07818709DF889 -:10E84000000048B1019890F8DD0028B1019880F8E7 -:10E85000DD50019809F029FF02B0002070BDF0B52D -:10E8600083B00C46694601F09AFB28B1204616F0A9 -:10E8700011FB03B00220F0BD0198002700F15805FC -:10E8800000F1080685F840703146204616F018FB66 -:10E8900095F840000028F5D103B0F0BD2DE9F04116 -:10E8A000044691F8550091F856300D4610F00C0FC3 -:10E8B0004FF0000608BF00232189A0880EF068F9F8 -:10E8C000696A814228BFBDE8F081401A401C4108B6 -:10E8D000A0886FF00E07401A80B2A08022896FF0E6 -:10E8E0000D0C511A8BB2238195F85410628811F0E7 -:10E8F0000C0F28D0B0F5747F38BF304606D350389F -:10E90000C11700EB91600CEBA01080B2824238BFBF -:10E910001046608095F85510E08811F00C0F1BD060 -:10E92000B3F5747F38BF324607D3A3F15001CA173D -:10E9300001EB92610CEBA1118AB2904228BF104604 -:10E94000E080BDE8F08102291ABF0CEBD00080B254 -:10E9500007EB9000DAD1D8E702291ABF0CEBD301FC -:10E960008AB207EB9301E8D1E6E7F0B587B00C4631 -:10E97000054604A901F013FB00281CBF07B0F0BD39 -:10E980009DF81000002814BF002201220599B1F85B -:10E990004A30FB2B28BFFB23B1F84CC0BCF1FB0F66 -:10E9A00028BF4FF0FB0C094FD7E90006BF68009065 -:10E9B00001960297ADF80230ADF806C06846FFF741 -:10E9C0006DFF658004E000005C000020E450020060 -:10E9D000BDF80400E080BDF808006081BDF80200C9 -:10E9E000A080BDF80600208107B00020F0BD2DE911 -:10E9F000F04788B004460088694601F0D0FA070065 -:10EA00001CBF08B0BDE8F087B4F806C02289ACF19D -:10EA10001B011220E12924BF08B0BDE8F087B2F540 -:10EA2000A47F3CBF08B0BDE8F08744F29025AA421D -:10EA300084BF08B0BDE8F08700266388A188A3F1F1 -:10EA40001B08B8F1E10F24BF08B0BDE8F087B1F5AD -:10EA5000A47F27BF8846454508B0BDE8F087112050 -:10EA6000BCF1FB0F92BFB2F5296F08B0BDE8F0878B -:10EA7000FB2B92BFB1F5296F08B0BDE8F087208865 -:10EA800006A901F08CFA002818BFFFDF35D19DF8E8 -:10EA9000180000280CBF012200220799B1F84A0093 -:10EAA000FB2828BFFB20B1F84C30FB2B28BFFB23F1 -:10EAB000DFF834AADAF800C0DAF80490DAF808A02F -:10EAC000CDF808C0CDF80C90CDF810A0ADF80A0034 -:10EAD000ADF80E3002A8FFF7E1FEBDF80C0060F3C0 -:10EAE0001F45BDF8100060F31F48BDF80A0060F331 -:10EAF0000F05BDF80E0060F30F0862881FFA88F159 -:10EB0000092091423CBF08B0BDE8F087A9B2E28875 -:10EB100091423CBF08B0BDE8F0874FEA1841A28897 -:10EB2000238901EB15411A4491423CBF08B0BDE86E -:10EB3000F0879DF800004FF001090028019840F689 -:10EB4000480808D000F5CD7580F89B91019890F8A1 -:10EB5000DE0140B307E000F5827580F80591019869 -:10EB600090F8280108B13A2718E0E08868806088AA -:10EB7000E8802089A880A088288101222846019960 -:10EB8000FFF78CFEA888404528BF40F64800A880C3 -:10EB9000288940451DD2288185F800906E7008B004 -:10EBA0003846BDE8F087E08868806088E880208982 -:10EBB000A880A0882881002228460199FFF76EFED0 -:10EBC000A888404528BF40F64800A88028894045CD -:10EBD000E1D340F64800DEE709E710B5044612F03D -:10EBE000DBFC042806D012F0D7FC052802D009F07F -:10EBF0003DFF28B10CF0C7FF00281CBF0C2010BD42 -:10EC00002078002816BF022800200120E279611C2C -:10EC10000DF03DF9002814BF0020022010BD2DE9A1 -:10EC2000F04383B006460088694601F0B8F9070052 -:10EC30001CBF03B0BDE8F083B088002818BF0128CE -:10EC400005D002281EBF122003B0BDE8F083E946BC -:10EC5000B17800290CBF07250D46F07800280CBFBD -:10EC60000724044615F0040F16BF002900210121D6 -:10EC700014F0040F16BF00280020012001424FF0BD -:10EC800009080AD001221146484601F0A0F90028DF -:10EC900038D003B04046BDE8F08381B100220121A5 -:10ECA000484601F094F90028F3D114F0040F29D05C -:10ECB00001221146484601F08AF918B343E080B1B9 -:10ECC00001220021484601F082F90028E1D115F027 -:10ECD000040F17D001221146484601F078F988B197 -:10ECE00025E015F0040F04F0040023D0C0B1012288 -:10ECF0001146484601F06BF900281CBF25F00405B9 -:10ED000024F0040400219DF800200120002A019A2B -:10ED10001CD082F8A501019A92F8F221BAB33FE023 -:10ED200000220121484601F052F90028EAD025F0DE -:10ED30000405E7E70028E5D001220021484601F05C -:10ED400046F90028DED024F00404DBE782F80F0146 -:10ED5000019A92F834213AB9019A92F80E211AB91F -:10ED6000019A92F87D200AB13A270CE0019A82F8C4 -:10ED70000E01019880F81051019880F81141019A14 -:10ED8000B088A2F81201019880F80F111AE0FFE78D -:10ED9000019A92F8A4211AB9019A92F87D200AB139 -:10EDA0003A270CE0019A82F8A401019880F8A65154 -:10EDB000019880F8A741019AB088A2F8A8010198AB -:10EDC00080F8A51103B03846BDE8F083817831F0B2 -:10EDD000070107BFC17831F00701122070471EE715 -:10EDE00002781221012A18BF002A05D0022A18BF72 -:10EDF000032A01D0084670474278002A18BF012A2A -:10EE000003D0022A18BF032AF4D1C27B12B9827838 -:10EE1000012AEFD1837833F00502EBD113F0050F0F -:10EE2000E8D030B4C278C488B0F80AC0002A18BF4D -:10EE3000012A04D1042C28BFBCF1040F02D230BC3B -:10EE400008467047052B07D0827B002AF7D0072A97 -:10EE5000F5D830BC01F0D6B80279B0F808C0838983 -:10EE6000002A18BF012AEAD1BCF1040F28BF042BE5 -:10EE7000E5D3E9E710B5044602781220012A0FD045 -:10EE8000002A18BF10BD012A26D012F085FB0528E4 -:10EE900004D011F01AFD002808BF10BD0C2010BDD1 -:10EEA0006178002918BF012906D0022918BF10BDBA -:10EEB000A188002908BF10BD6388002B1CBFA18852 -:10EEC0000029E0D003EB83035B0001EB8101B3EB8E -:10EED000012F28BF10BDD6E70FF015FB002804BF97 -:10EEE000122010BD0FF035FB00200FF0CEFB0028E4 -:10EEF00018BF10BD60780FF0BAFB002818BF10BD16 -:10EF0000A1886088BDE8104011F0A0BE427A12F0DE -:10EF1000070F0FD032F007030CD1012A18BF022AC5 -:10EF200003D0042A1CBF1120704790F83A301BB957 -:10EF3000012A01D0122070472DE9F00F4FF0000C8C -:10EF400012F0010F40F6774640F67B4337D069B1A7 -:10EF50004489B0F810C0271F43F6FD75AF423CBF8F -:10EF6000ACF10407AF4226D2644524D3C78AB0F877 -:10EF70001CC0458C048DB0F82E80B0F83490A7F1F9 -:10EF8000060A9A453CBFACF1060A9A4513D267457A -:10EF900098BFB5F5FA7F3CBFA4F10A07B7420AD281 -:10EFA0006D1C05FB0CFCBCEB840F04DAC84598BF54 -:10EFB0004FF0010C03D9BDE8F00F3020704712F07C -:10EFC000020F27D000EB4C04B4F81690A58BB4F8D0 -:10EFD0002280278DB4F82EA0A48EA9F1060B5B45E4 -:10EFE00084BFA5F1060B5B45E5D9A94598BFB8F5E7 -:10EFF000FA7F3CBFA7F10A09B145DCD208F101084C -:10F0000008FB05F5B5EB870FD5DAA24598BF0CF1E3 -:10F01000010CD0D812F0040F22D000EB4C02D78A9A -:10F02000B2F81CC0558C148DB2F82E80928EA7F1C8 -:10F0300006094B4584BFACF106094B45BBD9674572 -:10F0400098BFB5F5FA7F3CBFA4F10A03B342B2D230 -:10F050006B1C03FB0CF3B3EB840FACDA9045AAD81E -:10F0600002782AB1012A13D0BDE8F00F12207047B0 -:10F070000029817808D0002918BF012908D0022969 -:10F0800018BF032904D0EFE7002918BF0129EBD1ED -:10F090004078002818BF012803D0022818BF032891 -:10F0A000E2D1BDE8F00F0020704700212EE7017883 -:10F0B00011F0010F02D0406814F0CABA14F097BAE8 -:10F0C0002DE9F04F91B00D460246AFF61841D1E957 -:10F0D0000001CDE90E0111462846FFF717FF060093 -:10F0E0001CBF11B0BDE8F08F12F056FA04280CD006 -:10F0F00012F052FA052808D0FC4F387828B90EF0E3 -:10F1000032FCA0F57F41FF3903D011B00C20BDE8DF -:10F11000F08FF7480B90F7480C90F7480D900BAA2A -:10F12000062110A801F06EFD040002BF092011B0F5 -:10F13000BDE8F08F03210DF02EF9EC48818AA4F888 -:10F140004A10C28AA4F84C20C37C0093837C208898 -:10F1500001F045FE002818BFFFDF208806F0E0FB25 -:10F16000278804F10E094FF0000B4FF00A0A042122 -:10F17000484604F000FF48460DF0DFFA062001F093 -:10F180001BFD80461DE005A9062001F0F6FC05A840 -:10F1900001F0D1FC5FEA000B11D100BFBDF81800EF -:10F1A000B84206D00798042249460E3015F0A6FC56 -:10F1B00070B105A801F0BFFC5FEA000BEED0A8F12A -:10F1C0000108B8F1000F07DDBBF1000FDBD007E04D -:10F1D00048460DF0BBFAF2E7BBF1000F08BFFFDFB6 -:10F1E000D9F800000DF0CDFABAF1010A01D00028DB -:10F1F000BDD0C2A004F1120700680190032101A84C -:10F2000004F090FE002001A90A5C3A54401CC0B2F0 -:10F210000328F9D3A88B6080688CA080288DE080BB -:10F22000687A10F0040F18BF08277CD0DFF8BC8282 -:10F230003A461146B8F8180011F071FD0146A06277 -:10F24000204611F0AFFD17F00C0F09D001231A462C -:10F25000214600200DF0A5FC616A884288BF09267E -:10F260004FF0000984F85E9084F85F90A878002839 -:10F2700016BF0228002001206076D5F80300C4F8EC -:10F280001A00B5F80700E0830EA904F1080015F094 -:10F2900017FE4FF0010A84F800A1CDF81CA0B4F8C5 -:10F2A0004C0004F58277FB2828BFFB20B8F80A1031 -:10F2B000814238BF084694F855104FF4747C11F021 -:10F2C0000C0F1CBF0CEB80118AB26BD0B8F80C107D -:10F2D000914238BF0A46B4F84A10FB2928BFFB21E7 -:10F2E000B8F80E308B4238BF194694F854B01BF072 -:10F2F0000C0F1CBF0CEB81139BB25BD0B8F810C095 -:10F300009C4538BF63461B2918BFB3F5A47F5AD06C -:10F31000F8803A817980BB8021463846079AFFF70A -:10F32000BDFAB88800E031E040F64801884228BFC5 -:10F3300040F64800B8803889884228BF40F6480027 -:10F34000388187F800A000BF8DF800900121684641 -:10F3500004F0E8FD9DF8000000F00701C0F3C102D1 -:10F360001144C0F3401008448DF80000401D207681 -:10F3700009283CBF08302076002120460DF00BF80C -:10F3800068780FF0CBF8002E74D122E010F0010F56 -:10F3900018BF01277FF44AAF10F0020F14BF0227F5 -:10F3A000002743E7022907BF81003C31C1007031CB -:10F3B0008AB28BE7BBF1020F07BF8B003C33CB0057 -:10F3C00070339BB29AE71B2818BFB2F5A47F9FD178 -:10F3D000BAE7A9782878EA1C0FF073F8002808BF6C -:10F3E000122647D00FF0B5F8A9782878EA1C0FF05C -:10F3F00018F906003ED1687A10F0040F14BF0820F7 -:10F4000001200FF053F8060034D1214603200FF0FD -:10F4100032F906002ED1697A8DF80010697A11F060 -:10F42000010F06D06889ADF80200288AADF8040003 -:10F430000120697A11F0020F18BF401C11F0040F6F -:10F4400007D005EB40004189ADF80610008AADF801 -:10F450000800684611F0B9FB064695F83A00002806 -:10F4600018BF01200FF028F826B9204611F047FBFD -:10F47000060009D0208806F054FA2088062101F001 -:10F4800005FC002818BFFFDF304611B0BDE8F08F43 -:10F490000146002014E638B5144C207870B912F0FB -:10F4A0007BF8052805D00EF05EFAA0F57F41FF3904 -:10F4B00004D0684611F005FC10B113E00C2038BDF3 -:10F4C0000098008806F02DFA00980621008801F0C7 -:10F4D000DDFB002818BFFFDF0120207008480078FE -:10F4E000FCF788FC002038BDE45002003206002002 -:10F4F000F4050020680000202206002011223300BD -:10F500005C00002070B4B0F802C08188C388028912 -:10F5100044898089ACF1060640F67B45AE423CBF8B -:10F520008E1FAE4214D28C4598BFB3F5FA7F3EBF12 -:10F53000A2F10A0CFE4D15EB0C0509D25B1C5943D8 -:10F54000B1EB820F04DA84429EBF002070BC70478A -:10F55000302070BC70472DE9F047B0F802C0044677 -:10F560008188C388028947898689ACF1060940F6FB -:10F570007B4830200025C1453ABFA1F10609C145AD -:10F58000BDE8F0878C4598BFB3F5FA7F3DBFA2F187 -:10F590000A0CDFF89C8318EB0C08BDE8F0875B1CB5 -:10F5A0005943B1EB820FA8BFBDE8F087B74288BFCF -:10F5B000BDE8F0872088062101F056FB68B190F87D -:10F5C000D01090F8732042B9002918BF042904D044 -:10F5D000D0F8F8100A781AB106E00220BDE8F087EA -:10F5E000D0F84421127812B13A20BDE8F087052204 -:10F5F0008A71D0F8F8100D81D0F8F820A1885181D7 -:10F60000D0F8F820E1889181D0F8F8202189D181C3 -:10F61000D0F8F8100A894B899A429EBF8A79082A45 -:10F620009A4224BF1220BDE8F08722884A80D0F891 -:10F63000F800022101700020BDE8F087F0B583B02A -:10F6400005460DF0D9F8002802BF122003B0F0BD26 -:10F650000026B84F012429467C70B81C15F030FCF8 -:10F660007E706946062001F088FA002818BFFFDF87 -:10F67000684601F060FA002808BFBDF804500AD1BE -:10F68000029880F80041684601F055FA18B9BDF8B3 -:10F690000400A842F4D103B00020F0BD10B5044628 -:10F6A0000088062101F0E0FA68B190F8D01090F8D7 -:10F6B000732042B9002918BF042904D0D0F8F810EB -:10F6C0000A7812B105E0022010BDD0F8442112786A -:10F6D0000AB13A2010BD90F8962012F0010F04BF35 -:10F6E0000C2010BDD4F80220D4F806304A608B609C -:10F6F000D0F8F81062898A81D0F8F810E268C1F871 -:10F700000E202269C1F812206269C1F81620A26990 -:10F71000C1F81A20D0F8F82003211170D0F8F800B1 -:10F7200021884180002010BDF8B516460F460446DA -:10F7300009F09CF900281CBF0C20F8BD207812238A -:10F74000EF2801D91846F8BD6088ADF8000010F028 -:10F75000100F4FF000050CD010F0010F00F0020167 -:10F760001BD0B1B110F0080F08BF10F0040F1ED06D -:10F770001AE010F0080FE5D110F0200F18BF10F0BC -:10F78000030FDFD110F0010F18BF10F0020FD9D115 -:10F790000DE010F0040F0AD106E029B110F0080FB7 -:10F7A00008BF10F0040F02D010F00F0FCAD1B4F848 -:10F7B00002C01CF0080F08D1D4E90110884228BF0C -:10F7C0002029BFD3B0F1807FBCD2207B0028B9D0E4 -:10F7D0000728B7D8607B002818BF012803D002286B -:10F7E00018BF0328AED11CF0040F03D1022818BFA4 -:10F7F000032807D1A07B002818BF0128A2D11CF044 -:10F80000040F08D1607D002818BF012803D002280A -:10F8100018BF032896D1E07D1CF0100F02D00128FC -:10F8200011D08FE7012818BF03288BD11CF0100FCF -:10F8300009D1607E01281CBF0228032882D1A07E46 -:10F840000F283FF67FAFE07E002818BF01287FF425 -:10F8500079AF1CF0400F1CBF1120F8BD3D70A5759D -:10F8600056B9FF208DF800006946002006F065FDBE -:10F870006946002006F04CFD2046BDE8F84006F041 -:10F8800074BC002250E72DE9F0470446C0780F46CB -:10F89000122510B106F0DBFC50B1607804280AD0C4 -:10F8A00094F8038094F800906678B8F1FB0F12D9B1 -:10F8B0002846BDE8F08709F0D9F80028F8D006F00E -:10F8C0001EFD0028F4D106F0EEF9002804BFE07810 -:10F8D0000028EDD1E4E71FB1B8F11F0F23D9E7E706 -:10F8E00006F0E1F928B1B8F11F0F98BF032E07D039 -:10F8F000DEE7032E18BF042E02D0B8F1000FD7D0D8 -:10F9000009F0B4F8002818BF032E04D0042E1CBF41 -:10F910000C20BDE8F087484606F0BDF9002804BF7A -:10F920004220BDE8F087E07861781F2804E00000FD -:10F9300089F3FFFF3206002098BF03291CBF112066 -:10F94000BDE8F087211D06F0F8FC0020BDE8F08737 -:10F95000002198E72DE9F0470446C0788846122731 -:10F9600010B106F00AFD38B16578042D04D0E678B0 -:10F9700094F80090FB2E02D93846BDE8F087B8F124 -:10F98000000F02D01F2E21D9F6E706F08CF920B126 -:10F990001F2E98BF032D06D0EEE7032D18BF042DB0 -:10F9A00001D0002EE8D009F061F8002818BF032D1F -:10F9B00004D0042D1CBF0C20BDE8F087484606F09B -:10F9C0006AF9002804BF4220BDE8F087E07861783A -:10F9D0001F2898BF03291CBF1120BDE8F087211DF7 -:10F9E00006F096FC0020BDE8F0870021B2E72DE983 -:10F9F000F04304464078422583B0012808D8A07817 -:10FA000006F049F920B120781225012804D0A0B1D0 -:10FA100003B02846BDE8F08306F0C3FC20B1A088FF -:10FA20000028F5D08028F3D806F0C2FC68B16078D1 -:10FA30000028EDD0207801280BD007F077FE04468F -:10FA400008F08CFC002800F0038103B00C20BDE816 -:10FA5000F08306F0B5FA38B906F09CFC002802BF26 -:10FA6000122003B0BDE8F08309F000F80028ECD1C3 -:10FA700006F0D1F8A0F57F41FF39E6D106F0BFFAD4 -:10FA8000A08842F2107100FB01F6A079314606F021 -:10FA9000EFFB06F06BFCF8B10022072101A801F092 -:10FAA000B1F8040049D0FE480321846020460CF0E0 -:10FAB00079FB204607F067F8FA4DA88AA4F84A00B7 -:10FAC000E88AA4F84C0006F0EEF870B1288B01210A -:10FAD00008F0C8FDA06210E03146002008F018FDD3 -:10FAE000002818BFFFDF00F0BEB806F063FC2A8BC9 -:10FAF0000146104608F0B6FDA062014600222046ED -:10FB000007F017FE06F0CFF84FF00108C8B906F06D -:10FB100051FC10F00C0F14D001231A462146184650 -:10FB20000DF03FF8616A88420BD90721BDF8040047 -:10FB300001F0ACF8002818BFFFDF092003B0BDE8D2 -:10FB4000F083E87C0090AB7CEA8AA98A208801F0E7 -:10FB500046F9002818BFFFDF208805F0E1FE314696 -:10FB6000204608F0D5FC002818BFFFDF2146B4F876 -:10FB70004C00002204F5CD76FB2828BFFB206B89C2 -:10FB8000834238BF184691F855304FF4747413F01F -:10FB90000C0F1CBF04EB80131FFA83FC3BD000BF8B -:10FBA000B5F80C90E14528BFE146B1F84A30FB2B8F -:10FBB00028BFFB23B5F80EC09C4538BF634691F8BB -:10FBC00054C01CF00C0F1CBF04EB831C1FFA8CF7F5 -:10FBD0002AD02C8ABC4228BF3C461B2B18BFB4F548 -:10FBE000A47F2FD0F080A6F808907380B4803046B0 -:10FBF000FEF754FEB08840F64801884228BF40F620 -:10FC00004800B0803089884228BF40F648003081E3 -:10FC100086F8008027E0022B07BF83003C33C30037 -:10FC200070331FFA83FCBBE7BCF1020F07BF4FEA3A -:10FC3000830C0CF13C0C4FEAC30C0CF1700C1FFA56 -:10FC40008CF7C6E71B2818BFB9F5A47FCAD10AE014 -:10FC50004CB1208805F065FE2088072101F016F8D8 -:10FC6000002818BFFFDF002003B0BDE8F0830021AB -:10FC7000BDE610B50C46072100F0F6FF002804BFD2 -:10FC8000022010BD90F8731109B10C2010BD90F83E -:10FC90006510142912BF152990F8C0110029F4D15C -:10FCA0002168C0F874116168C0F87811A168C0F8C3 -:10FCB0007C11E168C0F88011012180F873110020E7 -:10FCC00010BD10B5072100F0CFFF002804BF0220AF -:10FCD00010BD90F8731109B10C2010BD90F865109B -:10FCE000142918BF1529F7D1022180F873110020BB -:10FCF00010BDF0B50E464BF68032122183B096420D -:10FD000017D8B6B1694600F04AF900281CBF03B005 -:10FD1000F0BD019800F15807841C25883246294619 -:10FD200038460CF035FA2088A842F6D103B00020FE -:10FD3000F0BD03B00846F0BD10B582B0044600889F -:10FD4000694600F02CF900281CBF02B010BD0198D4 -:10FD5000A37800F1580190F82C209A4202BF0C20A1 -:10FD600002B010BD7F220A728A720022CA72E17844 -:10FD700080F82D10217980F82E10A17880F82C10B1 -:10FD800002B0104610BD10B582B00C46694600F0B6 -:10FD900006F900281CBF02B010BD019890F873004E -:10FDA000002818BF0120207002B0002010BD30B51F -:10FDB00083B00D461446694600F0F1F800281CBFD8 -:10FDC00003B030BD019890F82C0001281EBF0C2014 -:10FDD00003B030BD019890F86010297090F8610070 -:10FDE000207003B0002030BD70B50D4616460721C7 -:10FDF00000F03AFF002804BF022070BD83884FF056 -:10FE0000010CC28841880CEB430C65451AD342F2C1 -:10FE1000107C02FB0CF240F6C41C01FB0CF1B2FB9F -:10FE2000F1F1491E8CB2B4F5FA7F88BF4FF4FA7431 -:10FE3000A54238BF2C46621C591CB2FBF1F251435B -:10FE4000491E8BB290F8AC11002908BF038433809F -:10FE5000002070BD10B50C46072100F005FF0028FA -:10FE600004BF022010BD80F8DF40002C1EBF90F8B8 -:10FE7000DD10002908F019FC002010BD01780029D0 -:10FE80001CBF4178002915D041881B2921BF8188DA -:10FE90001B29C18802290DD302680349406805E087 -:10FEA0005C00002032060020F40500200A65486549 -:10FEB000002070471220704710B5044610F02CFF48 -:10FEC000204608F09AFB002010BD2DE9F0411646AF -:10FED0000F46044601221146384610F020FF054621 -:10FEE0000121384608F0BEFB854228BF2846012381 -:10FEF000E100503189B2E631884206D901F196021B -:10FF0000401AB0FBF2F0401C83B233800020BDE801 -:10FF1000F08110B5044611F03FFB042806D011F023 -:10FF20003BFB052802D008F0A1FD08B10C2010BD54 -:10FF3000601C0BF082FF207800F0010006F05AF8F8 -:10FF4000207800F001000EF0FFFA002010BD10B57F -:10FF50000446072000F022FE00281CBF0C2010BD24 -:10FF6000207810F0010F11D000226078114613F0B4 -:10FF70008FFF00281CBF122010BDA0680AF0E9F90D -:10FF8000607861680AF0EEF9002010BD00200AF0E8 -:10FF9000E0F9002108460AF0E5F9002010BD70B52F -:10FFA0000C460546062100F05FFE606010B100209F -:10FFB000207070BD0721284600F056FE60600028C2 -:10FFC00004BF022070BD01202070002070BD10B55C -:10FFD00004468C46007813466168624638B10120B9 -:10FFE0000CF0DFFD6168496A884209D906E000200B -:10FFF0000CF0D7FD6168496A884201D9012010BD23 -:020000040001F9 -:10000000002010BD10B586B0044611F0C5FA0428D2 -:1000100041D011F0C1FA05283DD0A0788DF8080034 -:10002000A0788DF8000060788DF8040020788DF8B5 -:100030000300A07B8DF80500E07B002818BF01209D -:100040008DF80600A07810F0010F27D0E078012885 -:1000500008BF022003D000280CBF012000208DF82B -:100060000100E088ADF80A006089ADF80C00A078C6 -:1000700010F0040F26D02079012808BF022003D0F9 -:1000800000280CBF012000208DF802002089ADF867 -:100090000E00A08914E006B00C2010BD10F0040F73 -:1000A00010D0E078012808BF022003D000280CBF40 -:1000B000012000208DF80200E088ADF80E00608974 -:1000C000ADF8100002A810F080FD002804BF6846BB -:1000D0000EF02BFB06B010BD30B5058825F40044AA -:1000E00021448CB24FF4004194420AD2121B92B2C6 -:1000F0001B339A4201D2A94307E005F40041214392 -:1001000003E0A21A92B2A9431143018030BD084412 -:10011000083050434A31084480B2704770B51D46DC -:1001200016460B46044629463046049AFFF7EFFF71 -:100130000646B34200D2FFDF2821204614F0ABFD73 -:100140004FF6FF70A082283EB0B265776080B0F5B0 -:10015000004F00D9FFDF618805F13C00814200D2E9 -:10016000FFDF60880835401B343880B220801B28B0 -:1001700000D21B2020800020A07770BD81618861A3 -:1001800070472DE9F05F0D46C188044600F128094B -:10019000008921F4004620F4004800F062FB10B111 -:1001A0000020BDE8F09F4FF0000A4FF0010BB04572 -:1001B0000CD9617FA8EB0600401A0838854219DC8B -:1001C00009EB06000021058041801AE06088617F0C -:1001D000801B471A083F0DD41B2F00DAFFDFBD42FA -:1001E00001DC294600E0B9B2681A0204120C04D0FE -:1001F000424502DD84F817A0D2E709EB0600018032 -:10020000428084F817B0CCE770B5044600F12802AC -:10021000C088E37D20F400402BB11044028843885D -:1002200013448B4201D2002070BD00258A4202D3C4 -:100230000180458008E0891A0904090C418003D037 -:10024000A01D00F01EFB08E0637F008808331844FF -:1002500081B26288A01DFFF73FFFE575012070BDE8 -:1002600070B5034600F12804C588808820F4004654 -:100270002644A84202D10020188270BD9889358892 -:10028000A84206D3401B75882D1A2044ADB2C01E6B -:1002900005E02C1AA5B25C7F20443044401D0C8838 -:1002A000AC4200D90D809C8924B1002414700988C7 -:1002B000198270BD0124F9E770B5044600F12801E8 -:1002C000808820F400404518208A002825D0A18984 -:1002D000084480B2A08129886A881144814200D2F2 -:1002E000FFDF2888698800260844A189884212D146 -:1002F000A069807F2871698819B1201D00F0C1FABA -:1003000008E0637F28880833184481B26288201D82 -:10031000FFF7E2FEA6812682012070BD2DE9F041A3 -:10032000418987880026044600F12805B94218D083 -:1003300004F10A0821F400402844418819B14046DC -:1003400000F09FFA08E0637F00880833184481B208 -:1003500062884046FFF7C0FE761C6189B6B2B9429A -:10036000E8D13046BDE8F0812DE9F04104460B4666 -:1003700027892830A68827F40041B4F80A80014470 -:100380000D46B74201D10020ECE70AB1481D1060CC -:1003900023B1627F691D184614F0DCFB2E88698842 -:1003A00004F1080021B18A1996B200F06AFA06E059 -:1003B000637F62880833991989B2FFF78DFE47453C -:1003C00001D1208960813046CCE78188C088814294 -:1003D00001D1012070470020704701898088814247 -:1003E00001D1012070470020704770B58588C3880F -:1003F00000F1280425F4004223F4004114449D42F6 -:100400001AD08389058A5E1925886388EC18A6426C -:1004100014D313B18B4211D30EE0437F08325C1921 -:100420002244408892B2801A80B22333984201D28B -:1004300011B103E08A4201D1002070BD012070BDDE -:100440002DE9F0478846C1880446008921F400461A -:1004500004F1280720F4004507EB060900F001FA33 -:10046000002178BBB54204D9627FA81B801A002501 -:1004700003E06088627F801B801A083823D4E289F9 -:1004800062B1B9F80020B9F802303BB1E81A21771F -:10049000404518DBE0893844801A09E0801A21774A -:1004A00040450ADB607FE189083030443944084424 -:1004B000C01EA4F81280BDE8F087454503DB01208B -:1004C0002077E7E7FFE761820020F4E72DE9F74FA7 -:1004D000044600F12805C088884620F4004A608A56 -:1004E00005EB0A0608B1404502D20020BDE8FE8FA8 -:1004F000E08978B13788B6F8029007EB09018842A5 -:1005000000D0FFDF207F4FF0000B50EA090106D03A -:1005100088B33BE00027A07FB9463071F2E7E1895C -:1005200059B1607F2944083050440844B4F81F1082 -:1005300020F8031D94F821108170E28907EB080070 -:1005400002EB0801E1813080A6F802B002985F4614 -:1005500050B1637F30880833184481B26288A01D8F -:10056000FFF7BAFDE78121E0607FE1890830504460 -:10057000294408442DE0FFE7E089B4F81F1028441F -:10058000C01B20F8031D94F82110817009EB0800AE -:10059000E28981B202EB0800E08137807180029825 -:1005A000A0B1A01D00F06DF9A4F80EB0A07F401C12 -:1005B000A077A07D08B1E088A08284F816B000BFC3 -:1005C000A4F812B084F817B001208FE7E08928441E -:1005D000C01B30F8031DA4F81F10807884F8210098 -:1005E000EEE710B5818800F1280321F4004423448C -:1005F000848AC288A14212D0914210D0818971B9F7 -:10060000826972B11046FFF7E8FE50B910892832AE -:1006100020F40040104419790079884201D100206B -:1006200010BD184610BD00F12803407F0830084473 -:10063000C01E1060088808B9DB1E1360088849884E -:10064000084480B270472DE9F04100F12806407F50 -:100650001C4608309046431808884D88069ADB1ED1 -:10066000A0B1C01C80B2904214D9801AA04200DB15 -:10067000204687B298183A46414614F03FFA0028BF -:1006800016D1E01B84B2B844002005E0ED1CADB2E9 -:10069000F61EE8E7101A80B20119A94206D83044C4 -:1006A00022464146BDE8F04114F028BA4FF0FF3031 -:1006B00058E62DE9F04100F12804407F1E4608303D -:1006C00090464318002508884F88069ADB1E90B193 -:1006D000C01C80B2904212D9801AB04200DB304672 -:1006E00085B299182A46404614F034FA701B86B237 -:1006F000A844002005E0FF1CBFB2E41EEAE7101A80 -:1007000080B28119B94206D821183246404614F009 -:1007100021FAA81985B2284624E62DE9F04100F116 -:100720002804407F1E46083090464318002508885C -:100730004F88069ADB1E90B1C01C80B2904212D93D -:10074000801AB04200DB304685B298182A464146EE -:1007500014F000FA701B86B2A844002005E0FF1CCC -:10076000BFB2E41EEAE7101A80B28119B94206D876 -:1007700020443246414614F0EDF9A81985B22846C6 -:10078000F0E5401D704710B5044600F12801C2880D -:10079000808820F400431944904206D0A28922B9EF -:1007A000228A12B9A28A904201D1002010BD088885 -:1007B000498831B1201D00F064F80020208201201A -:1007C00010BD637F62880833184481B2201DFFF793 -:1007D00083FCF2E70021C18101774182C1758175F7 -:1007E000704703881380C28942B1C28822F4004353 -:1007F00000F128021A440A60C0897047002070473F -:1008000010B50446808AA0F57F41FF3900D0FFDF94 -:10081000E088A082E08900B10120A07510BD4FF6EC -:10082000FF71818200218175704710B50446808A6E -:10083000A0F57F41FF3900D1FFDFA07D28B9A08856 -:10084000A18A884201D1002010BD012010BD8188FD -:10085000828A914201D1807D08B100207047012039 -:10086000704720F4004221F400439A4207D100F47B -:10087000004001F40041884201D00120704700206F -:10088000704730B5044600880D4620F40040A84269 -:1008900000D2FFDF21884FF40040884328432080A6 -:1008A00030BD70B50C00054609D0082C00D2FFDF22 -:1008B0001DB1A1B2286800F044F8201D70BD0DB133 -:1008C00000202860002070BD0021026803E09388AA -:1008D0001268194489B2002AF9D100F032B870B513 -:1008E00000260D460446082900D2FFDF206808B91B -:1008F0001EE0044620688188A94202D001680029D0 -:10090000F7D181880646A94201D100680DE005F1C2 -:10091000080293B20022994209D32844491B02607D -:1009200081802168096821600160206000E0002664 -:10093000304670BD00230B608A8002680A60016047 -:10094000704700234360021D018102607047F0B5CB -:100950000F460188408815460C181E46AC4200D34D -:10096000641B3044A84200D9FFDFA019A84200D977 -:10097000FFDF3819F0BD2DE9F041884606460188B1 -:10098000408815460C181F46AC4200D3641B3844FF -:10099000A84200D9FFDFE019A84200D9FFDF708824 -:1009A0003844708008EB0400BDE8F0812DE9F04187 -:1009B000054600881E461746841B8846BC4200D365 -:1009C0003C442C8068883044B84200D9FFDFA0192D -:1009D000B84200D9FFDF68883044688008EB040023 -:1009E000E2E72DE9F04106881D460446701980B201 -:1009F000174688462080B84201D3C01B20806088FB -:100A0000A84200D2FFDF7019B84200D9FFDF60882A -:100A1000401B608008EB0600C6E730B50D46018834 -:100A2000CC18944200D3A41A4088984200D8FFDF23 -:100A3000281930BD2DE9F041C84D04469046A878EC -:100A40000E46A04200D8FFDF05EB8607B86A50F8D3 -:100A5000240000B1FFDFB868002816D0304600F04F -:100A600044F90146B868FFF73AFF05000CD0B86AB0 -:100A7000082E40F8245000D3FFDFB94842462946EB -:100A800050F82630204698472846BDE8F0812DE9E9 -:100A9000F8431E468C1991460F460546FF2C00D997 -:100AA000FFDFB14500D9FFDFE4B200954DB3002070 -:100AB0008046E81C20F00300A84200D0FFDF494632 -:100AC000DFF89892684689F8001089F8017089F873 -:100AD000024089F8034089F8044089F8054089F804 -:100AE000066089F80770414600F008F90021424687 -:100AF0000F464B460098C01C20F00300009012B136 -:100B00000EE00120D4E703EB8106B062002005E08F -:100B1000D6F828C04CF82070401CC0B2A042F7D3D1 -:100B20000098491C00EB8400C9B200900829E1D369 -:100B3000401BBDE8F88310B5044603F067FD08B11B -:100B4000102010BD2078854A618802EB80009278E1 -:100B50000EE0836A53F8213043B14A1C6280A180C1 -:100B6000806A50F82100A060002010BD491C89B2A5 -:100B70008A42EED86180052010BD70B505460C464E -:100B8000084603F043FD08B1102070BD082D01D3C5 -:100B9000072070BD25700020608070BD0EB56946CD -:100BA000FFF7EBFF00B1FFDF6846FFF7C4FF08B1B6 -:100BB00000200EBD01200EBD10B50446082800D34C -:100BC000FFDF6648005D10BD3EB50546002469465E -:100BD000FFF7D3FF18B1FFDF01E0641CE4B2684601 -:100BE000FFF7A9FF0028F8D02846FFF7E5FF001B14 -:100BF000C0B23EBD59498978814201D9C0B270471F -:100C0000FF2070472DE9F041544B062903D00729F6 -:100C10001CD19D7900E0002500244FF6FF7603EB00 -:100C2000810713F801C00AE06319D7F828E09BB2E6 -:100C30005EF823E0BEF1000F04D0641CA4B2A4450A -:100C4000F2D8334603801846B34201D100201CE796 -:100C5000BDE8F041EEE6A0F57F43FF3B01D0082957 -:100C600001D300207047E5E6A0F57F42FF3A0BD0A4 -:100C7000082909D2394A9378834205D902EB8101C8 -:100C8000896A51F820007047002070472DE9F04133 -:100C900004460D46A4F57F4143F20200FF3902D01D -:100CA000082D01D30720F0E62C494FF000088A7880 -:100CB000A242F8D901EB8506B26A52F82470002FDF -:100CC000F1D027483946203050F82520204690475B -:100CD000B16A284641F8248000F007F802463946F8 -:100CE000B068FFF727FE0020CFE61D49403131F8FC -:100CF00010004FF6FC71C01C084070472DE9F84306 -:100D0000164E8846054600242868C01C20F00300C3 -:100D100028602046FFF7E9FF315D4843B8F1000F36 -:100D200001D0002200E02A680146009232B100277B -:100D30004FEA0D00FFF7B5FD1FB106E001270020C7 -:100D4000F8E706EB8401009A8A602968641C08446D -:100D5000E4B22860082CD7D3EBE600005006002050 -:100D6000F050020070B50E461D46114600F0D4F852 -:100D700004462946304600F0D8F82044001D70BDD6 -:100D80002DE9F04190460D4604004FF0000610D0CA -:100D90000027E01C20F00300A04200D0FFDFDDB1FF -:100DA00041460020FFF77DFD0C3000EB850617B1B2 -:100DB00012E00127EDE7614F04F10C00A9003C604F -:100DC0002572606000EB85002060606813F063FFAF -:100DD00041463868FFF765FD3046BDE8F0812DE9F2 -:100DE000FF4F564C804681B020689A46934600B922 -:100DF000FFDF2068027A424503D9416851F8280094 -:100E000020B143F2020005B0BDE8F08F51460298D0 -:100E100000F082F886B258460E9900F086F885B246 -:100E20007019001D87B22068A14639460068FFF797 -:100E300056FD04001FD0678025802946201D0E9D89 -:100E400007465A4601230095FFF768F92088314686 -:100E500038440123029ACDF800A0FFF75FF92088FB -:100E6000C1193846FFF78AF9D9F800004168002017 -:100E700041F82840C7E70420C5E770B52F4C054668 -:100E8000206800B9FFDF2068017AA9420ED94268C4 -:100E900052F8251051B1002342F825304A880068E5 -:100EA000FFF748FD216800200A7A08E043F20200BB -:100EB00070BD4B6853F8203033B9401CC0B2824239 -:100EC000F7D80868FFF700FD002070BD70B51B4E15 -:100ED00005460024306800B9FFDF3068017AA94276 -:100EE00004D9406850F8250000B1041D204670BDAB -:100EF00070B5124E05460024306800B9FFDF306837 -:100F0000017AA94206D9406850F8251011B131F88C -:100F1000040B4418204670BD10B50A460121FFF7A6 -:100F2000F6F8C01C20F0030010BD10B50A460121E0 -:100F3000FFF7EDF8C01C20F0030010BD700000208A -:100F400070B50446C2F11005281913F003FE15F020 -:100F5000FF0108D0491EC9B2802060542046BDE878 -:100F6000704013F076BE70BD30B505E05B1EDBB29D -:100F7000CC5CD55C6C40C454002BF7D130BD10B5AF -:100F8000002409E00B78521E44EA430300F8013BB9 -:100F900011F8013BD2B2DC09002AF3D110BD2DE9D2 -:100FA000F04389B01E46DDE9107990460D000446F5 -:100FB00022D002460846F949FDF755FB102221468A -:100FC0003846FFF7DCFFE07B000606D5F34A3946DA -:100FD000102310320846FFF7C7FF10223946484653 -:100FE000FFF7CDFFF87B000606D5EC4A49461023F3 -:100FF00010320846FFF7B8FF1021204613F029FEF3 -:101000000DE0103EB6B208EB0601102322466846FA -:10101000FFF7AAFF224628466946FDF724FB102E5B -:10102000EFD818D0F2B241466846FFF789FF102387 -:101030004A46694604A8FFF797FF1023224604A9F1 -:101040006846FFF791FF224628466946FDF70BFBED -:1010500009B0BDE8F08310233A464146EAE770B58F -:101060009CB01E460546134620980C468DF8080095 -:10107000202219460DF1090013F06CFD20222146B3 -:101080000DF1290013F066FD17A913A8CDE90001A1 -:10109000412302AA31462846FFF781FF1CB070BDEC -:1010A0002DE9FF4F9FB014AEDDE92D5410AFBB49C1 -:1010B000CDE90076202320311AA8FFF770FF4FF00A -:1010C00000088DF808804FF001098DF8099054F858 -:1010D000010FCDF80A00A088ADF80E0014F8010C3D -:1010E0001022C0F340008DF8100055F8010FCDF824 -:1010F0001100A888ADF8150015F8010C2C99C0F363 -:1011000040008DF8170006A8824613F023FD0AA8B8 -:1011100083461022229913F01DFDA048352308387C -:1011200002AA40688DF83C80CDE900760E901AA99D -:101130001F98FFF734FF8DF808808DF8099020681C -:10114000CDF80A00A088ADF80E0014F8010C1022AA -:10115000C0F340008DF810002868CDF81100A88871 -:10116000ADF8150015F8010C2C99C0F340008DF86E -:101170001700504613F0EEFC58461022229913F047 -:10118000E9FC86483523083802AA40688DF83C906F -:10119000CDE900760E901AA92098FFF700FF23B042 -:1011A000BDE8F08FF0B59BB00C460546DDE9221096 -:1011B0001E461746DDE92032D0F801C0CDF808C040 -:1011C000B0F805C0ADF80CC00078C0F340008DF851 -:1011D0000E00D1F80100CDF80F00B1F80500ADF810 -:1011E000130008781946C0F340008DF815001088E8 -:1011F000ADF8160090788DF818000DF11900102246 -:1012000013F0A8FC0DF129001022314613F0A2FCC6 -:101210000DF139001022394613F09CFC17A913A8D0 -:10122000CDE90001412302AA21462846FFF7B7FE77 -:101230001BB0F0BDF0B5A3B017460D4604461E46E0 -:10124000102202A8289913F085FC06A8202239460E -:1012500013F080FC0EA82022294613F07BFC1EA967 -:101260001AA8CDE90001502302AA314616A8FFF7BB -:1012700096FE1698206023B0F0BDF0B589B0044604 -:10128000DDE90E070D463978109EC1F340018DF857 -:10129000001031789446C1F340018DF801101968AF -:1012A000CDF802109988ADF8061099798DF80810DC -:1012B0000168CDF809108188ADF80D1080798DF89E -:1012C0000F0010236A46614604A8FFF74DFE224630 -:1012D000284604A9FDF7C7F9D6F801000090B6F832 -:1012E0000500ADF80400D7F80100CDF80600B7F806 -:1012F0000500ADF80A000020039010236A4621463D -:1013000004A8FFF731FE2246284604A9FDF7ABF9F1 -:1013100009B0F0BD1FB51C6800945B6801931368A9 -:10132000029352680392024608466946FDF79BF90C -:101330001FBD10B588B00446106804905068059031 -:1013400000200690079008466A4604A9FDF78BF92D -:10135000BDF80000208008B010BD1FB51288ADF8A0 -:1013600000201A88ADF80220002201920292039216 -:10137000024608466946FDF776F91FBD7FB5074B63 -:1013800014460546083B9A1C6846FFF7E6FF2246CE -:1013900069462846FFF7CDFF7FBD00004851020097 -:1013A00070B5044600780E46012813D0052802D0F7 -:1013B000092813D10EE0A06861690578042003F0C4 -:1013C000B3F8052D0AD0782300220420616903F0C8 -:1013D00001F803E00420616903F0A6F831462046D5 -:1013E000BDE8704001F086B810B500F12D02C37958 -:1013F0009478411D64F003042340C371DB070DD0D2 -:101400004B79547923404B710B79127913400B714E -:101410008278C9788A4200D9817010BD00224A7151 -:101420000A71F5E74178012900D00C21017070475D -:101430002DE9F04F93B04FF0000B0C690D468DF87D -:1014400020B0097801260C2017464FF00D084FF008 -:10145000110A4FF008091B2975D2DFE811F01B00B3 -:10146000C30206031E035D037003A203B703F80360 -:10147000190461049304A004EC042A053405520500 -:101480005D05EE053106340663067F06F9061D0785 -:10149000E606EB0614B120781D282AD0D5F808807E -:1014A0005FEA08004FD001208DF82000686A022210 -:1014B0000D908DF824200A208DF82500A8690A9047 -:1014C000A8880028EED098F8001091B10F2910D20A -:1014D0007ED2DFE801F07D1349DEFEFDFCFBFAF968 -:1014E00038089CF8F70002282DD124B120780C2868 -:1014F00001D00026EFE38DF82020CBE10420696ABB -:1015000003F012F8A8880728EED1204600F0EDFF7E -:10151000022809D0204600F0E8FF032807D920461A -:1015200000F0E3FF072802D20120207004E0002C25 -:10153000B8D020780128D7D198F80400C11F0A2913 -:1015400002D30A2061E0C4E1A070D8F80010E16283 -:10155000B8F80410218698F8060084F832000120BB -:1015600028700320207044E00728BDD1002C99D0BA -:1015700020780D28B8D198F8031094F82F20C1F3E3 -:10158000C000C2F3C002104201D0062000E00720D4 -:10159000890707D198F805100142D2D198F80610B2 -:1015A0000142CED194F8312098F8051020EA0202C9 -:1015B0001142C6D194F8322098F8061090430142A7 -:1015C000BFD198F80400C11F0A29BAD2617D00E09A -:1015D00006E281427ED8D8F800106160B8F80410A5 -:1015E000218198F80600A072012028700E2020703A -:1015F00003208DF82000686A0D9004F12D000990F9 -:10160000601D0A900F300B9022E12875FDE3412800 -:1016100091D1204600F069FF042802D1E078C0078C -:1016200004D1204600F061FF0F2884D1A88CD5F8A2 -:101630000C8080B24FF0400BE669FFF747FC324662 -:1016400041465B464E46CDF80090FFF732F80B203E -:101650008DF82000686A0D90E0690990002108A8C3 -:10166000FFF79EFE2078042806D0A07D58B10128FF -:1016700009D003280AD049E30520207003202870F0 -:101680008DF82060CDE184F800A032E712202070B0 -:10169000E9E11128BCD1204600F027FF042802D13F -:1016A000E078C00719D0204600F01FFF062805D1BA -:1016B000E078C00711D1A07D02280ED0204600F0AE -:1016C00014FF08E0CAE081E06FE14EE121E101E1B1 -:1016D000E7E017E0ADE111289AD1102208F10101ED -:1016E00004F13C0013F036FA607801287ED0122015 -:1016F0002070E078C00760D0A07D0028C8D0012805 -:10170000C6D05AE0112890D1204600F0EEFE0828FD -:1017100004D0204600F0E9FE132886D104F16C00C5 -:10172000102208F10101064613F014FA2078082867 -:101730000DD014202070E178C8070DD0A07D0228BC -:101740000AD06278022A04D00328A1D035E009200B -:10175000F0E708B1012837D1C80713D0A07D0228CF -:101760001DD000200090D4E9062133460EA8FFF7D3 -:1017700076FC10220EA904F13C0013F0BFF9C8B1A9 -:10178000042042E7D4E90912201D8DE8070004F186 -:101790002C0332460EA8616BFFF76FFDE9E7606B23 -:1017A000C1F34401491E0068C84000F0010040F048 -:1017B0008000D7E72078092806D185F800908DF8B9 -:1017C000209033E32870ECE30920FBE711289AD13D -:1017D000204600F08AFE0A2802D1E078C00704D132 -:1017E000204600F082FE15288DD100E08DE104F145 -:1017F0003C00102208F10101064613F0ABF92078F5 -:101800000A2816D016202070D4E90932606B611DB9 -:101810008DE80F0004F15C0304F16C0247310EA85F -:10182000FFF7C0FC10220EA9304613F067F918B17B -:10183000F5E20B20207071E22046FFF7D5FDA0787D -:10184000216A0A18C0F11001104613F002FA23E3CE -:10185000394608A8FFF7A4FD06463BE20228B6D1A8 -:10186000204600F042FE042804D3204600F03DFE4E -:10187000082809D3204600F038FE0E2829D3204638 -:1018800000F033FE122824D2A07D02289FD10E2022 -:101890008DF82000686A0D9098F801008DF82400FA -:1018A000F0E3022893D1204600F01FFE002810D05C -:1018B000204600F01AFE0128F9D0204600F015FE5F -:1018C0000C28F4D004208DF8240098F801008DF83D -:1018D00025005EE21128FCD1002CFAD020781728D0 -:1018E000F7D16178606A022911D0002101EB410132 -:1018F000182606EBC1011022405808F1010113F02F -:1019000029F90420696A00F0E3FD2670F1E5012160 -:10191000ECE70B28DDD1002CDBD020781828D8D1BB -:101920006078616A02281CD05FF0000000EB400282 -:10193000102000EBC2000958B8F801000880607858 -:10194000616A02280FD0002000EB4002142000EB57 -:10195000C2000958404650F8032F0A6040684860AA -:1019600039E00120E2E70120EEE71128B1D1002C97 -:10197000AFD020781928ACD16178606A022912D0E2 -:101980005FF0000101EB41011C2202EBC1011022BA -:10199000405808F1010113F0DDF80420696A00F0F5 -:1019A00097FD1A20B6E00121ECE7082891D1002C20 -:1019B0008FD020781A288CD1606A98F8012001789D -:1019C00062F347010170616AD8F8022041F8012FE3 -:1019D000B8F8060088800420696A00F079FD8EE27C -:1019E000072012E63878012894D1182204F1140057 -:1019F000796813F0F4F8E079C10894F82F0001EA4F -:101A0000D001E07861F30000E070217D002974D1FD -:101A10002178032909D0C00725D0032028708DF82C -:101A20002090686A0D90412004E3607DA17888428F -:101A300001D90620E9E502262671E179204621F048 -:101A4000E001E171617A21F0F0016172A17A21F087 -:101A5000F001A172FFF7C8FC2E708DF82090686A23 -:101A60000D900720E6E20420ACE6387805289DD1E9 -:101A70008DF82000686A0D90B8680A900720ADF8CC -:101A800024000A988DF830B0616801602189818056 -:101A9000A17A817104202070F4E23978052985D17A -:101AA0008DF82010696A0D91391D09AE0EC986E8BE -:101AB0000E004121ADF824108DF830B01070A88CC4 -:101AC000D7F80C8080B24026A769FFF711FA41468B -:101AD0003A463346C846CDF80090FEF71EFE002178 -:101AE00008A8FFF75DFCE07820F03E00801CE07065 -:101AF0002078052802D00F200CE049E1A07D20B11C -:101B0000012802D0032802D002E10720BFE584F8B3 -:101B10000080EEE42070ECE4102104F15C0002F09F -:101B20002AFA606BB0BBA07D18B1012801D0052056 -:101B3000FDE006202870F7486063A063BEE23878B5 -:101B4000022894D1387908B12875B3E3A07D022822 -:101B500002D0032805D022E0B8680028F5D06063E1 -:101B60001CE06078012806D0A07994F82E10012896 -:101B700005D0E84806E0A17994F82E00F7E7B868A8 -:101B80000028E2D06063E078C00701D0012902D0CC -:101B9000E04803E003E0F8680028D6D0A063062000 -:101BA00010E68DF82090696A0D91E1784846C907E2 -:101BB00009D06178022903D1A17D29B1012903D07F -:101BC000A17D032900D00720287031E1387805284D -:101BD000BBD1207807281ED084F800A005208DF8FE -:101BE0002000686A0D90B8680A90ADF824A08DF8BE -:101BF00030B003210170E178CA070FD0A27D022A1C -:101C00001AD000210091D4E9061204F15C03401CB3 -:101C1000FFF725FA67E384F80090DFE7D4E90923AA -:101C2000211D8DE80E0004F12C0304F15C02401C20 -:101C3000616BFFF722FB56E3626BC1F34401491E5F -:101C40001268CA4002F0010141F08001DAE73878F9 -:101C50000528BDD18DF82000686A0D90B8680A90FB -:101C6000ADF824A08DF830B0042100F8011B10223B -:101C700004F15C0112F06EFF002108A8FFF790FB51 -:101C80002078092801D0132044E70A2020709BE522 -:101C9000E078C10742D0A17D012902D0022927D0D6 -:101CA00038E0617808A8012916D004F16C01009190 -:101CB000D4E9061204F15C03001DFFF7BBFA0A2009 -:101CC000287003268DF82080686A0D90002108A8EE -:101CD000FFF766FBDDE2C3E204F15C010091D4E9A9 -:101CE000062104F16C03001DFFF7A4FA0026E9E7C2 -:101CF000C0F3440114290DD24FF0006101EBB01084 -:101D00004FEAB060E0706078012801D01020BEE496 -:101D10000620FFE6607801283FF4B7AC0A2051E5C1 -:101D2000E178C90708D0A17D012903D10B202870D3 -:101D300004202FE028702DE00E2028706078616B61 -:101D4000012817D004F15C0304F16C020EA8FFF720 -:101D5000E1FA2046FFF748FBA0780EAEC0F1100173 -:101D6000304412F076FF06208DF82000686A09964C -:101D70000D909AE004F16C0304F15C020EA8FFF7E9 -:101D8000C9FAE9E73978022903D139790029D1D094 -:101D900029758FE28DF82000686A0D9058E5387833 -:101DA0000728F6D1D4E909216078012808D004F188 -:101DB0006C00CDE90002029105D104F16C0304E04E -:101DC00004F15C00F5E704F15C0304F14C007A686F -:101DD0000646216AFFF764F96078012821D1A078CE -:101DE000216A0A18C0F11001104612F032FFD4E93E -:101DF0000923606B04F12D018DE80F0004F15C03F1 -:101E000004F16C0231460EA800E055E2FFF7CAF972 -:101E100010220EA904F13C0012F070FE08B10B2054 -:101E2000AFE485F8008000BF8DF82090686A0D90BF -:101E30008DF824A00CE538780528AAD18DF820006B -:101E4000686A0D90B8680A90ADF824A08DF830B09B -:101E500080F80080617801291AD0D4E9093204F1B0 -:101E60002D01A66B03920096CDE9011304F16C03DA -:101E700004F15C0204F14C01401CFFF793F90021CE -:101E800008A8FFF78DFA6078012805D0152041E6F3 -:101E9000D4E90923611DE4E70E20287006208DF89F -:101EA0002000686ACDF824B00D90A0788DF8280045 -:101EB000CEE438780328C0D1E079C00770D00F2075 -:101EC0002870072066E7387804286BD11422391D62 -:101ED00004F1140012F083FE616A208CA1F809005D -:101EE000616AA078C871E179626A01F00301117238 -:101EF000616A627A0A73616AA07A81F82400162006 -:101F000060E485F800A08DF82090696A50460D9134 -:101F100090E00000485102003878052842D1B868A6 -:101F2000A8616178606A022901D0012100E00021E6 -:101F300001EB4101142606EBC1014058082102F0D3 -:101F40001AF86178606A022901D0012100E00021BD -:101F500001EB410106EBC101425802A8E169FFF71C -:101F60000DFA6078626A022801D0012000E00020AA -:101F700000EB4001102000EBC1000223105802A921 -:101F80000932FEF7F1FF626AFD4B0EA80932A16922 -:101F9000FFF7E3F96178606A022904D0012103E0C8 -:101FA00042E18BE0BDE0002101EB4101182606EB88 -:101FB000C101A27840580EA912F0CCFD6178606A88 -:101FC000022901D0012100E0002101EB410106EBD3 -:101FD000C1014058A1780844C1F1100112F039FE46 -:101FE00005208DF82000686A0D90A8690A90ADF868 -:101FF00024A08DF830B0062101706278616A022A4F -:1020000001D0012200E0002202EB420206EBC202F4 -:10201000401C8958102212F09DFD002108A8FFF7EE -:10202000BFF91220C5F818B028708DF82090686AA2 -:102030000D900B208DF824000AE43878052870D123 -:102040008DF82000686A0D90B8680A900B20ADF8F2 -:1020500024000A98072101706178626A022901D080 -:10206000012100E0002101EB4103102101EBC3013C -:1020700051580988A0F801106178626A022902D0DB -:10208000012101E02FE1002101EB4103142101EBCB -:10209000C30151580A6840F8032F4968416059E06C -:1020A0001920287001208DF8300077E6162028705E -:1020B0008DF830B0002108A8FFF772F9032617E168 -:1020C00014202870B0E6387805282AD18DF8200031 -:1020D000686A0D90B8680A90ADF824A08DF830B009 -:1020E00080F800906278616A4E46022A01D001228F -:1020F00000E0002202EB42021C2303EBC202401C60 -:102100008958102212F026FD002108A8FFF748F98F -:10211000152028708DF82060686A0D908DF8246075 -:102120003CE680E0387805287DD18DF82000686A8B -:102130000D90B8680A90ADF824900921017061698A -:10214000097849084170616951F8012FC0F80220EF -:102150008988C18020781C28A8D1A1E7E078C00731 -:1021600002D04FF0060C01E04FF0070C6078022817 -:102170000AD04FF0000000BF00EB040101F109019B -:1021800005D04FF0010004E04FF00100F4E74FF0FC -:1021900000000B78204413EA0C030B7010F8092F91 -:1021A00002EA0C02027004D14FF01B0C84F800C04C -:1021B000D2B394F801C0BCF1010F00D09BB990F8E4 -:1021C00000C0E0465FEACC7C04D028F0010606702F -:1021D000102606E05FEA887C05D528F00206067026 -:1021E00013262E70032694F801C0BCF1020F00D014 -:1021F00092B991F800C05FEACC7804D02CF00106C7 -:102200000E70172106E05FEA8C7805D52CF00206E7 -:102210000E701921217000260078D0BBCAB3C3BB51 -:102220001C20207035E012E002E03878062841D109 -:102230001A2019E4207801283CD00C283AD02046F6 -:10224000FFF7F0F809208DF82000686A0D9031E062 -:102250003878052805D00620387003261820287005 -:1022600046E005218DF82010686A0D90B8680A9044 -:102270000220ADF8240001208DF830000A9801708A -:10228000297D4170394608A8FFF78AF806461820CC -:102290002870012E0ED02BE001208DF82000686AF6 -:1022A0000D9003208DF82400287D8DF8250085F8F9 -:1022B00014B012E0287D80B11D20207017202870F6 -:1022C0008DF82090686A0D9002208DF82400394620 -:1022D00008A8FFF765F806460AE00CB1FE2020705A -:1022E0009DF8200020B1002108A8FFF759F810E45C -:1022F00013B03046BDE8F08F2DE9F04387B00C46AF -:102300004E6900218DF8041001202578034602272C -:102310004FF007094FF0050C85B1012D53D0022D68 -:1023200039D1FE2030708DF80030606A05900320AE -:102330008DF80400207E8DF8050063E021790129E5 -:1023400025D002292DD0032928D0042923D1B17DFD -:10235000022920D131780D1F042D04D30A3D032D0D -:1023600001D31D2917D12189022914D38DF80470B6 -:10237000237020899DF8041088421BD2082001E0B8 -:10238000405102008DF80000606A059057E07078B7 -:102390000128EBD0052007B0BDE8F0831D20307088 -:1023A000E4E771780229F5D131780C29F3D18DF861 -:1023B0000490DDE7083402F804CB94E80B0082E8CF -:1023C0000B000320E7E71578052DE4D18DF800C058 -:1023D000656A0595956802958DF8101094F804804B -:1023E000B8F1010F13D0B8F1020F2DD0B8F1030FDF -:1023F0001CD0B8F1040FCED1ADF804700E202870B7 -:10240000207E687000216846FEF7CAFF0CE0ADF838 -:1024100004700B202870207E002100F01F006870DF -:102420006846FEF7BDFF37700020B4E7ADF80470D2 -:102430008DF8103085F800C0207E68702770114636 -:102440006846FEF7ADFFA6E7ADF804902B70207F3D -:102450006870607F00F00100A870A07F00F01F008E -:10246000E870E27F2A71C0071CD094F8200000F0C9 -:102470000700687194F8210000F00700A87100219E -:102480006846FEF78DFF2868F062A8883086A87934 -:1024900086F83200A069407870752879B0700D20F8 -:1024A0003070C1E7A9716971E9E700B587B0042808 -:1024B0000CD101208DF800008DF80400002005915A -:1024C0008DF8050001466846FEF76AFF07B000BDBB -:1024D00070B50C46054602F027F821462846BDE8AF -:1024E00070407823002201F075BF08B10078704772 -:1024F0000C20704770B50C0005784FF000010CD02F -:1025000021702146F2F7A9FE69482178405D884292 -:1025100001D1032070BD022070BDF2F79EFE0020A5 -:1025200070BD0279012A05D000220A704B78012B78 -:1025300002D003E0042070470A758A610279930093 -:10254000521C0271C15003207047F0B587B00F468E -:1025500005460124287905EB800050F8046C70785A -:10256000411E02290AD252493A46083901EB80003D -:10257000314650F8043C2846984704460CB1012CDB -:1025800011D12879401E10F0FF00287101D00324DA -:10259000E0E70A208DF80000706A0590002101969E -:1025A0006846FFF7A7FF032CD4D007B02046F0BD44 -:1025B00070B515460A46044629461046FFF7C5FF82 -:1025C000064674B12078FE280BD1207C30B1002063 -:1025D0002870294604F10C00FFF7B7FF2046FEF7EC -:1025E00021FF304670BD704770B50E4604467C2111 -:1025F00012F051FB0225012E03D0022E04D005203B -:1026000070BD0120607000E065702046FEF70AFF93 -:10261000A575002070BD28B1027C1AB10A4600F1F0 -:102620000C01C5E70120704710B5044686B00420B0 -:1026300001F07AFF2078FE2806D000208DF80000F7 -:1026400069462046FFF7E7FF06B010BD7CB50E4691 -:1026500000218DF804104178012903D0022903D00C -:10266000002405E0046900E044690CB1217C89B1D3 -:102670006D4601462846FFF754FF032809D132462C -:1026800029462046FFF794FF9DF80410002900D04A -:1026900004207CBD04F10C05EBE730B40C46014688 -:1026A000034A204630BC034B0C3AFEF756BE0000EE -:1026B000845102004051020070B50D46040011D053 -:1026C00085B12101284612F0C4FA10224E4928464D -:1026D00012F040FA4C4801210838018044804560DE -:1026E000002070BD012070BD70B5474E0024054626 -:1026F000083E10E07068AA7B00EB0410817B9142D9 -:1027000008D1C17BEA7B914204D10C22294612F008 -:10271000F5F930B1641C30888442EBDB4FF0FF30B8 -:1027200070BD204670BD70B50D46060006D02DB1B7 -:10273000FFF7DAFF002803DB401C14E0102070BD17 -:10274000314C083C20886288411C914201D9042008 -:1027500070BD6168102201EB0010314612F0FAF9E9 -:102760002088401C20802870002070BD70B5144661 -:102770000D0018D0BCB10021A170022802D0102891 -:1027800011D105E0288870B10121A170108008E006 -:102790002846FFF7A9FF002805DB401CA070A88988 -:1027A0002080002070BD012070BD70B50546144624 -:1027B0000E000BD000203070A878012808D005D971 -:1027C0001149A1F108010A8890420AD9012070BD7F -:1027D00024B1287820702888000A507002200870E0 -:1027E0000FE064B14968102201EB00112046103956 -:1027F00012F0B0F9287820732888000A607310203E -:102800003070002070BD00007C0000202DE9F041F8 -:1028100090460C4607460025FE48072F00EB881619 -:1028200007D2DFE807F007070707040404000125C3 -:1028300000E0FFDF06F81470002D13D0F54880305B -:1028400000EB880191F82700202803D006EB400018 -:10285000447001E081F8264006EB440220205070CD -:1028600081F82740BDE8F081F0B51F4614460E46BA -:102870000546202A00D1FFDFE649E648803100EB1B -:10288000871C0CEB440001EB8702202E07D00CEBD9 -:10289000460140784B784870184620210AE092F8AB -:1028A0002530407882F82500F6E701460CEB410020 -:1028B00005704078A142F8D192F82740202C03D02F -:1028C0000CEB4404637001E082F826300CEB410409 -:1028D0002023637082F82710F0BD30B50D46CE4B33 -:1028E00044190022181A72EB020100D2FFDFCB4814 -:1028F000854200DDFFDFC9484042854200DAFFDF44 -:10290000C548401C844207DA002C01DB204630BD5C -:10291000C148401C201830BDBF48C043FAE710B57D -:1029200004460168407ABE4A52F82020114450B152 -:102930000220084420F07F40F0F71DF994F90810B8 -:10294000BDE81040C9E70420F3E72DE9F047B14E98 -:10295000803696F82D50DFF8BC9206EB850090F893 -:10296000264034E009EB85174FF0070817F81400EC -:10297000012806D004282ED005282ED0062800D005 -:10298000FFDF01F0E3F8014607EB4400427806EB75 -:10299000850080F8262090F82720A24202D120222C -:1029A00080F82720084601F0DCF82A46214601205D -:1029B000FFF72CFF9B48414600EB041002682046BD -:1029C000904796F82D5006EB850090F82640202C75 -:1029D000C8D1BDE8F087022000E003208046D0E7A0 -:1029E00010B58C4C2021803484F8251084F82610F2 -:1029F00084F82710002084F8280084F82D0084F83B -:102A00002E10411EA16044F8100B207460742073D6 -:102A10006073A0738449E0772075087048700021C6 -:102A20007C4A103C02F81100491CC9B22029F9D394 -:102A30000120EFF78EFF0020EFF78BFF012084F8D5 -:102A40002200F9F7A9F97948F9F7B5F9764CA41EEF -:102A500020707748F9F7AFF96070BDE81040EFF7E4 -:102A600005BF10B5EFF727FF6F4CA41E2078F9F7CC -:102A7000BBF96078F9F7B8F9BDE8104001F09EB8ED -:102A8000202070472DE9F34F624E0025803606EB7B -:102A9000810A89B09AF82500202822D0691E029167 -:102AA0006049009501EB00108146D0E90112C06831 -:102AB0000391CDE90420B08BADF81C00B07F8DF8F8 -:102AC0001E009DF81500C8B10227554951F8204055 -:102AD0000399E219114421F07F41019184B102214F -:102AE0000FE00120EFF735FF0020EFF732FFEFF79F -:102AF00000FF01F063F886F82F50A0E00427E4E718 -:102B000000218DF81810022801D0012820D1039847 -:102B1000391901440998081A9DF81C1020F07F40CB -:102B200001B10221333181420BD203208DF815000F -:102B30000398C4F13201401A20F07F403224039000 -:102B40000CE096F8240018B9F0F726FA00284CD0CB -:102B5000322C03D214B101F025F801E001F02EF877 -:102B6000314A107818B393465278039B121B002108 -:102B70009DF81840984601281AD0032818D0002044 -:102B80008DF81E00002A04DD981A039001208DF8AC -:102B900018009DF81C0000B102210398254A20F07E -:102BA0007F40039003AB099801F014F810B110E0D6 -:102BB0000120E5E79DF81D0018B99BF800000328E7 -:102BC00012D08DF81C50CDF80C808DF818408DF87F -:102BD0001E509DF8180058B103980123C119002216 -:102BE0001846EFF709FF06E000200BB0BDE8F08FB4 -:102BF0000120EFF7AEFE99F90C2001230020019986 -:102C0000EFF7FAFE012086F82F008AF828502022DC -:102C1000694611E098080020FF7F841E0020A1076C -:102C200094510200980600208E000020834201008B -:102C30004B290100FFFF3F00F94811F0D0FF0120B0 -:102C4000D3E72DE9F05FDFF8D883064608EB86006E -:102C500090F82550202D1FD0A8F180002C4600EBC5 -:102C60008617A0F50079DFF8BCB305E0A24607EBB4 -:102C70004A004478202C0AD0EFF70AFF09EB04132E -:102C80005A4601211B1D00F0A5FF0028EED0AC42E2 -:102C900002D0334652461EE0E34808B1AFF300804D -:102CA000EFF7F6FE98F82F206AB1D8F80C20411CF7 -:102CB000891A0902CA1701EB12610912002902DD03 -:102CC0000020BDE8F09F3146FFF7DCFE08B101208F -:102CD000F7E733462A4620210420FFF7C5FDEFE73A -:102CE0002DE9F041CE4C2569EFF7D2FE401B0002E2 -:102CF000C11700EB1160001200D4FFDF94F822002E -:102D000000B1FFDF012784F8227094F82E002028FC -:102D100000D1FFDF94F82E60202084F82E000025DB -:102D200084F82F5084F8205084F82150BF48256043 -:102D30000078022833D0032831D000202077A06803 -:102D4000401C05D04FF0FF30A0600120EFF701FEDE -:102D50000020EFF7FEFDEFF7FCFEEFF7F4FEEFF7D4 -:102D6000C8FD11F031F9B248056005604FF0E0216F -:102D70004FF40040B846C1F88002EFF784FF94F8A2 -:102D80002D703846FFF75DFF0028FAD0A448803840 -:102D900000EB871010F81600022802D006E0012090 -:102DA000CCE73A4631460620FFF730FD84F8238011 -:102DB00004EB870090F82600202804D09B48801E52 -:102DC0004078F9F717F8207F002803D0EFF7B1FE1D -:102DD0002577657746E50146914810B590F82D2096 -:102DE0000024803800EB821010F814302BB1641CE2 -:102DF000E4B2202CF8D3202010BD8E4800EB041044 -:102E0000016021460120FFF701FD204610BD10B5ED -:102E1000012801D0032800D171B3814A92F82D30E6 -:102E20007F4C0022803C04EB831300BF13F8124058 -:102E30000CB1082010BD521CD2B2202AF6D37B4A16 -:102E400048B1022807D0072916D2DFE801F015069D -:102E5000080A0C0E100000210AE01B2108E03A21AC -:102E600006E0582104E0772102E0962100E0B52138 -:102E700051701070002010BD072010BD6B4810B5B8 -:102E80004078EFF778FE80B210BD10B5202811D23F -:102E9000634991F82D30A1F1800202EB831414F8FC -:102EA00010303BB191F82D3002EB831212F8102054 -:102EB000012A01D0002010BD91F82D2001460020EC -:102EC000FFF7A4FC012010BD10B5EFF7E1FDBDE850 -:102ED0001040EFF750BE2DE9F0410E46504F0178FB -:102EE0002025803F0C4607EB831303E0254603EBC8 -:102EF00045046478944202D0202CF7D108E0202CBD -:102F000006D0A14206D103EB41014978017007E0E8 -:102F10000020A7E403EB440003EB45014078487030 -:102F2000454F7EB127B1002140F2DA30AFF3008087 -:102F30003078A04206D127B1002140F2DD30AFF356 -:102F40000080357027B1002140F2E230AFF30080FD -:102F5000012087E410B542680B689A1A1202D41750 -:102F600002EB1462121216D4497A91B1427A82B9F4 -:102F7000324A006852F82110126819441044001DAA -:102F8000891C081A0002C11700EB116000123228D8 -:102F900001DB012010BD002010BD2DE9F047814666 -:102FA0001F48244E00EB8100984690F825402020D1 -:102FB000107006F50070154600EB81170BE000BF9E -:102FC00006EB04104946001DFFF7C4FF28B107EBCC -:102FD00044002C704478202CF2D1297888F8001015 -:102FE00013E000BF06EB0415291D4846FFF7B2FFAA -:102FF00068B988F80040A97B99F80A00814201D895 -:103000000020E6E407EB44004478202CEAD10120BC -:10301000DFE42DE9FC410E4607460024054D18E08B -:1030200018090020FFFF3F00000000008E00002074 -:1030300000F50040980600200000000094510200B6 -:103040009DF8000005EB00108168384600F0D6FDC1 -:1030500001246B4601AA31463846FFF79EFF00283F -:10306000EED02046BDE8FC8170B50446FF4801253E -:10307000A54300EB841100EB8510402211F06AFD9E -:10308000FB4E26B1002140F25C40AFF30080F748D0 -:10309000803000EB850100EB8400D0F82500C1F8FA -:1030A000250026B100214FF48C60AFF30080284644 -:1030B00070BD2DE9FC418446EC481546089C00EBA8 -:1030C00085170E4617F81400012803D0022801D0F6 -:1030D0000020C7E70B46E74A0121604600F07AFD71 -:1030E000A8B101AB6A4629463046FFF756FF70B1DA -:1030F000DE489DF804209DF80010803000EB850626 -:103100008A4208D02B460520FFF7AEFB0BE02A468B -:103110002146042014E0202903D007EB4100407829 -:1031200001E096F8250007EB440148709DF8000087 -:10313000202809D007EB400044702A46214603208E -:10314000FFF764FB01208DE706F8254F0120F070A2 -:10315000F3E7C94901EB0010001DFFF7E0BB7CB5A8 -:103160001D46134604460E4600F108022146184645 -:10317000EFF70EFD94F908000F2804DD1F382072C8 -:103180002068401C206096B10220BC4951F82610EE -:10319000461820686946801B20F07F40206094F923 -:1031A00008002844C01C1F2803DA012009E004207D -:1031B000EBE701AAEFF7ECFC9DF8040010B10098D2 -:1031C000401C00900099206831440844C01C20F045 -:1031D0007F4060607CBD2DE9FE430C4606460978C1 -:1031E00060799072207998461546507241B19F4897 -:1031F000803090F82E1020290AD00069401D0BE085 -:10320000D4E90223217903B02846BDE8F043A6E7BC -:103210009B484178701D084420F07F4721790022A7 -:103220002846A368FFF79BFF3946284600F0E6FCD6 -:10323000D4E9023221796846FFF791FF41462846DA -:10324000019CFFF7E6FE2B4622460021304600F0A7 -:10325000C1FC002803D13146284600F0CFFCBDE870 -:10326000FE832DE9FE4F814600F084FC30B100273B -:1032700099F8000020B10020BDE8FE8F0127F7E794 -:103280007A4D7B4C4FF0000A803524B1002140F28A -:10329000D340AFF3008095F82D8085F823A0002659 -:1032A00024B100214FF49B60AFF300801FB940466A -:1032B000FFF7DAFE804624B100214FF49C60AFF3A3 -:1032C0000080EFF7E5FB43466A464946FFF783FF78 -:1032D00024B1002140F2E640AFF3008095F82E00C3 -:1032E00020280CD029690098401A0002C21700EB70 -:1032F0001260001203D5684600F080FC012624B15C -:1033000000214FF49E60AFF3008095F82300002861 -:10331000BBD124B1002140F2F640AFF30080EFF7BB -:10332000B7FB6B46534A002100F054FC0028A3D0A1 -:1033300027B941466846FFF76CFE064326B168464A -:10334000FFF7EDFAC9F8080024B1002140F2095056 -:10335000AFF3008001208FE72DE9FF5F8A468146A9 -:1033600000F008FC414C803410B39AF800000027AC -:1033700010B1012800D0FFDF3D4D25B1002140F202 -:103380007F50AFF300800120A84600905FEA080656 -:1033900004D0002140F28750AFF30080009800F085 -:1033A000E0FB94F82D50002084F8230067B119E069 -:1033B00094F82E000127202800D1FFDF9AF80000A2 -:1033C0000028D9D0FFDFD7E72846FFF74DFE054696 -:1033D00026B1002140F29150AFF3008094F8230011 -:1033E0000028D3D126B1002140F29B50AFF30080DA -:1033F000EFF74EFB83462B4601AA5146FFF7EBFE43 -:103400005FEA060804D0002140F2A250AFF300802A -:103410003B462A4601A95846CDF80090FFF749FEE1 -:10342000064604EB850090F828B0B8F1000F04D0F0 -:10343000002140F2A950AFF3008000F087FB00901C -:10344000B8F1000F04D0002140F2AF50AFF300807C -:1034500094F82300002899D1B8F1000F04D000217E -:1034600040F2B750AFF3008003490BE0980800200A -:1034700000000000FFFF3F0098060020945102006A -:103480008E00002001EB09100DF1040C00F1040086 -:103490009CE80E0080E80E004EB35FEA080604D0F8 -:1034A000002140F2C450AFF300803BEA070012D085 -:1034B00094F82E0020280ED126B1002140F2C950E8 -:1034C000AFF300802846FFF7BCFB20B99AF8000054 -:1034D000D8B3012849D0B8F1000F04D0002140F240 -:1034E000E650AFF30080284600F029FB01265FEA92 -:1034F000080504D0002140F2EF50AFF3008000989F -:1035000000F02FFB25B1002140F2F350AFF3008013 -:103510008EB194F82D0004EB800090F8260020284E -:1035200009D025B1002140F2FA50AFF30080F948EC -:103530004078F8F75FFC25B1002140F2FF50AFF36F -:10354000008004B03046BDE8F09FFFE7B8F1000FFF -:1035500004D0002140F2D150AFF3008094F82D2028 -:1035600049460420FFF752F9C0E7002E3FF40EAFA2 -:10357000002140F2DC50AFF3008007E72DE9F84F5F -:10358000E54D814695F82D004FF00008E34C4FF0D3 -:10359000010B474624B1002140F20D60AFF30080DB -:1035A000584600F0DEFA85F8237024B1002140F27D -:1035B0001260AFF3008095F82D00FFF755FD064629 -:1035C00095F8230028B1002CE4D000214FF4C3600B -:1035D0004BE024B1002140F21C60AFF30080CE48E4 -:1035E000803800EB861111F81900032856D13346B4 -:1035F00005EB830A4A469AF82500904201D1012042 -:1036000000E0002000900AF125000021FFF763FC94 -:1036100001460098014203D001228AF82820AF77A2 -:10362000E1B324B1002140F22160AFF300803246C3 -:1036300049460120FFF7EAF89AF828A024B10021B2 -:1036400040F22C60AFF3008000F080FA834624B192 -:10365000002140F23160AFF3008095F8230038B1CB -:10366000002C97D0002140F23560AFF3008091E745 -:10367000BAF1000F07D095F82E00202803D130466C -:10368000FFF7DFFAE0B124B1002140F24960AFF367 -:103690000080304600F053FA4FF0010824B10021B9 -:1036A00040F25260AFF30080584600F05AFA24B15D -:1036B000002140F25660AFF300804046BDE8F88F2D -:1036C000002CF1D0002140F24460AFF30080E6E727 -:1036D0000020EFF717B90120EFF714B98D480078F3 -:1036E00070472DE9F0418C4C94F82E0020281FD112 -:1036F00094F82D6004EB860797F82550202D00D113 -:10370000FFDF8549803901EB861000EB45004078EA -:1037100007F8250F0120F87084F82300294684F863 -:103720002E50324602202234FFF770F8002020701D -:103730000FE42DE9F0417A4E774C012538B101288C -:1037400021D0022879D003287DD0FFDFF0E700F0F8 -:1037500029FAFFF7C6FF207E00B1FFDF84F8215071 -:103760000020EFF7F6F8A168481C04D001230022DE -:103770001846EFF741F914F82E0F217806EB0111E6 -:103780000A68012154E0FFF7ACFF0120EFF7E1F8F0 -:1037900094F8210050B1A068401C07D014F82E0FF7 -:1037A000217806EB01110A68062141E0207EDFF84E -:1037B0006481002708F10208012803D002281ED0E6 -:1037C000FFDFB5E7A777EFF7B4F998F80000032813 -:1037D00001D165772577607D524951F8200094F832 -:1037E000201051B948B161680123091A0022184616 -:1037F000EFF702F9022020769AE7277698E784F817 -:10380000205000F0CFF9A07F50B198F80100616816 -:103810000123091A00221846EFF7EEF8257600E09A -:10382000277614F82E0F217806EB01110A68002183 -:10383000BDE8F041104700E005E036480078BDE8FB -:10384000F041F8F7D7BAFFF74CFF14F82E0F2178A4 -:1038500006EB01110A680521EAE710B52E4C94F831 -:103860002E00202800D1FFDF14F82E0F21782C4ADB -:1038700002EB01110A68BDE81040042110477CB535 -:10388000254C054694F82E00202800D1FFDFA068C3 -:10389000401C00D0FFDF94F82E00214901AA01EB63 -:1038A0000010694690F90C002844EFF771F99DF972 -:1038B00004000F2801DD012000E0002000990844E9 -:1038C0006168084420F07F41A16094F8210000283D -:1038D00007D002B00123BDE8704000221846EFF780 -:1038E0008BB87CBD30B5104A0B1A541CB3EB940F47 -:1038F0001ED3451AB5EB940F1AD3934203D9101A6D -:1039000043185B1C14E0954210D9511A0844401C1E -:1039100043420DE08C000020180900200000000048 -:103920009806002094510200FF7F841EFFDF0023D1 -:10393000184630BD0123002201460220EFF75CB893 -:103940000220EFF706B8EFF7A3B82DE9FC47B14C1A -:10395000054694F82E00202800D1FFDF642D58D3AF -:10396000AD4A0021521B71EB010052D394F82E2076 -:10397000A0462046DFF8A49290F82D7009EB0214BF -:10398000D8F8000001AA28446946EFF701F99DF92B -:103990000400002802DD0098401C0090A0680099F7 -:1039A00062684618B21A22F07F42B2F5800F30D218 -:1039B00008EB8702444692F82520202A0AD009EB1A -:1039C00002125268101A0002C21700EB12600012B5 -:1039D00088421EDBA068401C10D0EFF759F8A168A0 -:1039E000081A0002C11700EB11600012022810DD56 -:1039F0000120EEF7AEFF4FF0FF30A06020682844B2 -:103A0000206026F07F402061012084F82300BDE87B -:103A1000FC870020FBE72DE9F0477E4C074694F831 -:103A20002D00A4F1800606EB801010F8170000B9F5 -:103A3000FFDF94F82D50A046794C24B1002140F6C8 -:103A40006500AFF3008040F6710940F67A0A06EB94 -:103A5000851600BF16F81700012818D0042810D0CA -:103A600005280ED006280CD01CB100214846AFF323 -:103A7000008020BF002CEDD000215046AFF3008025 -:103A8000E8E72A4639460120FEF7C0FEF2E74FF08C -:103A9000010A4FF00009454624B1002140F681009B -:103AA000AFF30080504600F05CF885F8239024B115 -:103AB000002140F68600AFF3008095F82D00FFF757 -:103AC000D3FA064695F8230028B1002CE4D0002153 -:103AD00040F68C001FE024B100214FF40960AFF3E1 -:103AE000008005EB860000F1270133463A46263078 -:103AF000FFF7F1F924B1002140F69400AFF3008004 -:103B000000F024F8824695F8230038B1002CC3D089 -:103B1000002140F69A00AFF30080BDE785F82D60E4 -:103B2000012085F82300504600F01BF8002C04D03B -:103B3000002140F6A700AFF30080BDE8F0873549CB -:103B400081F82D00012081F82300704710B5354819 -:103B500008B1AFF30080EFF3108000F0010072B6FF -:103B600010BD10B5002804D12F4808B1AFF3008074 -:103B700062B610BD2D480068C005C00D10D01038C9 -:103B800040B2002806DA00F00F0000F1E02090F8C3 -:103B9000140D03E000F1E02090F8000440097047A4 -:103BA0000820704710B51B4C94F82400002804D15D -:103BB000F7F7D2FE012084F8240010BD10B5154C93 -:103BC00094F82400002804D0F7F7EFFE002084F8D2 -:103BD000240010BD10B51C685B68241A181A24F064 -:103BE0007F4420F07F40A14206D8B4F5800F03D275 -:103BF000904201D8012010BD002010BDD0E9003254 -:103C0000D21A21F07F43114421F07F41C0E90031F5 -:103C10007047000018090020FF1FA1079806002028 -:103C200000000000000000000000000004ED00E0C3 -:103C30002DE9F041044680074FF000054FF00106E2 -:103C400004D55C480560066024F00204E0044FF0EF -:103C5000FF3705D558484660C0F8087324F48054EF -:103C6000600003D55548056024F08044E0050FD579 -:103C70005348C0F80052C0F8087352490D60091D3E -:103C80000D60504A04210C321160066124F48074E6 -:103C9000A00409D54C484660C0F80052C0F808732B -:103CA0004A48056024F40054C4F38030C4F3C031A2 -:103CB000884200D0FFDF14F4404F14D044484660DF -:103CC000C0F8087343488660C0F80052C0F8087313 -:103CD00041490D600A1D16608660C0F808730D60CA -:103CE000166024F4404420050AD53C4846608660AE -:103CF000C0F80873C0F848733948056024F40064BC -:103D000010F03CF93748044200D0FFDFBDE8F081F5 -:103D100070B520250022134620FA02F1C90719D0F8 -:103D200051B201F01F060124B4404E09B60006F15D -:103D3000E026C6F88041C6F88042002906DA01F084 -:103D40000F0101F1E02181F8143D03E001F1E021D0 -:103D500081F80034521CAA42DED370BD70B5224CEB -:103D60000D462060FFF764FF2068FFF7D1FF28466B -:103D7000F7F7CFFE0FF022FD00F0ADF810F0FEF8DF -:103D800010F041F8F8F708F8BDE870400FF0C4BD36 -:103D900010B5154C2068FFF74BFF2068FFF7B8FF00 -:103DA00010F0ECF8F7F773FF0020206010BD0A2038 -:103DB00070470000FC1F004000C0004004E50140C7 -:103DC000008000400485004000D0004004D5004041 -:103DD00000E0004000F0004000F5004000B000406E -:103DE00008B50040FEFF0FFD9000002070B5264989 -:103DF0000A680AB30022154601244B685B1C4B601D -:103E00000C2B00D34D600E7904FA06F30E681E42A7 -:103E10000FD0EFF3108212F0010272B600D001222F -:103E20000C689C430C6002B962B6496801600020CE -:103E300070BD521C0C2AE0D3052070BD4FF0E0216C -:103E40004FF48000C1F800027047EFF3108111F0C9 -:103E5000010F72B64FF0010202FA00F20A4803683D -:103E600042EA0302026000D162B6E7E70648002199 -:103E700001604160704701218140034800680840AB -:103E800000D0012070470000940000202DE9F0418F -:103E900015460E460446002700F0E7F8A84215D361 -:103EA000002341200FE000BF94F84220A25CF254AE -:103EB00094F84210491CB1FBF0F200FB12115B1C9C -:103EC00084F84210DBB2AB42EED3012700F0D9F800 -:103ED0003846BDE8F081704910B5802081F80004B3 -:103EE0006E49002081F8420081F84100433181F899 -:103EF000420081F84100433181F8420081F84100DD -:103F000067480FF071FE6648401C0FF06DFEEEF73B -:103F1000C9FEBDE8104000F0B4B8402070475F48CB -:103F200000F0A3B80A4601465C48AFE7402070475E -:103F30005A48433000F099B80A4601465748433082 -:103F4000A4E7402101700020704710B50446534893 -:103F5000863000F08AF82070002010BD0A46014625 -:103F60004E4810B58630FFF791FF08B1002010BD14 -:103F700042F2070010BD70B50C460546412900D934 -:103F8000FFDF48480068103840B200F050F8C6B271 -:103F90000D2000F04CF8C0B2864203D2FFDF01E0F2 -:103FA000EEF7D0FE224629463C48FFF76FFF002877 -:103FB000F6D070BD2DE9F041394F002506463F1D72 -:103FC00057F82540204600F041F810B36D1CEDB2C3 -:103FD000032DF5D33148433000F038F8002825D0C0 -:103FE0002E4800F033F8002820D02C48863000F00E -:103FF0002DF800281AD0EEF77BFE29480FF0FCFDC3 -:10400000B0F5005F00D0FFDFBDE8F04124480FF0BD -:1040100009BE94F841004121265414F8410F401C78 -:10402000B0FBF1F201FB12002070D3E751E700284A -:1040300006DA00F00F0000F1E02090F8140D03E024 -:1040400000F1E02090F800044009704710F8411F8B -:104050004122491CB1FBF2F302FB1311407881426B -:1040600001D1012070470020704710F8411F4078AF -:10407000814201D3081A02E0C0F141000844C0B2F5 -:10408000704710B506480FF0B7FD002803D1BDE812 -:104090001040EEF718BE10BD0DE000E0480900200A -:1040A0009C00002004ED00E070B5154D2878401C00 -:1040B000C4B26878844202D0EEF7D5FE2C7070BD91 -:1040C0002DE9F0410E4C4FF0E02600BFEEF7C0FEA8 -:1040D00020BF40BF20BF677820786070D6F80052BC -:1040E000EDF71CF9854305D1D6F8040210B9207804 -:1040F000B842EBD0EEF7A7FE0020BDE8F08100004B -:10410000AC0000202DE9F041012528034FF0E0210B -:104110000026C1F880011E4CC4F800610C2000F09C -:104120002CF81C4801680268C94341F3001142F0B1 -:1041300010020260C4F804532560491C00E020BF4F -:10414000D4F80021002AFAD019B9016821F0100131 -:104150000160114807686560C4F80853C4F800613D -:104160000C2000F00AF83846BDE8F08110B504468E -:10417000FFF7C8FF2060002010BD00F01F020121E2 -:1041800091404009800000F1E020C0F880127047A3 -:1041900000C0004010ED00E008C500402DE9F047E8 -:1041A000FF4C0646FF21A06800EB06121170217833 -:1041B000FF2910D04FF0080909EB011109EB061790 -:1041C0004158C05900F0F4F9002807DDA1682078B3 -:1041D00001EB061108702670BDE8F08794F80080A6 -:1041E00045460DE0A06809EB05114158C05900F0A3 -:1041F000DFF9002806DCA068A84600EB0810057867 -:10420000FF2DEFD1A06800EB061100EB08100D7038 -:104210000670E1E7F0B5E24B0446002001259A68FC -:104220000C269B780CE000BF05EB0017D75DA7427A -:1042300004D106EB0017D7598F4204D0401CC0B2FE -:104240008342F1D8FF20F0BD70B5FFF77CFBD44C62 -:1042500008252278A16805EB0212895800F0A8F918 -:10426000012808DD2178A06805EB01114058BDE860 -:104270007040FFF75FBBFFF731FABDE87040F7F71A -:10428000B9BD2DE9F041C64C2578FFF75CFBFF2D49 -:104290006ED04FF00808A26808EB0516915900F09F -:1042A00087F90228A06801DD80595DE000EB051167 -:1042B00009782170022101EB0511425C5AB1521EAE -:1042C0004254815901F5800121F07F4181512846F6 -:1042D000FFF764FF34E00423012203EB051302EB34 -:1042E000051250F803C0875CBCF1000F10D0BCF57C -:1042F000007F10D9CCF3080250F806C00CEB423C0A -:104300002CF07F4C40F806C0C3589A1A520A09E0B4 -:10431000FF2181540AE0825902EB4C3222F07F42A5 -:104320008251002242542846FFF738FF0C21A06832 -:1043300001EB05114158E06850F8272038469047B6 -:104340002078FF2814D0FFF7FEFA2278A16808EB46 -:1043500002124546895800F02BF9012893DD217897 -:10436000A06805EB01114058BDE8F041FFF7E2BA43 -:10437000BDE8F081F0B51D4614460E460746FF2BFA -:1043800000D3FFDFA00700D0FFDF8548FF21002218 -:10439000C0E90247C5700671017042708270104614 -:1043A000012204E002EB0013401CE154C0B2A84219 -:1043B000F8D3F0BD70B57A4C064665782079854211 -:1043C00000D3FFDFE06840F825606078401C607033 -:1043D000284670BD2DE9FF5F1D468B460746FF242A -:1043E000FFF7B1FADFF8B891064699F80100B84234 -:1043F00000D8FFDF00214FF001084FF00C0A99F8B8 -:104400000220D9F808000EE008EB0113C35CFF2B73 -:104410000ED0BB4205D10AEB011350F803C0DC45B6 -:104420000CD0491CC9B28A42EED8FF2C02D00DE054 -:104430000C46F6E799F803108A4203D1FF2004B036 -:10444000BDE8F09F1446521C89F8022008EB0411C5 -:104450000AEB0412475440F802B00421029B0022E8 -:10446000012B01EB04110CD040F801204FF400782F -:1044700008234FF0020C454513D9E905C90D02D0B8 -:1044800002E04550F2E7414606EB413203EB0413EC -:1044900022F07F42C250691A0CEB0412490A81547F -:1044A0000BE005B9012506EB453103EB041321F0C0 -:1044B0007F41C1500CEB0411425499F80050204642 -:1044C000FFF76CFE99F80000A84201D0FFF7BCFE90 -:1044D0003846B4E770B50C460546FFF734FA064691 -:1044E00021462846FFF796FE0446FF281AD02C4D99 -:1044F000082101EB0411A8684158304600F058F833 -:1045000000F58050C11700EBD14040130221AA688A -:1045100001EB0411515C09B100EB4120002800DCE3 -:10452000012070BD002070BD2DE9F047884681460E -:10453000FFF770FE0746FF281BD0194D2E78A8689C -:104540003146344605E0BC4206D0264600EB061252 -:104550001478FF2CF7D10CE0FF2C0AD0A6420CD126 -:1045600000EB011000782870FF2804D0FFF76CFEE4 -:1045700003E0002030E6FFF7E3F941464846FFF745 -:10458000A9FF0123A968024603EB0413FF20C854C6 -:10459000A878401EB84200D1A87001EB041001E0D9 -:1045A000140A002001EB061100780870104613E68B -:1045B000081A0002C11700EB1160001270470000DA -:1045C00070B50446A0F500002D4EB0F1786F02D210 -:1045D0003444A4F500042B48844201D2012500E0B4 -:1045E000002500F043F848B125B9B44204D3264869 -:1045F000006808E0012070BD002070BD002DF9D1D9 -:10460000B442F9D321488442F6D2F3E710B5044608 -:10461000A0F50000B0F1786F03D219480444A4F566 -:10462000000400F023F84FF0804130B116480068D4 -:1046300004E08C4204D2012003E014488442F8D202 -:10464000002080F0010010BD10B520B1FFF7DEFFA3 -:1046500008B1012010BD002010BD10B520B1FFF73A -:10466000AFFF08B1012010BD002010BD0848094966 -:104670000068884201D10120704700207047000087 -:104680000000002000600200200000200800002040 -:10469000B0000020BEBAFECA0548064A0168914231 -:1046A00001D1002101600449012008607047000029 -:1046B000B0000020BEBAFECA40E5014053480021C8 -:1046C0000170417010218170704770B50546164623 -:1046D0000C460220EEF785F84C49012008704C4941 -:1046E000F01E08604B480560001F046070BD10B5E7 -:1046F0000220EEF776F8454901200870464800216F -:10470000C0F80011C0F80411C0F8081143494FF473 -:104710000000086010BD3D480178C9B1404A4FF41F -:10472000000111603C49D1F800310022002B1CBF70 -:10473000D1F80431002B02D0D1F8081111B1427028 -:10474000102103E00121417036490968817002702F -:104750000020EEF746B82D480178002904BF4078C4 -:1047600070472D48D0F80011002904BF022070477F -:10477000D0F8001100291CBFD0F80411002905D081 -:10478000D0F80801002804BF0120704700207047BE -:104790001E4800B50278204B4078C821491EC9B296 -:1047A00082B1D3F800C1BCF1000F10D0D3F80001E2 -:1047B00000281CBFD3F8040100280BD0D3F808014F -:1047C00050B107E0022802D0012805D002E00029FC -:1047D000E4D1FFDF002000BD012000BD0B480178BF -:1047E000002904BF807870470B48D0F800110029D9 -:1047F0001CBFD0F80411002902D0D0F8080108B17C -:104800001020704707480068C0B27047B40000200D -:1048100010F5004008F5004000F0004004F50140AC -:1048200008F5014000F40040524800210170417039 -:10483000704770B5064614460D460120EDF7D1FFCE -:104840004D480660001D0460001D05604B490020B6 -:10485000C1F850014A49032008604B4949480860A3 -:10486000091D4A48086070BD70B5424B012540EAF9 -:1048700002421D70464B42F080721A60454A116038 -:10488000454C0026C4F80461454A4449116000289B -:1048900002BFC4F80052256070BD012818BFFFDFB9 -:1048A000C4F80062256040493E48086070BD314848 -:1048B000017871B13A4A394911603749D1F8042178 -:1048C0000021002A08BF417002D0384A12684270A5 -:1048D00001700020EDF785BF26480178002904BF4C -:1048E000407870472C48D0F80401002808BF704772 -:1048F0002E480068C0B27047002808BF704730B526 -:104900001C480078002808BFFFDF2348D0F80411B6 -:10491000002918BF30BD0224C0F80443DFF890C05E -:10492000DCF80010C1F30015DCF8001041F01001B4 -:10493000CCF80010D0F80411002904BF4FF4004156 -:104940004FF0E02207D100BFC2F8801220BFD0F89C -:104950000431002BF8D02DB9DCF8001021F0100143 -:10496000CCF80010C0F8084330BD0B490120886026 -:1049700070470000B700002008F50040001000401C -:104980001CF500405011004098F501400CF000402B -:1049900004F5004018F5004000F00040000002035C -:1049A00008F501400000020204F5014000F4004057 -:1049B00010ED00E010B5FF480024012144700470A0 -:1049C00044728472C17280F821408462446314305E -:1049D00010F068FAF849601E0860091D0860091D9A -:1049E0000C60091D0860091D0C60091D0860091D87 -:1049F0000860091D0860091D0860091D0860091D7F -:104A00000860091D0860091D0860091D086010BDC7 -:104A1000EA48016801F00F01032904BF0120704733 -:104A2000016801F00F01042904BF022070470168EA -:104A300001F00F01052904D0006800F00F000628DE -:104A400007D1DF48006810F0060F0CBF08200420D3 -:104A5000704700B5FFDF012000BD30B4D5490268C2 -:104A6000DFF864C34A6142688A61007A08770A7D88 -:104A7000D44BACF1040401204AB10A7E00FA02F2E0 -:104A80001A608D7D002D0CBF2260CCF800204A7D7D -:104A9000002A04BF30BC70474A7E90401860C97D30 -:104AA00000290CBF2060CCF8000030BC704730B546 -:104AB0000024054601290AD0022908BF4FF080745E -:104AC00005D0042916BF08294FF0C744FFDF44F47E -:104AD000847040F48010BD49086045F44030091DE1 -:104AE00040F00070086030BD30B500240546012953 -:104AF0000AD0022908BF4FF0807405D0042916BFE0 -:104B000008294FF0C744FFDF44F4847040F480105C -:104B1000AE49086045F44030091D40F0007008605F -:104B2000AB48D0F80001002818BFFFDF30BD0221DC -:104B300010B44FF0E02301200022C3F88011DFF809 -:104B400094C2CCF80020CCF80000DFF88CC2DCF86E -:104B5000004024F07044CCF80040A04C40F25B6C64 -:104B6000C4F800C0241F40F2031CC4F800C0A4F124 -:104B7000040CCCF80000DFF844C20320CCF800009D -:104B8000DFF85CC29620CCF80000DFF85CC29548E4 -:104B9000CCF80000DFF858C29448CCF80000ACF123 -:104BA000040C9448CCF80000C3F880128849102007 -:104BB000C1F804037F4880F82D2010BC70477D4A5F -:104BC0000368C2F802308088D08011727047794B38 -:104BD00010B51A7A8A4208D101460622981C0FF0B5 -:104BE0008DFF002804BF012010BD002010BD7148BA -:104BF00090F8210070476F4A517010707047F0B5FF -:104C00000546800000F1804000F580508B88C0F898 -:104C100020360B78D1F8011043EA0121C0F80016C4 -:104C200005F10800012707FA00F6734C002A04BFBB -:104C30002068B04304D0012A18BFFFDF206830434A -:104C40002060206807FA05F108432060F0BD0FF0EE -:104C5000DDBA584890F82E007047564890F830005A -:104C60007047664AC17811600068654900020860B3 -:104C70007047252808BF02210ED0262808BF1A2118 -:104C80000AD0272808BF502106D00A2894BF042242 -:104C9000062202EB4001C9B25A4A11605A49086023 -:104CA0007047F0B4434B9D7A012D62D0022D1CBF9A -:104CB000F0BC704793F815C0BCF1000F04BFF0BC06 -:104CC000704700BF514C524F4FF47A7C012D57D0A2 -:104CD000DE7D5D7E002E18BF0126012908BF292137 -:104CE0000CD0022A0CBF4B4C012A03D0042A0CBF63 -:104CF0003C46494C04F2E141B1FBFCF1491F084438 -:104D00004649086046490020C1F84C01280286F057 -:104D1000010140EA015040F00311187F820002F1C6 -:104D2000804202F5C042C2F810153E4901EB8002F4 -:104D3000997EC80000F1804000F5F830C0F81425D5 -:104D4000DFF8E4C0C0F810C5D87EC30003F180438B -:104D500003F5F833C3F81425264AC3F810250122B9 -:104D600002FA01F102FA00F0084330490860F0BC91 -:104D7000704793F814C0BCF1000FA3D1F0BC70478A -:104D80009E7D1D7E002E18BF012601295DD0022ABE -:104D900004BF274C4FF47A7151D0012A08BF4FF459 -:104DA000C8614CD0042A06BF3C4640F69801214C0D -:104DB00042E00000240A0020000E004010150040D0 -:104DC00014140040180500500C0500501415004044 -:104DD00000100040FC1F00407817004038150040CC -:104DE0004415004000000C0408F5014040800040DC -:104DF000A4F5014010110040401600402415004069 -:104E00001C1500400815004054150040A224020063 -:104E1000D0FB010004360200C0D401004C850040E4 -:104E200000800040006000404C81004004F50140DB -:104E30006836020030D3010018BF40F6E441214437 -:104E400001F5FA71B1FBFCF158E7022A08BF4FF4F3 -:104E50007A710AD0012A08BF4FF4C86105D0042A2C -:104E60000CBF40F6980140F6E44149F6FC6211445B -:104E7000E8E72DE9F047FC4D0446032090468946BB -:104E8000C5F80002FA49F948086048460FF011FADF -:104E900040460FF0F9F9F74F0126002C04BFBE720F -:104EA0002E6007D0012C05D140460FF051FB0220A7 -:104EB000B8726E60F048C664F048006842464946E1 -:104EC000BDE8F047EDE62DE9F0410F46E64905461D -:104ED00003201646C1F80002E54CE448206038463D -:104EE0000FF0E7F930460FF0CFF930460FF030FB06 -:104EF000E04815B1012D09D011E001218172416B0B -:104F000041F4801141634FF4801007E00221817267 -:104F1000416B41F4001141634FF4001020603246B0 -:104F20003946BDE8F0410020BBE62DE9FF4FCE4CED -:104F30008246002581B003208946C4F80002CC4F88 -:104F4000CA48386003980FF0B4F904980FF09CF940 -:104F5000DFF82CB3C74E4FF00108BAF1000F03D0B1 -:104F6000BAF1010F21D035E0CBF8004096F82D00C2 -:104F7000012806D0022818BFFFDF0CD086F80A806F -:104F800028E0DDE9031396F82C2048460FF012FACA -:104F9000B16A4518F2E7DDE9031296F82C3048466D -:104FA0000FF096F9B16A4518E8E704980FF0D0FAC7 -:104FB000B448CBF8000096F82D00DDE90313012872 -:104FC00096F82C20484624D00FF03EFAB16A4518D6 -:104FD0000220B072AC480560AD49AC480860706B07 -:104FE00040F400207063D4F800924FF0100AC4F827 -:104FF00008A30026C4F80062A6484FF4802BC0F82E -:1050000000B0FF208DF80000C4F81061C4F81080D3 -:1050100009E00FF09BF9B16A4518D9E79DF8000047 -:10502000401E8DF800009DF8000018B1D4F8100162 -:105030000028F3D09DF80000002808BFFFDFC4F867 -:105040000061C4F80C61C4F81061C4F80461C4F8CC -:105050001461C4F81861904800680090C4F8009288 -:10506000C7F800B0C4F804A34FF4002038608248A9 -:10507000C0F84C8081480068A84228BFFFDF28465E -:10508000DDE9031205B0BDE8F04F0AE62DE9F84767 -:10509000754CD4F8000220F00B09D4F804034FF04B -:1050A000100AC0F30018C4F808A30026C4F8006270 -:1050B00078497A4808606F4D0127A87A012802D004 -:1050C000022803D014E0287D10B911E0687D78B182 -:1050D000A87EEA7E07FA00F007FA02F210430860A1 -:1050E000287F800000F1804000F5C040C0F81065C6 -:1050F000FF208DF80000C4F81061276105E000BFB3 -:105100009DF80000401E8DF800009DF8000018B1C9 -:10511000D4F810010028F3D09DF80000002808BF43 -:10512000FFDFC4F810616E72AE72EF72C4F80092C5 -:10513000B8F1000F18BFC4F804A3BDE8F8870068F1 -:10514000574920F07F40086070474FF0E02002216F -:10515000C0F88011C0F8801270474FF0E0210220A3 -:10516000C1F8000170474F49087070474E49086008 -:10517000704730B53F4C0546A06AA84228BFFFDF04 -:105180000120207300203C492561C1F844014748B3 -:105190000560606B40F480006063C80134490860BA -:1051A00030BD70B5334C0546414A0220207310686B -:1051B0000E4600F00F00032808BF012213D010682C -:1051C00000F00F00042808BF02220CD0106800F085 -:1051D0000F0005281BD0106800F00F0006281CBF28 -:1051E000FFDF012213D094F82D0094F82C10012831 -:1051F00015D028460FF086F91F4920610020C1F81C -:1052000044012169A06A08442849086070BD294802 -:10521000006810F0060F0CBF08220422E3E73346B3 -:1052200028460FF038F9E7E71A494FF48000086084 -:105230001048416B21F480014163002101737047E4 -:10524000C20002F1804202F5F8321B4BC2F8103561 -:10525000C2F8141501218140054801600548426BE0 -:105260001143416370470000001000400000040437 -:1052700004F50140240A0020008000404C850040D5 -:10528000ACF50140041000404885004048810040D2 -:10529000A8F5014008F501401811004000000C0479 -:1052A0003C150040B9000020041500404485004032 -:1052B000101500401414004004110040FB48012167 -:1052C0004160C1600021C0F84411F9480160F9480B -:1052D00081627047F8490860F848D0F8001241F040 -:1052E0004001C0F800127047F448D0F8001221F0D5 -:1052F0004001C0F80012F049002008607047EF48F4 -:10530000D0F8001221F01001C0F8001201218161D3 -:105310007047EA480021C0F81C11D0F8001241F093 -:105320001001C0F800127047E44981B0D1F81C2187 -:10533000012A1EBF002001B07047E14A126802F046 -:105340007F02524202700020C1F81C01DD48006853 -:105350000090012001B0704730B50C00054608BF31 -:10536000FFDF14F0010F1CBF012CFFDF002D0CBF6D -:1053700001200220CF4901284872CC72CF4904BFD6 -:10538000D1F8000240F0040007D0022807BFD1F88E -:10539000000240F00800FFDF30BDC1F8000230BD60 -:1053A0002DE9F84FDFF8209399F80000042828BF72 -:1053B000FFDFDFF8F8A2DAF84C11C448BD4C002634 -:1053C0004FF00108D1B1A17A012902D0022903D0FE -:1053D00014E0217D11B911E0617D79B1A17EE27EF9 -:1053E00008FA01F108FA02F211430160217F8900F5 -:1053F00001F1804101F5C041C1F81065B348616B0E -:1054000001606663217B002019B1DAF8441101299B -:1054100000D00021A27AA94D012A71D0022A76D0AB -:10542000D5F8101101290CBF1021002141EA000715 -:10543000A748016811F0FF0F03D0D5F81411012916 -:1054400000D0002184F82E10006810F0FF0F03D068 -:10545000D5F81801012800D0002084F82F009D48BD -:10546000006884F83000FFF776F9012818BF0020A3 -:1054700084F83100C5F80061C5F80C61C5F8106109 -:10548000C5F80461C5F81461C5F818619248006850 -:1054900000908648C0F8446190480068DFF810A288 -:1054A0000090DAF800006062AAF104000068A062CF -:1054B0008B48016801F00F01032908BF012013D0B8 -:1054C000016801F00F01042908BF02200CD0016817 -:1054D00001F00F01052929D0006800F00F0006280F -:1054E0001CBFFFDF012021D084F82C00A07ADFF858 -:1054F000F4B184F82D0002282DD11FE000E006E071 -:10550000D5F80C01012814BF0020082088E7D5F841 -:105510000C01012814BF00200220734A1268012ADE -:1055200014BF042200221043084379E76F48006843 -:1055300010F0060F0CBF08200420D5E7607850B1AA -:10554000DBF8001009780840217831EA000008BF34 -:1055500084F8208001D084F8206017F0020F07D073 -:1055600099F80010624A4908606A52F82110884789 -:1055700017F0010F18BF00210CD05E4A99F80030D7 -:10558000A06A52F82320904799F8000010F0010F0C -:105590002AD10AE017F0020F18BF0121EDD117F050 -:1055A000080F18BF0221E8D1EEE7DBF80000007811 -:1055B00000F00F00072828BF84F8216014D2DBF820 -:1055C0000000062200F10901A01C0FF097FA40B973 -:1055D000207ADBF800100978B0EBD11F08BF01205A -:1055E00000D0002084F82100E17A002011F0020FA1 -:1055F0001CBF17F0020F17F0040F19D111F0100F94 -:105600001CBF94F82F20002A02D094F831207AB1E0 -:1056100011F0080F1CBF94F82020002A08D111F0C7 -:10562000040F02D094F8211011B117F0010F00D02F -:105630000120617A19B170B1FFF728FD19E0234804 -:105640002D490160D5F8000220F00300C5F80002E2 -:1056500084F80B800DE04FF0000B012913D00229D4 -:1056600018BFFFDF4CD0A06A012258440021FFF789 -:1056700018FB17F0010F56D0204899F8001050F889 -:105680002100804770E0D5F8000220F00400C5F842 -:105690000002667284F80B80012384F80A801A469F -:1056A000002196200EF014FE3BE000000080004038 -:1056B00044850040240A002060150040001000408E -:1056C000481500401C110040B900002008F50140B9 -:1056D0004016004010140040181100404481004062 -:1056E0001015004004150040001400401414004040 -:1056F000AC510200F451020000000404B451020055 -:10570000D5F8000220F00800C5F80002667284F89F -:105710000B800220A07201231A46002196200EF071 -:1057200015FE83469FE717F0020F08D0624999F8EB -:10573000002028EA970051F82210884714E017F05B -:10574000080F06D05D4899F8001050F821008047F6 -:105750000AE017F0100F08BFFFDF05D0584899F88E -:10576000001050F821008047A07A022818BFBDE839 -:10577000F88F207B002808BFBDE8F88F5149C1F899 -:105780004461022814D0012818BFFFDFA16A2069F4 -:10579000884298BFFFDF2069CAF80000606B4A4961 -:1057A00040F4800060634FF480000860BDE8F88F2B -:1057B0002169A06A0844EFE70021444A81B000282B -:1057C00018BFC2F80012C2F80011C2F80C11C2F8DA -:1057D0001011C2F80411C2F81411C2F818113C4893 -:1057E0000068009001B07047012804BF282070476E -:1057F000022804BF18207047042812BF08284FF45D -:10580000A870704700B5FFDF282000BD012804BF45 -:1058100041F6A4707047022804BF41F288307047F7 -:10582000042804BF45F63C207047082804BF47F20F -:10583000AC10704700B5FFDF41F6A47000BD012831 -:1058400004BF41F2D4707047022804BF41F2040043 -:105850007047042812BF082842F6A000704700B520 -:10586000FFDF41F2D47000BD012812BF02280020E2 -:105870007047042812BF08284FF4C870704700B55D -:10588000FFDF002000BD11490820C1F800021249C5 -:1058900010480860124911480860091D1148086045 -:1058A000091D11480860091D1048086006494FF499 -:1058B0004020086070470000C4510200D45102002B -:1058C000E45102000080004004F501400010004057 -:1058D000181100400000040408F5014000110040C8 -:1058E000A0F50140141000401C11004010100040B1 -:1058F00010B53F4822210FF0ACF93D48017821F066 -:1059000010010170012107F0D9FD3A49002081F80A -:1059100022004FF6FF70888437490880488010BD08 -:10592000704734498A8C824218BF7047002081F842 -:1059300022004FF6FF70888470472D490160704740 -:105940002D49088070472B498A8CA2F57F43FF3B85 -:1059500003D0002101600846704791F822202549B4 -:10596000012A1ABF0160012000207047214901F17E -:10597000220091F82220012A04BF00207047012252 -:1059800002701D4800888884104670471A49488074 -:1059900070471849184B8A8C5B889A4206D191F857 -:1059A0002220002A1EBF016001207047002070479E -:1059B0001048114A818C5288914209D14FF6FF71EB -:1059C000818410F8221F19B1002101700120704755 -:1059D000002070470748084A818C5288914205D1BF -:1059E00090F8220000281CBF00207047012070475B -:1059F000820A00205C0A0020BA0000207047574A43 -:105A0000012340B1012818BF7047137008689060E7 -:105A100088889081704753700868C2F802008888AF -:105A2000D08070474D4A10B1012807D00EE0507861 -:105A300060B1D2F802000860D08804E0107828B184 -:105A40009068086090898880012070470020704726 -:105A5000424910B1012803D006E0487810B903E0AC -:105A6000087808B1012070470020704730B58DB02C -:105A70000C4605460D2104A80FF00DF9E0788DF8CD -:105A80001F0020798DF81E0060798DF81D002868B0 -:105A9000009068680190A8680290E86803906846E2 -:105AA0000DF026FF20789DF82F1088420CD16078E9 -:105AB0009DF82E10884207D1A0789DF82D108842BD -:105AC00002BF01200DB030BD00200DB030BD30B59B -:105AD0000C4605468DB04FF0030104F1030012B1EE -:105AE000FEF72AFA01E0FEF746FA60790D2120F070 -:105AF000C00040F04000607104A80FF0CCF8E078DE -:105B00008DF81F0020798DF81E0060798DF81D003A -:105B10002868009068680190A8680290E86803907F -:105B200068460DF0E5FE9DF82F0020709DF82E00D0 -:105B300060709DF82D00A0700DB030BD10B500292B -:105B400004464FF0060102D0FEF7F6F901E0FEF739 -:105B500012FA607920F0C000607110BDBE00002014 -:105B600070B5FF4E0446306890F8001100250129F9 -:105B700019D090F8FA10012924D090F8D0100129FA -:105B80002AD090F8F21001291CBF002070BD65706A -:105B900017212170D0F8F4106160B0F8F81021815D -:105BA00080F8F25016E065701C212170D0F80111C8 -:105BB0006160D0F80511A16090F80911217380F897 -:105BC000005107E0657007212170D0F8FC1061607A -:105BD00080F8FA50012070BD65701421217000F129 -:105BE000D2012022201D0EF0B5FF01212172306864 -:105BF00080F8D050DB48B0F8D420A0F8FC207268C0 -:105C0000537B80F8FE3080F8FA101088FBF75EF9BD -:105C1000FAF705FEDEE7D248006890F8D0100029B8 -:105C200014BFB0F8D4004FF6FF70704770B5CC4C7D -:105C30002068002808BFFFDF002520684570002885 -:105C400008BFFFDF2068417800291CBFFFDF70BD5F -:105C50004FF486710FF01FF82068FF2101707F213B -:105C600080F8361013214184282180F8CC100121BE -:105C700080F8B81080F8BD50FFF736FBFEF74BFDFB -:105C8000B94807F0A7F9B94807F0A4F9BDE8704092 -:105C9000B74807F09FB9B2490968097881420CBF3B -:105CA000012000207047AE48006890F82200C0F341 -:105CB000001070472DE9F04FA948D0F800C09CF8BB -:105CC0002400C0F38001C0F34002114400F0010041 -:105CD0000B18BCF822000025C0F3001139B31328BB -:105CE0001DD009DC102802BFA24830F81300BDE81F -:105CF000F08F122813D006E0152808D01D2804BF05 -:105D00009D48BDE8F08FFFDF2846BDE8F08F9B4936 -:105D1000002031F8131013FB0010BDE8F08F9849F4 -:105D2000002031F8131013FB0010BDE8F08F0024A1 -:105D30009CF8BA209CF8BB10924EDFF84CA2DFF81A -:105D40004CB210F0030F4FF4C8774FF4BF784FF404 -:105D5000A8797CD010F0010F17D0082904BF3C4669 -:105D600040200CD0042904BF4446102007D002294B -:105D700007BF05F11804042005F12804082000EBF2 -:105D8000400E0EEB0010204417E0082904BF3846EF -:105D900040240CD0042904BF4046102407D0022917 -:105DA00007BF05F11800042405F12800082404EBBE -:105DB000C40404EB440400EB44009CF8CCC0022A69 -:105DC00008BF4FF47A740DD0012A04BF56464FF431 -:105DD000C86407D0042A07BF5E4640F698046C4E9C -:105DE00040F6E444344404F2E7364FF47A74B6FBE8 -:105DF000F4F4C3EB031606EB860604EB8604082ACC -:105E000052D0042A4BD0022A0CBF05F1180605F126 -:105E100028064FF019020CBF4FF0040A4FF0080A91 -:105E200012FB0A6212FB0342082908BF40230BD071 -:105E3000042908BF102307D0022907BF4FF0180913 -:105E400004234FF028090823C3EBC30300E030E02C -:105E500003EB430309EB43031A4411F00C0F08BF93 -:105E60004FF0000C6244082908BF40210CD00429DF -:105E700004BF4746102107D0022907BF05F11807C4 -:105E8000042105F128070821C1EBC10101EB410103 -:105E900007EB41011144084400F526740EE0464624 -:105EA00014224FF0100ABBE73E4614224FF0400A7E -:105EB000B6E710F0020F18BFFFDF02D02046BDE8A2 -:105EC000F08F022A08BF4FF47A700DD0012A04BF68 -:105ED00056464FF4C86007D0042A07BF5E4640F616 -:105EE00098002B4E40F6E440304400F2E73C4FF47B -:105EF0007A70BCFBF0F0C3EB031C0CEB8C0C00EBDA -:105F00008C0C082A04BF142040220CD0042A44D050 -:105F1000022A0CBF05F1180705F128074FF01900F8 -:105F20000CBF0422082210FB027010FB03C00829DA -:105F300008BF40210BD0042908BF102107D0022937 -:105F400007BF4FF0180904214FF028090821C1EBC1 -:105F5000C10101EB410109EB410108441AE00000D5 -:105F6000CC000020A40A0020B00B0020D80B002099 -:105F7000000C002018520200F18913002052020088 -:105F80001052020068360200A2240200D0FB010079 -:105F900030D3010000F5B27490E714204746102278 -:105FA000C1E7F94840F271210068806A48437047B0 -:105FB000F548006890F83500002818BF01207047A8 -:105FC00010B5F24C207B022818BF032808D1207D91 -:105FD00004F1150105F0E8FD08281CBF012010BDE3 -:105FE000207B002816BF022800200120BDE81040B9 -:105FF000FFF72EBDE449096881F8300070472DE9AC -:10600000F047E14D2968087B002816BF02280020D0 -:10601000012048730E31FFF705FD2968087B02282F -:1060200016BF03280122002281F82F20082081F8C2 -:106030002D00487B0126002701F10E03012804BF33 -:106040005B7913F0C00F0AD001F10E03012804D1CF -:10605000587900F0C000402801D0002000E0012065 -:1060600081F82E00002A04BF91F8220010F0040FDE -:1060700006D0087D153105F097FD296881F82D00BF -:1060800028684760FCF720FF2968C04C4FF00009E2 -:10609000886094F82D0005F0A3FD804694F82F0049 -:1060A000002818BFB8F1000F04D01021404606F0B8 -:1060B000D4FB68B194F8300000281CBF94F82E007F -:1060C00000281DD0607B04F10E0101280ED012E0E3 -:1060D00066734A4604F10E014046FFF7F8FC94F857 -:1060E0002D1004F10E0005F074FE09E0487900F06F -:1060F000C000402831D0394604F10E00FFF71EFDE4 -:106100002868C77690F8220010F0040F08BFBDE899 -:10611000F087002794F82D0005F06BFD040008BF00 -:10612000BDE8F087102106F098FB002818BFBDE8F5 -:10613000F08728683A4600F11C01C6762046FFF732 -:10614000C6FC286800F11C01914806F07AFFBDE802 -:10615000F04701218E4806F08FBF05F073FE4A46D6 -:1061600004F10E01FFF7B3FCCAE778B5874904468E -:10617000854D407B08732968207808706088ADF8E9 -:10618000000080B200F00102C0F3400342EA430283 -:10619000C0F3800342EA8302C0F3C00342EAC302B1 -:1061A000C0F3001342EA0312C0F3401342EA431261 -:1061B000C0F3801042EA80104884E07D012808BFC7 -:1061C000012607D0022808BF022603D0032814BFE7 -:1061D000FFDF0826286880F8BA60607E012808BFC3 -:1061E000012607D0022808BF022603D0032814BFC7 -:1061F000FFDF0826286880F8BB60217B80F8241028 -:10620000418C1D290CBF002161688162617D80F88D -:106210003510A17B002916BF02290021012101753B -:10622000D4F80F10C0F81510B4F81310A0F8191016 -:10623000A17EB0F8CE2061F30302A0F8CE20E17E6B -:10624000012918BF002180F83410002078BD4E4885 -:106250000068408CC0F3001119B110F0040F05D094 -:1062600002E010F0020F01D00020704701207047BB -:10627000454A00231268C2F8C030B2F822C0BCF10F -:106280001D0F02BFC2F8C83082F8C4307047002921 -:1062900008BFC2F8C8300AD0936A40F2712C03FBE1 -:1062A0000CF31944491EB1FBF3F1C2F8C81082F88F -:1062B000C40070470346344810B50168D1F8C820BF -:1062C000002A1ABFD1F8C0C0BCF1000F012405D0CC -:1062D0009A4205D90124D01AC1F8C800204610BD41 -:1062E00091F82210002411F0010F1CBF40680088B3 -:1062F0004FF0430108BF002001F017F9EEE72248F4 -:10630000006890F8B70000280CBF012000207047FB -:1063100070B51F2834BF04461F2400221A4D286878 -:1063200080F8B920224678300EF014FC286801214C -:1063300080F8974080F8B91070BD10B51F2828BFAD -:106340001F20C2B2104C0023206880F8B83080F8BB -:10635000B72098300EF0FEFB2168012081F8B800CC -:1063600010BD0949096881F8BD00704706480068FA -:1063700090F8220000F0010070470348006890F890 -:106380002200C0F340007047CC000020A40A002087 -:10639000B00B0020FE48006890F82200C0F34010C7 -:1063A0007047FB48006890F82200C0F3C0007047B7 -:1063B00001207047F648006890F8BB00704770B540 -:1063C000FEF77CFFFEF730FFFEF760FEFEF7BDFE36 -:1063D000EF4C2068D0F8C010491CC0F8C01090F8ED -:1063E0003300002530B1FEF77FFFFEF794F92068F7 -:1063F00080F833502068457090F8C410F9B1D0F897 -:10640000C02091421BD8042002F08AFA206890F83C -:10641000220010F0010F0CD060684321008801F0C9 -:1064200084F860680088FAF751FDBDE87040FAF71B -:10643000E7B9BDE870404321002001F076B8D0F8FC -:10644000C81019B1D0F8C020914202D990F8370095 -:10645000D8B1042002F064FA206890F8220010F00D -:10646000010F0CD060683C21008801F05EF8606884 -:106470000088FAF72BFDBDE87040FAF7C1B9BDE816 -:1064800070403C21002001F050B8BDE87040002071 -:1064900002F046BA2DE9F84FBD4E804617463068E7 -:1064A0008B464FF0000A458C15F0030F10D015F005 -:1064B000010F05F0020005D0002808BF4FF0010AC7 -:1064C00006D004E0002818BF4FF0020A00D1FFDF19 -:1064D0004FF000094C4615F0010F05F002000BD0FB -:1064E00070B915F0040F0BD049F00800002F18BF49 -:1064F00040F0030440D090E010B115F0040F0DD02F -:1065000015F0070F10D015F0010F05F0020036D07E -:10651000002808BF15F0040F27D03DE0002F18BF5A -:1065200049F0090479D134E02FB149F0080415F09D -:10653000200F14D071E0316805F0200291F8770047 -:10654000104308BF49F0010467D049F0180415F062 -:10655000200F62D191F8BA1008295AD156E031685B -:1065600091F8BA10082951D153E049F00800002FE2 -:1065700018BF40F0010450D140F010044DE0002855 -:1065800018BF15F0040F07D0002F18BF49F00B04F7 -:1065900043D149F0180440E015F0030F3CD115F049 -:1065A000040F39D077B1316849F0080091F8BA107A -:1065B00008290CBF40F0020420F0020415F0200F5F -:1065C00022D02AE0316805F0200291F877001043CC -:1065D00008BF49F0030420D049F0180015F0200F3F -:1065E00009D000BF91F8BA10082914BF40F0020486 -:1065F00020F0020411E091F8BA20082A14BF40F0FC -:10660000010020F00100EDE7082902D024F0010488 -:1066100003E044F0010400E0FFDF15F0400F18BF75 -:10662000FFDFA8F8009098F80000072120F0200074 -:1066300088F80000404606F0D2FC5146404606F07D -:10664000D1FE2146404606F0D6FE14F0010F0CD0D4 -:106650003068062300F10E010022404606F0A8FE35 -:106660003068417B404606F0FAFC14F0020F1BD064 -:106670003068BBF1000F0BD000F11C010623012292 -:10668000404606F095FE0121404606F0F5FC0BE081 -:1066900000F1150106230122404606F089FE30680C -:1066A000017D404606F0E8FC14F0040F18BFFFDF40 -:1066B00014F0080F17D0CDF800903068BDF8001026 -:1066C0000223B0F8CE00020962F30B01ADF800100E -:1066D0009DF80110032260F307118DF8011069463F -:1066E000404606F065FE012F16D1306890F877001D -:1066F00090B1404606F072FE3368401CC0B293F879 -:106700007710C0F125008142B8BF084682B203F17C -:106710005801404606F09DFE0020002818BFFFDF0C -:106720000020002818BFFFDF0020002818BFFFDF6F -:10673000BDE8F88F2DE9F843154C2068002808BF04 -:10674000FFDF2068417811BB0178FF2926D00027A0 -:1067500080F83170877080F837703846FEF703FD97 -:10676000FEF7E5F9206890F9BD00FEF770FA0948D8 -:10677000FEF777FA0848FEF7E2FC206890F824005C -:1067800010F0010F0DD02520FEF773FA10E005E0A0 -:10679000CC0000200C520200095202000C20BDE87F -:1067A000F88310F0020F18BF262067D0FEF761FAB9 -:1067B000206890F8BA102520FEF779F9206880F853 -:1067C0002C70FEF7CAFC2068002190F8BA20084619 -:1067D000FEF779FB0F210520FEF70DFA2068FF4D2B -:1067E000012690F82E10002901BF90F82F100029E3 -:1067F00090F8220010F0040F70D0FCF765FB804683 -:10680000206841468068FDF76DF8F54990FBF1F985 -:1068100001FB190041424046FCF75FF80146206841 -:10682000816041684944416005F0BBF90146206838 -:10683000426891426DD8C0E901784FF0010895F89F -:106840002D0005F0CDF9814695F82F00002818BFDE -:10685000B9F1000F04D01021484605F0FEFFA0B1A9 -:1068600095F8300000281CBF95F82E00002824D091 -:10687000687B05F10E01012815D019E010F0040F16 -:1068800014BF2720FFDF91D192E732466E7305F1E6 -:106890000E014846FFF71BF995F82D1005F10E0083 -:1068A00005F097FA09E0487900F0C000402816D0BA -:1068B000414605F10E00FFF741F9206890F82200EB -:1068C00010F0040F25D095F82D0005F092F95FEA3D -:1068D00000081ED0102105F0C0FF40B119E005F0FE -:1068E000B1FA324605F10E01FFF7F1F8E5E720684D -:1068F000324600F11C01C6764046FFF7E8F82068F2 -:1069000000F11C01B74806F09CFB0121B54806F0D8 -:10691000B3FB2068417B0E30FEF751F9206890F8F8 -:10692000B81079B390F8B72080F8772000F198017B -:1069300058300EF054F9206890F82210C1F300117D -:10694000E9B9B0F8CE0002210609ADF8006068464A -:10695000FDF7F2FA28B1BDF80000C0F30B00B04219 -:1069600004D1BDF80000401CADF800002168BDF85E -:106970000000B1F8CE2060F30F12A1F8CE202068FD -:1069800080F8B870206890F8B91059B190F8972045 -:1069900080F8572000F1780138300EF020F9206897 -:1069A00080F8B9702068B0F8CE10D0F8C02009097E -:1069B00051FA82F190F8BC20DFF82CC211446346F2 -:1069C0000022E1FB0C3212096FF0240302FB0311D9 -:1069D00080F8BC1090F82210824E90F81B80C1F312 -:1069E000001106F1280900295DD03780317821F0A7 -:1069F00020013170408C132837D01CDC10284DD07A -:106A0000122846D0FFDF00BF05F10E01754806F0E1 -:106A10000AFB697B734806F022FB2068418C1D2924 -:106A200018BF15297ED090F8772000F15801304624 -:106A300006F04BFB7EE0152818BF1D28E2D101218E -:106A4000304606F0CCFA3078B8F1000F40F0200064 -:106A50003070206812D000F11C01304606F0F1FAC7 -:106A60000121304606F008FBCEE70021304606F053 -:106A7000B6FA307840F020003070C5E700F115011B -:106A8000304606F0DEFA2068017D304606F0F4FA62 -:106A9000BAE70621304606F0A2FAB5E702213046F1 -:106AA00006F09DFAB0E7002241463046FFF7F2FCBF -:106AB000206890F87710002904BF408C10F0010F77 -:106AC00005D110F0020F08BF10F0200F04D00122F2 -:106AD00041464846FFF7DEFCF07810F03F0F1CBF40 -:106AE000307910F0100F25D0304606F076FA226883 -:106AF000014692F82400C0F38003C0F3400C6344C5 -:106B000000F00100034492F82C00C0F38002C0F3AF -:106B1000400C624400F001001044181AC0B200F0AA -:106B200018FD00E006E00090032304226946304689 -:106B300006F03EFC206890F82200C0F30010B0B1CF -:106B40002A4E04213046378006F049FA05F10E013D -:106B5000304606F068FA697B304606F080FA206815 -:106B600000F1380190F85720304606F0D2FA05F0CF -:106B70008DF803211E4805F01CF9216881F83300C7 -:106B80000020BDE8F8831B49486070472DE9F843B1 -:106B9000184C8046206890F8312032B1408C1D2876 -:106BA00008BFFFDFBDE8F84309E4012631B390F8E0 -:106BB000BC00FEF75EF8206890F8BB102520FDF7BA -:106BC00076FF206801224FF4967190F8BB300020C8 -:106BD000FEF7ABF90848FEF7C9FA10E0A40A002056 -:106BE00040420F00B00B002053E4B36E000C0020B5 -:106BF000280C0020CC000020D80B002006E02068E4 -:106C00004670867080F83160BDE8F883F948FEF779 -:106C1000ADFA2068002590F8241090F82C0021EAA5 -:106C2000000212F0010F18BF01250ED111F0020F62 -:106C300004D010F0020F08BF022506D011F0040F97 -:106C400003D010F0040F08BF04250027B8F1000F8F -:106C50005CD0012D1CD0022D08BF26201CD0042D95 -:106C600014BFFFDF272017D0206890F8BA10252026 -:106C7000FDF71DFF206890F82210C1F3001171B1DB -:106C8000002201234FF496711046FEF74EF93DE0C5 -:106C90002520FDF7EEFFE7E7FDF7EBFFE4E790F8CF -:106CA000BA3001224FF496710020FEF73EF9D14828 -:106CB000C17811F03F0F1CBF007910F0100F25D0E4 -:106CC000CC4806F08AF92368014693F82420C2F3E1 -:106CD0008000C2F3400C604402F0010200EB020CA1 -:106CE00093F82C20C2F38000C2F34003184402F052 -:106CF00001020244ACEB0200C0B200F02AFC00909A -:106D0000032304226946BB4806F052FB206890F832 -:106D10002C10294380F82C1090F8242032EA01012D -:106D200011D04670408C132820D01BDC102808BFDF -:106D3000BDE8F883122819D0C0F30010002818BF4E -:106D4000FFDFBDE8F883418C1D2908BF80F82C7057 -:106D5000E7D0C1F30011002914BF80F8316080F83A -:106D60003170DEE7152818BF1D28E5D1BDE8F843CE -:106D700001210846FEF7F0BA9F4810B50068417837 -:106D800041B90078FF2805D000210846FFF7FEFE34 -:106D9000002010BDFEF792FAFEF746FAFEF776F9EC -:106DA000FEF7D3F90C2010BD93490120096881F842 -:106DB000370070479049096881F83200704770B514 -:106DC000002601F01DFC002800F0C4808A4C2068D9 -:106DD000417801220025012905D0022901D003298B -:106DE00070D0FFDF70BD81780225B1B390F822002A -:106DF00010F0030F67D08148FEF7B8F92068012230 -:106E0000962190F8BB301046FEF78FF8216891F874 -:106E1000BB0091F8CC1010F00C0F08BF0021962099 -:106E2000FEF7BFF92068457090F8330058B1FDF7C0 -:106E30005EFC206890F8BB0010F00C0F0CBF4020E7 -:106E40004520FEF747FA206890F83400002808BF74 -:106E500070BDBDE87040FEF75CBA418CC1F3001212 -:106E60009AB1102929D090F8330020B1FDF73FFCEA -:106E70004020FEF72FFA6148FEF778F9206890F875 -:106E8000221011F0040F1FD029E090F8242090F870 -:106E90002C309A4211D190F87700002808BF11F0E9 -:106EA000010F05D111F0020F08BF11F0200F51D0D2 -:106EB000BDE870400121084668E6BDE87040002149 -:106EC000012063E619E045E090F83500012814BF81 -:106ED0000328102646F00E010020FEF73DFA206838 -:106EE00090F83400002818BFFEF713FA002196200E -:106EF000FEF757F92068457070BD817801B3418C69 -:106F000011F0010F21D080F8D02090F8D210B0F805 -:106F1000D40000F00AFB60680088F9F7D7FFF9F7A2 -:106F20006FFC20684570FEF7C9F9FEF77DF9FEF7A2 -:106F3000ADF8FEF70AF9BDE87040032001F0F0BC9F -:106F40008178BDE87040012020E611F0020F04BFF7 -:106F5000FFDF70BDBDE87040FFF731BAFFF72FBA11 -:106F600010B5254C206890F8341049B13630FEF742 -:106F7000DBF918B921687F2081F83600FEF7BFF9E8 -:106F8000206890F8330018B1FEF7AEF9FDF7C3FBA7 -:106F900001F036FBA8B1206890F82210C1F300116F -:106FA00079B14078022818BFFFDF00210120FFF7E8 -:106FB000EDFD2068417800291EBF40780128FFDFE1 -:106FC00010BDBDE81040FFF7FAB92DE9F0470A4FB0 -:106FD0000E4603283A68518C12D092F8320001F024 -:106FE000010410F1000918BF4FF001094FF001082A -:106FF0000CE00000B00B0020CC000020280C00208A -:10700000C1F340044FF000094FF00208FDF721FEE4 -:10701000054634EA090008BFBDE8F0873868FF4C30 -:1070200090F8330060B104F016FE30700146FF287E -:1070300006D0E01C04F004FE307804F017FE05438F -:107040002078C0F380113868027D914209D100F1A7 -:1070500015010622E01C0DF051FD002808BF01209B -:1070600000D000203178FF2906D0C0B9386890F8E8 -:107070002D00884215D112E098B12078E11CC0F3B0 -:10708000801004F091FD064604F0F4FE38B130465D -:1070900004F0AFFD18B1102105F0DFFB08B10120AD -:1070A00000E00020396891F8221011F0040F01D09F -:1070B000F0B11AE0CDB9DA4890F83500002818BFD1 -:1070C000404515D114F8030B2146C0F3801004F09D -:1070D0006BFD044604F0CEFE38B1204604F089FD75 -:1070E00018B1102105F0B9FB10B10120BDE8F087FF -:1070F0000020BDE8F0872DE9F04FCA4D804683B0EF -:10710000286800274078022818BFFFDF28687F24FE -:1071100090F8341049B13630FEF706F9002804BF64 -:10712000286880F83640FEF7EAF8BC4805F077FF9B -:107130000646B8F1000F00F0B081B84806F008F933 -:10714000002800F0AA81FDF752FD002800F0A5817B -:107150003046B24EFF21DFF8D0A24FF000084FF0CA -:10716000030B4FF00109062880F0B881DFE800F03A -:10717000FEFEFE03FE8F8DF8001069460320FFF728 -:1071800024FF002828687CD090F8341011B190F8C2 -:10719000001159B12868807801283ED0A348FDF736 -:1071A000E5FF286880F801B000F07BB99DF8003059 -:1071B00080F80091017880F80111FF2B10D000F2C7 -:1071C0000312511E184604F01DFD002808BFFFDF02 -:1071D000286890F8021141F0020180F802110DE0D8 -:1071E0003178C1F3801180F802118D49D1F88721DF -:1071F000C0F80321B1F88B11A0F80711286800F23C -:10720000091690F836007F2808BFFFDF286890F83D -:107210003610317080F83640BCE7844CDAF80490C0 -:1072200004F12806A4F800800721204605F0D7FEC7 -:107230000021204606F0D6F84946204606F0DBF845 -:107240000623002206F10901204606F0B1F828685D -:10725000417B204605F003FF286800F1380190F8D3 -:107260005720204606F0F5F82046FDF77FFF2868F6 -:107270000122962190F8BB300020FDF756FE90E7E2 -:10728000FFE78078002840F00A8100F006B98DF809 -:10729000081002A90520FFF798FE0028286800F0D2 -:1072A000F78082786249002A7ED0A1F11F066C68BF -:1072B00090F8BB90D6F80F00C4F80E00B6F8130093 -:1072C0006082707D2075B07D6075B6F81700E08231 -:1072D000B6F819006080B6F81B00A080B6F81D0053 -:1072E000E08004F108000DF0EBFD96F8240000F0BA -:1072F0001F00207696F82400400984F86C0184F879 -:10730000549084F85590286890F8CC1084F8561062 -:1073100090F8BD0084F857009DF80810686800F0E8 -:1073200081F9022001F0FCFAA6F12804DAF80090B5 -:10733000A4F800800821204605F051FE00212046D7 -:1073400006F050F84946204606F055F869463046A2 -:1073500005F07EFE304605F098FE0146204605F019 -:107360007EFE062300226946204600E0B6E006F0D5 -:107370001FF86946304605F05DFE304605F078FEA0 -:107380000146204605F078FE062301226946204684 -:1073900006F00EF82046FDF7E9FE28680122962146 -:1073A00090F8BB30002000E005E0FDF7BEFD286846 -:1073B00080F801B075E06C683278184E607BC2F3DB -:1073C000401210406073D6F80F00C4F80E00B6F8F3 -:1073D00013006082707D2075B07D6075B6F817006F -:1073E000E082B6F819006080B6F81B00A080B6F8FD -:1073F0001D00E0804FF0010A04F108000DF060FD6F -:1074000096F8240000F01F00207696F8240040092A -:1074100084F86C0184F854A00CE00000280C0020D3 -:10742000A40A0020CC00002004520200000C00201E -:10743000470C002084F855A0286890F8CC1084F8F8 -:10744000561090F8BD0084F857009DF80810686841 -:1074500000F0E8F8286880F8D09090F8D210B0F8E2 -:10746000D40000F062F868680088F9F72FFDF9F79A -:10747000C7F9286880F80180FDF720FFFDF7D4FEEA -:10748000FDF704FEFDF761FE012001F049FA08E076 -:1074900090F82200C0F3001008B1012701E0FEF7C8 -:1074A0008EFF286890F8330018B1FDF71DFFFDF737 -:1074B00032F91FB100210120FFF768FB28684178ED -:1074C000002919BF4178012903B0BDE8F08F407849 -:1074D000032818BFFFDF03B0BDE8F08F286890F8DD -:1074E0002200C0F300100028D9D0D6E770B58A4C2E -:1074F00006460D462068807858B1FDF789FA216864 -:107500000346304691F8BB202946BDE8704001F0A3 -:1075100074BAFDF77DFA21680346304691F8BA2027 -:107520002946BDE8704001F068BA7C4A137882F8B9 -:10753000F530A2F8F60082F8F410012082F8F2008B -:1075400092F8C400002818BF92F8C00082F8F80032 -:10755000704778B50446704800230093006890F89F -:10756000BA20082A04BF4FF4C87240230DD0042A61 -:1075700004BF4FF4BF72102307D0022A07BF03F1E4 -:107580001802042303F128020823491D01FB0326E6 -:1075900090F8BC209DF8001062F3050141F0400511 -:1075A0008DF8005090F8BB00012826D002282BD07F -:1075B000082818BFFFDF2DD025F080008DF80000CF -:1075C000C4EB041106FB04F001EB810100EB810424 -:1075D0005348844228BFFFDF5248A0FB0410BDF887 -:1075E0000110000960F30C01ADF80110BDF80000B6 -:1075F0009DF8021040EA014078BD9DF8020020F09D -:10760000E0008DF80200D7E79DF8020020F0E000CE -:10761000203004E09DF8020020F0E00040308DF8BA -:107620000200C9E72DE9F0413B4D04460E462868AB -:1076300090F8D000002818BFFFDF0027286880F8E6 -:10764000D2702188A0F8D4106188A0F8EA10A1882F -:10765000A0F8EC10E188A0F8EE1094F86C1180F816 -:10766000F01090F82F1049B1427B00F10E01012A71 -:1076700004D1497901F0C001402935D090F830108B -:1076800041B1427B00F10E01012A04BF497911F09A -:10769000C00F29D0DE300DF001FC2348FF2E00780A -:1076A000C0F3801060761D48D0F88711C4F81A1016 -:1076B000B0F88B01E08328681ED0C0F8E410E18B9D -:1076C000A0F8E81000F1D802511E304604F09AFAF2 -:1076D000002808BFFFDF286890F8D71041F00201AA -:1076E00080F8D710BDE8F081D0F80E10C0F8DE1099 -:1076F000418AA0F8E210D0E7C0F8E470A0F8E87082 -:10770000617E80F8D710D4F81A10C0F8D810E18B39 -:10771000A0F8DC10BDE8F081CC000020A40A002015 -:10772000C4BF030089888888280C0020FE48406870 -:1077300070472DE9F0410F460646014614460120E8 -:1077400005F082FA054696F85500FEF75FF8014607 -:1077500096F85500022808BFF44807D0012808BF52 -:10776000F34803D004280CBFF248F34808444FF410 -:107770007A7100F2E140B0FBF1F0718840F27122C1 -:107780005143C0EB4100001BA0F5597402F0E4FD29 -:10779000002818BF1E3CAF4234BF28463846A042DE -:1077A00003D2AF422CBF3C462C467462BDE8F08148 -:1077B0002DE9FF4F8FB0044690F855601C9899460C -:1077C00040EA0900019094F86500002790460D28D2 -:1077D0000CBF012000200990B9F1000F04BF94F8FC -:1077E0000C0103282BD1099848B3B4F88E01404509 -:1077F00025D1D4F81401C4F80001608840F2E241B8 -:107800004843C4F80401B4F85A11B4F8E600084437 -:10781000C4F80801204602F0A9FDB4F89201E08204 -:1078200094F890016075B4F894016080B4F8960102 -:10783000A080B4F89801E080022084F80C01D4F80C -:1078400064010C90B4F8E6A0B4F85801D4F860B123 -:10785000D4F854110891B9F1000F03D094F8201115 -:1078600049B193E004F1E001059174310A9104F506 -:10787000A075091D07E004F59A710591091D0A918B -:1078800004F59275091D0B91B4F85810A8EB00008F -:10789000A8EB010109B200B20391002805DAD4F87F -:1078A0005001089001200190084694F80C1100291D -:1078B00071D0012900F04482022900F0658103297A -:1078C00018BFFFDF00F0848239460898FBF705F8FF -:1078D0000A99012640F2712208600B98A0F80080F6 -:1078E000002028702E710A980068A8606188D4F87A -:1078F00014015143C0EB41009049A0F54D708861DF -:107900004969814287BF059908600598016005981B -:10791000616A0068084400F5D270E86002F01CFD5E -:1079200010B1E8681E30E8606E71B4F8D000A0EBCA -:10793000080000B20028C4BF03206871099800281D -:107940001C9800F0C282C0B1B4F8F81000290CBF36 -:107950000020B4F8FA00A4F8FA0094F8FC20401CC7 -:107960005043884209D26879401E002805DD6E71B7 -:10797000B4F8FA00401CA4F8FA00B9F1000F00F0C6 -:10798000C78294F82001002800F0BE8213B00220C4 -:10799000BDE8F08FFFE7BBF1000F08BFFFDF94F8F1 -:1079A0005510614890F8280005F0FBFA0790E08A2E -:1079B00040F271214143079800EB410210980021E9 -:1079C000002806D000FB02F15D48B1FBF0F000F1A9 -:1079D0000101C4F81011608840F2E24100FB01F29D -:1079E00010994FF0000006D0554801FB02F1B1FBA1 -:1079F000F0F000F10100C4F8140186B221464FF006 -:107A00000100D4F828A005F01FF9074694F85500A6 -:107A1000FDF7FCFE014694F85500022808BF4348D4 -:107A200007D0012808BF424803D004280CBF4148B2 -:107A30004148084400F2E1414FF47A70B1FBF0F1A3 -:107A4000608840F271225043C1EB4000801BA0F5DA -:107A5000597602F081FC002818BF1E3EBA4534BF9B -:107A600038465046B04203D2BA452CBF56463E4631 -:107A7000666294F85500FDF7F7FE4FF47A7600F24F -:107A8000E140B0FBF6F000EB0B0794F85500FDF772 -:107A9000EBFE024694F85500022808BF234907D0A0 -:107AA000012808BF224903D004280CBF21492249DC -:107AB00002EB010AFDF7AAFE504400F2DB514FF43D -:107AC0007A70B1FBF0F0E18A40F271224A430799E3 -:107AD000D4F810A101EB4201081AA0EB0A003844C7 -:107AE000A0F12007607D40F2E24110FB01F0079019 -:107AF00094F8556016F00C0F18BF4DF6883103D17D -:107B00003046FDF783FE0146022E08BF074807D026 -:107B1000012E08BF064803D0042E0CBF05480648B6 -:107B2000084400F2E1410DE0500C00200436020050 -:107B3000A2240200D0FB0100C0D40100D400002028 -:107B400040420F004FF47A70B1FBF0F000EB4A01B5 -:107B5000079801EB000A3046FDF746FE504400F15D -:107B60006201FD48416194F85500FDF77DFE00F289 -:107B7000E1414FF47A70B1FBF0F05844381AB0F597 -:107B80003D7F38BFFFDF9FE6E28A40F27121D4F8E3 -:107B90000401514300EB410210980021002806D057 -:107BA00000FB02F1ED48B1FBF0F000F10101C4F877 -:107BB0001011618840F2E24001FB00F210994FF091 -:107BC000000006D0E54801FB02F1B1FBF0F000F146 -:107BD0000100C4F8140186B221464FF00100D4F828 -:107BE00028B005F031F8074694F85500FDF70EFE71 -:107BF000014694F85500022808BFD94807D001284B -:107C000008BFD84803D004280CBFD748D748084439 -:107C100000F2E1414FF47A70B1FBF0F0618840F27C -:107C200071225143C0EB4100801BA0F5597602F050 -:107C300093FB002818BF1E3EBB4534BF384658464C -:107C4000B04203D2BB452CBF5E463E466662BAF1E7 -:107C5000000F2FD11C9868B394F855603046FDF79B -:107C6000D5FD0146022E08BFBD4807D0012E08BF32 -:107C7000BC4803D0042E0CBFBB48BC48084400F2EB -:107C8000E1414FF47A70B1FBF0F0D4F81011E38ABF -:107C9000014440F27122D4F804015A4300EB42003F -:107CA000471A3046FDF7A0FD0C99081A3844A0F198 -:107CB00020070AE0E28A40F27121D4F8040151431E -:107CC00000EB4101D4F810010F1AD4F80821D4F8C0 -:107CD0001011D4F8000100FB021B607D40F2E2416C -:107CE00010FB01FA94F8556016F00C0F18BF4DF612 -:107CF000883103D13046FDF789FD0146022E08BFC9 -:107D0000974807D0012E08BF964803D0042E0CBF19 -:107D100095489648084400F2E1414FF47A70B1FB6F -:107D2000F0F000EB4B0082443046FDF75DFD50441F -:107D300000F1600188484161012084F80C01C3E52D -:107D4000618840F271235943D4F81421D4F800C15A -:107D5000C2EB410101FB00F70398D4F8081150442D -:107D6000401AD4F81031401E0CFB013100FB021BFD -:107D7000607D40F2E24110FB01FA94F8556016F084 -:107D80000C0F18BF4DF6883103D13046FDF73EFD8C -:107D90000146022E08BF724807D0012E08BF714865 -:107DA00003D0042E0CBF70487048084400F2E14133 -:107DB0004FF47A70B1FBF0F000EB4B008244304698 -:107DC000FDF712FD504400F16001634841617BE51D -:107DD000628840F27123D4F814115A43C1EB420176 -:107DE00001FB00F794F8640024281CBF94F8650098 -:107DF00024280BD1B4F88E01A8EB000000B20028B3 -:107E000004DB94F89101002818BF0646019870B36E -:107E1000BAF1000F2BD10C98002814BFBBF1000F52 -:107E2000FFDF94F8550010F00C0F14BF4DF68830AA -:107E3000FDF7ECFC022E08BF494907D0012E08BF10 -:107E4000484903D0042E0CBF47494849084400F272 -:107E5000E1414FF47A70B1FBF0F03F1A94F855000D -:107E6000FDF7C2FC0C99081A3844A0F120070398CA -:107E7000D4F81411504400FB01FA16F00C0F18BF8F -:107E80004DF6883103D13046FDF7C0FC0146022E85 -:107E900008BF334807D0012E08BF324803D0042E54 -:107EA0000CBF31483148084400F2E1414FF47A7088 -:107EB000B1FBF0F000EB4A0A3046FDF795FC504468 -:107EC00000F1600124484161FEE400287FF43CADEC -:107ED00094F80C0100283FF450AD618840F2712203 -:107EE000D4F814015143C0EB4101284604F0D7FDFA -:107EF0000004000C3FF441AD1D99002918BF088013 -:107F0000012013B0BDE8F08F94F85C01FBF736FB5D -:107F100094F85C012946FBF71FFA00281CBF89F082 -:107F2000010084F82101002013B0BDE8F08F2DE995 -:107F3000F04F0F4C074683B020788946064E002547 -:107F40004FF00208032804BF207BB8427DD160684F -:107F50003061207803280DE0D400002040420F005B -:107F600004360200A2240200D0FB0100C0D40100AC -:107F7000500C002018BFFFDF0327B9F1080F78D29B -:107F8000DFE809F0040E1B1B167777726562FEF7B7 -:107F9000D1FB002818BFFFDFB77003B0BDE8F08F3A -:107FA000FEF7EAFE002818BFFFDF03B0BDE8F08F40 -:107FB00003B0BDE8F04FFDF7F3B92775257494F8C9 -:107FC0002C00012658B14FF47A71A069FAF785FCAC -:107FD000A061002104F1100004F061FD1AE001210C -:107FE0006846FBF79FFF9DF8000042F21071000207 -:107FF000B0FBF1F201FB1205FDF7D3FF0544294662 -:10800000A069FAF76AFCA061294604F1100004F0A7 -:1080100046FD461C208C411C0A293CBF304420846C -:10802000606830B1208C401C0A2828BF84F8158075 -:1080300000D267753046FEF73DF9002804BF03B053 -:10804000BDE8F08F607A002801E014E011E01CBF69 -:1080500003B0BDE8F08F207B04F11001FBF77CF941 -:10806000002808BFFFDFA0E7207BFAF70EFF25708E -:108070009BE7FFDF99E7202F28BFFFDFDFF804A48D -:1080800007213AF81700F8F7EFFD040008BFFFDFFB -:10809000202F28BFFFDFFB48218830F817008842D7 -:1080A00018BFFFDF01273461B9F1080F80F0548158 -:1080B000DFE809F0049EA6A6A1F0F0EFC4F8605135 -:1080C000F580C4F8645194F8210138B9FAF7FCFE40 -:1080D000D4F82C11FBF706FC00281BDCB4F81E11A9 -:1080E000B4F85800814206D1B4F8D410081AA4F8A4 -:1080F000D600204605E0081AA4F8D600B4F81E11F0 -:108100002046A4F85810D4F84811C4F82C11C0F82F -:1081100050111DE0B4F81C11B4F85800091AA4F865 -:10812000D610B4F81C112046A4F85810D4F82C111D -:10813000C4F84811C4F85011D4F83411C4F8E01050 -:10814000D4F83811C4F85411B4F83C11A4F85811FB -:1081500001F0B6FFFAF792FE94F855A0814650461A -:10816000FDF754FBBAF1020F08BFC74909D0BAF1B5 -:10817000010F08BFC54904D0BAF1040F0CBFC449B0 -:10818000C44908444FF47A7100F2E140B0FBF1F1C8 -:10819000D4F8140140F27122014460885043C1EBCD -:1081A0004000A0F1300AB9F1B70F98BF4FF0B709FE -:1081B0002146012004F048FD4844AAEB0000A0F24B -:1081C0001939A2462146012004F03EFDDAF82410B8 -:1081D0009C30814288BF0D1AC6F80C904D4538BFBF -:1081E000A946C6F8089084F8207186F80280DCE67B -:1081F00002F0ADF801E0FDF7D3F884F82071D4E681 -:10820000FAF762FED4F8502101461046FBF76AFBEC -:1082100048B1628840F27123D4F814115A43C1EB7B -:108220004201B0FBF1F094F865100D290FD0B4F8BD -:108230005820B4F81E1113189942AEBF481C401CB8 -:108240001044A4F81E0194F8220178B905E0B4F8AE -:108250001E01401CA4F81E0108E0B4F81E01B4F889 -:10826000D410884204BF401CA4F81E01B4F85A017F -:10827000DFF82492401CA4F85A01B4F88000B4F846 -:108280007E10401AB4F85810401E08441FFA80FBB4 -:1082900024E053E060E000BF96F80080B8F10C0FD6 -:1082A00028BFFFDF39F8188094F86CA1BAF10C0FE1 -:1082B00028BFFFDF39F81A000023404481B202A82A -:1082C000CDE90050B4F81E212046FFF771FA0028CE -:1082D0003FF46BAE012818BFFFDF27D0B4F81E01B2 -:1082E000ABEB000000B20028D6DA082084F8740056 -:1082F00084F87370204601F034FB84F80C5194F834 -:108300005C514FF6FF77202D00D3FFDF5D4820F84A -:10831000157094F85C01FAF7B8FD202084F85C0130 -:10832000307903B0BDE8F04FF3F764BDB4F81E0137 -:10833000BDF808100844A4F81E01CFE794F80C011A -:10834000042818BFFFDF84F80C5194F85C514FF6F5 -:10835000FF77202DDAD3D8E7FFDF26E610B54F4CA4 -:10836000207850B101206072FEF724FD20780328A8 -:1083700005D0207A002808BF10BD0C2010BD207B3E -:10838000FBF7FCF8207BFBF746FB207BFAF77DFD33 -:10839000002808BFFFDF0020207010BD2DE9F04F3E -:1083A0003E4F83B0387801244FF0000840B17C7212 -:1083B0000120FEF7FFFC3878032818BF387A0DD06B -:1083C000DFF8DC9089F8034069460720F8F7D5FB11 -:1083D000002818BFFFDF4FF6FF7440E0387BFBF743 -:1083E000CDF8387BFBF717FB387BFAF74EFD0028FA -:1083F00008BFFFDF87F80080E2E7029800281CBF73 -:1084000090F80C1100292AD00088A0421CBFDFF888 -:1084100074A04FF0200B4AD00721F8F725FC040088 -:1084200008BFFFDF94F85C01FBF7F5FA84F80C81D4 -:1084300094F85C514FF6FF76202D28BFFFDF2AF815 -:10844000156094F85C01FAF720FD84F85CB1694688 -:108450000720F8F792FB002818BFFFDF22E06846EC -:10846000F8F769FB0028C8D021E0029800281CBF5B -:1084700090F80C11002915D00088A0F57F41FF3934 -:10848000CAD114E0840C002004360200A2240200A9 -:10849000D0FB0100C0D4010028520200500C002083 -:1084A000D40000206846F8F746FB0028DDD089F8A4 -:1084B000038087F82C8087F80B8003B00020BDE88C -:1084C000F08F70B50446FD4890F80004FC4D40095B -:1084D00095F800144909884218BFFFDF95F8140D7C -:1084E0004009F84991F800144909884218BFFFDF94 -:1084F000F549002001220C7188700A704870C8701C -:10850000F2490870BDE8704048E7EF4908707047CD -:108510002DE9F843ED4C06468846207800285CD1CA -:10852000EB48FAF758FC2073202856D003276660E2 -:108530002770002565722572AEB1012106F1FC009D -:10854000FBF719FD0620F8F737FB81460720F8F7FF -:1085500033FB96F8FC104844B1FBF0F200FB12101C -:10856000401C86F8FC00FAF789FCDA49091838BF84 -:1085700040F2F65000F23D1086B2FDF79BFBE06141 -:10858000FDF70FFD4FF0010950B384F80A90012167 -:108590006846FBF7C7FC9DF8000042F2107100022C -:1085A000B0FBF1F201FB12000644FAF78DFC3146F4 -:1085B000FAF793F9A061277567752574207B04F19C -:1085C0001001FAF7C9FE002808BFFFDF258400204C -:1085D000FEF7F0FB0020BDE8F8830C20BDE8F8832F -:1085E000FAF772FC3146FAF778F9A061A57284F8BF -:1085F0002C90A8F226502063DDE7B34948707047FD -:10860000B24810B5417A0124002918BF002409D1CD -:1086100090F82C1031B1416A006B814284BF002474 -:10862000FEF7C2FB204610BD70B5A74C0546E0889A -:10863000401CE080D4E902016278D5F86061002A2C -:108640001CBF324604F053FAA060864208D895F861 -:108650000C01012804D0E078002804BF012070BD7F -:10866000002070BD70B50C4640F2E24100FB01F500 -:108670002046FDF7CBF8022C08BF974907D0012C04 -:1086800008BF964903D0042C0CBF9549954908446E -:108690004FF47A7100F2E140B0FBF1F000F54D705B -:1086A00085428CBF281A002070BD2DE9F04F83B0A1 -:1086B0004FF00009044680F8209190F8DE00002871 -:1086C00007BF94F80C01032803B0BDE8F08FFAF758 -:1086D000FBFBD4F8502101461046FBF703F90028B4 -:1086E000DCBF03B0BDE8F08F628840F27123D4F89C -:1086F00014115A43C1EB4201B0FBF1F0411CB4F834 -:1087000058000144A4F81C11B4F8D410B4F81C218A -:10871000891A09B20029DCBF03B0BDE8F08F01213E -:1087200084F82211B4F88010B4F87E206E4F891AB4 -:10873000491E084485B2DFF890A10DF1080B25E031 -:108740009AF800600C2E28BFFFDF37F8166094F807 -:108750006C81B8F10C0F28BFFFDF37F81800CDE9A6 -:10876000009B3044B4F81C2181B201232046FFF75E -:108770001FF8002804BF03B0BDE8F08F01280FD018 -:10878000022812BFFFDF03B0BDE8F08FB4F81C0170 -:10879000281A00B20028BCBF03B0BDE8F08FCFE7B5 -:1087A000B4F81C01BDF808100844A4F81C01EDE75A -:1087B0002DE9F0430422002583B006297DD2DFE8AD -:1087C00001F0074B03191951044680F80C2107E00A -:1087D00004463D48C178002918BF84F80C210CD00C -:1087E000FAF77EFAA4F85A51B4F85800A4F81E011A -:1087F00084F8225103B0BDE8F08306780C2E28BF20 -:10880000FFDF394F94F80C0137F816604FF001097B -:10881000032807D00128E3D194F86C81B8F10C0F3C -:108820000AD308E0C4F80851C4F8005194F86C81E8 -:10883000B8F10C0F00D3FFDF37F81800CDE9009531 -:10884000304481B2B4F8D42000232046FEF7B0FFB4 -:10885000002818BFFFDFC3E7032180F80C1103B025 -:10886000BDE8F0830546876AB0F81401294686B250 -:10887000012004F0E9F9044695F85500FCF7C6FF1D -:1088800095F85510022908BF134907D0012908BFE0 -:10889000124903D004290CBF1149124908444FF46E -:1088A0007A7100F2E140B0FBF1F0698840F2712288 -:1088B0005143C0EB4100801B18E02DE001E000E0D7 -:1088C0000BE000E019E000E0D4000020500C002094 -:1088D0002F7F01000AFAFFFF04360200A2240200E3 -:1088E000D0FB0100C0D4010028520200A0F5597647 -:1088F00001F032FD002818BF1E3EA74234BF2046BB -:108900003846B04228BF344602D2A74228BF3C4670 -:108910006C6203B0BDE8F083FFDF03B0BDE8F08315 -:10892000F8B5894C0246874F00256168606A052AC0 -:1089300048D2DFE802F0032F34373E00A07A002649 -:1089400060B101216846FBF7F7FA9DF8000042F29A -:1089500010710002B0FBF1F201FB1206FDF721FBE2 -:108960008119A069F9F7B9FFA0612574032060752A -:10897000607A38B9207B04F11001FAF7EDFC002889 -:1089800008BFFFDF2584FAF7ABF93879BDE8F84076 -:10899000F3F730BABDE8F840002100F06DB8C1F837 -:1089A0006001F8BDD1F86001BDE8F840012100F098 -:1089B00063B884F82C50FAF793F93879BDE8F84099 -:1089C000F3F718BAFFDFF8BD70B55E4CA178022945 -:1089D00006BFE188002970BD2569C5F8640195F8D6 -:1089E0005500FCF701FFD5F86411081AA16801448D -:1089F000A160E1680844E06070BD70B5054651486B -:108A000090F802C0BCF1020F06BF006900F5B07417 -:108A10004E4C002904BF256070BD4FF47A760129C1 -:108A20000DD002291CBFFFDF70BD1046FCF707FF09 -:108A300000F2E140B0FBF6F0281A206070BD184645 -:108A4000FCF712FF00F2E140B0FBF6F0281A2060BC -:108A500070BD3D48007800281CBF0020704710B54D -:108A60000720F8F79BF880F0010010BD3648007829 -:108A7000002818BF012070472DE9F047324C82B022 -:108A8000002584F82C50D4F8188084F82810E5725A -:108A900081462570012727722946606803F082FB12 -:108AA0006168C1F85081267B81F85C61C1F86091F2 -:108AB000C1F85481B1F80080202E28BFFFDF244880 -:108AC00020F81680646884F80C51DFF87880A4F8E8 -:108AD000585198F800600C2E28BFFFDFDFF8749023 -:108AE00039F816A094F86C610C2E28BFFFDF39F816 -:108AF00016000023504481B200951A462046019585 -:108B0000FEF756FE002818BFFFDFC4F80851C4F86E -:108B1000005184F80C71A4F81E51A4F81C5184F87B -:108B20002251B4F85800401EA4F85800A4F85A5135 -:108B3000FAF7D6F898F8040002B0BDE8F047F3F76A -:108B400059B90000D4000020500C0020740C002003 -:108B5000840C00202852020070B5FE4C21690A885E -:108B6000A1F8FC2181F8FA0191F85400012808BF0E -:108B7000012508D0022808BF022504D0042816BF0A -:108B800008280325FFDF206980F8FE5190F8550082 -:108B9000012808BF012508D0022808BF022504D0FB -:108BA000042816BF08280325FFDF2069012180F86B -:108BB000FF5180F8F811002180F8A4112079BDE858 -:108BC0007040F3F717B92DE9F04FE24C83B0A0796C -:108BD00010F0010F04BF03B0BDE8F08FA0690123BE -:108BE0000521C578206990F86520583003F0EDFE26 -:108BF00068B1A81E0A2806D2DFE800F009090505B9 -:108C0000090905050909A07840F00800A070A078BE -:108C100000281CBF03B0BDE8F08FA0694FF0200909 -:108C20004FF00208C778002F1CBF012F162F1DD14F -:108C3000206990F8640003F0B1FEB8B1216991F8A1 -:108C400064001F2812D0202808D0162F0CBF84F8EB -:108C5000029084F8028003B0BDE8F08F262081F8EE -:108C60006400162F1CBF2A20FFF776FF47F6FE7A16 -:108C7000012600254FF0280B0C2F00F03B8109DC6A -:108C800080F05F84DFE807F05A3923CCFDFDFCFB60 -:108C9000FAFD9CC3152F00F046820DDC112F00F069 -:108CA000C783122F00F0C081132F00F0B081142F62 -:108CB00000F0CE8100F045BC162F00F06782182F1F -:108CC00000F0CC82FF2F00F0358400F03ABC206920 -:108CD0000123194690F86720583003F076FE0028EB -:108CE00040F03184A06904F081FC216981F87201AF -:108CF000072081F8670000F026BC206901230021CD -:108D000090F86520583003F060FE002800F0C98319 -:108D1000A06904F068FC2169A1F88E01B1F858201F -:108D2000801A00B28245A8BF002843DD01F5C87152 -:108D3000A06904F053FC0B20216937E0206901236E -:108D4000002190F86520583003F03FFE002800F025 -:108D5000A883A06904F01EFC002800F0F283A0693B -:108D60002169B0F80D20A1F88E21B1F85830D21A3F -:108D700012B29245A8BF002A1CDD027981F8902129 -:108D8000B0F80520A1F8922104F0F7FB2169A1F8C1 -:108D90009401A06904F0F4FB2169A1F89601A0698F -:108DA00004F0F5FB2169A1F898010D2081F8650018 -:108DB00000F0C9BB81F874B081F8736000F0C3BBE8 -:108DC00020690123002190F86520583003F0FDFD53 -:108DD000002820690CD0A0F88A5090F88C10491C0B -:108DE00080F88C105FF0100180F8651000F0ABBBCC -:108DF00090F8652001230521583003F0E6FD002896 -:108E00001CBF0820A07040F09E8300F04ABB206980 -:108E100090F86510112908BF122140F0A082E3E705 -:108E200020690123002190F86520583003F0CDFD22 -:108E300080B9206990F86520122A0BD00123052102 -:108E4000583003F0C2FD002818BF082000F0298325 -:108E500000F099B9206990F88E1031B9A0F88A50C5 -:108E600090F88C10491C80F88C1000F1E801A06982 -:108E700004F0D5FB206900F1C00103E0A4E0F6E2B4 -:108E800023E05EE3A06904F0D5FB206990F8C001FF -:108E9000002818BFFFDF20690188A0F8C21100F583 -:108EA000E271A06904F0A9FB206900F5E671A069F0 -:108EB00004F0ABFB206980F8C061142180F86510D4 -:108EC0002079F2F797FF00F03EBB206990F865101B -:108ED000172940F0448290F88C10491E49B280F85E -:108EE0008C100029B8BFFFDF1B20216981F86500C5 -:108EF00000F029BB206990F8661011F0020F09D02C -:108F000090F8642001230821583003F05EFD00280A -:108F100000F0C782206990F8900010F0020F14D181 -:108F2000A06904F09BFB216981F89100A069B0F869 -:108F30000520A1F89220B0F80700A1F8940091F85C -:108F4000900040F0020081F89000206990F89010A5 -:108F500002E00000F000002011F0010F05D02069B0 -:108F600090F8641006291CD114E090F8660010F007 -:108F7000020F18BFFFDF206990F8661041F0020170 -:108F800080F86610A0F88A5090F88C10491C80F880 -:108F90008C10E4E780F8645080F888502079F2F76C -:108FA00029FF206990F88C11042940F0CC8280F8C8 -:108FB0008C512079F2F71EFF206990F86410002987 -:108FC00040F0C18200F031BA206990F8660010F0DC -:108FD000010F77D16946A06904F047FB9DF80000B6 -:108FE00000F02501206980F896109DF8011001F02D -:108FF000410180F89710A0F88A5090F88C10491C15 -:1090000080F88C1090F8661041F001011CE0206996 -:109010000123092190F86420583003F0D6FC002881 -:1090200040F0378200F03DBA206990F8661011F0E8 -:10903000040F40F03682A0F88A5090F88C2041F05E -:109040000401521C80F88C2080F8661000F07BBA76 -:10905000206990F8660010F0300F33D1A06904F059 -:1090600021FB002800F06D822769A06904F016FB3F -:1090700038872769A06904F00DFB78872769A06904 -:1090800004F00EFBB8872769A06904F005FBF88798 -:10909000A07910F0020F03D06069C078142812D0B4 -:1090A000206990F864101C290DD090F84E10012909 -:1090B0000CD090F89B11002904BF90F89A11002958 -:1090C0000CD003E05CE0206980F84E60206990F8E5 -:1090D000661041F0100180F866101AE090F86610F2 -:1090E00041F0200180F866100288A0F8E021028F8C -:1090F000A0F8E221428FA0F8E421828F00F5D6711A -:10910000A0F8E621C08F888781F832602079F2F7D5 -:1091100071FE2069A0F88A5090F88C10491C80F8E4 -:109120008C1000F010BA206901230A2190F8642005 -:10913000583003F04AFC18B3A06904F0B3FAA8B1A0 -:109140002669A06904F0AAFA30872669A06904F0AC -:10915000A1FA70872669A06904F0A2FAB08726698F -:10916000A06904F099FAF08701F000FB206980F80B -:10917000885080F8645000BF01F0C8FA00F0E3B9ED -:10918000A07840F00100A07000F0DDB92069012353 -:109190000B2190F86520583003F017FC20B100BF78 -:1091A00084F8029000F0CFB920690123002190F8E3 -:1091B0006520583003F009FC002800F07281206916 -:1091C00090F864002428EBD0A06904F086FA002807 -:1091D00000F0B781206990F8961041F0040180F802 -:1091E0009610A1694A7902F0070280F851200979A6 -:1091F00001F0070180F8501090F8A531002B04BF52 -:1092000090F8A431002B1CD190F855C000F1540304 -:109210008C4502BF1978914280F87D6011D000F52D -:10922000D67180F8F2610288A0F8F42190F85020FD -:1092300080F8F62190F8510081F84B002079F2F780 -:10924000D9FD2069212180F86510A0F88A5090F896 -:109250008C10491C80F88C1000F075B9206990F8CA -:109260006410202914BF0027012790F865102229D7 -:1092700008BF00F1650804D0002F18BF00F1640892 -:109280006DD090F8961041F0040180F89610A06916 -:1092900004F045FAF0B3D4F81890484604F033FAD5 -:1092A0000090484604F033FA814603F042FD010085 -:1092B00018D0206990F854208A4213D090F8A43135 -:1092C00023B190F8A63113EA090F4BD0002F04BF49 -:1092D00090F8513013EA090F01D18A4242D890F830 -:1092E000A401B8B1DDF80090484603F022FD78B142 -:1092F000216991F8552082420AD091F8A40120B149 -:1093000091F8A70110EA090F2CD091F8A40108B137 -:109310006A4600E026E0A169206903F019FDE8B380 -:10932000A06904F0FAF92169A1F88E01B1F858207A -:10933000801A00B28245A8BF0028DCBF81F874B053 -:1093400081F873605CDD9DF8000081F890019DF864 -:10935000010081F89101242088F8000050E084F891 -:109360000280F0E0206990F8A40100281CBF1E20B4 -:10937000FFF7F2FBB7B1A0692169C07881F8CA0094 -:1093800006FA00F010F0807F08BFFFDF0A21206995 -:1093900080F8641090F88800002800E014E008BF0E -:1093A000FFDF0DE088F80050206990F88C10491E0E -:1093B00049B280F88C100029B8BFFFDF01F08BF9AB -:1093C000206980F87D50BEE0226992F8A40170B156 -:1093D000B2F8583092F85410B2F8A80102F5C772EA -:1093E00003F0A8FDD8B12169252081F86400206927 -:1093F00000F1650180F87D50884508BF80F8655010 -:10940000206900F1650188450FD190F88C10491E44 -:1094100049B280F88C100029B8BFFFDF93E000202C -:10942000FFF79AFB88F80050E1E780F888508AE05F -:10943000206990F8961041F0040180F89610A06918 -:1094400004F089F916287ED1206990F8640020285C -:1094500002D0262805D076E0A06904F080F9FFF755 -:109460007BFB206980F8645080F888506BE02069AD -:1094700090F864200E2A03D1A1690979122902D03B -:109480001C2A1AD10FE001230921583003F09DFA5C -:1094900038B1206980F87C5080F8885080F864509A -:1094A00051E0A6704FE0A1690979142904BF80F842 -:1094B000645080F888503FF45FAE202A03D1A16940 -:1094C0000979162914D0262A03D1A1690979162908 -:1094D0000ED0A1690979172904BF90F86520222AC6 -:1094E00013D0E2691AB1FF2908BF80F886612AE02B -:1094F00080F8645080F8885090F86500212818BFE3 -:109500001A2020D0FFF728FB1DE080F8655090F866 -:109510008C10491E49B280F88C100029B8BFFFDFBB -:10952000206980F87D5090F8A401002818BF002021 -:1095300009D0E7E7E06900281CBF206980F8866150 -:1095400001D101F0C8F82069D0E92A12491C42F182 -:109550000002C0E92A1203B0BDE8F08F70B5FB4EDF -:1095600005460C46306990F8CB00FE2818BFFFDF97 -:1095700032690020002C82F8CB501CBFA2F88A0070 -:1095800070BDA2F88400012082F8880070BD30B55B -:1095900085B005466846FCF7D6F9002808BFFFDF0E -:1095A000222100980BF055FB0321009803F09AFF4D -:1095B0000098017821F010010170294603F0C0FFE6 -:1095C000E24C0D2D04BF0621009830D00BDCA5F134 -:1095D00002000B2819D2DFE800F0201863191926C1 -:1095E000187018192C00152D7BD008DC112D2DD0EA -:1095F000122D18BF132D09D0142D30D005E0162DD3 -:1096000046D0172D6BD0FF2D6AD0FFDFFCF7AEF9E7 -:10961000002808BFFFDF05B030BD2069009990F831 -:10962000CC000871F2E72169009891F8CC10017123 -:10963000ECE7E26800981178017191884171090A9C -:1096400081715188C171090A0172DFE70321009815 -:1096500004F07FF80621009804F07FF8D6E720692F -:10966000B0F84410009804F005F82069B0F84610EE -:10967000009804F003F82069B0F84010009804F056 -:1096800001F82069B0F84210009803F0FFFFBDE731 -:109690002069009A90F8A611117190F8A7014BE08B -:1096A000206900F1F001009803F0C8FF206900F183 -:1096B000C401009803F0CCFFA8E7A549D1E9000157 -:1096C000CDE90201206902A990F8960000F025007A -:1096D0008DF80800009803F0F6FF97E701E019E025 -:1096E0002CE02069B0F84010009803F0CBFF20690F -:1096F000B0F84210009803F0C9FF2069B0F8441098 -:10970000009803F0B7FF2069B0F84610009803F006 -:10971000B5FF7BE7206990F8A41139B1009990F862 -:10972000A6210A7190F8A70148716FE7009A90F896 -:109730005410117190F85500507167E7206990F846 -:109740008721D0F88811009803F008FF5EE770B514 -:109750000C4605464FF4007120460BF09CFA25801C -:1097600070BDF7F78ABB2DE9F0410D46074607218A -:10977000F7F77AFA040008BFBDE8F08194F8AC016D -:109780000026B8B16E700920287094F8AC0178B149 -:10979000268484F8AC61D4F8AE016860D4F8B201D4 -:1097A000A860B4F8B601A88194F8AC010028EFD104 -:1097B0002E7144E094F8B801002837D094F8B8012D -:1097C0000D2818D00E2818BFFFDF38D12088F7F7F2 -:1097D0007DFB0746F7F729F8A0B96E700E202870B8 -:1097E00094F8BA0128712088E88084F8B861384676 -:1097F000F7F715F823E02088F7F768FB0746F7F737 -:1098000014F810B10020BDE8F0816E700D202870B2 -:1098100094F8BA0128712088E88094F8BE01287273 -:1098200084F8B8613846F6F7FAFF08E094F8F001DA -:1098300040B16E701020287084F8F061AF80012074 -:10984000BDE8F08194F8C00190B16E700A202870D4 -:109850002088A880D4F8C401D4F8C811C5F806003F -:10986000C5F80A10B4F8CC01E88184F8C061E6E7D5 -:1098700094F8CE0140B16E701A202870B4F8D0016F -:10988000A88084F8CE61DAE794F8EA0180B16E70BE -:109890001B20287094F8EA010028D0D084F8EA61EF -:1098A000D4F8EC01686094F8EA010028F6D1C6E724 -:1098B00094F8D2012F1DA0B16E701520287094F875 -:1098C000D201002818BF04F5EA75B8D084F8D26137 -:1098D000294638460BF0EBFA94F8D2010028F5D16E -:1098E000ADE794F8DE0150B16E701D20287084F849 -:1098F000DE6104F5F07138460BF0D9FA9FE794F871 -:10990000F20138B11E20287084F8F261D4F8F40115 -:10991000686094E794F8F801002808BFBDE8F0817A -:109920006E701620287094F8F801002887D000BFC8 -:1099300084F8F861D4F8FA016860B4F8FE0128816F -:1099400094F8F8010028F3D179E70000F000002036 -:1099500040520200FE4AD0600020D06110621171B6 -:109960007047002180F8641080F8651080F8681056 -:1099700090F8DE1011B10221FEF71ABF0321FEF7A5 -:1099800017BF2DE9F047F24C814686B020690D469D -:109990000088F7F7ADFA070008BFFFDFA07828437B -:1099A000A070A0794FF0000510F0200F20691CBFB7 -:1099B000A0F87E5080F8E45004D1B0F87E10491C25 -:1099C000A0F87E102069012690F86A1039B990F845 -:1099D000652001230621583002F0F7FF48B3E088E4 -:1099E00010F4006F07D0206990F86A10002918BFA2 -:1099F000A0F876501DD12069B0F87610491C89B2C4 -:109A0000A0F87610B0F878208A422CBF531A0023B1 -:109A1000B4F808C00CF1050C634598BF80F87C6071 -:109A2000914206D3A0F8765080F8F0612079F2F7E1 -:109A3000E1F9A0794FF0020A10F0600F11D020690F -:109A400090F8681011B1032906D00AE080F8686028 -:109A50000121FEF7ADFE04E080F868A00121FEF7C9 -:109A6000A7FE206990F86810012905D1E18811F45A -:109A7000807F18BF80F868A04FF00808B9F1000F88 -:109A800040F09981E28812F4007F18BFA0F8F850E6 -:109A900004D1B0F8F810491CA0F8F81012F0080F23 -:109AA00050D0A17800294DD190F8CB00FE2808BFF6 -:109AB000FFDFFE21206980F8CB1090F8651019298E -:109AC00007D0206990F864101F2911D027292AD0C7 -:109AD0002FE080F88D5090F88C10491E49B280F824 -:109AE0008C100029B8BFFFDF206980F86550E8E7D7 -:109AF00090F8650002F052FF80B120692621012311 -:109B000080F8641090F865200B21583002F05DFF5A -:109B1000002804BF2A20FFF71FF80AE0216920204F -:109B200081F8640005E080F8856180F8645080F871 -:109B30008850206990F86710082904BF84F800A0B5 -:109B400080F8CBA0FFF73FF8A07910F0040F07D002 -:109B5000A07828B9206990F86700072808BF267008 -:109B600000F038FCA07910F0100F09D0A07838B9B7 -:109B7000206990F865100B2904BF0C2180F865104E -:109B8000E07810F0080F11D020690123052190F82A -:109B90006520583002F019FF28B184F8028020694E -:109BA00080F8B85102E0002001F02AFBE0690028AB -:109BB0005BD000950195029503950495206990F876 -:109BC0005500FBF723FE4FF47A7100F5FA70B0FBF5 -:109BD000F1FA206990F85500FBF706FE5044ADF805 -:109BE000060020690188ADF80010B0F85810ADF8F3 -:109BF00004104188ADF8021090F8860130B1A069D8 -:109C0000C11C039103F058FC8DF81000206990F8F6 -:109C100085018DF80800E16968468847206980F869 -:109C2000865180F885510399F9B190F88411E1B912 -:109C300090F86410272918D09DF81010039AA1B14C -:109C40001378FF2B06D0072B02BF02295178FF297A -:109C500002D00AE01B2908D880F884610399C0F873 -:109C600088119DF8101080F8871100F0CCFD01F0EC -:109C7000BDFA0028206918BFA0F8D85004D1B0F868 -:109C8000D810491CA0F8D81001F0B3FA40B12169EE -:109C900091F8E40002289CBF401C81F8E40004D83D -:109CA000206990F8E400022806D92069A0F8D8506D -:109CB000A0F8DA5080F8E45020690123002190F8E0 -:109CC0006520583002F081FE20B9206990F86500C7 -:109CD0000C285AD120690123002190F864205830C3 -:109CE00002F073FEB0B320690123002190F86720D1 -:109CF000583002F06AFE68B3206990F868100229B3 -:109D000004BF90F8E40000283FD13846F6F75DFB29 -:109D100000B3206990F8CB10FE2936D1B0F8D210EC -:109D2000012932D980F8DD60B0F88010B0F87E20CB -:109D30008B1E9A42AFBF0121891A491E89B2B0F821 -:109D4000D82023899A422EBF01229A1A521C02E07F -:109D5000F000002019E038BF92B2914288BF11464E -:109D6000012908BF80F8DD5090F868218AB1B0F869 -:109D7000DA20B0F86A0182422FBF0120801A401C0D -:109D800080B2814288BF014603E02069012180F84A -:109D9000DD502069B0F85820114489B2A0F8D410E1 -:109DA00090F86830002B18BF012B5DD0022B1CBF30 -:109DB000032BFFDF09D0E088C0F340200028206992 -:109DC00018BFA0F8E65059D151E090F86730082B41 -:109DD00021D0B0F87E10B0F8802000278B1C9A426A -:109DE00006D3511A891E0F043F0C1CBF791E8FB277 -:109DF00090F87C1051B190F864200123092158306B -:109E000002F0E3FD002808BF002729D0206990F860 -:109E10006A1089B908E0B0F87E30032B24D3B0F87B -:109E200080101144491C1FE090F865200123062191 -:109E3000583002F0CAFD78B121690020B1F87820CD -:109E4000B1F876108B1C9A4203D3501A801E18BFAB -:109E5000401EB84238BF87B2002F1CBF781E87B2A1 -:109E60002069B0F8D4103944A0F8D010A3E7B0F8B6 -:109E7000E610B0F8D6201144A0F8E610206990F85A -:109E8000701139B990F8672001231946583002F053 -:109E90009CFD38B12069B0F88210B0F8D62011448A -:109EA000A0F88210206990F8883033B1B0F884109F -:109EB000B0F8D6201144A0F8841090F98C20002A24 -:109EC00006DDB0F88A10B0F8D6C06144A0F88A1058 -:109ED0004FF03D0CB9F1000F18BF80F874C049D1A4 -:109EE0002178022911D0012908BF90F872113FD0C2 -:109EF000A17821B380F8736011F0140F18BF1E21F0 -:109F000009D000BF80F8741050E090F8CC100629FA -:109F100018BF16212CE011F0080F18BF80F874C08C -:109F200044D111F0200F18BF2321EBD111F0030F02 -:109F300008BFFFDF2A20216981F8740032E02BB1CD -:109F4000B0F88410B0F88630994210D2002A05DDAE -:109F5000B0F88A10B0F88620914208D2B0F882207A -:109F6000B0F880108A4208D390F870212AB12221DB -:109F700080F8741080F8736018E090F868203AB1A7 -:109F8000B0F87E208A4228BF80F87480F2D209E0BF -:109F9000B0F87E10062905D33E2180F8741080F8B1 -:109FA000736003E0206990F8731079B1206980F83C -:109FB000645080F8655080F8685090F8DE100029F1 -:109FC00014BF02210321FEF7F3FB02E00021FEF79C -:109FD000EFFB206980F8DE5006B0BDE8F047FBF7E4 -:109FE000E7BCF84902468878CB78184313D1084675 -:109FF00000694AB1897911F0080F03D090F8670021 -:10A00000082808D001207047B0F84810028E91420D -:10A0100001D8FEF709BB0020704770B5E94C054632 -:10A020000E46E0882843E08015F0020F04D015F0BA -:10A03000010F18BFFFDF666115F0010F4FF000023E -:10A040004FF001001AD0A661F178062902D00B2941 -:10A050000BD013E0216991F86530172B0ED1002346 -:10A06000C1E9283381F8690008E0216991F8653079 -:10A07000112B04BF81F8692081F88E0015F0020FC2 -:10A0800018D06169C978052902D00B290BD011E0DD -:10A09000216991F86520152A0CD10022C1E92A22F4 -:10A0A00081F86A0006E0206990F86510102908BF61 -:10A0B00080F86A2015F0800F1CBF0820E07070BD8A -:10A0C0002DE9F84FBF4C00254FF00108E580A57041 -:10A0D000E5702570206168F30709074680F8DE8087 -:10A0E0000088F6F705FF5FEA000A08BFFFDF206976 -:10A0F0000088FBF725FC20690088FBF747FC2069F6 -:10A10000B0F8D21071B190F8CB10FE290FD190F8B1 -:10A11000701189B190F8672001231946583002F078 -:10A1200054FC88B1206990F8CB00FE2804D0206947 -:10A1300090F8CB00FFF72BFA206990F8DF10002988 -:10A1400018BF25811BD10FE02069A0F8825090F83C -:10A15000711180F8CC1000210220FFF7FFF920696F -:10A1600080F8DD500220E5E790F8AC1129B9018CA8 -:10A170008288914288BF218101D881882181B0F8ED -:10A18000D610491E8EB2B0F8D8103144A0F8D810BD -:10A1900090F8DC1000291CBFA0F8DA5080F8DC50E1 -:10A1A00004D1B0F8DA103144A0F8DA10B0F87E101B -:10A1B0003144A0F87E1090F86A1039B990F8652003 -:10A1C00001230621583002F000FC28B12069B0F8C4 -:10A1D00076103144A0F876102069B0F8D210012929 -:10A1E0009CBF491CA0F8D210002E18BF80F8E45084 -:10A1F00090F8DD10A1B1B0F8D800218988420FD2C3 -:10A200005046F6F7E2F858B1206990F8681139B174 -:10A21000B0F8DA10B0F86A01814228BF00F0ECFF14 -:10A22000206980F8DD5090F865100B2918BF0C29C3 -:10A2300016D1B0F85820B0F88E31D21A12B2002AD6 -:10A240000EDBD0F89011816090F894110173022117 -:10A2500001F0A8FF206980F8655080F898804AE0F6 -:10A26000242924D1B0F85810B0F88E21891A09B2E7 -:10A2700000291CDB90F8A42190F89011002908BF58 -:10A2800090F8541080F8541090F89111002908BFEC -:10A2900090F8551080F85510002A1CBF0020FEF7DA -:10A2A0005BFC206980F8655080F87D5023E090F8D1 -:10A2B0006410242918BF25291DD1B0F85810B0F812 -:10A2C0008E21891A09B2002915DB90F89011002916 -:10A2D00008BF90F8541080F8541090F8911100299C -:10A2E00008BF90F8551080F855100020FEF734FC98 -:10A2F000206980F86450216901F15800B1F8D62036 -:10A3000002F026F9206990F86811002918BFA0F81A -:10A31000DA502D4800902D4B2D4A3946484600F022 -:10A32000B3FE216A00291CBF6078FAF789FF206913 -:10A330000123052190F86520583002F046FB0028E3 -:10A3400008BFBDE8F88FBDE8F84F00F08EBC00F004 -:10A3500033BF1C49C86170471A48C069002818BF3C -:10A3600001207047174A50701162704710B50446BB -:10A37000B0F894214388B0F89611B0F898019A4249 -:10A3800001BFA3889942E38898420FD02388A4F89C -:10A39000B031A4F8B221A4F8B411A4F8B601012098 -:10A3A00084F8AC0107480079F1F724FD012120462B -:10A3B00001F0F8FE002084F86500032084F86800AE -:10A3C00010BD0000F000002083990100E39F010010 -:10A3D0001BA0010070B5FE4CA07910F0020F08BF61 -:10A3E00070BDA078002818BF70BD6169F8482722A9 -:10A3F000CB780E26002500690D2B78D00BDCA3F15D -:10A4000002030B2B1FD2DFE803F0201E808B9F2F4F -:10A410001E591E73D100152B00F02A810BDC112B65 -:10A4200065D0122B00F0F480132B00F0FF80142B6A -:10A4300000F00E8107E0162B00F03281172B00F0A0 -:10A440003F81FF2B35D0FFDF70BD90F867200123DF -:10A450001946583002F0B9FA002818BF70BD08201C -:10A46000216981F8670070BD90F8643009790A2B82 -:10A4700001BF90F8CA308B4280F8645080F8885051 -:10A4800008BF70BD90F8663013F0080F0DD023F0B0 -:10A49000080180F8661090F88C10491E49B280F8C7 -:10A4A0008C100029A8BF70BDCFE0FF291CBFFFDFC3 -:10A4B00070BD80F8642080F8845170BD90F866000B -:10A4C00010F0010F08BFFFDF216991F88C00401EDA -:10A4D00040B281F88C000028B8BFFFDF206990F8F7 -:10A4E000661021F0010100BF80F8661070BD21E008 -:10A4F00090F86500102818BFFFDF0121206980F85F -:10A500008D10112180F8651070BD90F86500142839 -:10A5100018BFFFDF0121206980F88D101521F1E7B8 -:10A5200090F86500152818BFFFDF1720216981F812 -:10A53000650070BD90F86500152818BFFFDF192071 -:10A54000216981F8650070BD90F865001B2818BF6F -:10A55000FFDF206980F88D5090F8B801002818BFFF -:10A56000FFDF206990F88E1049B180F88E50018885 -:10A57000A0F8BC1180F8BA5180F8B8610AE00188EF -:10A58000A0F8BC1180F8BA51012180F8BE110D214C -:10A5900080F8B8110088F6F799FCF6F731F92079C0 -:10A5A000F1F728FC206980F8655070BD90F88C1197 -:10A5B000042915D0206990F8661011F0020F08BF29 -:10A5C00070BD90F88C10491E49B280F88C1000299B -:10A5D000B8BFFFDF206990F8661021F0020183E721 -:10A5E00090F8642001230021583002F0EEF9002891 -:10A5F00008BFFFDF206990F8901011F0020F07BF2D -:10A60000062180F8641080F8885080F88C51D1E7DA -:10A6100090F8642001230021583002F0D6F9002878 -:10A6200008BFFFDF206980F8646070BD90F8661095 -:10A6300021F0040180F8661090F88C10491E49B290 -:10A6400080F88C100029A8BF70BDFFDF70BD00BF6F -:10A6500090F8642001230021583002F0B6F9002858 -:10A6600008BFFFDF1C20216981F8640070BD00BFB6 -:10A6700090F8660000F03000102818BFFFDF206956 -:10A6800090F8661021F0100180F8661090F88C1098 -:10A69000491E49B280F88C100029A8BF70BDD4E7CC -:10A6A00090F8642001230021583002F08EF9002830 -:10A6B00008BFFFDF1F20216981F8640070BD00BF63 -:10A6C00090F8650021281CBF0028FFDF22202169A7 -:10A6D00081F8650070BD3E49086990F8662012F067 -:10A6E000080F1EBF01208870704742F0080280F8F2 -:10A6F00066208969C97880F8C9100021A0F88A10FD -:10A7000090F88C10491C80F88C10704710B5304CB4 -:10A7100005212069FEF74CF8206990F84E100129B8 -:10A7200002BF022180F84E1010BD00F5D6710288DC -:10A73000A0F8D421028EA0F8D621828EA0F8D821CC -:10A74000028FB0F844309A4228BF1A46CA85828FD9 -:10A75000B0F84600824238BF10460886012081F8D2 -:10A7600026002079BDE81040F1F744BB184830B40A -:10A77000006990F84E30B0F832C0C48EB0F8401086 -:10A78000428F022B28D08A4238BF11460186C28FE1 -:10A79000B0F842108A4238BF11468186028FB0F865 -:10A7A00044108A4238BF11464186828FB0F8461065 -:10A7B0008A4238BF1146C186418E614588BF8C46AA -:10A7C000A0F832C0C18EA14288BF0C46C48601E009 -:10A7D000F000002030BC7047038E9A4228BF1A4612 -:10A7E000C58F838E9D4238BF2B468A4238BF1146A3 -:10A7F0000186B0F842108B4228BF0B4683860021A9 -:10A8000080F84E10CAE770B5FD4C206990F8CB1067 -:10A81000FE2906BFA178002970BD90F867200123AA -:10A820001946583002F0D1F8002818BF70BD2069D1 -:10A83000002590F8701159B1A0F8825090F871116C -:10A8400080F8CC10BDE8704000210220FEF786BEE3 -:10A8500090F8652001230421583002F0B6F8060074 -:10A860000CD0D4F810C09CF86500102861D01428D2 -:10A8700065D015287BD01B287ED0BEE0216991F8D9 -:10A88000660010F0010F05D0BDE8704001210920DD -:10A89000FEF764BE10F0020F0BD001210C20FEF772 -:10A8A0005DFE206990F8901041F0010180F8901051 -:10A8B00070BD10F0040F05D0BDE8704001211320D9 -:10A8C000FEF74CBE10F0080F09D091F8C90081F8CE -:10A8D000CC00BDE8704001210720FEF73FBE10F01C -:10A8E000100F02D091F89B0120B191F8650021284A -:10A8F00073D179E091F89A0188B1B1F89C01A1F87F -:10A900004000B1F89E01A1F84200B1F8A001A1F801 -:10A910004400B1F8A201A1F8460081F89A51FFF76E -:10A9200025FFFFF7F3FEBDE8704001211520FEF77B -:10A9300015BEBDE8704001210B20FEF70FBEF9F7F0 -:10A94000F7FA0C2838BF70BD08212069F030F9F7FC -:10A95000F3FA28B120690421C430F9F7EDFA00B9FF -:10A96000FFDFBDE8704001210420FEF7F7BD9CF831 -:10A97000730101280DD000E030E0022818BF70BD3F -:10A980009CF88E00D8B106208CF8CC000121022062 -:10A990001DE09CF8B801002818BF70BD0CF1B00391 -:10A9A00000220CF1E8010CF5BA7001F08AFF0121D8 -:10A9B0000520FEF7D3FD206980F8735170BD9CF827 -:10A9C000960010F0040F14BF11200D200121FEF796 -:10A9D000C5FD206980F8735170BD0EE0BDE8704080 -:10A9E00001210620FEF7BABD91F87D00C0B991F8AB -:10A9F000A40110B191F8A50190B1206901230021B3 -:10AA000090F86420583001F0E0FFC8B120690123BC -:10AA1000042190F86520583001F0D7FF30B10FE0E5 -:10AA2000BDE8704001211720FEF798BD206990F81D -:10AA30007C0028B1BDE8704000211220FEF78EBDD9 -:10AA4000206990F864200A2A2BD0002E18BF70BD10 -:10AA500001230021583001F0B8FF48B1206990F877 -:10AA60008C11042904BF90F8900010F0030F22D03D -:10AA700020690123002190F86420583001F0A5FFDF -:10AA800000287DD0206990F89A1111B190F89B119F -:10AA9000E9B190F8A411002972D090F8A511E9B39A -:10AAA000BDE090F8CA1080F8CC10BDE870400021DD -:10AAB0000720FEF753BD00210C20FEF74FFD206953 -:10AAC00090F8901041F0010180F8901070BDB0F83E -:10AAD0009C11A0F84010B0F89E11A0F84210B0F8F8 -:10AAE000A011A0F84410B0F8A211A0F8461080F808 -:10AAF0009A5190F8660010F0200F13D0FFF736FE41 -:10AB0000FFF704FE01211520FEF728FD206990F8CB -:10AB1000661021F0200141F0100100E008E080F80B -:10AB2000661070BDBDE8704000211420FEF716BD10 -:10AB300090F8652001230B21583001F046FFF8B949 -:10AB4000206990F85400012808BF012508D0022888 -:10AB500008BF022504D0042816BF08280325FFDFFC -:10AB6000206990F85500012808BF01260BD0022863 -:10AB700008BF022607D0042814BF0828032600E0D7 -:10AB80004DE018BFFFDFD4F810C0012D9CF8A601DE -:10AB900006D0022D07D0032D08BF042805D014E0ED -:10ABA000012812D101E002280FD19CF8A701012E43 -:10ABB00006D0022E07D0032E08BF04280FD004E0D1 -:10ABC000012802D10BE0022809D09CF8652001235E -:10ABD00003210CF1580001F0F8FE00BB16E0BCF8B0 -:10ABE00058309CF85410BCF8A8010CF5C77202F05C -:10ABF000A1F938B12169252081F8640070BD0000F9 -:10AC0000F00000200020FDF7A7FF08E020690123E5 -:10AC1000022190F86520583001F0D7FEB0B12069CC -:10AC20000123002190F86420583001F0CEFE002866 -:10AC300008BF70BD206990F88401002808BF70BD6E -:10AC40000021BDE87040FF20FEF788BCBDE87040E1 -:10AC500000211620FEF782BC30B5FB4C054620785B -:10AC6000002818BFFFDF657230BDF7490120087268 -:10AC700070472DE9F14FF54F39464D68284695F854 -:10AC8000551001F048FF95F8551080B211F00C0FE7 -:10AC90006FF00D0B7DD0B0F5747F38BF002006D368 -:10ACA0005038C11700EB91600BEBA01080B26E8E94 -:10ACB000864228BF0646E648DFF88C93C9F8240090 -:10ACC000786800F15808044609F13400678E40683E -:10ACD00094F8551090F86AA0204601F01CFF94F8F3 -:10ACE000551080B211F00C0F69D0B0F5747F38BFE9 -:10ACF000002406D35038C21700EB92600BEBA01073 -:10AD000084B2A74238BF3C46BAF1000F1CBF201DD9 -:10AD100084B2E0B2F9F7E8FE98F81200002859D0A2 -:10AD200008F15801CA4891E80E1000F5027484E851 -:10AD30000E10D8F86810C0F82112D8F86C10C0F8BE -:10AD4000251200F58170FAF711FAC0480078002842 -:10AD50000CBF0120002080F00101BE480176D8E937 -:10AD60001412C0E90412A0F58372D9F82410F9F77F -:10AD700060FD95F85500012808BF00220ED002287A -:10AD800008BF01220AD0042808BF032206D00828E1 -:10AD900000E008E01ABFFFDF00220222F1B201202A -:10ADA000F9F762FD1CE0022919BF0BEBD00080B25D -:10ADB0006FF00E0101EB90007FF479AF76E7022986 -:10ADC00019BF0BEBD00084B26FF00E0202EB9000C3 -:10ADD00097D195E7D9F82400FAF7C8F9F9F767FD94 -:10ADE000009850B195F82C00012808BFFAF791FAA5 -:10ADF000022089F80000BDE8F88F012295F855304F -:10AE000096211046FAF791F895F8550095F85610E6 -:10AE100010F00C0F08BF00219620FAF7C2F9E1E705 -:10AE20002DE9F04FDFF8248283B0414681464D681A -:10AE3000A1F11400009095F85D0005F15806012776 -:10AE4000A1F1340470B3012878D0022877D0032808 -:10AE500018BFFFDF74D0206A0823017821F00801B1 -:10AE60000170B27903EAC202114321F004010170BA -:10AE7000F279042303EA8202114321F010010170E8 -:10AE800096F805B0E06AF5F7B0FA8246FAF7A2FD47 -:10AE9000BBF1020F79D0BBF1010F77D0BBF1030FEB -:10AEA00075D089E000F0CAFB0146284601F044FE57 -:10AEB0001FFA80FB00F0C2FB10F00C0F6FF00D01C9 -:10AEC0004FF0000A20D0BBF5747F38BF504607D33F -:10AED000ABF15000C21700EB926001EBA01080B202 -:10AEE000298E814238BF0846ADF80800A5F8480011 -:10AEF0000098FAF74EFD90B1216AA77062694FF48D -:10AF00008060904703202CE0022819BF01EBDB0092 -:10AF100080B26FF00E0000EB9B00E1D1DFE701AAE9 -:10AF200002A9E06AF5F79CF9206210B196F8351095 -:10AF300039B10098FAF701FD77718CE713E016E05C -:10AF400026E09DF8041031B9A0F800A080F802A016 -:10AF5000012102F0C7FABDF80810206A02F001FCD6 -:10AF60000220707177E70098FAF7E7FC73E7B5F80D -:10AF70004800ADF8000001AA6946E06AF5F770F9EB -:10AF80002062002808BFFFDF65E708E00BE00EE065 -:10AF90000098FAF7FEFC002808BFFFDF5BE730EA05 -:10AFA0000A0009D106E030EA0A0005D102E0BAF150 -:10AFB000000F01D0012100E00021206A027842EA5E -:10AFC00001110170717C00291CBF7179012943D0E6 -:10AFD00006F158011E4891E80E1000F5027A8AE841 -:10AFE0000E10B16EC0F82112F16EC0F8251200F5F6 -:10AFF0008170FAF7BBF898F8000000280CBF012117 -:10B00000002114480176D6E91212C0E90412A0F515 -:10B010008371226AF9F70DFC95F85400012808BFE6 -:10B0200000220CD0022808BF012208D0042808BF43 -:10B03000032204D008281ABFFFDF00220222FB21CE -:10B040000020F9F711FC0BE014010020480100205A -:10B05000C80C0020D00E0020FAF788F8F9F727FC7A -:10B06000B9F1000F06D195F8543001229621002045 -:10B07000F9F75BFF6771206A0188E18180782074AD -:10B08000277003B0BDE8F08F2DE9F0471C46174646 -:10B0900081460D46FE4EDDF82080307828B9002F1D -:10B0A0001CBF002CB8F1000F00D1FFDFC6F81C80D8 -:10B0B000C6E90574C6E90D9500243472F471347143 -:10B0C000F4707471B471B470B481F24F05F1580822 -:10B0D0002888F5F70DFFF0622888F5F7F7FE306352 -:10B0E000F9F725FD95F95700F9F7B1FD05F11200C3 -:10B0F000FAF725F805F10E00F9F7B3FD38780028C6 -:10B100000CBF03200120FAF72EF898F81A00F9F77F -:10B11000B0FDFAF722F83878002804BFFF2095F830 -:10B12000545023D098F81260B5F8328095F8551035 -:10B13000284601F0F0FC95F8555080B215F00C0F40 -:10B140006FF00D0126D0B0F5747F06D35038C217CA -:10B1500000EB926001EBA01084B24046A04528BFEE -:10B160002046002E1CBF001D80B2C0B22946F9F750 -:10B17000BBFC38782A464FF00001B0B10120F9F746 -:10B18000A2FE7868D0F8E000F9F7F3FFBDE8F047D9 -:10B1900001206EE5022D19BF01EBD00084B26FF0E3 -:10B1A0000E0101EB9000D8D1D6E70020F9F78BFE15 -:10B1B000BDE8F047012033E6B64800B501783438E1 -:10B1C000007819B1022818BFFFDF00BD012818BFA1 -:10B1D000FFDF00BDAE4810B50078022818BFFFDFC2 -:10B1E000BDE8104000F0CCBA00F0CABAA8484079D7 -:10B1F0007047A74800797047A549012088717047BA -:10B200002DE9F0470600A348A14D406800F158041D -:10B21000686A90F8019018BF012E03D1296B09F0DC -:10B22000BBF96870687800274FF00108A0B10128C9 -:10B230003CD0022860D003281CBFFFDFBDE8F087A8 -:10B24000012E08BFBDE8F087286BF5F7C3FA687ACE -:10B25000BDE8F047F0F7CEBD012E14D0A86A002853 -:10B2600008BFFFDF6889C21CD5E9091009F072FC2C -:10B27000A86A686201224946286BF5F727F9022E71 -:10B2800008BFBDE8F087D4E91401401C41F100017A -:10B29000C4E91401E079012801D1E77101E084F8E3 -:10B2A0000780687ABDE8F047F0F7A4BD012E14D0FE -:10B2B000A86A002808BFFFDF6889C21CD5E9091009 -:10B2C00009F048FCA86A686200224946286BF5F735 -:10B2D000FDF8022E08BFBDE8F087D4E91410491C20 -:10B2E00040F10000C4E91410E07901280CBFE771B7 -:10B2F00084F80780BDE8F087012E06D0286BF5F7AB -:10B3000069FA022E08BFBDE8F087D4E91410491C81 -:10B3100040F10000C4E91410E0790128BFD1BCE776 -:10B320002DE9F0415B4F3846A7F13404406800F145 -:10B3300058052078012818BFFFDFA878012648B1FA -:10B340000021A970A670626904209047387800280F -:10B3500018BF2E71206A0321007831EA000004BF73 -:10B36000E878002805D1EE70216AA6706269022093 -:10B3700090470121002000F022FA18B1BDE8F04109 -:10B3800000F0FEB9BDE8F041002072E42DE9F14F74 -:10B39000404E4FF000083046A6F134054068317841 -:10B3A00000F1580A2878C146022818BFFFDFA88993 -:10B3B00040F40070A88171683078FF2091F8541033 -:10B3C000F9F792FB009800289AF8120000F0FD802F -:10B3D000F9F792FAF9F780FA012788B99AF812007A -:10B3E00070B1686A417859B100789AF80710C0F3D3 -:10B3F000C000884204D1EF70BDE8F84F00F0C0B93A -:10B40000686A41786981002908BFC5F8288003D09F -:10B41000286BF5F715F8A862A88940F02000A881EC -:10B4200085F804803078706800F1580B044690F875 -:10B430002C0001281AD1F9F762FF5946204601F085 -:10B4400080FA98B13078002870680CBF00F58A70D7 -:10B4500000F5F570218841809BF8081001719BF878 -:10B46000091041710770687AF0F7C4FC686A9AF8AD -:10B4700006100078C0F3800088423BD030787068B6 -:10B4800000F1580490F85D0080B302284CD003E02E -:10B49000140100204801002084F80580307800283D -:10B4A0001CBF2079002806D084F80480AF706A6938 -:10B4B000414610209047E07890B184F80380FAF775 -:10B4C00077FA002808BFFFDF0820AF706A69002103 -:10B4D0009047D4E91202411C42F10000C4E9121065 -:10B4E000A07901280CBF84F80680A771A88940F4D0 -:10B4F0008070A881686A9AF807300178C1F3C002A9 -:10B500009A424FD13278726801F0030102F1580477 -:10B51000012918BF022932D003291CBFE87940F065 -:10B52000040012D0E8713DE0E86AF4F7C5FE002897 -:10B5300008BFFFDFD4E91210491C40F10000C4E944 -:10B540001210687AF0F756FCA1E701F0E3FF90B122 -:10B55000A770A989384641F40061A981696AAF7072 -:10B560006A699047E079012803D100BF84F8078019 -:10B5700018E0E77116E0E87940F01000D2E7407873 -:10B58000F8B1A98941F40061A981A96A51B1FB28E8 -:10B59000F1D8287A002808BFB94603D080206A690C -:10B5A000002190470120009900F009F9B0B1B9F1EC -:10B5B000000F1CBF0020FFF723FEBDE8F84F00F08E -:10B5C000DFB8E0790128D4D1D0E7002818BFF9F717 -:10B5D000CCF9A88940F04000A881E3E7B9F1000F59 -:10B5E0001CBF0120FFF70CFE0020FFF719FCB9F18A -:10B5F000000F08BFBDE8F88F0220BDE8F84FFFE557 -:10B6000070B50D4606468E488D4900784C6850B19D -:10B61000F9F7FEF9034694F8542029463046BDE870 -:10B620007040FDF7EAB9F9F7F3F9034694F85420AE -:10B6300029463046BDE8704005F088BF804830B4E8 -:10B6400090F800C04268406802F1580192F86450D6 -:10B6500090F85400242D1CBF4B7B242B24D00821B0 -:10B6600001241F2D18BF202D47D0222B1CBF30BC1A -:10B67000704700BFBCF1000F04BF30BC704792F8A8 -:10B68000A63192F851201A4012F0040F5FD008281A -:10B6900018BF04286ED0082918BF04296AD00128D1 -:10B6A00018BF012969D062E0BCF1000F12D092F8F6 -:10B6B0009011002904BF30BC7047082818BF042827 -:10B6C00058D0082918BF042954D0012818BF0129CF -:10B6D00053D04CE092F8F210002904BF30BC704700 -:10B6E000082818BF042845D0082918BF042941D0CC -:10B6F000012818BF012940D039E0222BBAD0BCF173 -:10B70000000F04BF30BC704792F8A62112F0040F5E -:10B710000CD0082818BF04282CD0082918BF0429E9 -:10B7200028D0012818BF012927D020E012F0010FEE -:10B7300018BF2146EDD112F0020F04BF30BC704794 -:10B74000082818BF042815D0012816D00FE012F0E1 -:10B75000010F18BF21469AD112F0020F04BF30BC6E -:10B760007047082818BF042804D0012805D030BC31 -:10B770000220704730BC0820704730BC0120704761 -:10B780002F4910B54C68F9F799FDF9F74DFDF9F718 -:10B790007DFCF9F7DAFCF9F78AF894F82C00012817 -:10B7A00008BFF9F7ACFD274C00216269A0899047DA -:10B7B000E269E179E07890470020207010BD70B513 -:10B7C000204C0546002908BF012D05D12079401CD9 -:10B7D000C0B22071012831D8A169284688470028C5 -:10B7E0002CD0A179184839B1012D01BF4178002929 -:10B7F000017811F0100F21D0E179F9B910490978D9 -:10B80000002908BF012D05D000290CBF012100210E -:10B81000294311D10D49097811F0100F04BF0078A8 -:10B8200010F0100F0AD0A07840B9A06A20B9608942 -:10B8300010B111F0100F01D0002070BD012070BDBB -:10B840004801002014010020C80C00202201002023 -:10B8500010B540F2C311F74809F0FBF9FF220821A7 -:10B86000F54809F0EEF9F548002141704FF4617197 -:10B87000418010BD2DE9F0410E46054600F046FB23 -:10B88000EC4C102816D004EBC00191F84A0110F0DE -:10B89000010F1CBF0120BDE8F081607808283CBF83 -:10B8A000012081F84A011CD26078401C60700120A0 -:10B8B000BDE8F0816078082813D222780127501C57 -:10B8C000207004EBC2083068C8F84401B088A8F8BA -:10B8D0004801102A28BFFFDF88F8435188F84A71D1 -:10B8E000E2E70020BDE8F081D2480178491E4BB262 -:10B8F000002BB8BF704770B45FF0000500EBC301C8 -:10B9000091F84A1111F0010F3BD04278D9B2521E82 -:10B91000427000EBC10282F84A5190F802C0002246 -:10B92000BCF1000F0BD9841894F803618E4202D148 -:10B93000102A26D103E0521CD2B29445F3D80278E3 -:10B94000521ED2B202708A421BD000EBC20200EB40 -:10B95000C10CD2F84341CCF84341D2F84721CCF88E -:10B960004721847890F800C00022002C09D986185D -:10B9700096F8036166450AD1102A1CBF024482F87A -:10B980000311591E4BB2002BB8DA70BC7047521C21 -:10B99000D2B29442EBD8F4E72DE9F05F1F4690460F -:10B9A0000E46814600F0B2FAA24D0446102830D06F -:10B9B000A878002100280ED96A1892F80331A34212 -:10B9C00005D110291CBF1220BDE8F09F03E0491CDF -:10B9D000C9B28842F0D8082834D2102C1CD0AE78D6 -:10B9E0001022701CA87005EB061909F103004146EE -:10B9F00000F056FF09F183001022394600F050FF95 -:10BA0000A819002180F8034180F83B110846BDE8E1 -:10BA1000F09FA878082815D22C78CA46601C287098 -:10BA200005EBC4093068C9F84401B0884FF0000B39 -:10BA3000A9F84801102C28BFFFDF89F843A189F835 -:10BA40004AB1CCE70720BDE8F09F70B4794881780F -:10BA5000491E4BB2002BBCBF70BC704703F0FF0CFB -:10BA60008178491ECAB2827050FA83F191F80311AD -:10BA700094453ED000EB021500EB0C14D5F80360A2 -:10BA8000C4F80360D5F80760C4F80760D5F80B6008 -:10BA9000C4F80B60D5F80F60C4F80F60D5F8836068 -:10BAA000C4F88360D5F88760C4F88760D5F88B60E8 -:10BAB000C4F88B60D5F88F50C4F88F50851800EB10 -:10BAC0000C0402EB420295F803610CEB4C0C00EB0A -:10BAD000420284F8036100EB4C0CD2F80B61CCF805 -:10BAE0000B61B2F80F21ACF80F2195F83B2184F8D7 -:10BAF0003B2100EBC10292F84A2112F0010F33D131 -:10BB000090F802C00022BCF1000F0BD9841894F801 -:10BB100003518D4202D1102A26D103E0521CD2B229 -:10BB20009445F3D80278521ED2B202708A421BD0DA -:10BB300000EBC20200EBC10CD2F84341CCF8434108 -:10BB4000D2F84721CCF84721847890F800C0002231 -:10BB5000002C09D9851895F8035165450BD1102A99 -:10BB60001CBF024482F80311591E4BB2002BBFF6D2 -:10BB700075AF70BC7047521CD2B29442EAD8F3E75A -:10BB80002E49487070472D484078704738B14AF2C6 -:10BB9000B811884203D82949488001207047002005 -:10BBA000704726484088704710B500F0AFF910285C -:10BBB00014D0204A0146002092F802C0BCF1000FC8 -:10BBC0000CD9131893F803318B4203D1102818BFF6 -:10BBD00010BD03E0401CC0B28445F2D8082010BD5F -:10BBE00014498A78824286BF01EB0010833000201E -:10BBF000704710498A78824286BF01EB0010C01C52 -:10BC0000002070470B4B93F802C084459CBF002076 -:10BC10007047184490F8030103EBC00090F84331DB -:10BC20000B70D0F844111160B0F8480190800120E9 -:10BC300070470000F80E00205A010020500100203B -:10BC4000FE4A114491F80321FD490A7002684A60D6 -:10BC500080880881704710B5F8F79AFD002804BF66 -:10BC6000FF2010BDBDE81040F8F7B8BDF3498A7851 -:10BC700082429CBF00207047084490F8030101EB0A -:10BC8000C00090F84A0100F0010070472DE9F0472C -:10BC9000EA4F0026B0463878002886BF4FF0080AE1 -:10BCA000DFF8A093BDE8F08707EBC80505F5A271A2 -:10BCB00095F8430100F02AF9102808BF544610D027 -:10BCC000B978002400290BD93A1992F8032182424D -:10BCD00002D1102C05D103E0621CD4B2A142F3D8EA -:10BCE0000824B878A04286BF07EB0410C01C0020CF -:10BCF00095F84A1111F0010F16D050B1082C04D25A -:10BD0000391991F83B11012903D0102100F0A5FD4C -:10BD100050B109F806403046731C95F8432105F5EB -:10BD2000A271DEB2F8F76BFF08F1010000F0FF0826 -:10BD300038784045B8D8BDE8F0872DE9F041BF4CD0 -:10BD400000263546A07800288CBFBE4FBDE8F081A4 -:10BD50006119C0B291F80381A84286BF04EB0510B7 -:10BD6000C01C002091F83B11012903D0102100F0E4 -:10BD700074FD58B104EBC800BD5590F8432100F59F -:10BD8000A2713046731CDEB2F8F739FF681CC5B2E9 -:10BD9000A078A842DCD8BDE8F08110B5F8F759FFCB -:10BDA000002804BF082010BDF8F757FFA549085C1C -:10BDB00010BD0A46A24910B5497841B19F4B997808 -:10BDC00029B10244D81CF8F780FC012010BD0020E6 -:10BDD00010BD9A4A01EB410102EB41010268C1F832 -:10BDE0000B218088A1F80F0170472DE9F041934D98 -:10BDF00007460024A878002898BFBDE8F081C0B2AB -:10BE0000A04213D905EB041010F183060ED01021C7 -:10BE1000304600F022FD48B904EB440005EB400039 -:10BE200000F20B113A463046F9F751FE601CC4B2DD -:10BE3000A878A042E3D8BDE8F081014610228248EC -:10BE400000F02EBD8048704770B57C4D0446A87840 -:10BE5000A04206D905EB04101021833000F0FDFC50 -:10BE600008B1002070BD04EB440005EB400000F277 -:10BE70000B1070BD71498A78824206D9084490F847 -:10BE80003B01002804BF01207047002070472DE9C6 -:10BE9000F0410E46074615460621304600F0DDFC0F -:10BEA000664C98B1A17871B104F59D7011F0010F45 -:10BEB00018BF00F8015FA178490804D0457000F868 -:10BEC000025F491EFAD10120BDE8F08138463146B3 -:10BED00000F01CF8102816D0A3780021002B12D9EE -:10BEE000621892F80321824209D1102918BF08294B -:10BEF00009D0601880F83B510120BDE8F081491C51 -:10BF0000C9B28B42ECD80020BDE8F0812DE9F041A8 -:10BF10004A4D0646002428780F46002812D900BF53 -:10BF200005EBC40090F84311B14206D10622394610 -:10BF300000F5A27008F0E2FD38B1601CC4B22878A8 -:10BF4000A042EDD81020BDE8F0812046BDE8F08188 -:10BF50003A4910B44A7801EBC003521E4A700022DD -:10BF600083F84A2191F802C0BCF1000F0DD98B185B -:10BF700093F80341844204D1102A1CBF10BC7047BF -:10BF800003E0521CD2B29445F1D80A78521ED2B2C4 -:10BF90000A70824204BF10BC704701EBC00301EB82 -:10BFA000C202D2F843C1C3F843C1D2F84721C3F853 -:10BFB00047218C7891F800C00022002C9CBF10BC57 -:10BFC00070478B1893F80331634506D1102A1CBFC4 -:10BFD000114481F8030110BC7047521CD2B2944244 -:10BFE000EFD810BC704770B414490D188A78521EEF -:10BFF000D3B28B7095F80321984247D001EB031C14 -:10C0000001EB0014DCF80360C4F80360DCF807609F -:10C01000C4F80760DCF80B60C4F80B60DCF80F6054 -:10C02000C4F80F60DCF88360C4F88360DCF88760D4 -:10C03000C4F88760DCF88B6008E00000F80E002090 -:10C04000500100205A010020BB100020C4F88B6072 -:10C05000DCF88FC0C4F88FC001EB030C03EB430383 -:10C060009CF8034100EB400001EB430385F80341DA -:10C0700001EB4000D3F80B41C0F80B41B3F80F318E -:10C08000A0F80F319CF83B0185F83B0101EBC200A1 -:10C0900090F84A0110F0010F1CBF70BC70470020DF -:10C0A0008C78002C0DD90B1893F803C1944504D15A -:10C0B00010281CBF70BC704703E0401CC0B2844213 -:10C0C000F1D80878401EC0B20870904204BF70BC1E -:10C0D000704701EBC20301EBC000D0F843C1C3F8C5 -:10C0E00043C1D0F84701C3F847018C780B78002092 -:10C0F000002C9CBF70BC704701EB000C9CF803C186 -:10C100009C4506D110281CBF084480F8032170BC50 -:10C110007047401CC0B28442EED870BC704700002B -:10C1200010B50A7B02F01F020A73002202768B18F8 -:10C130001B7A03F0010C5B0803F00104A4445B08C4 -:10C1400003F00104A4445B0803F00104A4445B0869 -:10C1500003F0010464444FEA530C0CF00103234440 -:10C160004FEA5C0C0CF00104234403EB5C0300EB8E -:10C17000020C521C8CF8133090F818C0D2B26344F1 -:10C180000376052AD3D3D8B2252888BFFFDF10BD98 -:10C190000023C383428401EBC202521EB2FBF1F1C1 -:10C1A0000184704770B50025044603290DD04FF473 -:10C1B000FA4200297BD0012978D0022918BF70BD2E -:10C1C0000146BDE870405830AAE704F158067821CE -:10C1D000304608F060FDB571F57135737573F57310 -:10C1E000357475717576B576212086F83E0041204C -:10C1F00086F83F00FE2086F8730084F82C502584D2 -:10C20000012084F8540084F85500282184F8561041 -:10C210001B21218761874FF4A471E187A1871B212E -:10C22000218661864FF4A471E186A1861B21A4F8C2 -:10C230004010A4F844104FF4A471A4F84610A4F8D8 -:10C2400042101B21A4F84A10A4F84C10A4F848107E -:10C2500060734FF448606080A4F8D050A4F8D250C6 -:10C26000A4F8D450A4F8D650A4F8D850A4F8DA50C2 -:10C2700084F8DD5084F8DF50A4F8E65084F8E450E8 -:10C28000A4F8F850A4F8FA5084F89A5184F89B5115 -:10C2900084F8A45184F8A55184F8685184F8705149 -:10C2A00084F8735184F88C5170BD00E041E0A4F82B -:10C2B000E65084F8DE506088FE490144B1FBF0F19D -:10C2C000A4F878104BF68031A4F87A10E388A4F82B -:10C2D0007E50B4F882C0DB000CFB00FCB3FBF0F333 -:10C2E0009CFBF0FC5B1CA4F882C09BB203FB00FC2F -:10C2F00004F15801A4F88030BCF5C84FC4BF5B1EE0 -:10C300000B85B2FBF0F2521CCA8500F5802202F5C3 -:10C31000EE32531EB3FBF0F20A84CB8B03FB00F228 -:10C32000B2FBF0F0C883214604F15800BDE870402C -:10C33000F6E6A4F8E650B4F89411B4F89831B4F8DD -:10C3400002C004F15800A4F87E50B4F88240DB002B -:10C3500004FB0CF4B3FBF1F394FBF1F45B1C448598 -:10C360009BB203FB01F40385B4F5C84FC4BF5B1E49 -:10C370000385B2FBF1F2521CC285428C01EBC20272 -:10C38000521EB2FBF1F20284C28B02FB0CF2B2FB32 -:10C39000F1F1C18370BD70B50025044603290DD0AD -:10C3A0004FF4FA42002963D001297DD0022918BF39 -:10C3B00070BD0146BDE870405830B1E604F1580642 -:10C3C0007821304608F067FCB571F57135737573E7 -:10C3D000F573357475717576B576212086F83E0053 -:10C3E000412086F83F00FE2086F8730084F82C5028 -:10C3F0002584012084F8540084F85500282184F80D -:10C4000056101B21218761874FF4A471E187A18712 -:10C410001B21218661864FF4A471E186A1861B2130 -:10C42000A4F84010A4F844104FF4A471A4F84610E6 -:10C43000A4F842101B21A4F84A10A4F84C10A4F848 -:10C4400048106073A4F8D850202084F8DA0084F8EB -:10C45000D050C4F8D45084F8045184F8055184F8BD -:10C460000E5184F80F5184F8F45084F8005170BDD7 -:10C47000608890490144B1FBF0F1A4F878104BF6C4 -:10C480008031A4F87A10E388A4F87E50B4F882C012 -:10C49000DB000CFB00FC9CFBF0FCB3FBF0F304F1B5 -:10C4A0005801A4F882C000E022E05B1C9BB203FBB1 -:10C4B00000FCA4F88030BCF5C84FC4BF5B1E0B85E0 -:10C4C000B2FBF0F2521CCA8500F5802202F5EE3272 -:10C4D000531EB3FBF0F20A84CB8B03FB00F2B2FBDA -:10C4E000F0F0C883214604F15800BDE8704017E61B -:10C4F000D4F8F830B4F802C004F158005989DB8947 -:10C50000A4F87E50B4F88240DB0004FB0CF4B3FBCB -:10C51000F1F394FBF1F45B1C44859BB203FB01F443 -:10C520000385B4F5C84FC4BF5B1E0385B2FBF1F2AF -:10C53000521CC285428C01EBC202521EB2FBF1F2C8 -:10C540000284C28B02FB0CF2B2FBF1F1C18370BD1D -:10C550002DE9F003047E0CB1252C03D9BDE8F003CE -:10C5600012207047002A02BF0020BDE8F003704788 -:10C5700091F80DC01F2601234F4D4FF00008BCF16C -:10C58000000F73D0BCF1010F1EBF1F20BDE8F003E8 -:10C590007047B0F800C00A7C8F7B91F80F907A400A -:10C5A0004F7C87EA090742EA072282EA0C0C00273F -:10C5B0000CF0FF094FEA1C2C99FAA9F99CFAACFC83 -:10C5C0004FEA19694FEA1C6C49EA0C2C0CEB0C1C65 -:10C5D0007F1C9444FFB21FFA8CFC032FE8D38CEA33 -:10C5E000020C354F0022ECFB057212096FF0240596 -:10C5F00002FB05C2D2B201EBD207427602F0070578 -:10C600003F7A03FA05F52F4218BF82767ED104FBEC -:10C610000CF2120C521CD2B25FF0000400EB040CBE -:10C620009CF813C094453CBFA2EB0C02D2B212D3CB -:10C630000D194FF0000C2D7A03FA0CF73D421CBF88 -:10C64000521ED2B2002A71D00CF1010C0CF0FF0C7A -:10C65000BCF1080FF0D304F1010C0CF0FF04052C21 -:10C66000DCD33046BDE8F0037047FFE790F819C00F -:10C670000C7E474604FB02C20F4C4FF0000CE2FB5D -:10C68000054C4FEA1C1C6FF024040CFB0422D2B2B0 -:10C6900001EBD204427602F0070C247A03FA0CFC78 -:10C6A00014EA0C0F1FBF82764046BDE8F0037047C6 -:10C6B00004E00000FFDB050053E4B36E90F818C0FF -:10C6C000B2FBFCF40CFB1422521CD2B25FF000044B -:10C6D00000EB040C9CF813C094453CBFA2EB0C0289 -:10C6E000D2B212D30D194FF0000C2D7A03FA0CF8C8 -:10C6F00015EA080F1CBF521ED2B27AB10CF1010C20 -:10C700000CF0FF0CBCF1080FF0D300E011E004F1D5 -:10C71000010C0CF0FF04052CDAD3A2E70CEBC401EA -:10C7200081763846BDE8F0037047FFE70CEBC401A3 -:10C7300081764046BDE8F0037047FC4A0168126804 -:10C740001140FB4A126811430160704730B4F94947 -:10C75000F64B00244FF0010C0A78521CD2B20A703A -:10C76000202A08BF0C700D781A680CFA05F52A42C9 -:10C77000F2D0097802680CFA01F15140016030BC36 -:10C78000704770B46FF01F02010C02EA90251F235E -:10C79000A1F5AA4054381CBFA1F5AA40B0F155003C -:10C7A00009D0A1F52850AA381EBFA1F52A40B0F142 -:10C7B000AA00012000D100204FF0000C6246644620 -:10C7C0008CEA0106F6431643B6F1FF3F11D005F09F -:10C7D00001064FEA5C0C4CEAC63C03F00106520825 -:10C7E0006D085B08641C42EAC632162CE8D370BCA4 -:10C7F000704770BC00207047017931F01F0113BFF2 -:10C80000002000221146704710B4435C491C03F01D -:10C81000010C5B0803F00104A4445B0803F001046D -:10C82000A4445B0803F00104A4445B0803F0010482 -:10C83000A4445B0803F001045B08A44403F0010472 -:10C84000A4440CEB53031A44D2B20529DDDB012AC0 -:10C850008CBF0120002010BC704730B40022A1F131 -:10C86000010CBCF1000F11DD431E11F0010F08BFD8 -:10C8700013F8012F5C785FEA6C0C07D013F8025FA5 -:10C8800022435C782A43BCF1010CF7D1491E5CBFFE -:10C89000405C0243002A0CBF0120002030BC7047DE -:10C8A000130008BF704710B401EB030CD41A1CF836 -:10C8B00001CC5B1E00F804C013F0FF03F4D110BCE0 -:10C8C0007047F0B58DB0164610251C466A46AC463A -:10C8D00000EB0C03A5EB0C0713F8013CD355ACF1AE -:10C8E000010313F0FF0CF3D11546103210208446DB -:10C8F0000B18ACEB000713F8013C401ED35510F0A9 -:10C90000FF00F5D1284606F0F3FF86B1102005F1AF -:10C91000200201461318A1EB000C13F8013C401E45 -:10C9200004F80C3010F0FF00F4D10DB0F0BD089801 -:10C930002060099860600A98A0600B98E0600DB0D4 -:10C94000F0BD38B505460C466846F8F7EDFC002802 -:10C9500008BF38BD9DF900202272A07E607294F954 -:10C960000A100020511A48BF494295F82D308B42D9 -:10C97000C8BF38BDFF2B08BF38BDE17A491CC9B21A -:10C98000E17295F82E30994203D8A17A7F2918BF19 -:10C9900038BDA2720020E072012038BD0C2818BFFB -:10C9A0000B2810D00D2818BF1F280CD0202818BF26 -:10C9B000212808D0222818BF232804D024281EBFED -:10C9C000262800207047012070470C2963D2DFE839 -:10C9D00001F006090E13161B323C415C484E002A3A -:10C9E0005BD058E0072A18BF082A56D053E00C2A1B -:10C9F00018BF0B2A51D04EE00D2A4ED04BE0A2F1C9 -:10CA00000F000C2849D946E023B1A2F110000B28F1 -:10CA100043D940E0122A18BF112A3ED090F83600C0 -:10CA200020B1122A37D31A2A37D934E0162A32D342 -:10CA30001A2A32D92FE0A2F10F0103292DD990F83B -:10CA4000360008B31B2A28D925E0002B08BF042A8A -:10CA500021D122E013B1062A1FD01CE0012A1AD1ED -:10CA60001BE01C2A1CBF1D2A1E2A16D013E01F2AF9 -:10CA700018BF202A11D0212A18BF222A0DD0232A1C -:10CA80001CBF242A262A08D005E013B10E2A04D0A0 -:10CA900001E0052A01D000207047012070472DE9F0 -:10CAA000F04187680D4604462046F6F7DAFB98B158 -:10CAB000D5B13846A168F6F715FF002814DD2844E3 -:10CAC000401EB0FBF5F606FB05F13846F5F705FF0D -:10CAD000A0603046BDE8F081F6F7F6F940F2337118 -:10CAE000F5F7FBFEA060DFE70020BDE8F081904293 -:10CAF00028BF704770B50446101B642838BF6420F7 -:10CB000025188D4205D8F6F720FF00281CBF2846BF -:10CB100070BD204670BDC08E11F00C0F08BF70476D -:10CB2000B0F5296F38BF4FF42960704748520200B2 -:10CB30004C520200620100200246808E11F00C0F60 -:10CB400008BF704792F85530D18E13F00C0F04D007 -:10CB5000B1F5296F38BF4FF42961538840F2E24C98 -:10CB600003FB0CF3528E4FF4747C0CEB821C8C454F -:10CB70009CBF910101F57471591AA1F59671884213 -:10CB800028BF0846B0F5296F38BF4FF429607047B9 -:10CB9000084418449830002A14BF04210021084496 -:10CBA0007047F0B4002A14BF08220122002B14BFE2 -:10CBB0000824012412F00C0F8B8ECA8E25D091F818 -:10CBC0005550944615F00C0F04D0BCF5296F38BFB2 -:10CBD0004FF4296C4D8840F2E2466E434D8E4FF47F -:10CBE000747707EB851767459CBF4FEA851C0CF5EA -:10CBF000747CA6EB0C0CACF5967C634528BF6346B1 -:10CC0000B3F5296F38BF4FF4296314F00C0F04D02B -:10CC1000B2F5296F38BF4FF429621FFA83FC002850 -:10CC20000CBF0123002391F8560014F00C0F08BF2D -:10CC300000200CEB020108449830002B14BF0421A3 -:10CC400000210844F0BC70472DE9F00391F854200E -:10CC50000B8E12F00C0F4FF474771CBF07EB83138D -:10CC60009CB255D012F00C0F8B8ECA8E4D8E91F85F -:10CC700055C021D016461CF00C0F04D0B6F5296F14 -:10CC800038BF4FF42966B1F8028040F2E24908FB50 -:10CC900009F807EB8519B14502D8AE0106F574769F -:10CCA000A8EB0606A6F59676B34228BF3346B3F541 -:10CCB000296F38BF4FF42963A34228BF23469CB293 -:10CCC0001CF00C0F1CBF07EB85139BB228D000BFD4 -:10CCD0001CF00C0F04D0B2F5296F38BF4FF4296255 -:10CCE0009A4228BF1A4600280CBF0123002391F85E -:10CCF00056001CF00C0F08BF0020A1180844983003 -:10CD0000002B14BF042100210844BDE8F003704744 -:10CD1000022A07BF9B003C33DB0070339CB2A1E7C3 -:10CD2000BCF1020F07BFAB003C33EB0070339BB28A -:10CD3000CEE710F0010F1CBF0120704710F0020F6A -:10CD40001CBF0220704710F0040018BF0820704775 -:10CD50002DE9F0470446174689464FF0010808467A -:10CD600000F0D1FC0546484600F0D1FC10F0010F60 -:10CD700018BF012625D000BF15F0010F18BF0123F1 -:10CD80002AD000BF56EA030108BF4FF0000810F098 -:10CD9000070F08BF002615F0070F08BF002394F8FF -:10CDA0005400B0420CBF00203046387094F8551043 -:10CDB000994208BF00237B70002808BF002B25D1B3 -:10CDC00015E010F0020F18BF0226D5D110F0040FA5 -:10CDD00014BF08260026CFE715F0020F18BF022364 -:10CDE000D0D115F0040F14BF08230023CAE748462A -:10CDF00000F093FCB4F85810401A00B247F6FE71E8 -:10CE0000884201DC002801DC4FF0000816B1082E32 -:10CE10000CD018E094F85400012818BF022812D052 -:10CE200004281EBF0828FFDF032D0CD194F8A401AD -:10CE300048B1B4F8A801012894F8540006D0082895 -:10CE400001D0082038704046BDE8F087042818BF9C -:10CE50000420F7D1F5E7012814BF0228704710F02D -:10CE60000C0018BF0420704738B4CBB2C1F3072CB4 -:10CE7000C1B2C0F30724012B07D0022B09D0042B29 -:10CE800008BFBCF1040F2DD006E0BCF1010F03D1A7 -:10CE900028E0BCF1020F25D0012906D0022907D0D5 -:10CEA000042908BF042C1DD004E0012C02D119E094 -:10CEB000022C17D001EA0C0161F3070204EA030116 -:10CEC00061F30F22D1B211F0020F18BF022310D06C -:10CED000C2F307218DF8003011F0020F18BF0221B4 -:10CEE0001BD111E0214003EA0C03194061F3070252 -:10CEF000E6E711F0010F18BF0123E9D111F0040F8B -:10CF000014BF08230023E3E711F0010F18BF01212C -:10CF100003D111F0040118BF08218DF80110082B6E -:10CF200001BF000C012804208DF80000BDF80000AE -:10CF300038BC70474FF0000C082902D0042909D0F2 -:10CF400011E001280FD10420907082F803C01380F3 -:10CF500001207047012806D00820907082F803C095 -:10CF600013800120704700207047162A10D12A2212 -:10CF70000C2818BF0D280FD04FF0230C1F280DD000 -:10CF800031B10878012818BF002805D0162805D02F -:10CF900000207047012070471A70FBE783F800C03B -:10CFA000F8E7012908D002290BD0042912BF08296B -:10CFB00040F6A660704707E0002804BF40F2E24058 -:10CFC000704740F6C410704700B5FFDF40F2E24002 -:10CFD00000BD0000282107F03CBE4078704730B506 -:10CFE0000546007801F00F0220F00F001043287072 -:10CFF000092910D2DFE801F0050705070509050B2F -:10D000000D00062409E00C2407E0222405E0012499 -:10D0100003E00E2401E00024FFDF6C7030BD0078D7 -:10D0200000F00F0070470A68C0F803208988A0F854 -:10D0300007107047D0F803200A60B0F80700888016 -:10D0400070470A68C0F809208988A0F80D10704759 -:10D05000D0F809200A60B0F80D0088807047027887 -:10D06000402322F0400203EA81111143017070470E -:10D070000078C0F3801070470278802322F080028D -:10D0800003EAC1111143017070470078C00970476D -:10D09000027802F00F02072A16BF082AD0F80520EE -:10D0A000D0F80320C1F809200CBFB0F80920B0F86F -:10D0B0000720A1F80D200A7822F080020A7000787B -:10D0C000800942EAC0100870704770B514460E46D9 -:10D0D00005461F2A88BFFFDF2246314605F10900B9 -:10D0E00007F038FDA01D687070BD70B544780E461D -:10D0F0000546062C38BFFFDFA01F84B21F2C88BF57 -:10D100001F24224605F10901304607F023FD204681 -:10D1100070BD70B514460E4605461F2A88BFFFDF56 -:10D120002246314605F1090007F014FDA01D687084 -:10D1300070BD70B544780E460546062C38BFFFDF3B -:10D14000A01F84B21F2C88BFFFDF224605F1090112 -:10D15000304607F0FFFC204670BD0968C0F80F108C -:10D1600070470A88A0F8132089784175704790F8B5 -:10D17000242001F01F0122F01F02114380F8241027 -:10D180007047072988BF072190F82420E02322F068 -:10D19000E00203EA4111114380F8241070471F3068 -:10D1A00007F08EBE10B5044600F0E3FA002818BF61 -:10D1B000204410BDC17811F03F0F1BBF027912F05F -:10D1C000010F0022012211F03F0F1BBF037913F062 -:10D1D000020F002301231A4402EB4202530011F014 -:10D1E0003F0F1BBF027912F0080F0022012203EB50 -:10D1F000420311F03F0F1BBF027912F0040F00220F -:10D200000122134411F03F0F1BBF027912F0200FCF -:10D210000022012202EBC20203EB420311F03F0F96 -:10D220001BBF027912F0100F0022012202EB420212 -:10D230001A4411F03F0F1BBF007910F0400F00207F -:10D240000120104410F0FF0014BF01210021084408 -:10D25000C0B2704770B50278417802F00F02082A18 -:10D260004DD2DFE802F004080B4C4C4C0F14881F21 -:10D270001F280AD943E00C2907D040E0881F1F2847 -:10D2800003D93CE0881F1F2839D8012070BD4A1EF1 -:10D29000242A34D88446C07800258209032A09D07C -:10D2A00000F03F04601C884204D86046FFF782FF0C -:10D2B000A04201D9284670BD9CF803004FF001063A -:10D2C00010F03F0F1EBF1CF10400007810F0100F8B -:10D2D00013D064460421604600F04BFA002818BFC2 -:10D2E00014EB0000E6D0017801F03F012529E1D2DE -:10D2F00080780221B1EB501FDCD3304670BD002096 -:10D3000070BDC078800970470178002201F00F03DA -:10D310000121042B0BD0082B1CBF00207047437841 -:10D320000E2B04BFC3785FEA931C04D106E040785B -:10D33000801F1F2800D911460846704713F03F0F81 -:10D340001EBF007910F0010F10F0020FF4D1F2E7C8 -:10D3500010B4017801F00F01032920D0052921D153 -:10D360004478B0F81910B0F81BC0B0F81730827DBF -:10D37000222C17D1062915D3B1F5486F98BFBCF5FB -:10D38000FA7F0FD272B1082A98BF8A420AD28B4222 -:10D390009CBFB0F81D00B0F5486F03D805E0407899 -:10D3A0000C2802D010BC0020704710BC0120704730 -:10D3B0002DE9F0411F4614460D00064608BFFFDF69 -:10D3C0002146304600F0D5F9040008BFFFDF3019D0 -:10D3D0003A462946BDE8F04107F0BCBBC07800F0F2 -:10D3E0003F007047C02202EA8111C27802F03F027A -:10D3F0001143C1707047C9B201F00102C1F340038B -:10D400001A4402EB4202C1F3800303EB4202C1F370 -:10D41000C00302EB4302C1F3001303EB43031A44BE -:10D42000C1F3401303EBC30302EB4302C1F38013C8 -:10D430001A4412F0FF0202D0521CD2B20171C3781A -:10D4400002F03F0103F0C0031943C170511C417049 -:10D4500070472DE9F0410546C078164600F03F04BC -:10D46000C4F124000F46B042B8BFFFDF281932468E -:10D470003946001D07F06EFBA019401C6870BDE81E -:10D48000F0812DE9F04105464478C0780F4600F060 -:10D490003F06002C08BFFFDFA01B401E84B21F2CDC -:10D4A00088BF1F242FB1A819011D2246384607F056 -:10D4B00051FB2046BDE8F0814078704700B5027806 -:10D4C00001F0030322F003021A430270012914BF82 -:10D4D0000229002104D0032916BFFFDF012100BD6E -:10D4E000417000BD00B5027801F0030322F0030291 -:10D4F0001A430270012914BF0229002104D0032914 -:10D5000016BFFFDF012100BD417000BD007800F0B3 -:10D5100003007047417889B1C0780E2818BF0F28E2 -:10D5200003D0102818BF192802D3FB2904D905E01D -:10D53000BF4A105C884201D101207047002070472B -:10D5400030B501240546C17019293CBFB848445C78 -:10D5500002D3FF2918BFFFDF6C7030BD70B51546D0 -:10D560000E4604461B2A88BFFFDF65702A463146F7 -:10D57000E01CBDE8704007F0EDBAB0F80700704756 -:10D58000B0F809007047C172090A01737047B0F81A -:10D590000B00704730B4B0F80720A64DB0F809C0B2 -:10D5A000B0F805300179941F2D1998BFBCF5FA7FAA -:10D5B0000ED269B1082998BF914209D293429FBF08 -:10D5C000B0F80B00B0F5486F012030BC98BF704731 -:10D5D000002030BC7047001D07F072BC021D0846D9 -:10D5E000114607F06DBCB0F809007047007970472C -:10D5F0000A68426049688160704742680A608068D2 -:10D600004860704709888181704780890880704729 -:10D610000A68C0F80E204968C0F812107047D0F8A8 -:10D620000E200A60D0F81200486070470968C0F800 -:10D6300016107047D0F81600086070470A684260FC -:10D6400049688160704742680A6080684860704736 -:10D650000968C1607047C06808607047007970470A -:10D660000A68426049688160704742680A60806861 -:10D67000486070470171090A417170478171090A58 -:10D68000C17170470172090A417270478172090ABB -:10D69000C172704780887047C088704700897047A2 -:10D6A0004089704701891B2924BF4189B1F5A47FB6 -:10D6B00007D381881B2921BFC088B0F5A47F012032 -:10D6C0007047002070470A6842604968816070476F -:10D6D00042680A60806848607047017911F0070F5E -:10D6E0001BBF407910F0070F00200120704701791F -:10D6F00011F0070F1BBF407910F0070F0020012029 -:10D7000070470171704700797047417170474079E7 -:10D7100070478171090AC1717047C088704746A27D -:10D7200082B0D2E90012CDE900120179407901F00E -:10D73000070269461DF80220012A07D800F00700F9 -:10D74000085C01289EBF012002B07047002002B093 -:10D750007047017170470079704741717047407997 -:10D76000704730B50C460546FB2988BFFFDF6C705B -:10D7700030BDC378024613F03F0008BF7047052054 -:10D78000127903F03F0312F0010F36D0002914BFC5 -:10D790000B20704712F0020F32D0012914BF801DF8 -:10D7A000704700BF12F0040F2DD0022914BF401C97 -:10D7B000704700BF12F0080F28D0032914BF801C47 -:10D7C000704700BF12F0100F23D0042914BFC01CF3 -:10D7D000704700BF12F0200F1ED005291ABF12306B -:10D7E000C0B2704712F0400F19D006291ABF401C72 -:10D7F000C0B27047072918D114E00029CAD114E03B -:10D800000129CFD111E00229D4D10EE00329D9D1C9 -:10D810000BE00429DED108E00529E3D105E0062963 -:10D82000E8D102E0834288BF7047002070470000C3 -:10D830005052020086F3FFFF0001010201020203C1 -:10D840002DE9F041FC4D0446284600216A788068A5 -:10D8500001270E4612B1012A1ED006E090F866207C -:10D86000002A18BF6F7000D001216A78C2EB421203 -:10D8700000EB420292F82830194324D0667090F8E9 -:10D88000D90002F12A0170B12A22201D07F062F9A5 -:10D890000420207027710DE090F82820002A18BF7E -:10D8A0006E70E1D1E1E73C22201D07F053F905201D -:10D8B000207027716878A968C0EB401001EB400028 -:10D8C00080F828601DE090F8A410E9B190F8D90024 -:10D8D000012818BFFFDFA868D0F8A5106160D0F854 -:10D8E000A910A160D0F8AD10E160D0F8B1102161AD -:10D8F00090F8B5102175667013212170277180F89A -:10D90000A4600120BDE8F08190F82210012922D006 -:10D91000017801291CBF0020BDE8F0816670142148 -:10D920002170811C2022201D07F014F92672A9689D -:10D930000E70C24882888284D0F8C420527B80F85E -:10D94000262080F82270D1F8C4000088F3F7BEFAD0 -:10D95000F2F765FFD5E7667007212170416A6160C3 -:10D9600080F82260CDE7B44880680178002914BFB0 -:10D9700080884FF6FF7070472DE9F84F4FF0000890 -:10D98000894606460127CDF80080FFF748FBBDF821 -:10D990000010A94D21F06004ADF8004008284FD2D6 -:10D9A000DFE800F004070D4E184E132C44F003007E -:10D9B0000DE044F01500ADF80000474641E044F0AA -:10D9C000100000BFADF800003BE044F0020040F062 -:10D9D0001000F7E7A86890F8E000052818BFFFDFFF -:10D9E00044F01A00ADF80000A96891F8E71000298A -:10D9F00014BF40F0010020F00100E3E7A86890F8B0 -:10DA0000E01003290AD090F8E01006295DD090F8C4 -:10DA1000E000042818BFFFDF64D012E03046FFF7B3 -:10DA200070FC002818BFFFDF0AD1F07810F03F0F1C -:10DA30001FBF307910F0020F44F00400ADF8000071 -:10DA40004746BDF800000090BDF80000C0F3C00BD1 -:10DA5000A868CBEB4B1A00EB4A0090F8280000288E -:10DA600018BFBDE8F88F3046FFF7D9FA80467248F4 -:10DA7000806800EB4A0190F8C90001F12A040128EE -:10DA800008BF012508D0022808BF022504D00428B9 -:10DA900016BF08280325FFDF257300206073664842 -:10DAA000806890F8E11084F83B10FF21A1737F217A -:10DAB000E176BDF80010618190F8E01004291CBFE8 -:10DAC00090F8E01006293AD049E044F00A01ADF898 -:10DAD000001090F8FA00002814BF41F0040021F073 -:10DAE00004006FE73046FFF70CFCD8B1012804BFF3 -:10DAF00044F00100ADF8000014D0022818BFFFDF89 -:10DB00009FD144F00200ADF80000A96891F8FA1026 -:10DB1000002914BF40F0040020F00400ADF800001C -:10DB200047468EE7F07810F03F0F1FBF307910F0B6 -:10DB3000020FBDF8000040F0040082D042E790F8E8 -:10DB4000E200012808BF012508D0022808BF0225ED -:10DB500004D0042816BF08280325FFDF657304F1ED -:10DB600009000090344D28787F2808BFFFDF29780E -:10DB7000009801707F2028706FB1B8F1070F04F191 -:10DB80001C01304603D2FFF7B0FA207239E0FFF7EC -:10DB900078FC207204E000202072B8F1070F30D327 -:10DBA000B8F1070F0DD1A86890F8F91001B3D0F8BB -:10DBB000EA10C4F80210B0F8EE10E18090F8F0001E -:10DBC0006070A07A10F0040F0ED0A86890F8FA10D8 -:10DBD000E9B190F8F7102175D0F8F110C4F81510DC -:10DBE000B0F8F500A4F81900B8F1070F38D098E0A4 -:10DBF000F07810F03F0F1ABF307910F0010FFF20BE -:10DC0000DED0621CA11C304601F0E4FCD9E7B8F17B -:10DC1000070F1CBFB8F1010FFFDFB9F1000F08BFFC -:10DC2000FFDF99F800002075B8F1010F08D0B8F1B6 -:10DC3000070F0BD075E0000064010020CC1000201D -:10DC400004F115013046FFF703FA6AE0012130467E -:10DC5000FFF7A8FA0168C4F815108088A4F8190025 -:10DC6000F07810F03F0F1CBF317911F0080F1AD077 -:10DC7000A86890F8E020042A06D090F8E000032875 -:10DC800011D111F0100F0ED003213046FFF78AFAA0 -:10DC9000407803210009A0733046FFF783FA00881B -:10DCA000C0F30B002082F07810F03F0F1CBF3079DA -:10DCB00010F0400F13D0FE48FFF723FBA96891F83E -:10DCC000E020032A14D006213046FFF76BFA0078D3 -:10DCD000E076A86890F8E010062922D118E0A8683C -:10DCE00090F8FB10002918BF90F8F800F0D1F0E789 -:10DCF00091F8C910042914BF08290028E3D1F0784D -:10DD000010F03F0F1CBF307910F0080FDBD1E0E7B7 -:10DD100090F8E9100909A173B0F8E800C0F30B000E -:10DD20002082A968012001EB4A0181F82800BBF19B -:10DD3000000F14BF06200520BDE8F84F03F02CBAF1 -:10DD40002DE9F041DB4DAA6892F8D930002B6ED056 -:10DD50007F27012611B10978FE2914D0804692F858 -:10DD60002800002818BFBDE8F08102F12A044046CF -:10DD7000FFF755F90021082879D2DFE800F0515368 -:10DD800056787878595CCA4C92F8A400002818BFDD -:10DD9000BDE8F08182F8A66092F8DD0018B1F6F7D0 -:10DDA000DAFC012829D02046FFF762F90146A8686D -:10DDB00080F8A71000F1A8012046FFF73BF92046A4 -:10DDC000FFF763F90146A86880F8AE1000F1AF01D3 -:10DDD0002046FFF73DF9A86800F1B50428787F28B0 -:10DDE00008BFFFDF287820702F70A86880F8A46033 -:10DDF000BDE8F041052003F0CFB9F6F7EFFCA968C4 -:10DE000001F1A802A731FDF7FDFE002808BFFFDFE2 -:10DE1000A86890F8A71041F0020180F8A710CEE79B -:10DE2000A17209E0A67221720CE0032001E021E05A -:10DE30000220A07200E0FFDF04F10B014046FFF773 -:10DE400054F92072621CA11C404601F0C3FB2878E3 -:10DE500009347F2808BFFFDF287820702F70A8685A -:10DE600080F82860BDE8F041052003F095B92172E3 -:10DE7000BDE8F081BDE8F0417EE570B58D4C002233 -:10DE8000A06890F8C910104602F0D4FF002831D0E5 -:10DE9000F7F763F9A068884990F8DF000D5C284621 -:10DEA000F6F7E7FEA06880F8E15090F8C91008295D -:10DEB00016BF04290F202520F6F7F9FDA0680021E0 -:10DEC00090F8C9200120F6F7D4FF7948F7F74EF90A -:10DED000A068D0F80001F7F74CF9A06890F8C910D5 -:10DEE00080F8E21090F8C800032814BF0228012926 -:10DEF00008D103E0BDE8704001F0A5BB0821002077 -:10DF0000F7F72AFAA06890F8C91080F8E210F7F73E -:10DF100000FAA06890F8C95090F8DD0040B1F6F71B -:10DF2000E6FB15F00C0F0CBF40205520F7F7D2F997 -:10DF3000A168032081F8E00070BD2DE9F0410F4693 -:10DF4000904605460321FFF72DF94078594C020908 -:10DF5000A06890F8E91062F3071180F8E910032136 -:10DF60002846FFF71FF90188A068B0F8E82061F3A0 -:10DF70000B02A0F8E82080F8E77090F8C91001299A -:10DF800005D090F8E000032808BFBDE8F081E878EC -:10DF90004FF0010610F03F0F1CBF287910F0400F22 -:10DFA00009D006212846FFF7FDF80178A06880F81F -:10DFB000F81080F8FB60A06890F8E01003292AD0E0 -:10DFC000E97811F03F0F1CBF297911F0010F08D03B -:10DFD00000F1F002911F284601F0FCFAA06880F8D9 -:10DFE000F960E87810F03F0F1ABF287910F0020F9F -:10DFF000BDE8F08101212846FFF7D4F8A168026846 -:10E00000C1F8F1208088A1F8F50081F8F78081F847 -:10E01000FA60BDE8F081022F18BF012FD0D1BDE812 -:10E02000F0812DE9F84F0446C07810F03F0F1CBF77 -:10E03000207910F0020F05D010F0010F18BF4FF03B -:10E04000010901D14FF0000900271A4DB9F1000F65 -:10E050005BD020780026C70901212046FFF7A2F8EF -:10E060003FB1407900F0C000402808BF4FF00108E0 -:10E0700001D04FF00008A86890F8C810032906D115 -:10E0800090F8C110002918BF90F8CC0001D190F889 -:10E09000DE00FDF7A5FD070015D01021FEF7DDFB22 -:10E0A000B8F1000F0FD001212046FFF77BF805E003 -:10E0B000D811002064010020785202000146384641 -:10E0C000F7F7D4FC0646A868B8F1000F90F8B970CD -:10E0D00018BF47F00207E07810F03F0F1CBF20790F -:10E0E00010F0020F0ED02046FEF7CFFF824601212E -:10E0F0002046FFF757F85146F6F769FD002818BF8C -:10E10000012000D1002030435BD0E07810F03F0FB9 -:10E110001EBF217911F0100F11F0080F3FD004211C -:10E120002046FFF73FF80646A86890F8E20002F0A4 -:10E1300078FE0146304601F0A8FAA0B13A46002127 -:10E140002046FFF7FAFEF848FFF7DBF80146A8681B -:10E1500080F8E6103188A0F8E310B17880F8E51077 -:10E160000120BDE8F88FA86890F8E20001283AD1B4 -:10E17000E07810F03F0F1CBF207910F0010F32D073 -:10E18000B9F1000F04D100212046FFF7F5FB2AE08A -:10E190008DF8007069462046FFF7EEFB23E010F093 -:10E1A0003F0F1CBF217911F0100F1CD110F03F0F51 -:10E1B0001CBF207910F0010F15D0B9F1000FE7D185 -:10E1C000E1E7A86890F8CA00032818BF02280AD11E -:10E1D000B8F1000F07D036B9D448694600680090FE -:10E1E0002046FFF7C9FB0020BDE8F88FD0498968B9 -:10E1F00081F80A01704770B5CD4DA86890F8E0101D -:10E20000022919BF90F8E010012900210C461CBF1B -:10E210000C2070BDC1EB411200EB4202034682F8B4 -:10E220002840491CC9B20229F4D3047080F8224066 -:10E2300093F8DD0030B1F7F757F8F6F76CFAA868F5 -:10E2400080F8DD40A868012180F8DC4080F8C1102A -:10E2500080F8C84080F8DF40282180F80B1180F852 -:10E260000A41A0F8E34080F8E540072180F8C0109B -:10E27000002070BDAE4810B58068002180F8E01025 -:10E28000012180F8E010FFF7B6FF002818BFFFDF7C -:10E2900010BD2DE9F047A64C07460C26A06890F863 -:10E2A000E01001291FBF90F8E00002280C20BDE813 -:10E2B000F087F6F73CFCA06890F90A01F6F7C7FC76 -:10E2C000A06890F8C91080F8E21090F8C0100125FD -:10E2D000002978D090F8C8004FF00009032802D038 -:10E2E000022805D008E00521924801F03AFA03E03F -:10E2F0000321904801F035FAA06890F8D810002961 -:10E3000004BF90F8DB00002843D0F4F7DDFD06469B -:10E31000A0683146D0F8D400F5F7E4FA864990FBBE -:10E32000F1F801FB180041423046F4F7D6FA0146F5 -:10E33000A068C0F8D410D0F8D0104144C0F8D01074 -:10E34000FDF72FFC0146A068D0F8D020914220D8DC -:10E35000C0E9349690F8DB0000281CBF0120FDF7CF -:10E3600044FD0121A06890F8DC20002A1CBF90F831 -:10E37000D820002A0DD090F8B93000F1BA02012B54 -:10E3800004D1527902F0C002402A14D0BA30F7F713 -:10E39000D5FBA06890F8B910BA30F6F710FC0F2141 -:10E3A0000720F6F728FCA068002690F8E010012965 -:10E3B00018D112E007E0FDF745FDA1682A46BA3101 -:10E3C000F7F785FBE5E790F8E010022904BF80F835 -:10E3D000E0500C2006D1BDE8F08780F804510221FE -:10E3E00080F8E010A06890F8C10088B1FDF7A5FCA6 -:10E3F00003214D48FDF7DDFC0146A06880F8DD10E3 -:10E40000C0F800714D48F6F79AFE3046BDE8F08737 -:10E41000FDF73CFCECE738B5454CA06890F8E010FF -:10E4200002291CBF0C2038BD012180F80511A0F87D -:10E43000081129208DF800006846F5F77DFD30B100 -:10E44000A0689DF8001090F80601884205D1A068E8 -:10E4500090F80601401C8DF80000A1689DF80000AE -:10E4600081F806010220F6F77EFE3548F6F7F9FB43 -:10E47000A168DFF8D0C0002091F8C03091F8DF200B -:10E48000521CACFB02546408A4EB8404224481F8BF -:10E49000DF2023FA02F212F0010F03D1401CC0B2B8 -:10E4A0000328EBD3FFF7E9FC002038BD2049896839 -:10E4B00081F8C900002070471D49896881F8DA0099 -:10E4C000704710B51A4CA36893F8B830022B14BFEC -:10E4D000032B00280BD100291ABF0229012000209C -:10E4E0001146FDF761FB08281CBF012010BDA06884 -:10E4F00090F8B800002816BF022800200120BDE8CF -:10E500001040F7F7A5BA0A48806890F8B8000028CC -:10E5100016BF022800200120F7F79ABA044989683B -:10E5200081F8B80070470000D81100206C5202003A -:10E53000640100200012002040420F0075520200CA -:10E540007B520200ABAAAAAAF749896881F8DC00CD -:10E55000704770B5F44CA16891F8B800002816BF58 -:10E5600002280020012081F8B900BA31F7F75AFAE1 -:10E57000A06890F8B810022916BF032901210021D4 -:10E5800080F8DB1090F8B920002500F1BA03012AC9 -:10E5900004BF5B7913F0C00F0AD000F1BA03012A5F -:10E5A00004D15A7902F0C002402A01D0002200E0D2 -:10E5B000012280F8D820002A04BF002970BDC0F8CD -:10E5C000D050F4F781FCA168C1F8D40091F8DB00C9 -:10E5D00000281CBF0020FDF708FC0026A06890F86A -:10E5E000DC1000291ABF90F8D810002970BD90F8EF -:10E5F000B92000F1BA01012A04D1497901F0C00122 -:10E60000402905D02946BDE87040BA30F7F796BAE0 -:10E61000FDF718FCA1683246BDE87040BA31F7F743 -:10E6200056BA70B5C04D0C4600280CBF012300231C -:10E63000A96881F8C13081F8CB004FF0080081F85B -:10E64000CC000CD1002C1ABF022C01200020114656 -:10E65000FDF7AAFAA968082881F8CC0001D00020AB -:10E6600070BD022C14BF032C1220F8D170BD0028FD -:10E6700018BF112070470328AB4A926808BFC2F840 -:10E68000C41082F8C8000020704710B5044602F09C -:10E6900083FF052809D002F07FFF042805D0A24897 -:10E6A000806880F8D940002010BD0C2010BD9E4825 -:10E6B000816891F8C800032804D0012818BF0228F7 -:10E6C00007D004E091F8CB00012808BF7047002074 -:10E6D000704791F8CA00012814BF03280120F6D121 -:10E6E000704710B5F6F7EAFDF6F79EFDF6F7CEFC9B -:10E6F000F6F72BFD8C4CA06890F8DD0038B1F6F7EA -:10E70000F3FDF6F708F8A168002081F8DD00A068A5 -:10E71000012180F80411022180F8E010002010BDD2 -:10E720008149896881F8FC0070477F4902788968CF -:10E73000012A06D0042A24D0052A0CBF1120122059 -:10E74000704742780023032A08BFC1F8C43081F81B -:10E75000C820012281F8C920C27881F8B820027946 -:10E76000002A16BF022A0123002381F8C13081F854 -:10E77000CA20427981F8C020807981F8DA0000202F -:10E78000704782780023032A08BFC1F8C43081F89B -:10E79000C8200822DEE764488068704700F053BF55 -:10E7A0002DE9F84F00256048F6F7BEFD5E4C4FF0AE -:10E7B0007F0A002808BF84F800A0F6F7A0FD5B4898 -:10E7C000FEF72DFCA0700146A06890F8E2204FF003 -:10E7D00003084FF000094FF0010B012A10D0042A62 -:10E7E0001CBF082AFFDF00F05782A06890F8DD0008 -:10E7F00018B1F6F779FDF5F78EFF2846BDE8F88FDA -:10E800004A4D0026A5F58677072936D290F8C10033 -:10E8100028B9F6F71EFA002808BF002600D0012606 -:10E82000A06890F8DD0080B1FDF715FAA168FF2817 -:10E8300081F8DE0001460DD0E81CFDF701FAA06862 -:10E8400090F8DE00FDF712FA0643A06890F8DE00AB -:10E85000FF2817D1FDF7A1FA87F8DE0097F8C1105D -:10E8600081B108280ED12878E91CC0F38010FDF78B -:10E870009BF9082818BF002604E002BF90F8D900D1 -:10E8800000280126A07808283CD2DFE800F03FB934 -:10E89000043B3B3B17FD36B1A06890F8C800012847 -:10E8A00018BF022803D0F6F7F1FB45469DE7F6F7BF -:10E8B000EDFB00211D48FFF743FAF6E716B3A06809 -:10E8C00090F8C800022802D0012815D01AE00021D3 -:10E8D0001648FFF735FAA0680825C0F8E790C0F899 -:10E8E000EB90C0F8EF90C0F8F390C0F8F79080F884 -:10E8F000FB9080F8E79078E700210C48FFF720FABA -:10E9000000F040B9F6F7C2FB03256EE70020002EA9 -:10E9100071D0A26892F8C810022909D0012925D027 -:10E92000032928D06AE0000064010020D8110020EB -:10E930000021FE48FFF704FAA16891F8050128B10B -:10E94000401E10F0FF0081F8050154D1C1F8E79096 -:10E95000C1F8EB90C1F8EF90C1F8F390C1F8F790CF -:10E9600081F8FB90082081F8E7B047E00021EF48EC -:10E97000FFF7E6F941E0D2F8C400E978837E9942D6 -:10E980001BD12979C37E994217D16979037F9942B6 -:10E9900013D1A979437F99420FD1E979837F9942B5 -:10E9A0000BD1297AC37F994207D12978437EC1F3DD -:10E9B0008011994208BF012100D0002192F8CB209C -:10E9C000012A01D079B10CE059B900F11A01D748F8 -:10E9D000FEF730FBD548FEF74BFBA168D1F8C41019 -:10E9E00048760A200AE097F8CC00082803D097F868 -:10E9F000DE108142F5D0F6F749FB03200546F4E628 -:10EA0000A06890F8DB1000290CBF4FF0010B4FF00D -:10EA1000000B4FF000082978CA0905F1090107D059 -:10EA2000497901F0C001402908BF4FF0010901D028 -:10EA30004FF0000990F8C810032906D190F8C110D2 -:10EA4000002918BF90F8CC0001D190F8DE00FDF746 -:10EA5000C7F85FEA000A13D01021FDF7FEFE002878 -:10EA600018BF4FF0010BB9F1000F04BFA06890F878 -:10EA7000B9A00FD005F109015046F6F7F7FF80461F -:10EA8000A06890F8B9A000E093E0B9F1000F18BFBA -:10EA90004AF0020A90F8C81003290ED0F6F7F6FAE9 -:10EAA000F6B3F6F7A4F850EA08006DD08DF800A090 -:10EAB00069469E48FFF744F964E0D0F8C400E9785D -:10EAC000827E91421BD12979C27E914217D1697908 -:10EAD000027F914213D1A979427F91420FD1E97906 -:10EAE000827F91420BD1297AC27F914207D1297846 -:10EAF000407EC1F38011814208BF012500D000256E -:10EB000097F8DE00082806D097F8CC10884208BF96 -:10EB10004FF0010901D04FF00009B8F1000F00E0FB -:10EB200032E005D1BBF1000F04D0F6F760F808B170 -:10EB3000012100E000214EB197F8CB00012803D05D -:10EB400020B955EA090001D0012000E0002001426F -:10EB500016D0A06890F8CB10012908BF002D0DD168 -:10EB6000D0F8C40000F11A017048FEF763FA6F484C -:10EB7000FEF77EFAA168D1F8C41048760A2534E67B -:10EB8000F6F784FA032530E6A06890F8CA00032857 -:10EB900018BF0228F6D1B9F1000FF3D0B8F1000F79 -:10EBA000F0D163486946406800906048FFF7C8F8B4 -:10EBB000E8E7A06890F8DA0000283FF4A3AEF6F783 -:10EBC00065FAA06890F8D9100029DBD1C0F8E79069 -:10EBD000C0F8EB90C0F8EF90C0F8F390C0F8F79051 -:10EBE00080F8FB9080F8F8A05048FEF78AFB50B3FD -:10EBF000012836D00228C5D1A068032590F8C800A6 -:10EC0000032814BF0020012036EA00003FF4EDADD8 -:10EC1000464E1820F17811F03F0F3FF4E6AD317900 -:10EC200088437FF4E2AD04213046FEF7BBFA074685 -:10EC3000A06890F8E20002F0F4F80146384600F0CF -:10EC400024FDE8BBD1E5002E9CD0A06890F8C80058 -:10EC5000012818BF022895D13448FFF7E2F980BB9C -:10EC600090E7002E8ED0314D1820E97811F03F0F3B -:10EC700088D02979884385D104212846FEF792FA65 -:10EC80000646A06890F8E20002F0CBF80146304654 -:10EC900000F0FBFC98BB75E707297FF433AEC0F8A2 -:10ECA000E790C0F8EB90C0F8EF90C0F8F390C0F890 -:10ECB000F79080F8FB90012680F8F8A01B4801E04F -:10ECC0007FE01AE0FEF71DFB38B1012818D00228BA -:10ECD0004DD0F6F7DBF9454687E5F6F7D7F9A0689A -:10ECE00090F8C800012818BF02287FF44BAF0F48E6 -:10ECF000FFF797F900283FF445AF042575E522E0BA -:10ED0000F6F7C4F9094D1820E97811F03F0F3FF4E8 -:10ED100039AF297988437FF435AF04212846FEF7BF -:10ED200041FA0646A06890F8E20003E0D8110020FE -:10ED30006C52020002F075F80146304600F0A5FC66 -:10ED400000283FF41FAF002201212846FFF7F5F805 -:10ED5000F748FEF7D6FA0146A06880F8E610318839 -:10ED6000A0F8E310B17880F8E51004253DE503250F -:10ED7000F6F78CF9A06890F8C800032814BF0020AB -:10ED8000012036EA00003FF430ADE94E1820F1785A -:10ED900011F03F0F3FF429AD317988437FF425AD61 -:10EDA00004213046FEF7FEF90746A06890F8E2001D -:10EDB00002F037F80146384600F067FC00283FF4BF -:10EDC00014AD002202213046FFF7B7F8D848FEF70D -:10EDD00098FA0146A06880F8E6103988A0F8E31098 -:10EDE000B97880F8E5100425FFE42DE9F041D14C15 -:10EDF000A0680078002818BFFFDF0025A068012761 -:10EE00008570D0F8C4100A8882804A8842838A8834 -:10EE10008283C988C18380F82050C74990F8DB20DD -:10EE2000A1F59A764AB10A78C2F38013CA1C23B1BD -:10EE3000527902F0C002402A33D090F8DC2042B16F -:10EE400011F8032BC2F380121AB1497911F0C00FE7 -:10EE500027D00E3006F022F8A06890F8DD0018B137 -:10EE6000F5F779FC012824D0A068D0F8C4104A7EB8 -:10EE7000C271D1F81A208260C98B818145610583F6 -:10EE8000A0680770D0F8C42090F80A1182F85710D3 -:10EE9000D0F8C4000088F2F719F8BDE8F041F1F7A6 -:10EEA000AFBCD6F83711C0F80E10B6F83B1141824E -:10EEB000D2E7F5F793FCA16801F10802C91DFCF740 -:10EEC000A1FE002808BFFFDFA068C17941F0020160 -:10EED000C171D6F80F114161B6F813110183CFE764 -:10EEE0002DE9F047934C0746FF21A0680025012635 -:10EEF00080F8DE1090F8C800012818BF022802D060 -:10EF0000032818BFFFDF5FB18948FEF7A3F918B9DE -:10EF10008748FEF7F9F918B100F07BFC05463FE0A1 -:10EF2000A06890F8E0007F27082839D2DFE800F0D9 -:10EF3000383838041725352B7E48F6F7F5F90028C0 -:10EF400008BF2770F6F7DBF9A06890F8DD0018B16C -:10EF5000F6F7CAF9F5F7DFFBF6F798F82BE07548F6 -:10EF6000F6F7E2F9002808BF2770F6F7C8F9A0689D -:10EF700090F8DD000028EFD0EAE76E48F6F7D4F904 -:10EF800030B9277004E06B48F6F7CEF90028F8D0C6 -:10EF9000F6F7B5F9F6F77AF80DE000F03DFE0AE075 -:10EFA0000C2D80F02B82DFE805F04CFCFB06FAF913 -:10EFB000F9F90AF84ECBBDE8F047FEF75EBF002234 -:10EFC0000121022001F036FF002800F05B815A4940 -:10EFD000A1F12800FEF75CF8A068574E90F8B91030 -:10EFE0003046FEF73CF8A06800F1BA013046FEF763 -:10EFF0001AF8A06890F8DB10C1B190F8C810032986 -:10F0000006D190F8C110002918BF90F8CC0001D1AA -:10F0100090F8DE00FCF718FF050007D0012130460C -:10F02000FEF71DF829463046FDF7FDFF4248F6F78A -:10F030009DF801210846F6F78FF9A168082081F8AC -:10F04000E000BDE8F087A06890F8E21090F80B218E -:10F0500011F00C0F08BF002290F8E210032001F01D -:10F06000E9FE002800F00E81344D0A2085F8E0000A -:10F07000012002F091F805F59A71A1F12800FEF740 -:10F0800007F8A06805F59A7790F8B9103846FDF7AB -:10F09000E6FFA06800F1BA013846FDF7C4FFA0689A -:10F0A00090F8DB10C1B190F8C810032906D190F890 -:10F0B000C110002918BF90F8CC0001D190F8DE00F3 -:10F0C000FCF7C2FE060007D001213846FDF7C7FF56 -:10F0D00031463846FDF7A7FFA2681749D2F8C400A9 -:10F0E000C08AC875000A0876D2F8C400407D8875C9 -:10F0F0000846F6F73BF8D5F8C4100F4820234A7BA2 -:10F10000017803EA421221F0200111430170084AFC -:10F11000D5F8C4001278417BC2F34012114041730C -:10F12000D5F8C41095F80B0181F85600BDE8F087BA -:10F13000D81100206401002000120020CC10002013 -:10F14000A06890F8E21090F80B2111F00C0F08BFA6 -:10F15000002290F8E210052001F06CFE00287CD01F -:10F16000FE4D0B2085F8E000022002F015F805F5B1 -:10F170009A71A1F12800FDF78BFFA06805F59A7838 -:10F1800090F8B9104046FDF76AFFA06800F1BA0197 -:10F190004046FDF748FFA06804E047E02EE1A5E007 -:10F1A0009DE098E090F8DB10C1B190F8C8100329F9 -:10F1B00006D190F8C110002918BF90F8CC0001D1F9 -:10F1C00090F8DE00FCF740FE070007D00121404622 -:10F1D000FDF745FF39464046FDF725FFA068E04AA8 -:10F1E000D0F8C410C98AD175090A1176D0F8C400C4 -:10F1F0001146407D88750846F5F7B8FFD5F8C4007C -:10F200004673A06890F8E230012296210020F5F7BD -:10F210008CFED348017821F020010170A068D5F858 -:10F22000C41090F80B0181F856007FE7A06890F8B1 -:10F23000E21090F80B2111F00C0F08BF002290F89B -:10F24000E210042001F0F6FD38B1C549A1F1280013 -:10F25000FDF71EFFC24EA06800E013E090F8B91061 -:10F260003046FDF7FCFEA06800F1BA013046FDF71C -:10F27000DAFEA06890F8DB10E9B190F8C810032915 -:10F2800004D00AE0BDE8F04700F0DDB990F8C11005 -:10F29000002918BF90F8CC0001D190F8DE00FCF7EF -:10F2A000D3FD050007D001213046FDF7D8FE2946E1 -:10F2B0003046FDF7B8FEAA48F5F758FFA06890F869 -:10F2C000E230012296210020F5F72FFEA1680920E7 -:10F2D00081F8E0002AE7A06880F8E06026E7A068EF -:10F2E000022180F8046180F8E0101FE7A66816F894 -:10F2F000E31F11F0800F0CBF1E204FF49670B6F87C -:10F300000120C2F30C0212FB00F7C80908BF4FF03E -:10F310001E0906D0002806BFFFDF4FF000094FF49A -:10F320009679B078400908BF012507D0012808BFA9 -:10F33000022503D0022814BF00250825A06890F8F4 -:10F34000E20001F06EFDA7EB0008307808EB09073A -:10F35000C0F38010002808BF4FF4FA7A05D006BF2A -:10F36000FFDF4FF0000A4FF0320A7C4890F8FC9023 -:10F37000B9F10C0F28BFFFDF7A487B4A30F819003B -:10F380000AEB000101FB0720511CB0FBF1F000F17A -:10F3900020094F44F5F7E1FE307800F03F06304693 -:10F3A000F5F767FCA06880F8E16029462520F5F7AD -:10F3B0007EFB0122A8EB09012B461046F5F7B5FDAF -:10F3C0006A48F5F7D3FE00213846F5F7EAFEA06853 -:10F3D00080F8E250F5F79DFFA06890F8DD0040B19D -:10F3E000F5F785F915F00C0F0CBF50205520F5F7F7 -:10F3F00071FFA168042081F8E00097E6FFDF95E641 -:10F400005B4810B5806890F8E0000C286BD2DFE80C -:10F4100000F06A6A6A6A6A6A6A6A0615533453486F -:10F42000F5F7A4FEF5F775FF514C00219620F5F78E -:10F43000B8FEA168052081F8E00010BD4B48F5F743 -:10F4400095FE4B4CA06890F8E230012296211046C0 -:10F45000F5F76BFDA16891F8E20091F80B1110F03F -:10F460000C0F08BF00219620F5F79BFEF5F751FF22 -:10F47000A168062081F8E00010BD3C48F5F776FE53 -:10F480003B4CA06890F8E230012296211046F5F737 -:10F490004CFDA16891F8E20091F80B1110F00C0FEF -:10F4A00008BF00219620F5F77CFEF5F732FFA16832 -:10F4B000072081F8E00010BDF5F700FFF5F7B4FE76 -:10F4C000F5F7E4FDF5F741FE29480121806880F851 -:10F4D0000411022180F8E010FFF787FCBDE810401E -:10F4E000032001F059BEFFDF10BD70B5204CA068AD -:10F4F00090F8E0007F25082828BF70BDDFE800F005 -:10F500004D4D4D172304470A1948F5F70DFF30B943 -:10F51000257004E01648F5F707FF0028F8D0F5F746 -:10F52000EEFEF5F7B3FDBDE87040FEF7A6BC10484F -:10F53000F5F7FAFE002808BF2570F5F7E0FEBDE8F4 -:10F54000704000F080B80A48F5F7EEFE002808BFCA -:10F550002570F5F7D4FEA0680CE00000CC10002068 -:10F5600000120020805202003F420F00D8110020FC -:10F570006401002090F8DD0018B1F5F7B5FEF5F74D -:10F58000CAF8F5F783FDBDE87040FEF776BC00F0E1 -:10F5900043FBBDE87040FEF770BC70BD70B5F84C21 -:10F5A00006460D46012909D0A06890F8E23090F88F -:10F5B000E2203046BDE8704001F0C8BFF5F728FAF8 -:10F5C000A16891F8E220034629463046BDE8704024 -:10F5D00001F0BCBF70B50646E94814460D46806888 -:10F5E00090F8DD0018B1F5F7B6F801280ED03046D6 -:10F5F000FDF73EFD20703046FDF711FD072813D2C0 -:10F6000029463046BDE87040FDF714BDF5F7E6F831 -:10F610002A462146FCF7F6FA002808BFFFDF2078CB -:10F6200040F00200207070BD3046FDF7F8FC07285E -:10F6300018BF70BD00213046FDF7B4FD0168296098 -:10F640008088A88070BD10B5F5F738FEF5F7ECFDA1 -:10F65000F5F71CFDF5F779FDC94CA06890F8DD00C1 -:10F6600038B1F5F741FEF5F756F8A168002081F8AA -:10F67000DD00A068012180F80411022180F8E0106B -:10F68000BDE81040002001F087BD2DE9F0410D4696 -:10F690000178044611F0800F0CBF1E204FF49670C5 -:10F6A000B4F80120C2F30C0212FB00F6C80908BF2F -:10F6B0001E2105D0002806BFFFDF00214FF4967100 -:10F6C000701BA278520908BF012707D0012A08BF82 -:10F6D000022703D0022A14BF00270827B0F5877F2E -:10F6E0002EBFAE420020BDE8F08145182078C0F35F -:10F6F0008010002808BF4FF4FA7603D006BFFFDF62 -:10F70000002632269F4890F8FC400C2C28BFFFDFD3 -:10F710009D489E4A30F81400311801FB0520511C09 -:10F72000B0FBF1F0203005449548806890F8E20085 -:10F73000F6F76CF804463846F6F768F84FF47A7135 -:10F7400084423ABF001B00F2E730201AB0FBF1F010 -:10F7500034BF42192A1A3946BDE8F041012001F0B0 -:10F7600069BB70B50D460446FDF734FC032D4AD045 -:10F77000052D18BF70BD05212046FDF730FC804DDA -:10F78000A868D0F8C40000F10E012046FDF7E5FCA2 -:10F79000A868D0F8C40000F112012046FDF7E1FC92 -:10F7A000A868D0F8C410497DA175D0F8C410C98AE2 -:10F7B000E175090A2176D0F8C41049886176090AF2 -:10F7C000A176D0F8C4108988E176090A2177D0F8AB -:10F7D000C410C9886177090AA177D0F8C40000F184 -:10F7E00008012046FDF7DBFCA868D0F8C400017EC4 -:10F7F0002046FDF7BCFCA86890F8FC102046BDE848 -:10F800007040FDF7BEBC2046BDE870400321FDF707 -:10F81000E6BB2DE9F04FDFF8688183B04FF0000AB6 -:10F82000D8F8080090F8E000594E01274FF003097E -:10F8300055464FF07F0BA6F12804082880F0E78199 -:10F84000DFE800F0FEFEFE0407B3FDFCFEF7A8FFB4 -:10F85000A8E04B48F5F768FD002808BF88F800B01D -:10F86000F5F74DFDD8F8080090F8D900002818BF2A -:10F87000FFDF4848FDF7D3FB88F80300E078002657 -:10F8800010F03F0F1CBF207910F0080F11D0414835 -:10F89000FDF737FD60B1012802D0022808D008E04A -:10F8A000E07810F03F0F1CBF207910F0010F00D05E -:10F8B00001260296D8F8080090F8DD0018B1F5F797 -:10F8C00013FDF4F728FFE1782A460020134611F0D3 -:10F8D0003F0F1ABF217911F0020F2F4647D0D8F8F9 -:10F8E0000800DFF8B0A0002590F8DB0000280CBF6E -:10F8F000012600269AF800000121C4095046FDF7B0 -:10F9000051FC34B1407900F0C000402808BF012408 -:10F9100000D00024D8F8080090F8C810032906D1B8 -:10F9200090F8C110002918BF90F8CC0001D190F8D0 -:10F93000DE00FCF755F95FEA000B0FD01021FCF751 -:10F940008CFF002818BF012644B101215046FDF765 -:10F9500029FC01465846F6F789F80546D8F808000C -:10F960002200334690F8B90018BF40F0020098F822 -:10F970000310072910D0F5F789FBCA4600F048B9F3 -:10F9800064010020CC100020805202003F420F0092 -:10F9900000120020D8110020CDE900072946029866 -:10F9A00000F07BF9824600F033B9FC48FDF737FBE5 -:10F9B00088F80400E078717A88421CD12079B17A05 -:10F9C000884218D16079F17A884214D1A079317BCC -:10F9D000884210D1E079717B88420CD1207AB17BCA -:10F9E000884208D120783178C0F38010B0EBD11F65 -:10F9F00008BF012400D00024F5F748FBE848F5F7DC -:10FA000093FC002808BF88F800B0F5F778FC98F858 -:10FA1000040004283BD1B4B30095D8F80820DF488F -:10FA2000694692F8D9307BB3054692F8660050BB20 -:10FA3000042002F1680482F8720002E029E07DE00F -:10FA4000E5E06932A11C2846FFF7C4FD04F10B0173 -:10FA50002846FDF76EFBC0B220721F2884BF1F200E -:10FA6000207298F8000009347F2808BFFFDF98F85B -:10FA70000000207088F800B0D8F8080080F86670A0 -:10FA8000062001F089FB02E0FFE7FDF775FFCA469B -:10FA9000BEE04FF0030AC248F5F746FC002808BF55 -:10FAA00088F800B0F5F72BFCBC48FDF7B8FA05461E -:10FAB000BA48FDF726FC082D08BF00287ED1E17862 -:10FAC000032011F03F0F79D02179884376D10021AE -:10FAD000B248FDF767FB062206F1090105F00EF8B2 -:10FAE00000286BD1AD48FDF7C3FA0446AD48FDF7D9 -:10FAF000CCFA844262D10121A848FDF753FB0622CB -:10FB0000F11C04F0FBFF002858D1A448FDF7BDFA12 -:10FB10000446A448FDF7ACFA844279D1F5F7CEFB50 -:10FB2000F5F782FBF5F7B2FAF5F70FFB4FF0020A93 -:10FB3000FFF75BF9042001F02FFB69E04FF0030AA7 -:10FB4000F5F7A4FA9648F5F7EFFB002808BF88F808 -:10FB500000B0F5F7D4FB9148FDF761FA81468F4874 -:10FB6000FDF7CFFBB9F1070F08BF002850D1E178AE -:10FB7000012011F03F0F4BD02179884348D100215B -:10FB80008648FDF70FFB062206F1090104F0B6FFD7 -:10FB9000A0B98248FDF76CFA04468248FDF775FA71 -:10FBA000844235D1D8F8080090F8041139B3B0F880 -:10FBB000082190F80611012A07D900E028E0520830 -:10FBC000A0F8082108BFA0F80871012914BF002976 -:10FBD0000D21C943C1EBC10202EB011190F80521CF -:10FBE000D24302EB8203C3EB82121144B0F8082126 -:10FBF000890CB1FBF2F302FB131180F8051180F8B8 -:10FC00000471694665480095FDF7B6FE00E0FFDF28 -:10FC100003B05046BDE8F08F10B5F5F737FA6048ED -:10FC2000F5F782FB5E4C002804BF7F202070F5F7BB -:10FC300066FBA06890F8041119B1002180F8041146 -:10FC400010BDB0F8082190F80611FF2A0AD24FF62D -:10FC5000FF7303EA4202A0F80821FF2A84BFFF22B3 -:10FC6000A0F80821012914BF00290D21C943C1EBC7 -:10FC7000C10202EB011290F80511C94301EB8103A7 -:10FC8000C3EB81111144B0F80821890CB1FBF2F3E8 -:10FC900002FB131180F80511CFE72DE9F84F8346D9 -:10FCA0009946924688463D480A9FFDF72AFB3B4EFF -:10FCB0003B4D002800F03C81012803D0022800F0D1 -:10FCC0007781BAE0002403213448FDF76BFABBF1D9 -:10FCD000000F6BD0A96891F8E720012A66D142781D -:10FCE00091F8E9301209B2EB131F5FD10088B1F827 -:10FCF000E810C0F30B00C1F30B01884256D127482E -:10FD0000FDF7FFFAA96891F8E62090424ED191F8EC -:10FD1000C800012818BF022802D0032847D0AEE04F -:10FD2000F5F7B4F9F07810F03F0F1CBF307910F000 -:10FD3000020F18D0194C2046FDF7A7F906460121FD -:10FD40002046FDF72FFA3146F4F741FF002818BF8F -:10FD5000012050EA08000BD08DF8007069460F486A -:10FD6000FDF70AFE18E000210C48FDF705FE13E040 -:10FD7000A86890F8CA00032818BF02280CD1BAF16D -:10FD8000000F09D0B8F1000F06D107486946806816 -:10FD900000900248FDF7F0FD032470E0D811002028 -:10FDA00064010020001200206C52020064E0002177 -:10FDB0009848FDF7F7F9A9680622D1F8C4101A315E -:10FDC00004F09CFE50B99348FDF752F9A968D1F8A8 -:10FDD000C410497E884208BF012400D00024F07876 -:10FDE00010F03F0F1CBF307910F0020F03D0B8F1B4 -:10FDF000000F47D056E0A86890F8CB10012901D039 -:10FE0000ACB11FE0F4B900218248FDF7CBF9A96835 -:10FE10000268D1F8C410C1F81A208088C8837D48D0 -:10FE2000FDF726F9A968D1F8C41048760AE090F8E1 -:10FE3000DE1090F8CC00814204D0F5F727F90320BA -:10FE4000BDE8F88FA86890F8E21011F00C0F11D0FF -:10FE500090F8E21011F00C0F0ED00123D0F8C4106E -:10FE60001A460020FCF79DFEA968D1F8C410496A23 -:10FE7000884201D80B2402E0F5F708F90324204654 -:10FE8000BDE8F88FB9F1000F0ED0624E3046FDF795 -:10FE9000FCF8074601213046FDF784F93946F4F7AE -:10FEA00096FE08B1012200E00022A96891F8CB007B -:10FEB000012807D040B92CB991F8DE3091F8CC1068 -:10FEC0008B4201D1012100E000210A42D4D0012857 -:10FED00008BF002C12D100214E48FDF763F9A96834 -:10FEE0000268D1F8C410C1F81A208088C883494834 -:10FEF000FDF7BEF8A968D1F8C4104876A86890F854 -:10FF0000E21011F00C0FB5D090F8E21011F00C0FC8 -:10FF1000B2D00123D0F8C4101A460020FCF741FEED -:10FF2000A968D1F8C410496A8842A5D8A2E700BFE1 -:10FF3000F5F7ACF803213748FDF734F9BBF1000FB2 -:10FF40005DD0A96891F8E7205ABB427891F8E93072 -:10FF50001209B2EB131F52D10088B1F8E810C0F3B8 -:10FF60000B00C1F30B01884249D12A48FDF7C9F9BA -:10FF7000A96891F8E620904241D191F8C800012883 -:10FF800018BF02283BD1F07810F03F0F1CBF30792A -:10FF900010F0020F06D08DF8007069461D48FDF77D -:10FFA000EBFC2CE000211B48FDF7E6FC27E000BF3E -:10FFB000F5F76CF8A86890F8C80003281FD015481A -:10FFC000FDF79FF9A96891F8E620904217D1F278E1 -:10FFD000092012F03F0F12D0327990430FD1BBF1BC -:10FFE000000F0CD091F8C8000228DBD191F8050170 -:10FFF00040B1401E10F0FF0081F8050102D003203F -:020000040002F8 -:10000000BDE8F88F3A4601210248FDF796FF092026 -:10001000BDE8F88FD81100202DE9FF4F07460C46A8 -:10002000488881B040F2E24148430090E08A0026CF -:1000300000FB01FB94F8640091460D2818BF0C28C2 -:100040001FD024281EBF94F8650024284FF0000A12 -:1000500017D0049818B10121204602F018FC94F83A -:10006000540094F8558094F8D010054661B10129E8 -:100070006DD0022952D0032918BFFFDF67D000F0EE -:10008000D5B84FF0010AE4E7B9F1000F08BFFFDF70 -:10009000FD4EB068002808BFFFDF94F85410FB48FD -:1000A00090F82400FCF77DFF009094F85400F5F7D9 -:1000B000C6FB00F2E7314FF47A79B1FBF9F1F2486F -:1000C00080680E1894F85400F5F7B9FB014694F8CF -:1000D0005400022804BFEE484FF47A720DD0012874 -:1000E00004BFEC484FF4C86207D0042807BFEA48B1 -:1000F00040F69802E94840F6E4421044084400F211 -:10010000E731B1FBF9F10098401A00EB0B01DE4832 -:10011000406930440844061D012015E0DA48A9F181 -:1001200001018068084308BFFFDFDD48B9F1000F17 -:10013000006800EB0B0606D0D348806800F222303E -:10014000B04288BFFFDF032084F8D0006DE094F850 -:100150006410009E24291EBF94F86520242A2529B6 -:100160004FD1B4F85810B4F8F020891A491C09B2DC -:10017000002946DB94F8F210002942D00D4694F88D -:10018000F310002918BF8846022804BFC0494FF465 -:100190007A700DD0012804BFBE494FF4C86007D063 -:1001A000042807BFBC4940F69800BC4940F6E4402B -:1001B0000144022D04BFB6484FF47A720DD0012DD0 -:1001C00004BFB4484FF4C86207D0042D07BFB2483B -:1001D00040F69802B14840F6E4421044814208D902 -:1001E000081A00F5FA714FF47A70B1FBF0F006448A -:1001F00007E0401A00F5FA714FF47A70B1FBF0F0A5 -:10020000361AB9F1000F10D0DFF87C92D9F8080047 -:1002100020B9B9F80200002818BFFFDFD9F808009C -:1002200000F22230B04288BFFFDF06B9FFDF31465F -:10023000D4F8D400F2F751FBC4F8D400B860002021 -:1002400038704FF0010987F80490204602F00DFC49 -:10025000AAF10101084208BF87F8059006D094F87A -:10026000D00001280CBF0220032078714046D4F84A -:1002700024B0F5F7CBFA0146022D04BF84484FF4B1 -:100280007A720DD0012D04BF82484FF4C86207D0A6 -:10029000042D07BF804840F69802804840F6E442AB -:1002A0001044084400F23F614FF47A70B1FBF0F063 -:1002B000584400F5C970F860049830EA0A0004BF99 -:1002C00005B0BDE8F08F31463846FCF7E8FB85B253 -:1002D000204602F0CAFBA8420FD8054687F80590D1 -:1002E00006FB05F1D4F8D400F2F7F7FAB86031460E -:1002F0003846FCF7D4FB284485B22946204602F054 -:10030000C6FAB868C4F8D40005B0BDE8F08F2DE98E -:10031000F0430446634885B00D4690F80004DFF8CA -:100320008891400999F800144909884218BFFFDFF5 -:10033000DFF85481002708F14406082D80F00E8173 -:10034000DFE805F0046872726DFEFEB6202C28BF4F -:10035000FFDF36F814000621F0F786FC050008BF21 -:10036000FFDF202C28BFFFDF36F8140029888842E1 -:1003700018BFFFDF95F8D000002808BFFFDF284630 -:1003800001F089FFC8F80870A8F80270294600201B -:10039000C8F81470FCF758FC00F19804686AA04291 -:1003A00025D995F85500F5F731FA014695F854002E -:1003B000022804BF36484FF47A720DD0012804BFDA -:1003C00034484FF4C86207D0042807BF324840F6CB -:1003D0009802324840F6E442104408444FF47A71DF -:1003E00000F23F60B0FBF1F1686A0844071B294640 -:1003F0000020C8F80C70FCF727FC698840F2E24244 -:1004000051439830081AA0F22230C8F8100005B005 -:10041000BDE8F08305B0BDE8F04302F013B905B0C4 -:10042000BDE8F043F4F7BCBF99F8140D1F4940092B -:1004300091F800144909884218BFFFDF202C28BF1B -:10044000FFDF36F814000621F0F70EFC050008BFA8 -:10045000FFDF202C28BFFFDF36F8140029888842F0 -:1004600018BFFFDF0022012329466846FFF7D4FDAD -:1004700095F8DA006946F2F76FFF002808BFFFDF42 -:1004800005B0BDE8F08300002812002044120020CF -:1004900068360200A2240200D0FB010030D3010024 -:1004A0007401002001E000E00BE000E019E000E052 -:1004B000202C28BFFFDF36F814000621F0F7D4FB0C -:1004C000050008BFFFDF202C28BFFFDF36F814002F -:1004D0002988884218BFFFDF95F8D000042818BF8C -:1004E000FFDF85F8D07095F8DA404FF6FF79202CC1 -:1004F00028BFFFDF26F8149095F8DA00F2F7C5FC64 -:10050000002808BFFFDF202085F8DA00D5F8E000DA -:10051000002804BFD5F8DC00C8F8180008D0D5E9D9 -:1005200039121144826911448161D5E93701C860EB -:10053000D5F8DC0000281CBFD5F8E010016100E010 -:100540000CE004D1D5F8E000002818BF8761FE4810 -:10055000007805B0BDE8F043EBF74CBCFFDF05B019 -:10056000BDE8F0832DE9F05FF84E07468B46F08B2F -:100570007568401CF08330784FF00008002808BFF1 -:10058000FFDF07D0DFF8C89304282ED0052818BF56 -:10059000FFDF5BD05846FEF7FEF8040008BFFFDF20 -:1005A00029463069F2F799F9B86087F80080012090 -:1005B000387194F8C900022808BFE64807D001281E -:1005C00008BFE54803D004280CBFE448E4484FF4D2 -:1005D0007A7100F2E140B0FBF1F0B168FA30084402 -:1005E000F860307804287DD183E0002AD2D0D6F894 -:1005F00010A0D9F8184034B3A146E468002CFBD110 -:10060000B9F1000F1FD099F80000002808BFFFDFE4 -:10061000D9F81410D9F8040001445046F3F762F9F0 -:10062000002807DA291A491E91FBF5F101FB0504A0 -:100630002A4604E090FBF5F101FB15042A4694429A -:1006400088BFFFDF00E044462546A3E7002AA1D08B -:10065000B569002D08BFFFDF0024D5F8E420D9F8E4 -:1006600018002346611E58B18369934228BF9942FE -:1006700084BF194604460346C0680028F4D104B973 -:100680001C46C5F8E040D035002C04BFC5F80C80EE -:10069000C9F8185005D0E068E560E860002818BF88 -:1006A0000561D5F81090C5F81880B9F1000F0ED08B -:1006B000D9F8180048B1D5F814A0504538BFFFDF6D -:1006C000D9F81800A0EB0A00A861C9F81880002C1E -:1006D00008BFC6F8208009D02078002808BFFFDFB7 -:1006E000616900E00AE060680844306240F6B835AD -:1006F00050E7F08B0A2838BF032000D3022078711E -:10070000F08B012807D938467168FCF7C8F9014613 -:10071000F08B0844F083B8683061BDE8F09F2DE9A4 -:10072000F04107468F4884B00D4690F80004DFF88A -:100730003882400998F800144909884218BFFFDF41 -:1007400001200026082D814C80F0BB80DFE805F0F9 -:1007500004718C8C87B9B9A5607320736078002808 -:100760001CBF04B0BDE8F0817948866046612673FD -:100770003846FEF710F8050008BFFFDF95F8C900FE -:10078000022804BF79494FF47A720DD0012804BFC2 -:1007900071494FF4C86207D0042807BF6F4940F67B -:1007A0009802734940F6E44211444FF47A7201F220 -:1007B000E731B1FBF2F1A2688C18F5F715F80246A3 -:1007C00095F8C900082808BF082127D004280CBFC5 -:1007D0000221002322D002280CBF1821282119440D -:1007E000042816BF08280F2325235B1D082808BFEF -:1007F000402007D0042808BF102003D002280CBFD7 -:100800000420082013FB0010801A201AFDF741FD78 -:10081000002818BFFFDF04B0BDE8F08101EB410103 -:1008200001F12803082814BF04284FF4A871D6D07A -:10083000D1E7617851B1207B002808BFFDF751FF57 -:10084000667304B0BDE8F041F2F74ABAA073FDF751 -:10085000E2FD002818BFFFDF04B0BDE8F08104B05E -:10086000BDE8F041F4F79CBD98F8140D41494009EA -:1008700091F800144909884218BFFFDF0022394669 -:100880006846FFF76FFE69463846F2F765FD0028B7 -:1008900008BFFFDF04B0BDE8F0812078052818BF4D -:1008A000FFDF207F002808BFFFDF26772670207D2E -:1008B000F2F7EBFA002808BFFFDF267504B0BDE8A9 -:1008C000F081FFDF04B0BDE8F0812DE9F0411F4C5D -:1008D0000026207804281FBF207805280C20BDE8BA -:1008E000F08101206070607B0025A8B1EFF31080DB -:1008F00010F0010F72B60CBF00270127607B0028A3 -:100900001CBFA07B002805D0FDF7EBFE6573A57327 -:10091000F2F7E6F92FB903E0207DF2F72FFE00E0B1 -:1009200062B6207DF3F777F8207F28B1257720780D -:10093000052818BFFFDF0C2665702570207DF2F7B3 -:10094000A4FA002818E000007001002044120020E2 -:100950002812002004360200A2240200D0FB01006D -:10096000C0D4010001E000E00BE000E068360200C6 -:1009700030D3010019E000E008BFFFDF25753046E5 -:10098000BDE8F0812DE9F04FFB4883B000780028E6 -:1009900018BFFFF79AFF0120DFF8E08388F8000016 -:1009A00069460620F0F7E9F8002818BFFFDF0027A6 -:1009B0004FF6FF7934E0029800281CBF90F8D01061 -:1009C00000292DD0008848451CBFDFF8B4A34FF0A4 -:1009D000200B3BD00621F0F747F9040008BFFFDFEA -:1009E00094F8DA00F3F717F884F8D07094F8DA5036 -:1009F0004FF6FF76202D28BFFFDF2AF8156094F808 -:100A0000DA00F2F742FA002808BFFFDF84F8DAB014 -:100A100069460620F0F7B1F8002818BFFFDF10E0A4 -:100A20006846F0F788F80028C5D00FE00298002843 -:100A30001CBF90F8D010002903D000884845C9D1C8 -:100A400004E06846F0F777F80028EFD088F80070E7 -:100A5000C8F8187003B00020BDE8F08F10B5C94C7D -:100A600060B101280CBF40F6C410FFDF06D0A068BB -:100A700041F66A01884228BFFFDF10BDA060F6E79B -:100A800010B5DFF800C3BC4C00238CF800002370C5 -:100A90006370237723736373A3732020A36120758E -:100AA000A4F11C004370423010214FF6FF724280C7 -:100AB00020F8042F491EFAD1CCF80830DCF80800E1 -:100AC00041F66A01884228BFFFDFFFF75BFF40F66F -:100AD000C41101206160F4F799FE00F2E7314FF490 -:100AE0007A70B1FBF0F042F210710844A0606168C6 -:100AF000A1F21731884298BF0146A16010BDF0B540 -:100B00009D4C054685B0207800281EBF0C2005B0FE -:100B1000F0BD95F8546095F855006F6AF4F776FECD -:100B2000022E04BF98494FF47A720DD0012E04BFF3 -:100B300096494FF4C86207D0042E07BF944940F687 -:100B40009802944940F6E442114408444FF47A7103 -:100B500000F23F60B0FBF1F0384400F22230C5F8FB -:100B6000E400A56195F8D000002818BFFFDF002041 -:100B7000824948610521217060702077E0838648B2 -:100B8000F2F729F92075202808BFFFDFF2F79CF95A -:100B90002061217D01226846FFF7E4FC207D694643 -:100BA000F2F7DAFB002808BFFFDF002005B0F0BD38 -:100BB0007148007800281CBF0020704710B506203F -:100BC000EFF7ECFF80F0010010BD70B56A4C0546F0 -:100BD0002078002818BFFFDF2878012832D00428A9 -:100BE0001CBF112070BDE8882E89082540F27121B4 -:100BF000484360602846F4F709FE4FF47A7100F22A -:100C0000E730B0FBF1F040F2712206FB0200A06079 -:100C1000022D08BF614A07D0012D08BF5B4A03D0EF -:100C2000042D0CBF5A4A5E4A02F2E142B2FBF1F1D6 -:100C30006268511AA1F28A21884298BF01460020B9 -:100C4000A16070BD6888AE880125CFE710B584B07B -:100C500008431EBF112004B010BD474C2078002867 -:100C60001EBF0C2004B010BD002060700421217054 -:100C7000E0834948F2F7AFF82075202808BFFFDF6E -:100C80003E48806938B10146C0680028FBD111B1E7 -:100C9000F2F71AF905E0F2F717F940F6B831F1F773 -:100CA0001CFE2061217D01226846FFF75BFC207D50 -:100CB0006946F2F751FB002808BFFFDF002004B0AF -:100CC00010BD70B52C4CA1690160FFF7FEFD00233B -:100CD00000BBA169D1F8E0205AB1D1E939C5AC44D3 -:100CE0009569AC44C2F818C0D1E9372CCCF80C2077 -:100CF00005E0DFF888C0D1F8DC20CCF81820D1F866 -:100D0000DC20D1F8E010002A18BF116102D10029BF -:100D100018BF8B61A36170BD18494870704770B5EA -:100D200040F2E24300FB03F510460C46F4F76EFD7B -:100D3000022C04BF14494FF47A720DD0012C04BF69 -:100D400012494FF4C86207D0042C07BF104940F67F -:100D50009802104940F6E442114408444FF47A7175 -:100D600000F23F60B0FBF1F000F2223085428CBF10 -:100D7000281A002070BD0000441200202812002014 -:100D80006C1200207001002068360200A2240200CC -:100D9000D0FB010030D301001F070200043602001F -:100DA000C0D4010070B50D46064601460020FBF791 -:100DB0004BFF044696F85500F4F728FD014696F8D7 -:100DC0005400022804BFFB4A4FF47A700DD001286A -:100DD00004BFF94A4FF4C86007D0042807BFF74A98 -:100DE00040F69800F64A40F6E440104408444FF4B8 -:100DF0007A7100F23F60B0FBF1F0718840F271222D -:100E00005143C0EB4100A0F22230A54234BF21463D -:100E10002946814203D2A5422CBF28462046706253 -:100E200070BD10B5F4F7E0FCE6498A684968511ACC -:100E3000084410BD2DE9F04FE24B04252827D3F8D4 -:100E400008B04FF010080BF198044FF008094FF06C -:100E5000000C4FF4C8734FF4BF764FF0400A0628D9 -:100E60007CD2DFE800F00351214E246C14200429C9 -:100E700011D0082908D02A20022910D010FB0940DF -:100E800000252821294458E0554610FB054000BFA5 -:100E90004FF4A871F6E710FB08402E25F8E710FB89 -:100EA000054065461821EDE704F5317473E0D0B2D2 -:100EB00011F00C0F08BF0020082904BF00F5BA612B -:100EC00040200ED0042917D002290CBF0CF15C0180 -:100ED0000CF1B001014407BF0CF1180304203B469C -:100EE000082000EBC00000EB400003EB400008448A -:100EF000204400F19C044EE000F28E213346102085 -:100F0000EFE704F5B07446E0082908BF40200CD094 -:100F1000042904BF3346102007D0022907BF0CF173 -:100F2000180304200CF128030820C0EBC00000EBDC -:100F3000400003EB40000BEB020144182BE0D0B261 -:100F400011F00C0F08BF0020082904BF00F535611F -:100F5000402010D0042918D0022900E01AE00CBF6C -:100F60000CF1B4010CF5B071014407BF0CF118038A -:100F700004203B46082000EB400202EB001018441E -:100F80000844204400F19C0405E000F2EE313346B1 -:100F90001020F0E7FFDF8C488068A0428CBF012062 -:100FA0000020BDE8F08F10B5864C607828B1D4E9F8 -:100FB0000301A268FBF79BFDE060D4E902018842CF -:100FC0009CBF2078002814BF0020012010BD0422FF -:100FD0002DE9F04F774E784FDFF8E081DFF8E091B0 -:100FE00085B04FF47A7A052980F0D280DFE801F0ED -:100FF0000A2B0331920080F8D02005B0BDE8F04FF5 -:10100000F1F76EBE04466F480078002818BF84F8D8 -:10101000D02004D005B0BDE8F04FF1F761BE012249 -:10102000002321466846FEF7F7FF94F8DA00694688 -:10103000F2F792F9002808BFFFDFB4F85800401C0F -:10104000A4F85800E6E7032180F8D01005B0BDE809 -:10105000F08F8346408840F2E24148435B49086094 -:10106000DBF8F80059460089ABF81600DBF8F80009 -:1010700080798BF81500DBF8F8004089ABF80200A6 -:10108000DBF8F8008089ABF80400DBF8F800C089D1 -:10109000ABF806000020DBF82850FBF7D5FD04462E -:1010A0009BF85500F4F7B2FB9BF85410022908BFD7 -:1010B0004FF47A710DD0012904BF3E464FF4C86148 -:1010C00007D0042907BF464640F698014E4640F631 -:1010D000E4413144084400F23F60B0FBFAF1BBF850 -:1010E000020040F271225043C1EB4000A0F22230D6 -:1010F000A54234BF21462946814203D2A5422CBFD6 -:1011000028462046CBF8240002208BF8D00005B0FA -:10111000BDE8F08F83460146856A0020FBF794FD09 -:1011200004469BF85500F4F771FB9BF85410022914 -:1011300008BF4FF47A710DD0012904BF3E464FF429 -:10114000C86107D0042907BF464640F698014E46BD -:1011500040F6E4413144084400F23F60B0FBFAF04D -:10116000BBF8021040F271225143C0EB4100A0F2E3 -:101170002230A54234BF21462946814203D2A542EE -:101180002CBF28462046CBF8240005B0BDE8F08FE0 -:10119000FFDF05B0BDE8F08F2DE9F043DFF83080C8 -:1011A0000126002498F80010074D85B0072880F02C -:1011B000C6810FE068360200A2240200D0FB0100C5 -:1011C00030D30100281200204412002074010020B6 -:1011D00070010020DFE800F0041A1AFCFCFBFB00A1 -:1011E000EC830846EAF706FE6878002840F066813E -:1011F000297D00226846FFF7B5F9287D6946F2F798 -:10120000ABF8002808BFFFDF00F058B902280CBF78 -:1012100001260026287DFDF7BEFA040008BFFFDF87 -:1012200094F8E2103046FBF7BCFEDFF874930146F9 -:101230002869D9F80820002E024408BF4FF4FC703A -:101240007DD094F8E20094F80B3110F00C0F08BF39 -:10125000002394F8E20008281EBF94F8E200042856 -:101260004FF0000C00F0C68094F8E20008281ABF86 -:1012700094F8E20004284FF4A87005D094F8E20036 -:1012800002280CBF18202820844494F8E200082883 -:1012900008BF40200BD094F8E200042808BF1020BB -:1012A00005D094F8E20002280CBF04200820C0EB0F -:1012B000C00606EB4010604494F8E2C0BCF1080F91 -:1012C0001EBF94F8E2C0BCF1040F00267ED000BF20 -:1012D00094F8E2C0BCF1080F1ABF94F8E2C0BCF168 -:1012E000040F4FF4A87C08D094F8E2C0BCF1020FC0 -:1012F0000CBF4FF0180C4FF0280C664494F8E2C075 -:10130000BCF1080F08BF4FF0400C10D094F8E2C0B9 -:10131000BCF1040F08BF4FF0100C08D094F8E2C0E5 -:10132000BCF1020F0CBF4FF0040C4FF0080C0CEB9B -:101330004C0707EB0C1CB4446044184400E001E087 -:1013400000F59A7010440844061D94F8E200F4F782 -:101350005DFA024694F8E200022808BF91480BD0DB -:1013600094F8E200012808BF8F4805D094F8E20005 -:1013700004280CBF8D488E4894F8E210022908BF5B -:101380004FF47A710ED094F8E210012908BF4FF49F -:10139000C86107D094F8E21004290CBF40F6980108 -:1013A00040F6E441084410444FF47A7100F2E7300B -:1013B000B0FBF1F0A96940F2E243301A4A88D0311B -:1013C00002FB03F7D9F818208A4202E01CE0B0E0E3 -:1013D0005DE008BF00262BD0296AF2F783FA0028C7 -:1013E0001EDA391A4A1E92FBF7F202FB070639464B -:1013F0001BE000BF94F8E200082818BF022000EBB1 -:10140000400000F1280C2FE794F8E2C0BCF1080F6F -:1014100018BF4FF0020C0CEB4C0C0CF1280657E7F0 -:1014200090FBF7F202FB170639468E4288BFFFDFBA -:10143000D8F80800864208D2A86940F27122418893 -:10144000C1824A4306EB420605E040F2E240B6FBA9 -:10145000F0F0A969C88294F8E210A86980F85410E5 -:1014600094F8E21080F8551005214175C08A6FF498 -:101470001C71484306EB400040F63541C9F81400A2 -:10148000B0EB410F28BFFFDF05B0BDE8F0830428B3 -:101490000CBF01270027EC830846EAF7ABFC2E7748 -:1014A00085F82470A8692969C0F8D41080F8D04064 -:1014B0002978052918BFFFDF07D000BFF1F710FC1E -:1014C0006C73AC7305B0BDE8F083002808BFFFDF84 -:1014D000A86990F8D000002818BFFFDFA86990F82D -:1014E000DA00202818BFFFDF3248F1F774FCA96941 -:1014F0000646202881F8DA000F8828BFFFDF2E4833 -:1015000020F81670A86990F8DA00202808BFFFDFDD -:10151000002301226846A969FEF77EFDA869694695 -:1015200090F8DA00F1F718FF002808BFFFDFAC6180 -:10153000C4E705B00846BDE8F043EAF75BBCFFDF4F -:1015400005B0BDE8F08316494860704770B5144D8A -:101550000446002904BFA86070BD4FF47A760129C3 -:1015600010D002291CBFFFDF70BD6888401C688056 -:101570001046F4F764F900F2E730B0FBF6F0201AF9 -:10158000A86070BD1846F4F76FF900F2E730B0FBC1 -:10159000F6F0201AA86070BD084800787047000077 -:1015A0002812002068360200A2240200D0FB0100AD -:1015B00030D301000F0302006C12002044120020FF -:1015C000FB490C28896881F8CB001ABF132818281A -:1015D0007047002211280FD0072808BF7047152830 -:1015E0000AD001281ABF002802287047A1F88420D9 -:1015F000012081F888007047A1F88A20704770B5F3 -:10160000EB4CA1680A88A1F83E2181F83C0191F8D1 -:101610005400012808BF012508D0022808BF022570 -:1016200004D0042816BF08280325FFDFA06880F82F -:10163000405190F85500012808BF012508D0022824 -:1016400008BF022504D0042816BF08280325FFDFA1 -:10165000A068012180F8415180F83A11002180F8FA -:101660000E11E078BDE87040EAF7C4BBD04A01290A -:1016700092681BD0002302290FD0032922D030B357 -:1016800001282FD0032818BF704792F86400132850 -:101690001CBF1628182805D1704792F8CB000028E7 -:1016A00008BF7047D2F8F8000370704792F8CB007B -:1016B000012808BF704700BFD2F8FC000178491E1E -:1016C0000170704792F8CB000328EBD17047D2F835 -:1016D000F800B2F858108288891A09B20029A8BF08 -:1016E00003707047B2F85800B2F80211401A00B205 -:1016F0000028E1DA70472DE9F041AD4C00260327C0 -:10170000D4F808C0012590B12069C0788CF8CA00CF -:1017100005FA00F010F4000F08BFFFDFA06880F8A2 -:101720006470A0F8846080F88850BDE8F0810023E0 -:101730009CF8652019460CF15800FBF746F9002883 -:1017400004BF6570BDE8F0816078002818BFBDE86F -:10175000F0812069C178A06880F8C91080F86570B0 -:10176000A0F88A6080F88C50BDE8F08170B5904C8C -:1017700084B0207910F0010F04BF04B070BD20695F -:1017800000230521C578A06890F864205830FBF745 -:101790001CF9002818BF062D09D020DC022D1CBF23 -:1017A000042D052D03D0607840F00800607060784B -:1017B00000281CBF04B070BD2069C078801E1628A8 -:1017C00080F00783DFE800F011FE89A7D52CFEFD2D -:1017D000FE7FFCD2FEFEFEC5FBFAF9F8F7F60B2DF4 -:1017E0001CBF0D2D112DDED1E1E7A06800230121E2 -:1017F00090F867205830FBF7E8F8002840F05C8349 -:101800002069FBF7F3FEA16881F8F600072081F854 -:101810006700002081F88C0081F8880000F04CBB44 -:10182000A0680921002390F864205830FBF7CDF818 -:1018300018B120690079122812D0A0680A2100236B -:1018400090F864205830FBF7C0F818B1206900798F -:10185000142820D020690079162840F02D8324E038 -:10186000A0680125002390F8642009215830FBF777 -:10187000ACF8002808BF657000F01E83607800286F -:1018800040F01A83A16881F87C0081F8880081F813 -:10189000640000F011BBA168002081F86400A1F889 -:1018A000840081F8880000F035BAA06890F86410D0 -:1018B0001F2940F00183002180F8641080F888100F -:1018C0001A2000F0F7BAA06890F864100F2927D109 -:1018D000002180F86910122137E0A06890F86410A8 -:1018E00013291DD1D0F8F81000884988814218BF0B -:1018F000FFDFA068D0F8F80000F126012069FBF7AF -:10190000A2FEA06800F1C4012069FBF7A4FE162026 -:10191000A16800F05BB9A26892F86400162802D0B2 -:10192000022000F03BBAD2F8F80002F1B00300F157 -:101930001E0100220E30FAF7C4FFA0680021C0E9A2 -:101940002811012180F86910182180F8641000F036 -:10195000B3BA2069FBF7FFFE032840F0AD8220698F -:10196000FBF7FDFE01F00FFC00F0A6BA206900793C -:10197000F8E7A06890F864101A29D1D1002580F802 -:101980008D5080F88850D0F8F8100088498881423E -:1019900018BFFFDFA068D0F8F8100D70D0F8441120 -:1019A0000A78002A18BFFFDF7ED190F88E200AE067 -:1019B0007C0100203BE2B7E182E126E1F2E009E1AF -:1019C0002CE09FE0AAE17AB180F88E500288CA80AC -:1019D000D0F844110D71D0F844210E211170D0F8C7 -:1019E00044210188518010E00288CA80D0F8441157 -:1019F0000D71D0F8442101211172D0F844210D213C -:101A00001170D0F84421018851800088EFF75EFA08 -:101A1000EEF7F6FEE078EAF7EDF9BEE0A068002305 -:101A2000194690F865205830FAF7CFFF50B9A068F2 -:101A30000023082190F864205830FAF7C6FF0028E8 -:101A400000F0FA816078002840F03682A06890F8B3 -:101A5000900010F0020F14D12069FBF7FFFDA16880 -:101A600081F891002069B0F80520A1F89220B0F823 -:101A70000700A1F8940091F8900040F0020081F86E -:101A80009000A06890F8901011F0010F14D190F818 -:101A90006520002319465830FAF797FF002808BF41 -:101AA000FFDF0121A06800E077E080F8651080F892 -:101AB0008C100021A0F88A10A06890F86410012909 -:101AC00007D1002180F8641080F88810E078EAF7E8 -:101AD00091F9A168D1F8F800098842888A4204BFC8 -:101AE0000178042940F0E88100250570E078EAF7E4 -:101AF00081F9A06890F86410002908BF80F8885028 -:101B000000F0DAB9A0680023072190F8642058306B -:101B1000FAF75BFF002800F08F816078002840F022 -:101B2000CB8102A92069FBF7D3FD9DF808000025B1 -:101B300000F02501A06880F896109DF8091001F0CA -:101B4000410180F8971080F88850D0F8F81000888C -:101B50004988814218BFFFDFA068D0F8F8100D70E7 -:101B6000D0F844110A78002A18BFFFDF15D1028887 -:101B7000CA80D0F844110D71D0F84411029A8A60DD -:101B8000039ACA60D0F84421082111700188D0F866 -:101B900044014180E078EAF72DF9A06880F86450AC -:101BA00000F08AB9A0680023092190F86420583019 -:101BB000FAF70BFF002800F03F816078002840F022 -:101BC0007B81A16881F87C0081F8880081F864003D -:101BD00000F072B9A0680023194690F865205830CB -:101BE000FAF7F3FE002800F027816078002840F023 -:101BF0006381A0680021A0F88A10012180F88C1070 -:101C0000022180F8651000F057B9A068002319463A -:101C100090F865205830FAF7D8FE00287FD0206968 -:101C2000FBF740FD002879D0A5682069FBF736FD59 -:101C30002887A5682069FBF72DFD6887A5682069BE -:101C4000FBF72EFDA887A5682069FBF725FDE8872F -:101C5000A06890F864101C2913BF90F84E10012161 -:101C600080F84E10012907D090F80511002904BF13 -:101C700090F80411002903D01E2180F8651017E0A8 -:101C80001D2180F865100288A0F82A21028FA0F893 -:101C90002C21428FA0F82E21828F00F58A71A0F8A6 -:101CA0003021C08FC88301200875E078EAF7A2F8D8 -:101CB000A0680021A0F88A10012180F88C10FBE0B8 -:101CC000A06800230A2190F864205830FAF77DFEBE -:101CD00018B32069FBF7E6FCA8B1A5682069FBF7FB -:101CE000DDFC2887A5682069FBF7D4FC6887A56818 -:101CF0002069FBF7D5FCA887A5682069FBF7CCFC19 -:101D0000E88700F019FFA168002081F8880081F8B9 -:101D1000640000BF00F0E1FECEE000E059E0607832 -:101D200040F001006070C7E0A0680023194690F8F9 -:101D300065205830FAF749FE78B3A06890F864003F -:101D4000232812BF2428607840F0200026D068465F -:101D5000F3F71FFE002808BF002104D0009802A955 -:101D6000C0788DF80800A06801AB162290F86400D6 -:101D7000FBF7FBF8A0B1A0689DF80420162180F8BD -:101D8000EC2080F8ED10192180F86510012180F811 -:101D90008C100021A0F88A108EE04DE060708BE07E -:101DA0002069FBF79AFCA0B12269107900F00701C5 -:101DB000A06880F85010527902F0070280F8512094 -:101DC00090F80F31002B04BF90F80E31002B04D097 -:101DD00022E00020FFF78FFC6EE090F855C000F184 -:101DE00054038C4501BF19789142012180F87D1080 -:101DF00012D00288A0F8362190F8502000F58A71A0 -:101E000080F8382190F8510081F82500012081F8F0 -:101E10002000E078E9F7EEFFA068212180F8651046 -:101E2000012180F88C100021A0F88A1044E0A068FD -:101E300090F864001F2801D00120AFE72069FBF76C -:101E400056FC88B32069A2680179407901F0070146 -:101E500061F30705294600F0070060F30F21012018 -:101E600082F888000025A2F88450232082F86400BC -:101E7000566DD2F81001FAF7F7FFF2B2C1B28A42FA -:101E800007BFA16881F8F250A26882F8F210C6F389 -:101E90000721C0F30720814219BFA16881F8F30030 -:101EA000A06880F8F35007E0FFE70120FFF723FC6C -:101EB0005FF01E00FFF7A3FBA068D0E92A12491CBF -:101EC00042F10002C0E92A1204B070BD2DE9F047CA -:101ED000FE4D04464FF00007687808436870287983 -:101EE00010F0200F2846806818BFA0F87E7004D13B -:101EF000B0F87E10491CA0F87E1090F86A100126F8 -:101F000039B990F86420002306215830FAF75DFDB6 -:101F100058B3A88810F4006F07D0A86890F86A102A -:101F2000002918BFA0F876701FD1A868B0F8761005 -:101F3000491C89B2A0F87610B0F878208A422CBFEC -:101F4000511A00218288521D8A4228BF80F87C6085 -:101F5000B0F87610B0F87820914206D3A0F87670E9 -:101F600080F81A61E878E9F745FF287910F0600FEA -:101F700008D0A86890F8681021B980F8686001213D -:101F8000FFF725F84FF00808002C56D16878002894 -:101F900051D1287910F0040F0DD0A86890F8640092 -:101FA000032808BFFFDFA86890F86710072904BF5F -:101FB0002E7080F8677001F036F9287910F0080F5C -:101FC00019D06878B8B9A868002190F8CB00FFF75D -:101FD0004DFBA86890F8CB00FE2808BFFFDFFE216C -:101FE000A86880F8CB1090F86710082903D1022167 -:101FF000297080F86770FFF7B9FBA87810F0080F18 -:1020000016D0A8680023052190F864205830FAF70C -:10201000DCFC50B185F80180A868D0F8441108783C -:102020000D2808BF0020087002E00020F9F7E8F84A -:10203000A86801F031F800F0C9FDA868A14600F1D8 -:10204000580490F8F40030B9E27B002301212046C7 -:10205000FAF7BBFC10B1608D401C60853D21B9F1E1 -:10206000000F18D12878022808BF16200ED00128AA -:1020700004BFA86890F8F60008D06878E8B110F0BE -:10208000140F1CBF1E20207702D005E0207703E04C -:1020900010F0080F02D02177E67641E010F0030F30 -:1020A00003D02A202077E6763AE010F0200F08BF10 -:1020B000FFDF23202077E67632E094F8300028B165 -:1020C000A08D411CA185E18D884213D294F8340083 -:1020D00028B1608E411C6186E18D88420AD2618DF3 -:1020E000208D814203D3AA6892F8F42012B9E28DC0 -:1020F000914203D322202077E67611E0217C31B192 -:10210000E18C814228BF84F81C80C5D206E0E08CB7 -:10211000062803D33E202077E67601E0E07EA0B1DA -:102120002773677327740221A868FEF750FFA86819 -:1021300090F8CB10012904D1D0F8FC000178491E99 -:102140000170E878E9F756FE03E00021A868FEF781 -:102150003EFFBDE8F047F3F72BBC5C4A517893781B -:10216000194314D111460128896809D0107910F05B -:10217000040F03D091F86700072808D001207047AA -:10218000B1F84800098E884201D8FEF70CBF002044 -:10219000704770B54D4C06460D46A0883043A08070 -:1021A00016F0020F04D016F0010F18BFFFDFE56034 -:1021B00016F0010F18BF256116F0020F4FF0000254 -:1021C0004FF0010117D0E878062802D00B280BD079 -:1021D00011E0A06890F86420182A0CD10022C0E910 -:1021E0002A2280F86A1006E0A06890F8641012298C -:1021F00008BF80F86A2016F0800F1CBF0820A0706E -:1022000016F4806F08BF70BDA268B2F858009188BC -:102210000844801DE97880B2012908BFA2F80201B4 -:102220001ED0002904BFD2F8F810888018D01829D1 -:1022300016D192F8F210002904BF92F8F330002B67 -:102240000BD011F00C0F1EBF92F8543013F00C0F8E -:10225000994203D092F8F31001B90020A2F8F000DF -:10226000E9782846012909D071B1182918BF70BD35 -:10227000B2F8F010BDE87040FBF74BBAB2F80211AB -:102280004172090AA97270BDD2F8F81089884173A9 -:10229000090AA97370BDF0B50C4C85B00026A0608A -:1022A000A6806670A670054626700088F3F748FB86 -:1022B000A0680088F3F76AFBB5F8D800A168401C55 -:1022C00082B201F15800FAF743F901E07C010020E5 -:1022D000002818BFFFDF95F8650024280AD1B5F85B -:1022E0005810B5F8F000081A00B20028A4BF6078B2 -:1022F000002806D095F86400242818BF25283BD173 -:1023000019E0A06890F8F210002908BF90F8541066 -:1023100080F8541090F8F310002908BF90F8551079 -:1023200080F855100020FFF76AF985F86560A1680C -:1023300081F87D6020E0B5F85810B5F8F000081A73 -:1023400000B20028A4BF6078002815D1A06890F8DA -:10235000F210002908BF90F8541080F8541090F83B -:10236000F310002908BF90F8551080F85510002090 -:10237000FFF745F985F86460A5F8D860A06890F883 -:10238000881039B1B0F88410B0F88620914224BF8B -:1023900005B0F0BD90F88C1039B1B0F88A10B0F8E3 -:1023A0008620914224BF05B0F0BDB0F88220B0F87D -:1023B00080108A4224BF05B0F0BD90F8682092B327 -:1023C000B0F87E208A4224BF05B0F0BD90F8CB70F3 -:1023D000FE2F00F01E816846F3F7B5FA002808BF0B -:1023E000FFDF2221009802F034FC03210098FBF764 -:1023F00079F80098017821F0100101703946FBF757 -:102400009FF8192F80F0E380DFE807F028201446BA -:10241000E1E1E21A71E1E2E264E1E1E1E1D4E2E268 -:102420007B94ADE1B600B0F87E10062924BF05B05C -:10243000F0BDCBE7A068009990F8F5000871C7E0FF -:10244000A168009891F8CC100171C1E0A068D0F8A3 -:10245000FC00411C0098FBF7BEF8B9E0A1680098A9 -:10246000D1F8F82092790271D1F8F82012894271DE -:10247000120A8271D1F8F8205289C271120A0272CE -:10248000D1F8F82092894272120A8272D1F8F810BB -:10249000C989FBF778F89BE0A068D0F8F800011D27 -:1024A0000098FBF7A5F8A068D0F8F80000F10C013F -:1024B0000098FBF7A7F8A068D0F8F80000F11E011B -:1024C0000098FBF7A5F8A06800F1C0010098FBF7A1 -:1024D000ADF87DE0626900981178017191884171D1 -:1024E000090A81715188C171090A017270E0FE49BF -:1024F000D1E90001CDE9020102A90098FBF7B0F88B -:1025000066E0A068B0F844100098FBF7B3F8A06844 -:10251000B0F846100098FBF7B1F8A068B0F840108A -:102520000098FBF7AFF8A068B0F842100098FBF7EE -:10253000ADF84DE0A068B0F840100098FBF7A2F8A5 -:10254000A068B0F842100098FBF7A0F8A068B0F8B7 -:1025500044100098FBF78EF8A068B0F84610009879 -:10256000FBF78CF834E0A068009990F810210A710C -:1025700090F8110148712BE0A06890F8F300FAF789 -:102580006AFC01460098FBF7C0F8A16891F8F200D8 -:1025900010F00C0F1CBF91F8541011F00C0F02D06A -:1025A000884218BF0020FAF756FC01460098FBF756 -:1025B000A8F80DE0A06890F8ED100098FBF7C9F8B6 -:1025C000A06890F8EC100098FBF7C7F800E0FFDF78 -:1025D000F3F7CCF9002808BFFFDF0098C178012984 -:1025E00003D049B118290FD013E0A168B1F8021146 -:1025F0004172090A81720CE0A168D1F8F81089884B -:102600004173090A817304E0A168B1F8F010FBF787 -:1026100080F8B6480090B64BB64A29463046F8F7DF -:1026200033FDA0680023052190F864205830FAF7A4 -:10263000CCF9002804BF05B0F0BD05B0BDE8F040FE -:10264000F8F713BBAC48806890F8881029B1B0F84F -:102650008410B0F8862091421AD290F88C1029B1DB -:10266000B0F88A10B0F88620914211D2B0F88220DA -:10267000B0F880108A420BD290F86820B0F87E0043 -:1026800022B1884204D200BFF8F796BD0628FBD3DA -:10269000002001461AE470B50C46064615464FF474 -:1026A000A471204602F0F7FA2680002D08BFFFDF54 -:1026B0002868C4F8F8006868C4F8FC00A868C4F882 -:1026C000440170BDEEF7D9BB2DE9F0410D46074638 -:1026D0000621EEF7C9FA040008BFBDE8F081D4F87E -:1026E00044110026087858B14A8821888A4207D1C7 -:1026F000092810D00E281DD00D2832D008284CD023 -:1027000094F81A01002857D06E701020287084F8B1 -:102710001A61AF803EE06E7009202870D4F8440141 -:10272000416869608168A9608089A881D4F8440102 -:1027300006702FE00846EEF7C9FB0746EEF775F87E -:10274000B0B96E700E202870D4F8440140686860FB -:10275000D4F8440106703846EEF761F80120BDE870 -:10276000F0810846EEF7B2FB0746EEF75EF810B1CF -:102770000020BDE8F0816E700D202870D4F844016F -:102780004168696000892881D4F8440106703846A0 -:10279000EEF745F80120BDE8F0816E700820287042 -:1027A000D4F8440141688268C0686960AA60E86042 -:1027B000D4F844010670EDE794F81C01B0B16E70D6 -:1027C0001520287094F81C010028E3D084F81C61BF -:1027D000D4F81E016860D4F82201A860B4F826017C -:1027E000A88194F81C010028F0D1D3E794F82801BF -:1027F00070B16E701D20287084F82861D4F82A0109 -:102800006860D4F82E01A860B4F83201A881C1E74D -:1028100094F8340140B16E701E20287084F8346141 -:10282000D4F836016860B5E794F8140180B16E7091 -:102830001B20287094F814010028ABD084F8146190 -:10284000D4F81601686094F814010028F6D1A1E7C5 -:1028500094F83A01002808BFBDE8F0816E70162098 -:10286000287094F83A01002894D000BF84F83A61A7 -:10287000D4F83C016860B4F84001288194F83A012A -:102880000028F3D186E71C4A5061D17070472DE9CA -:10289000F0470446481E85B238BFBDE8F08704F112 -:1028A00008080126DFF850904FF0090A5FF0000792 -:1028B000B4F8D800401CA4F8D800B4F87E00401C3E -:1028C000A4F87E0094F86A0040B994F864200023CC -:1028D000062104F15800FAF778F838B3B4F8760016 -:1028E000401C80B20AE0000098520200CD1E020097 -:1028F0005B210200932102007C010020A4F87600F5 -:10290000B4F8781081422CBF0A1A0022A3885B1DFC -:10291000934228BF84F87C60884207D3A4F876707D -:1029200084F81A6199F80300E9F764FA94F88800CA -:1029300020B1B4F88400401CA4F8840094F88C0002 -:1029400020B1B4F88A00401CA4F88A0094F8F4007E -:1029500040B994F867200023012104F15800FAF7E8 -:1029600034F820B1B4F88200401CA4F8820094F836 -:1029700064000C2802D00D2820D067E0B4F858007D -:10298000411CB4F80201814260D1D4F8FC00411C22 -:10299000404602F095FA02212046F9F7FCFCD4F8F3 -:1029A000FC000078002808BFFFDF0121FE20FEF7B1 -:1029B0005DFE84F8647084F8986047E0B4F85800CD -:1029C000411CD4F8F800808881423FD1D4F84401FA -:1029D0000178002918BFFFDF22D12188C180D4F8F7 -:1029E000F8004189D4F844010181D4F8F8008189C4 -:1029F000D4F844014181D4F8F800C189D4F84401E5 -:102A00008181D4F844010771D4F8440180F800A012 -:102A1000D4F844012188418099F80300E9F7EAF9E4 -:102A200001212046F9F7B7FC03212046FEF7CFFA33 -:102A3000D9F80800D0F8F8000078022818BFFFDFA6 -:102A40000221FE20FEF712FE84F86470B4F85800EC -:102A5000401C691EA4F858008DB2BFF429AFBDE830 -:102A6000F087F94AC2E90601704770B50446B0F82C -:102A70007E0094F86810002908BFC0F1020503D059 -:102A8000B4F88010081A051F94F87C0040B194F83F -:102A900064200023092104F15800F9F796FFA0B142 -:102AA000B4F8766094F86A0058B994F8642000236A -:102AB000062104F15800F9F788FF002808BF2846CE -:102AC00003D0B4F87800801B001F8542C8BF0546BC -:102AD000002DD4BF0020A8B270BD042110B5DA4C7F -:102AE000A068FEF774FAA06890F84E10012902BFA2 -:102AF000022180F84E1010BD00F58A710288A0F8FE -:102B00001E21028EA0F82021828EA0F82221028FA1 -:102B1000B0F844309A4228BF1A460A82828FB0F831 -:102B20004600824238BF1046488201200872E07891 -:102B3000BDE81040E9F75EB9C34830B4806890F84A -:102B40004E30B0F832C0C48EB0F84010428F022B25 -:102B500025D08A4238BF11460186C28FB0F8421094 -:102B60008A4238BF11468186028FB0F844108A42EB -:102B700038BF11464186828FB0F846108A4238BF6E -:102B80001146C186418E614588BF8C46A0F832C08F -:102B9000C18EA14288BF0C46C48630BC7047038EEC -:102BA0009A4228BF1A46C58F838E9D4238BF2B4656 -:102BB0008A4238BF11460186B0F842108B4228BFC6 -:102BC0000B468386002180F84E10CDE770B59E4CF1 -:102BD000A06890F8CB10FE2906BF6178002970BD6F -:102BE00090F86720002301215830F9F7EEFE002805 -:102BF00018BF70BDA06890F8F41021B1BDE8704016 -:102C00000220FEF7DDBC90F86420002319465830FE -:102C1000F9F7DBFE40B1A06890F87C0020B1BDE878 -:102C200070401220FEF7CCBCA068002590F864200C -:102C3000122A1FD004DC032A3FD0112A1FD003E040 -:102C4000182A35D0232A43D0002304215830F9F71D -:102C5000BCFE002818BF70BDD4F808C09CF8650001 -:102C600019286ED03BDC01286ED002287AD00328C8 -:102C70005DD038E0BDE870400B20FEF7A1BCF1F755 -:102C800057F90C2838BF70BDA0680821D0F8F800AB -:102C90001E30F1F751F928B1A0680421C030F1F7D6 -:102CA0004BF900B9FFDFBDE870400320FEF788BC98 -:102CB000BDE870400620FEF783BC90F8CA1080F88B -:102CC000CC100720FEF77CFCA06880F8645070BD33 -:102CD0001820FEF775FCA068A0F8845070BD1E286F -:102CE00048D021286CD0DCF8F800012601780029B2 -:102CF00074D04088BCF8001088426FD100239CF843 -:102D0000642019460CF15800F9F75FFE002865D0E1 -:102D1000A068D0F8F810097802297DD003297CD06A -:102D200004297BD0052908BF082078D0C8E09CF88A -:102D3000C9008CF8CC000720FEF742FCA06800F028 -:102D40007AB97CE000E00DE00C20FEF739FCA068C9 -:102D5000A0F88A5090F8901041F0010180F890108E -:102D600000F069B91320FEF72BFCA068A0F88A5088 -:102D700000F061B99CF80501002818BF70BD9CF8EF -:102D8000040188B1BCF80601ACF84000BCF80801A9 -:102D9000ACF84200BCF80A01ACF84400BCF80C01E5 -:102DA000ACF846008CF80451FFF7C6FEFFF795FE1D -:102DB0001520FEF705FCA068A0F88A5000F03BB98A -:102DC0009CF87D0058B18CF8F2508CF8F350182024 -:102DD000FEF7F6FBA068A0F88A5070BD70E09CF882 -:102DE0000F01002818BF70BD9CF80E01002808BF15 -:102DF00070BDDCE91416DCF81001FAF735F8F2B210 -:102E0000C1B28A4207BFA16881F8F250A26882F875 -:102E1000F210C6F3072103E018E01DE03DE024E0D6 -:102E2000C0F30720814219BFA16881F8F300A068B0 -:102E300080F8F3501820BDE87040FEF7C1BB1120A8 -:102E4000FEF7BEFBA068F6E07C01002090F865006C -:102E5000F9F7A4FDA0BB08E090F8691041B190F823 -:102E60006A00002808BFFFDF0A20FEF7A9FB27E061 -:102E7000F1F75EF80C2823D3A0680821D0F8F800F9 -:102E80001E30F1F759F828B1A0680421C030F1F7DD -:102E900053F800B9FFDF0320E7E790F8900010F047 -:102EA000030F0DD10C20FEF78BFBA168A1F8845015 -:102EB00081F8886091F8900040F0010081F890005E -:102EC000A06890F8CB10FE2918BF70BD90F8642060 -:102ED000002319465830F9F778FD002808BF70BD67 -:102EE000A06890F80011E9B3A1690978D1BB90F806 -:102EF0006500F9F753FDA8BBA068B0F858100A297F -:102F000031D900F108010522E06901F0F7FD002840 -:102F1000A06804BF80F8005170BDD0F8FC000178B3 -:102F200061B1411C0522E06901F0E8FD002818BFED -:102F300070BDA068D0F8FC00007830B9A068E169E5 -:102F4000D0F8FC00401C01F0BBFFA068D0F8FC00EA -:102F50000178491C01700120FEF732FBA06880F85F -:102F6000005170BDFFE7A06890F8041111B190F80E -:102F70000511E1B390F80E11002908BF70BD90F85B -:102F80000F11002918BF70BD90F86500F9F706FD14 -:102F9000002818BF70BDA06890F85400012808BF31 -:102FA000012508D0022808BF022504D0042816BF36 -:102FB00008280325FFDFA06890F85500012808BF06 -:102FC000012608D0022808BF022604D0042816BF14 -:102FD00008280326FFDFA268012D92F810012DD0EA -:102FE000022D2ED0032D08BF04282CD03BE0FFE794 -:102FF000B0F80611A0F84010B0F80811A0F842107F -:10300000B0F80A11A0F84410B0F80C11A0F846105E -:1030100080F8045190F865001D2804D0BDE8704088 -:103020001420FEF7CDBAFFF787FDFFF756FD1520F8 -:10303000FEF7C6FAA06880F8655070BD012812D16D -:1030400001E002280FD192F81101012E06D0022EC4 -:1030500007D0032E08BF04280AD004E0012802D1BB -:1030600006E0022804D0BDE870401620FEF7A8BA9A -:10307000B2F8583092F85410B2F81201F032F9F761 -:1030800059FF20B1A168252081F8640070BDBDE81A -:1030900070400020FEF7B3BA70B5044690F86400A3 -:1030A00000250C2814D00D2818BF70BDB4F85800A6 -:1030B000D4F8F810401C8988884218BF70BDD4F835 -:1030C0004401FF4E0178002918BFFFDF45D122E0FF -:1030D000B4F85800B4F80211401C884218BF70BD03 -:1030E000D4F8FC00411C04F1080001F0E9FE0221C3 -:1030F0002046F9F750F9D4F8FC000078002808BF02 -:10310000FFDF0121FE20FEF7B1FA84F864500120B0 -:1031100084F8980070BD2188C180D4F8F800D4F8F4 -:10312000441140890881D4F8F800D4F8441180890A -:103130004881D4F8F800D4F84411C0898881D4F8C3 -:1031400044010571D4F8441109200870D4F84411E1 -:1031500020884880F078E8F74DFE01212046F9F7F5 -:103160001AF903212046FDF732FFB068D0F8F800C5 -:103170000078022818BFFFDF0221FE20FEF776FA52 -:1031800084F8645070BD70B5CD4CA16891F864208E -:10319000162A11BF132A91F88E20002A62781BBFCD -:1031A00002206070002A70BD81F8C800002581F8F7 -:1031B0008D5081F88850D1F8F800098840888842FD -:1031C00018BFFFDFA068D0F8F8000078032818BF08 -:1031D000FFDF0321FE20FEF749FAA068D0F8441172 -:1031E0000A78002A18BFFFDF19D10288CA80D0F8F8 -:1031F000442190F8C8101171D0F844110D72D0F824 -:1032000044210D211170D0F844210188518000889B -:10321000EDF75CFEEDF7F4FAE078E8F7EBFDA06877 -:1032200080F8645070BD10B5A54C207910F0020FE5 -:1032300008BF10BD6078002818BF10BDE068C078D6 -:10324000192880F06781DFE800F05F4F0D8EF7F7F7 -:10325000A5223FF76F82B0F7F7F7F7F6E2DFF8F451 -:10326000F3F7F200A0680023012190F8672058309E -:10327000F9F7ABFB002818BF10BD0821A06880F843 -:103280006710002180F8881080F88C1010BDA068AD -:103290000023194690F865205830F9F796FB18B1CD -:1032A000A168002081F88C00A0680023194690F8DE -:1032B00064205830F9F789FB002808BF10BD0020B2 -:1032C000A16881F8880010BDA0680023194690F815 -:1032D00064205830F9F779FB002808BFFFDF04208D -:1032E000A16881F8640010BDA0680023194690F819 -:1032F00064205830F9F769FB002808BFFFDF0C2075 -:10330000A16881F8640010BDA0680023194690F8F8 -:1033100064205830F9F759FB002808BFFFDF0D2063 -:10332000A16881F8640010BDA0680023194690F8D8 -:1033300064205830F9F749FB002808BFFFDF01215E -:10334000A06880F88D100F2180F8641010BDA0686F -:1033500090F86400122818BFFFDF0121A06880F8F0 -:103360008E101121F0E7A0680023194690F8642020 -:103370005830F9F72AFB28B9A06890F88E00002889 -:1033800008BFFFDF0121A06880F88D10132180F8AD -:10339000641010BDA06890F86400182818BFFFDF03 -:1033A0001A20A16881F8640010BDA068D0F8F81058 -:1033B00003884A889A4204BF0978042919D190F8F1 -:1033C0006420002319465830F9F7FFFA002808BF97 -:1033D000FFDFA06890F8901011F0020F04BF0121E8 -:1033E00080F8641005D0002180F88810D0F8F8002B -:1033F0000170A0680023194690F865205830F9F74D -:10340000E4FA002808BF10BD0020A1687FE0A06892 -:103410000023194690F864205830F9F7D6FA0028AE -:1034200008BFFFDF0520A16881F8640010BD30E00F -:103430001FE012E001E066E06CE0A068002319469E -:1034400090F864205830F9F7C0FA002808BFFFDF71 -:103450001C20A16881F86400E8E7A06800231946F1 -:1034600090F865205830F9F7B0FA002808BFFFDF60 -:10347000CAE7A0680023194690F864205830F9F78D -:10348000A4FA002808BFFFDF1F20A16881F86400AC -:10349000CCE7A06890F8651021291CD090F8641042 -:1034A000232918BFFFDFC1D190F8F210002907BF10 -:1034B00090F8F3100029242180F8641002E0000045 -:1034C0007C0100207FF4FBAE002180F864100846E8 -:1034D000FEF795F8F3E690F8F210002907BF90F890 -:1034E000F3100029242180F865108DD1002180F887 -:1034F000651080F87D1090F80E0100281CBF002098 -:10350000FEF77DF880E7A168002081F8650081F86A -:103510008C008BE7FFDF89E770B58D4C0829207A96 -:1035200063D2DFE801F0041A5A5A2662625A80B167 -:10353000F1F7FDFA012211461046F1F7C4FCF2F74B -:10354000A2F90020A072F1F794FBBDE87040F1F7FA -:1035500004BEBDE87040EFF7C3BBD4E90001EFF74C -:10356000BCF92060A07A401CC0B2A07228281CD3ED -:1035700070BDA07A0025401EC6B2E0683044F1F765 -:10358000D3FE10B9E1687F208855A07A272828BF8C -:1035900001252846F2F710F9A07A282809D2401C04 -:1035A000C0B2A072282828BF70BDBDE87040F1F7F6 -:1035B00060BB207A00281CBF012000F085F8F1F7DD -:1035C00065FDF1F7C2FD0120E07262480078E8F77E -:1035D00011FCBDE87040EFF783BB002808BF70BD49 -:1035E0000020BDE8704000F06FB8FFDF70BD10B57F -:1035F000574C207A002804BF0C2010BD00202072F8 -:10360000E072607AEFF7BAFF607AF0F704FA607A56 -:10361000EFF73BFC00280CBF1F20002010BD00224C -:1036200070B54B4C06460D46207A68B12272E272A4 -:10363000607AEFF7A3FF607AF0F7EDF9607AEFF7C1 -:1036400024FC002808BFFFDF4248E560067070BD1B -:1036500070B5050007D0A5F5E8503F494C388142C8 -:103660009CBF122070BD3A4CE068002804BF0920BE -:1036700070BD207A00281CBF0C2070BD3748EFF7C2 -:10368000AAFB6072202804BF1F2070BDEFF71CFC4E -:103690002060002D1CBF284420600120656020723E -:1036A000002000F011F8002070BD2949CA7A002AD4 -:1036B00004BF002070471F22027000224270CB68B6 -:1036C0004360CA72012070472DE9F04184B007467B -:1036D000EFF7FAFB1E4D8046414668682C6800EB08 -:1036E000800046002046F0F7FDF8B04206DB68682F -:1036F000811B4046EFF7F1F80446286040F233762C -:1037000021464046F0F7EEF8B04204DA3146404632 -:10371000EFF7E3F8044600208DF8000040F2E76080 -:10372000039004208DF80500002F14BF0120032012 -:103730008DF8040068460294EFF793FD687A6946B5 -:10374000EFF70AFE002808BFFFDF04B0BDE8F081F4 -:10375000AC1200209C010020B5EB3C0019350200A2 -:103760002DE9F0410C4612490D68114A1149083201 -:103770001160A0F12001312901D301200CE0412882 -:1037800010D040CC0C4F94E80E0007EB8000241FB3 -:1037900050F8807C3046B84720600548001D056021 -:1037A000BDE8F0812046DDF71BFDF5E706207047F8 -:1037B0001005024001000001A052020010B552485D -:1037C00000F012FA00B1FFDF4F48401C00F00CFA85 -:1037D000002800D0FFDF10BD2DE9F14F4B4ED6F889 -:1037E00000B00127484800F007FADFF81C8128B92B -:1037F0005FF0000708F1010000F014FA444C0025C6 -:103800004FF0030901206060C4F80051C4F804516E -:10381000009931602060DFF8FCA018E0DAF80000C1 -:10382000C00614D50E2000F064F8EFF3108010F0FD -:10383000010072B600D00120C4F80493D4F800113E -:1038400019B9D4F8041101B920BF00B962B6D4F88F -:10385000000118B9D4F804010028DFD0D4F804011D -:103860000028CFD137B1C6F800B008F1010000F050 -:10387000C3F911E008F1010000F0BEF90028B9D148 -:10388000C4F80893C4F80451C4F800510E2000F0A5 -:1038900030F81D4800F0C6F90020BDE8F88F2DE98A -:1038A000F0438DB00D46064600240DF110090DF1D0 -:1038B000200817E004EB4407102255F8271068464B -:1038C00001F048F905EB870710224846796801F0B6 -:1038D00041F96846FFF780FF10224146B86801F0C1 -:1038E00039F9641CB442E5DB0DB00020BDE8F0837B -:1038F00072E700F01F02012191404009800000F1B1 -:10390000E020C0F8801270479D01002004E50040CF -:1039100000E0004010ED00E0A94900200870704769 -:1039200070B5A84D01232B60A74B1C68002CFCD060 -:10393000002407E00E6806601E68002EFCD0001D03 -:10394000091D641C9442F5D30020286018680028E3 -:10395000FCD070BD70B59A4E04469C4D307802285C -:1039600000D0FFDFAC4200D3FFDF71699848012926 -:1039700003D847F23052944201DD03224271491CC0 -:103980007161291BC16092497078EFF7E5FC00284E -:1039900000D1FFDF70BD70B5894C0D46617888425B -:1039A00000D0FFDF894E082D4BD2DFE805F04A0436 -:1039B0001E2D4A4A4A382078022800D0FFDF032013 -:1039C0002070A078012801D020B108E0A06800F0A4 -:1039D0001BFE04E004F1080007C8FFF7A1FF052063 -:1039E0002070BDE87040EFF77BB9EFF76DFA014644 -:1039F0006068EFF777FFB04202D2616902290BD30A -:103A00000320F0F722FA12E0EFF75EFA0146606851 -:103A1000EFF768FFB042F3D2BDE870409AE7207834 -:103A200002280AD0052806D0FFDF04202070BDE858 -:103A3000704000F0BBB8022000E00320F0F705FA68 -:103A4000F3E7FFDF70BD70B50546EFF73DFA5C4C5C -:103A500060602078012800D0FFDF5D4901200870F8 -:103A60000020087104208D6048715848C860022009 -:103A700020706078EFF770FC002800D1FFDF70BD88 -:103A800010B54F4C207838B90220F0F7F4F918B986 -:103A90000320F0F7F0F908B1112010BD4D48EFF701 -:103AA0009AF96070202804D0012020700020606105 -:103AB00010BD032010BD2DE9F041144600EB840732 -:103AC0000E4605463F1F00F0B2FD4FF080521169CF -:103AD000484306EB8401091FB14201D2012100E0F5 -:103AE00000211CB11269B4EB920F02D90920BDE884 -:103AF000F081394A95420ED3AF420CD3854205D2AC -:103B0000874203D245EA0600800701D01020EEE785 -:103B1000964200D309B10F20E9E7304830490068E8 -:103B2000884205D0224631462846FFF7F9FE10E0CC -:103B3000FFF7A6FF0028DAD1214800218560C0E9FF -:103B4000036481704FF4A97104FB01F01830FFF792 -:103B50007AFF0020CBE770B54FF080550446286906 -:103B60001D49B1FBF0F0844201D20F2070BD00F07E -:103B70005EFDA04201D8102070BD184818490068A9 -:103B8000884204D02869604300F03EFD0CE0FFF756 -:103B900077FF0028F0D1296909486143816001213C -:103BA00081701048FFF74FFF002070BD10B5044C26 -:103BB0006078EFF76AF900B9FFDF0020207010BDD0 -:103BC000A001002004E5014000E40140105C0C006D -:103BD000BC1200209739020000600200B0000020F3 -:103BE000BEBAFECA7C5E0100002101700846704723 -:103BF0000146002008707047EFF3108101F00101C9 -:103C000072B60278012A01D0012200E000220123CD -:103C1000037001B962B60AB1002070474FF400503A -:103C20007047E9E7EFF3108111F0010F72B64FF022 -:103C30000002027000D162B600207047F2E7000077 -:103C40007B490968016000207047794908600020BD -:103C5000704701218A0720B1012804D042F20400F4 -:103C60007047916700E0D1670020704771490120DB -:103C7000086042F20600704708B504236D4A190730 -:103C8000103230B1C1F80433106840F00100106008 -:103C90000BE0106820F001001060C1F8083300202C -:103CA000C1F80801644800680090002008BD011FA9 -:103CB0000B2909D85F4910310A6822F01E0242EA36 -:103CC000400008600020704742F2050070470F284E -:103CD00009D8584910310A6822F4706242EA00207B -:103CE00008600020704742F205007047000100F1B3 -:103CF0008040C0F8041900207047000100F18040A6 -:103D0000C0F8081900207047000100F18040D0F889 -:103D10000009086000207047012801D9072070477A -:103D2000464A52F8200002680A43026000207047A9 -:103D3000012801D907207047404A52F82000026844 -:103D40008A43026000207047012801D9072070478C -:103D50003A4A52F8200000680860002070470200CC -:103D600037494FF0000003D0012A01D007207047E7 -:103D70000A607047020033494FF0000003D0012A67 -:103D800001D0072070470A60704708B54FF40072F1 -:103D9000510510B1C1F8042308E0C1F80823002040 -:103DA000C1F8240124481C3000680090002008BDA0 -:103DB00008B58022D10510B1C1F8042308E0C1F88C -:103DC00008230020C1F81C011B4814300068009033 -:103DD000002008BD08B54FF48072910510B1C1F8FC -:103DE000042308E0C1F808230020C1F8200112488C -:103DF000183000680090002008BD0D49383109686E -:103E00000160002070474FF080410020C1F8080198 -:103E1000C1F82401C1F81C01C1F820014FF0E020D5 -:103E2000802180F800140121C0F8001170470000C3 -:103E300000040040000500400801004064530200F7 -:103E400078050040800500406249634B0A68634979 -:103E50009A42096801D1C1F3100101600020704746 -:103E60005C495D4B0A685D49091D9A4201D1C0F366 -:103E700010000860002070475649574B0A685749A0 -:103E800008319A4201D1C0F3100008600020704749 -:103E900030B5504B504D1C6842F20803AC4202D082 -:103EA000142802D203E0112801D3184630BDC30004 -:103EB0004B481844C0F81015C0F81425002030BD38 -:103EC0004449454B0A6842F209019A4202D0062849 -:103ED00002D203E0042801D308467047404A01217A -:103EE00042F83010002070473A493B4B0A6842F2D2 -:103EF00009019A4202D0062802D203E0042801D325 -:103F000008467047364A012102EBC000416000209C -:103F1000704770B52F4A304E314C156842F2090394 -:103F200004EB8002B54204D0062804D2C2F800187F -:103F300007E0042801D3184670BDC1F31000C2F891 -:103F40000008002070BD70B5224A234E244C15682D -:103F500042F2090304EB8002B54204D0062804D2E1 -:103F6000D2F8000807E0042801D3184670BDD2F843 -:103F70000008C0F310000860002070BD174910B59C -:103F80000831184808601120154A002102EBC003CF -:103F9000C3F81015C3F81415401C1428F6D30020DC -:103FA00006E0042804D302EB8003C3F8001807E0FE -:103FB00002EB8003D3F80048C4F31004C3F80048B0 -:103FC000401C0628EDD310BD04490648083108609E -:103FD00070470000B0000020BEBAFECA00F50140E4 -:103FE00000F001400000FEFF7E4B1B6803B19847C4 -:103FF000BFF34F8F7C4801687C4A01F4E0611143B4 -:104000000160BFF34F8FFEE710B5EFF3108010F0A3 -:10401000010F72B601D0012400E0002400F0D9F8AD -:1040200050B1DDF777F9EEF71CFDEFF7B1FEDEF7E3 -:10403000ECFE6F490020086004B962B6002010BD94 -:1040400070B50C460546EFF3108010F0010F72B604 -:1040500001D0012600E0002600F0BBF818B106B937 -:1040600062B6082070BDDDF7D1F8DDF757F90246DA -:10407000002043099B0003F1E02300F01F01D3F867 -:104080000031CB40D9071BD0202803D222FA00F1FF -:10409000C90722D141B2002906DA01F00F0101F16E -:1040A000E02191F8141D03E001F1E02191F80014E2 -:1040B0004909082911D281B101290ED004290CD057 -:1040C000401C6428D5D3DEF777FE4949494808608B -:1040D0002046F0F775FA60B904E006B962B641F21D -:1040E000010070BD3F4804602DB12846F0F7B5FAD5 -:1040F00018B110242CE0404D19E02878022802D98C -:104100004FF4805424E007240028687801D0F8B9DF -:1041100008E0E8B120281BD8A878212818D8012861 -:1041200016D001E0A87898B9E8780B2810D8334960 -:10413000802081F8140DDDF7F1F82946EFF70EFE27 -:10414000EEF74EFC00F0A6FA2846DDF7B5F8044677 -:1041500006B962B61CB1FFF757FF204670BD0020BC -:1041600070BD10B5044600F034F800B10120207095 -:10417000002010BD224908600020704770B50C4631 -:1041800020490D681F49204E08310E60102807D0C5 -:1041900011280CD012280FD0132811D0012013E0C1 -:1041A000D4E90001FFF74CFF354620600DE0FFF732 -:1041B0002BFF0025206008E02068FFF7D2FF03E016 -:1041C0000F4920680860002020600E48001D05602F -:1041D00070BD074807490068884201D10120704737 -:1041E00000207047B80100200CED00E00400FA0543 -:1041F000B0000020BEBAFECA6C5302000BE000E023 -:1042000004000020100502400100000100B5D8495B -:1042100002282DD021DC10F10C0F08BFF42027D08C -:104220000FDC10F1280F08BFD82021D010F1140F97 -:1042300008BFEC201CD010F1100F08BFF02017D0E1 -:1042400020E010F1080F08BFF82011D010F1040F82 -:104250000CBFFC2000280BD014E0C01E062811D291 -:10426000DFE800F00E0C0A080503082000E0072034 -:10427000086000BD0620FBE70520F9E70420F7E70A -:104280000320F5E7FFDF00BD00B5BA49012808BFEC -:1042900003200CD0022808BF042008D0042808BF3F -:1042A000062004D0082816BFFFDF052000BD0860E7 -:1042B00000BDB149002804BF086820F0010005D006 -:1042C000012806BF086840F0010070470860704789 -:1042D00070B51E460546012924D0022A04BFA7480E -:1042E0004FF47A710DD0012A04BFA5484FF4C8617C -:1042F00007D0042A07BFA34840F69801A24840F619 -:10430000E44144181846F1F781FA04443046F1F7C5 -:10431000ABFA20444FF47A7100F27120B0FBF1F057 -:10432000281A70BD022A08BF4FF47A700AD0012AF9 -:1043300008BF4FF4C86005D0042A0CBF40F69800AF -:1043400040F6E44049F608514418DBE770B51446DE -:104350000546012908BF49F6CA660DD0022B08BFE1 -:104360008A4807D0012B08BF854803D0042B0CBF17 -:104370008448874800F1FA061046F1F760FA012CEC -:1043800008BF4FF47A710AD0022C08BF4FF4FA71BB -:1043900005D0042C0CBF4FF4FA614FF4FA51711A96 -:1043A00008444FF47A7100F28920B0FBF1F0281A2A -:1043B000801E70BD70B514460646012930D0022B10 -:1043C00004BF6E494FF47A700DD0012B04BF6C49C5 -:1043D0004FF4C86007D0042B07BF6A4940F6980025 -:1043E000694940F6E4400D181046F1F728FA012C0F -:1043F00008BF4FF47A710AD0022C08BF4FF4FA714B -:1044000005D0042C0CBF4FF4FA614FF4FA51691A2D -:1044100008444FF47A716438B0FBF1F0301A70BD83 -:10442000022B08BF4FF47A700AD0012B08BF4FF45B -:10443000C86005D0042B0CBF40F6980040F6E4405D -:1044400049F608514518CFE770B5164604460129CC -:1044500008BF49F6CA650DD0022B08BF4B4807D0EC -:10446000012B08BF464803D0042B0CBF45484848E1 -:1044700000F1FA051046F1F7C9F905443046F1F7A5 -:10448000F3F928444FF47A7100F2E140B0FBF1F007 -:10449000201A801E70BD2DE9F04107461E460C46CD -:1044A00015461046082A16BF04284DF68830F1F745 -:1044B000ADF907EB4701C1EBC71100EBC100012CBF -:1044C00008BF4FF47A710AD0022C08BF4FF4FA717A -:1044D00005D0042C0CBF4FF4FA614FF4FA51471881 -:1044E0002046F1F7ACF9381A4FF47A7100F60F60F4 -:1044F000B0FBF1F42846F1F777F920443044401D31 -:10450000BDE8F08170B5054614460E460846F1F741 -:104510007DF905EB4502C2EBC512C0EBC205304682 -:10452000F1F7A2F92D1A2046082C16BF04284DF6E3 -:104530008830F1F76BF928444FF47A7100F6B73000 -:10454000B0FBF1F52046F1F74FF92844401D70BD4E -:104550001049082818BF0428086803BF20F46C50CD -:1045600040F4444040F0004020F0004008607047B4 -:104570000C1500401015004050160040683602002F -:10458000A2240200D0FB010030D301000436020057 -:10459000C0D40100401700402DE9FE430C46804680 -:1045A000F8F7B4FF074698F80160204601A96A466B -:1045B000ECF717F905000DD0012F02D00320BDE85C -:1045C000FE83204602AA0199ECF72DF80298B0F874 -:1045D00003000AE0022F14D1042E12D3B8F803000E -:1045E000BDF80020011D914204D8001D80B2A91918 -:1045F000814202D14FF00000E1E702D24FF001000A -:10460000DDE74FF00200DAE70B4A022111600B49A7 -:104610000B68002BFCD0084B1B1D18600868002895 -:10462000FCD00020106008680028FCD070474FF0D4 -:10463000805040697047000004E5014000E40140FB -:1046400002000B464FF00000014620D0012A04D0A2 -:10465000022A04D0032A0DD103E0012002E0022047 -:1046600015E00320072B05D2DFE803F00406080A53 -:104670000C0E100007207047012108E0022106E01F -:10468000032104E0042102E0052100E00621EEF709 -:10469000BEBB0000F9480521817000210170417006 -:1046A0007047F7490A78012A05D0CA681044C860E3 -:1046B0004038EFF7E4B88A6810448860F8E70028CB -:1046C00019D00378EF49F04A13B1012B0ED011E055 -:1046D0000379012B00D06BB943790BB1012B09D1C0 -:1046E0008368643B8B4205D2C0680EE00379012BDE -:1046F00002D00BB10020704743790BB1012BF9D1E7 -:10470000C368643B8B42F5D280689042F2D80120A6 -:104710007047DB4910B501220A700279A2B100226C -:104720000A71427992B104224A718268D34C5232A2 -:104730008A60C0681434C8606060EEF7C5FBCF497A -:1047400020600220887010BD0322E9E70322EBE716 -:1047500070B5044609B1012000E00320C84D0021D6 -:104760002970217901B100202871607968B1042095 -:10477000C24E6871A168F068EEF7AFF8A860E06813 -:104780005230E8600320B07070BD0320F0E72DE9DF -:10479000F04105460226EEF79EFF006800B1FFDFFC -:1047A000B64C01273DB12878B0B1012805D00228C8 -:1047B00010D0032813D027710CE06868C82807D3ED -:1047C000EFF7C3F820B16868FFF76BFF012603E03D -:1047D000002601E000F05CF93046BDE8F081207869 -:1047E0000028F7D16868FFF76AFF0028E3D06868FF -:1047F000017879B1A078042800D0FFDF0121686832 -:10480000FFF7A6FF9E49E078EEF7A6FD0028E1D16C -:10481000FFDFDFE7FFF77DFF6770DBE72DE9F0479C -:10482000964C8846E178884200D0FFDFDFF84C9252 -:1048300000250127924E09F11409B8F1080F75D22D -:10484000DFE808F0040C28527A808D95A0780328C0 -:1048500002D0022800D0FFDFBDE8F087A07803284F -:1048600002D0022800D0FFDF0420A070257120783C -:10487000002878D1FFF715FF3078012806D0B068FE -:10488000E06000F025F92061002060E0E078EEF7BC -:1048900060FCF5E7A078032802D0022800D0FFDFF3 -:1048A000207800286DD1A078032816D0EEF70CFBF5 -:1048B00001464F46D9F80000EFF714F800280EDB48 -:1048C000796881420BDB081AF0606D49E078EEF7F9 -:1048D00043FD0028C0D1FFDFBEE7042028E004200C -:1048E000EFF7B3FAA570B7E7A078032802D0022843 -:1048F00000D0FFDF207888BBA078032817D0EEF720 -:10490000E3FA01464F46D9F80000EEF7EBFF002826 -:10491000E5DB79688142E2DB081AF0605849E0780B -:10492000EEF71AFD002897D1FFDF95E740E005205C -:10493000EFF78BFAA7708FE7A078042800D0FFDF8D -:10494000022004E0A078042800D0FFDF0120A16845 -:104950008847FFF71CFF054630E004E011E0A0782F -:10496000042800D0FFDFBDE8F04700F091B8A07840 -:10497000042804D0617809B1022800D0FFDF207834 -:1049800018B1BDE8F04700F08CB8207920B10620BE -:10499000EFF75BFA2571CDE7607838B13849E078F8 -:1049A000EEF7DAFC00B9FFDF657055E70720BFE7D7 -:1049B000FFDF51E73DB1012D03D0FFDF022DF9D11B -:1049C0004AE70420C3E70320C1E770B5050004D01F -:1049D0002A4CA078052806D101E0102070BD0820DF -:1049E000EFF749FA08B1112070BD2848EEF7F3F946 -:1049F000E070202803D00020A560A07070BD0320C7 -:104A000070BD1E4810B5017809B1112010BD817824 -:104A1000052906D0012906D029B101210170002005 -:104A200010BD0F2010BD00F03CF8F8E770B5134C36 -:104A30000546A07808B1012809D155B12846FFF7ED -:104A40003EFE40B1287840B1A078012809D00F205F -:104A500070BD102070BD072070BD2846FFF759FEBD -:104A600003E000212846FFF773FE0549E078EEF7E2 -:104A700073FC00B9FFDF002070BD0000BC01002006 -:104A8000CC1200203D860100FF1FA1071D48020037 -:104A90000A4810B5006900F013F8BDE81040EEF7C1 -:104AA0001FB9064810B5C078EEF7EFF900B9FFDF7F -:104AB0000820EFF7CAF9BDE81040EBE5BC01002083 -:104AC0000C490A6848F202139A4302430A6070478D -:104AD000084A116848F2021301EA03009943116081 -:104AE00070470246044B10201344FC2B01D8116080 -:104AF00000207047C80602400018FEBF40EA0103CC -:104B000010B59B070FD1042A0DD310C808C9121F76 -:104B10009C42F8D020BA19BA884201D9012010BDB0 -:104B20004FF0FF3010BD1AB1D30703D0521C07E07D -:104B3000002010BD10F8013B11F8014B1B1B07D1E1 -:104B400010F8013B11F8014B1B1B01D1921EF1D152 -:104B5000184610BD032A40F2308010F0030C00F01C -:104B6000158011F8013BBCF1020F624498BF11F8A7 -:104B700001CB00F8013B38BF11F8013BA2F1040260 -:104B800098BF00F801CB38BF00F8013B11F00303D8 -:104B900000F02580083AC0F0088051F8043B083A3C -:104BA00051F804CBA0E80810F5E7121D5CBF51F8DE -:104BB000043B40F8043BAFF30080D20724BF11F858 -:104BC000013B11F801CB48BF11F8012B24BF00F8BD -:104BD000013B00F801CB48BF00F8012B704710B52E -:104BE000203AC0F00B80B1E81850203AA0E81850E5 -:104BF000B1E81850A0E81850BFF4F5AF5FEA027CA6 -:104C000024BFB1E81850A0E8185044BF18C918C014 -:104C1000BDE810405FEA827C24BF51F8043B40F8B5 -:104C2000043B08BF7047D20728BF31F8023B48BF9A -:104C300011F8012B28BF20F8023B48BF00F8012BD8 -:104C4000704702F0FF0343EA032242EA024200F007 -:104C500002B84FF000020429C0F0128010F0030CDB -:104C600000F01B80CCF1040CBCF1020F18BF00F85F -:104C7000012BA8BF20F8022BA1EB0C0100F00DB80E -:104C80005FEAC17C24BF00F8012B00F8012B48BF6C -:104C900000F8012B70474FF0000200B51346944610 -:104CA0009646203922BFA0E80C50A0E80C50B1F184 -:104CB0002001BFF4F7AF090728BFA0E80C5048BF98 -:104CC0000CC05DF804EB890028BF40F8042B08BF36 -:104CD000704748BF20F8022B11F0804F18BF00F832 -:104CE000012B7047FEDF04207146084219D1069956 -:104CF000124A914215DC069902394878DF2810D112 -:104D00000878FE2807D0FF280BD14FF001004FF0A4 -:104D100000020B4B184741F201000099019A084B21 -:104D20001847084B002B02D01B68DB6818474FF070 -:104D3000FF3071464FF00002014B1847006002003F -:104D4000E93F020004000020184819497047FFF7A6 -:104D5000FBFFDCF733FA00BD4FF4805015490968BA -:104D6000884203D1144A13605B68184700BD0000F5 -:104D700020BFFDE74FF480500E490968884210D1EA -:104D80000E4B18684FF0FF318842F1D080F308884D -:104D90004FF02021884204DD0948026803210A43BC -:104DA00002600848804708488047FFDFE012002083 -:104DB000E01200200000002004000020006002003B -:104DC0001409004099460100594D02000420714623 -:104DD000084202D0EFF3098101E0EFF3088188690E -:104DE00002380078102813DB20280FDB2C280BDB7F -:104DF0000A4A12680A4B9A4203D1602804DB094A26 -:104E00001047022008607047074A1047074A1047BA -:104E1000074A12682C32126810470000B0000020C8 -:104E2000BEBAFECA21130000613702007D410200B4 -:104E3000040000200D4B0E4908470E4B0C49084753 -:104E40000D4B0B4908470D4B094908470C4B0849C6 -:104E500008470C4B064908470B4B054908470B4BC5 -:104E6000034908470A4B02490847000051BB0000AC -:104E70000D2F00006D2C0000092B0000972A000068 -:104E80000F2D00003D1300005328000029BE000034 -:104E9000C91100000021016001717047002101600B -:104EA00081807047002101604160017270470A688B -:104EB0004B6802604360B1F808C0A0F808C07047B2 -:104EC0000A6802600B79037170470000B995000011 -:104ED00043970000A1980000C5980000FF980000CB -:104EE0003399000065990000959900000B9A000025 -:104EF00091960000A7120000A7120000794400005C -:104F0000C5440000E94400007D45000099460000CA -:104F10005B4700008D47000075480000074900000E -:104F20005B490000414A0000614A0000DF150000B3 -:104F30000316000033150000871500003516000029 -:104F4000C91600006360000013620000E7650000FE -:104F5000FD660000876700000568000069680000C2 -:104F60008D6900005D6A0000C96A0000834A000084 -:104F7000894A0000934A000089410000FB4A000072 -:104F80005D410000874C0000BF4C0000294D00002F -:104F90000F4E0000254E0000A7120000A7120000CF -:104FA000A7120000A7120000A7120000A71200001D -:104FB000A7120000A7120000BF2400004525000032 -:104FC000612500007D2500000B270000A7250000BB -:104FD000B1250000F325000015260000F126000091 -:104FE00033270000A7120000A7120000678300000B -:104FF0008783000089830000CD830000FB830000CD -:10500000E9840000778500008B850000D9850000C9 -:10501000C98600006F880000998900007B7300003A -:10502000B1890000A7120000A7120000D1B400004F -:105030003BB600008FB60000FBB60000ABB7000027 -:105040000100000000000000100110013A02000001 -:105050001A020000FB900000E9900000FFFFFFFF34 -:105060000000FFFFCDAC0000293D000065200000DE -:10507000C5730000618E0000000000000000020007 -:10508000000000000002000000000000000100001D -:105090000000000013810000F38000006181000027 -:1050A00041240000032400002324000037A800004E -:1050B00063A800006BAA000059590000818100001C -:1050C00000000000B18100008F24000000000000FB -:1050D00000000000000000004DA9000000000000DA -:1050E000ED59000000000000900A0000900A000046 -:1050F000DB560000DB5600005544000079AB000091 -:1051000047760000771F0000972602004F970100A6 -:10511000195700001957000077440000DBAB00006E -:10512000CB760000E91F0000C5260200639701004E -:1051300070017001400038005C002400480100024A -:1051400000000300656C74620000000000000000B5 -:1051500000000000000000008700000000000000C8 -:105160000000000000000000BE83605ADB0B3760C7 -:1051700038A5F5AA9183886C010000003114010064 -:10518000F9220100000000010206030405000000EE -:105190000700000000000000060000000A000000F8 -:1051A0003200000073000000B4000000C989010053 -:1051B00047150200616F0100D5B10100EBF4010059 -:1051C000D5B10100F77001008DB30100E1EE0100DF -:1051D0008DB30100BF6D010021B3010001F4010096 -:1051E00021B301005D6F0100E9B101009DE70100FD -:1051F000E9B10100ED74010001B601009DF5010067 -:1052000001B601000300000001555555D6BE898E38 -:105210000000C706C70CC71200006B030F06B308D7 -:105220000000B704A708970CF401FA009600640088 -:105230004B0032001E0014000A00050002000100AD -:105240000041000000000000AAAED7AB15412010BD -:105250000C0802170D0101020909010106020918D3 -:10526000180301010909030305000000FE00000006 -:10527000FE000000FE555555252627D6BE898E0016 -:10528000F401FA00960064004B0032001E00140086 -:105290000A00050002000100254100000000000096 -:1052A000493E0200613E0200793E0200913E02004A -:1052B000C13E0200E93E0200133F0200473F0200E8 -:1052C000573B0200B73A0200AD370200E34A020042 -:1052D000E93B0200F93B0200253C0200433F01008C -:1052E0004B3F01005D3F0100533C02006D3C02005A -:1052F000413C02004B3C0200793C0200AF3C020002 -:10530000CF3C0200ED3C0200FB3C0200093D0200E4 -:10531000193D0200313D0200493D02005F3D02009F -:10532000753D0200000000007FB90000D5B9000003 -:10533000EBB9000041460200D93702009F38020055 -:10534000CB490200034A02002D4A0200ED3D010054 -:105350006D4101008B3D0200B13D0200D53D0200D0 -:10536000FB3D02001C05004020050040001002002B -:105370009053020008000020D001000044110000FA -:10538000C8530200D801002008110000A01100003D -:10539000011813C8140250201A0102227C2720FB96 -:1053A000349B5F801280021A10138B091B20480463 -:1053B0001ACE0401200B50A40AAC01300912CB63B1 -:0853C0007F010B68CC10A00076 -:00000001FF diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json deleted file mode 100644 index 8f3a1bd52f..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_S140_OTA/mbed_lib.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "softdevice", - "macros": [ - "SOFTDEVICE_PRESENT=1", - "S140", - "BLE_STACK_SUPPORT_REQD", - "NRF_SDH_CLOCK_LF_XTAL_ACCURACY=7", - "NRF_SD_BLE_API_VERSION=5", - "NRF_SDH_ENABLED=1", - "NRF_SDH_BLE_ENABLED=1", - "PEER_MANAGER_ENABLED=1", - "NRF_SDH_BLE_GATT_MAX_MTU_SIZE=23", - "NRF_SDH_BLE_OBSERVER_PRIO_LEVELS=4", - "NRF_SDH_BLE_GAP_EVENT_LENGTH=3", - "BLE_ADV_BLE_OBSERVER_PRIO=1", - "BLE_CONN_STATE_BLE_OBSERVER_PRIO=0", - "BLE_CONN_PARAMS_BLE_OBSERVER_PRIO=1", - "NRF_BLE_GATT_BLE_OBSERVER_PRIO=1", - "NRF_SDH_DISPATCH_MODEL=2", - "NRF_SDH_SOC_ENABLED=1", - "NRF_SDH_STACK_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_STATE_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_SOC_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_REQ_OBSERVER_PRIO_LEVELS=2", - "NRF_SDH_BLE_STACK_OBSERVER_PRIO=0", - "NRF_SDH_SOC_STACK_OBSERVER_PRIO=0", - "FDS_BACKEND=2", - "SWI_DISABLE1=1" - ], - "target_overrides": { - "*": { - "target.features_add": ["BLE"], - "target.bootloader_img": "hex/s140_nrf52_6.0.0_softdevice.hex" - } - } -} From 1e96afbe6e243bdf19167d7dc317f36e7ad96221 Mon Sep 17 00:00:00 2001 From: Harrison Mutai Date: Tue, 15 Dec 2020 11:49:53 +0000 Subject: [PATCH 4/4] Remove unsupported common SoftDevice build support --- .../TARGET_SOFTDEVICE_COMMON/CMakeLists.txt | 21 - .../TARGET_SOFTDEVICE_COMMON/README.md | 23 - .../ble_radio_notification.c | 88 --- .../ble_radio_notification.h | 82 --- .../libraries/bootloader/dfu/nrf_dfu_mbr.c | 109 --- .../libraries/bootloader/dfu/nrf_dfu_mbr.h | 90 --- .../libraries/bootloader/dfu/nrf_dfu_types.h | 302 --------- .../bootloader/nrf_bootloader_info.h | 188 ------ .../libraries/fstorage/nrf_fstorage_sd.c | 624 ------------------ .../libraries/fstorage/nrf_fstorage_sd.h | 75 --- 10 files changed, 1602 deletions(-) delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/CMakeLists.txt delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/README.md delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_types.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/nrf_bootloader_info.h delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.c delete mode 100644 targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.h diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/CMakeLists.txt b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/CMakeLists.txt deleted file mode 100644 index 14886472b5..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2020 ARM Limited. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - - -target_include_directories(mbed-core - INTERFACE - ./ble - ./ble/ble_radio_notification - ./libraries/bootloader - ./libraries/bootloader/dfu - ./libraries/fstorage -) - -target_sources(mbed-core - INTERFACE - ble/ble_radio_notification/ble_radio_notification.c - - libraries/bootloader/dfu/nrf_dfu_mbr.c - - libraries/fstorage/nrf_fstorage_sd.c -) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/README.md b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/README.md deleted file mode 100644 index 2c717b29b1..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Folder origin - -components/softdevice - -# Modifications - -Removed: - * common/nrf_sdh_freertos.c - * common/nrf_sdh_freertos.h - * s112/toolchain - * s132/toolchain - * s212/ - -Moved: - * common/ to ../modules/softdevice/common - * mbr/nrf52832/ to ../TARGET_SOFTDEVICE_S132_MBR - * mbr/nrf52840/ to ../TARGET_SOFTDEVICE_S140_MBR - * s112/ to ../TARGET_SOFTDEVICE_S112 - * s132/ to ../TARGET_SOFTDEVICE_S132_FULL - * s140/ to ../TARGET_SOFTDEVICE_S140_FULL - -Renamed: - * ble.h to nrf_ble.h diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.c deleted file mode 100644 index b6dc48d6a9..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.c +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include "ble_radio_notification.h" -#include "nrf_nvic.h" -#include - - -static bool m_radio_active = false; /**< Current radio state. */ -static ble_radio_notification_evt_handler_t m_evt_handler = NULL; /**< Application event handler for handling Radio Notification events. */ - - -void SWI1_IRQHandler(void) -{ - m_radio_active = !m_radio_active; - if (m_evt_handler != NULL) - { - m_evt_handler(m_radio_active); - } -} - - -uint32_t ble_radio_notification_init(uint32_t irq_priority, - uint8_t distance, - ble_radio_notification_evt_handler_t evt_handler) -{ - uint32_t err_code; - - m_evt_handler = evt_handler; - - // Initialize Radio Notification software interrupt - err_code = sd_nvic_ClearPendingIRQ(SWI1_IRQn); - if (err_code != NRF_SUCCESS) - { - return err_code; - } - - err_code = sd_nvic_SetPriority(SWI1_IRQn, irq_priority); - if (err_code != NRF_SUCCESS) - { - return err_code; - } - - err_code = sd_nvic_EnableIRQ(SWI1_IRQn); - if (err_code != NRF_SUCCESS) - { - return err_code; - } - - // Configure the event - return sd_radio_notification_cfg_set(NRF_RADIO_NOTIFICATION_TYPE_INT_ON_BOTH, distance); -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.h deleted file mode 100644 index 0f89b2f5dd..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/ble/ble_radio_notification/ble_radio_notification.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Copyright (c) 2012 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -/** @file - * - * @defgroup ble_radio_notification Radio Notification Event Handler - * @{ - * @ingroup ble_sdk_lib - * @brief Module for propagating Radio Notification events to the application. - */ - -#ifndef BLE_RADIO_NOTIFICATION_H__ -#define BLE_RADIO_NOTIFICATION_H__ - -#include -#include -#include "nrf_soc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/**@brief Application radio notification event handler type. */ -typedef void (*ble_radio_notification_evt_handler_t) (bool radio_active); - -/**@brief Function for initializing the Radio Notification module. - * - * @param[in] irq_priority Interrupt priority for the Radio Notification interrupt handler. - * @param[in] distance The time from an Active event until the radio is activated. - * @param[in] evt_handler Handler to be executed when a radio notification event has been - * received. - * - * @return NRF_SUCCESS on successful initialization, otherwise an error code. - */ -uint32_t ble_radio_notification_init(uint32_t irq_priority, - uint8_t distance, - ble_radio_notification_evt_handler_t evt_handler); - - -#ifdef __cplusplus -} -#endif - -#endif // BLE_RADIO_NOTIFICATION_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.c deleted file mode 100644 index 974a46652f..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.c +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include "nrf_dfu_mbr.h" -#include "nrf_mbr.h" -#include "nrf_dfu_types.h" -#include "nrf_log.h" -#include "nrf_bootloader_info.h" - -#define MBR_IRQ_FORWARD_ADDRESS_ADDRESS (0x20000000) //!< The address of the variable that decides where the MBR forwards interrupts - -uint32_t nrf_dfu_mbr_copy_bl(uint32_t * p_src, uint32_t len) -{ - uint32_t ret_val; - uint32_t const len_words = len / sizeof(uint32_t); - - sd_mbr_command_t command = - { - .command = SD_MBR_COMMAND_COPY_BL, - .params.copy_bl.bl_src = p_src, - .params.copy_bl.bl_len = len_words - }; - - ret_val = sd_mbr_command(&command); - - return ret_val; -} - - -uint32_t nrf_dfu_mbr_init_sd(void) -{ - uint32_t ret_val; - - sd_mbr_command_t command = - { - .command = SD_MBR_COMMAND_INIT_SD - }; - - ret_val = sd_mbr_command(&command); - - return ret_val; -} - - -uint32_t nrf_dfu_mbr_irq_forward_address_set(void) -{ - uint32_t ret_val = NRF_ERROR_INVALID_PARAM; - uint32_t address = MBR_SIZE; - - NRF_LOG_DEBUG("running irq table set"); - -#ifndef BLE_STACK_SUPPORT_REQD - sd_mbr_command_t command = - { - .command = SD_MBR_COMMAND_IRQ_FORWARD_ADDRESS_SET, - .params.irq_forward_address_set.address = address, - }; - - ret_val = sd_mbr_command(&command); -#endif - - if (ret_val == NRF_ERROR_INVALID_PARAM) - { - // Manually set the forward address if this MBR doesn't have the command. - *(uint32_t *)(MBR_IRQ_FORWARD_ADDRESS_ADDRESS) = address; - - ret_val = NRF_SUCCESS; - } - - NRF_LOG_DEBUG("After running irq table set"); - - return ret_val; -} diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.h deleted file mode 100644 index 2fcd1b361d..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_mbr.h +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -/**@file - * - * @defgroup sdk_nrf_dfu_mbr MBR functions - * @{ - * @ingroup nrf_dfu - */ - -#ifndef NRF_DFU_MBR_H__ -#define NRF_DFU_MBR_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @brief Function for copying the bootloader using an MBR command. - * - * @param[in] p_src Source address of the bootloader data to copy. - * @param[in] len Length of the data to copy in bytes. - * - * @return This function will return only if the command request could not be run. - * See @ref sd_mbr_command_copy_bl_t for possible return values. - */ -uint32_t nrf_dfu_mbr_copy_bl(uint32_t * p_src, uint32_t len); - - -/** @brief Function for initializing the SoftDevice using an MBR command. - * - * @retval NRF_SUCCESS If the SoftDevice was initialized successfully. - * Any other return value indicates that the SoftDevice - * could not be initialized. - */ -uint32_t nrf_dfu_mbr_init_sd(void); - - -/** @brief Function for setting the address of the IRQ table to the app's using an MBR command. - * - * @retval NRF_SUCCESS If the address of the new irq table was set. Any other - * return value indicates that the address could not be set. - */ -uint32_t nrf_dfu_mbr_irq_forward_address_set(void); - - -#ifdef __cplusplus -} -#endif - -#endif // NRF_DFU_MBR_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_types.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_types.h deleted file mode 100644 index 5ccd290103..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/dfu/nrf_dfu_types.h +++ /dev/null @@ -1,302 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -/**@file - * - * @defgroup sdk_nrf_dfu_types DFU types - * @{ - * @ingroup nrf_dfu - */ - -#ifndef NRF_DFU_TYPES_H__ -#define NRF_DFU_TYPES_H__ - -#include -#include - -#include "nrf.h" -#include "nrf_mbr.h" -#include "app_util_platform.h" -#include "sdk_config.h" - -#if defined(NRF_DFU_TRANSPORT_BLE) && NRF_DFU_TRANSPORT_BLE -#include "ble_gap.h" -#define SYSTEM_SERVICE_ATT_SIZE 8 /**< Size of the system service attribute length including CRC-16 at the end. */ -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -#define INIT_COMMAND_MAX_SIZE 256 /**< Maximum size of the init command stored in dfu_settings. */ - -/** @brief Size of a flash page. This value is used for calculating the size of the reserved - * flash space in the bootloader region. - */ -#if defined(NRF51) - #define CODE_PAGE_SIZE (PAGE_SIZE_IN_WORDS * sizeof(uint32_t)) -#elif defined(NRF52) || defined(NRF52840_XXAA) - #define CODE_PAGE_SIZE (MBR_PAGE_SIZE_IN_WORDS * sizeof(uint32_t)) -#else - #error "Architecture not set." -#endif - -/** @brief Maximum size of a data object.*/ -#if defined(NRF51) - #define DATA_OBJECT_MAX_SIZE (CODE_PAGE_SIZE * 4) -#elif defined(NRF52_SERIES) || defined (__SDK_DOXYGEN__) - #define DATA_OBJECT_MAX_SIZE (CODE_PAGE_SIZE) -#else - #error "Architecture not set." -#endif - -/** @brief Page location of the bootloader settings address. - */ -#if defined (NRF51) - #define BOOTLOADER_SETTINGS_ADDRESS (0x0003FC00UL) -#elif defined( NRF52810_XXAA ) - #define BOOTLOADER_SETTINGS_ADDRESS (0x0002F000UL) -#elif defined( NRF52832_XXAA ) - #define BOOTLOADER_SETTINGS_ADDRESS (0x0007F000UL) -#elif defined(NRF52840_XXAA) - #define BOOTLOADER_SETTINGS_ADDRESS (0x000FF000UL) -#else - #error No valid target set for BOOTLOADER_SETTINGS_ADDRESS. -#endif - -#define BOOTLOADER_SETTINGS_PAGE_SIZE (CODE_PAGE_SIZE) - -/** - * @brief MBR parameters page in UICR. - * - * Register location in UICR where the page address of the MBR parameters page is stored (only used by the nRF52 MBR). - * - * @note If the value at the given location is 0xFFFFFFFF, no MBR parameters page is set. - */ -#define NRF_UICR_MBR_PARAMS_PAGE_ADDRESS (NRF_UICR_BASE + 0x18) -#define NRF_MBR_PARAMS_PAGE_SIZE (CODE_PAGE_SIZE) - -/** @brief Page location of the MBR parameters page address. - */ -#if defined(NRF52840_XXAA) || defined(NRF52840_XXAA_ENGA) - #define NRF_MBR_PARAMS_PAGE_ADDRESS (0x000FE000UL) -#elif defined(NRF52832_XXAA) - #define NRF_MBR_PARAMS_PAGE_ADDRESS (0x0007E000UL) -#elif defined(NRF52810_XXAA) - #define NRF_MBR_PARAMS_PAGE_ADDRESS (0x0002E000UL) -#endif - -/** @brief Size (in bytes) of the flash area reserved for application data. - * - * The area is found at the end of the application area, next to the start of - * the bootloader. This area will not be erased by the bootloader during a - * firmware upgrade. The default value is 3 pages which matches the size used - * in most SDK examples. - */ -#ifndef DFU_APP_DATA_RESERVED -#define DFU_APP_DATA_RESERVED (CODE_PAGE_SIZE * 3) -#endif - -/** @brief Total size of the region between the SoftDevice and the bootloader. - */ -#define DFU_REGION_END(bootloader_start_addr) ((bootloader_start_addr) - (DFU_APP_DATA_RESERVED)) - -#ifdef BLE_STACK_SUPPORT_REQD -#define DFU_REGION_START (nrf_dfu_bank0_start_addr()) -#else -#define DFU_REGION_START (MBR_SIZE) -#endif - -#define DFU_REGION_TOTAL_SIZE ((DFU_REGION_END) - (DFU_REGION_START)) - -#define NRF_DFU_CURRENT_BANK_0 0x00 -#define NRF_DFU_CURRENT_BANK_1 0x01 - -#define NRF_DFU_BANK_LAYOUT_DUAL 0x00 -#define NRF_DFU_BANK_LAYOUT_SINGLE 0x01 - -/** @brief DFU bank state codes. - * - * @details The DFU bank state indicates the content of a bank: - * A valid image of a certain type or an invalid image. - */ - -#define NRF_DFU_BANK_INVALID 0x00 /**< Invalid image. */ -#define NRF_DFU_BANK_VALID_APP 0x01 /**< Valid application. */ -#define NRF_DFU_BANK_VALID_SD 0xA5 /**< Valid SoftDevice. */ -#define NRF_DFU_BANK_VALID_BL 0xAA /**< Valid bootloader. */ -#define NRF_DFU_BANK_VALID_SD_BL 0xAC /**< Valid SoftDevice and bootloader. */ - -/** @brief Description of a single bank. */ -#pragma pack(4) -typedef struct -{ - uint32_t image_size; /**< Size of the image in the bank. */ - uint32_t image_crc; /**< CRC of the image. If set to 0, the CRC is ignored. */ - uint32_t bank_code; /**< Identifier code for the bank. */ -} nrf_dfu_bank_t; - -/**@brief DFU progress. - * - * Be aware of the difference between objects and firmware images. A firmware image consists of multiple objects, each of a maximum size @ref DATA_OBJECT_MAX_SIZE. - * - * @note The union inside this struct is cleared when CREATE_OBJECT of command type is executed, and when there is a valid post-validation. - * In DFU activation (after reset) the @ref dfu_progress_t::update_start_address will be used in case of a SD/SD+BL update. - */ -ANON_UNIONS_ENABLE; -typedef struct -{ - uint32_t command_size; /**< The size of the current init command stored in the DFU settings. */ - uint32_t command_offset; /**< The offset of the currently received init command data. The offset will increase as the init command is received. */ - uint32_t command_crc; /**< The calculated CRC of the init command (calculated after the transfer is completed). */ - uint32_t data_object_size; /**< The size of the last object created. Note that this size is not the size of the whole firmware image.*/ - union - { - struct - { - uint32_t firmware_image_crc; /**< CRC value of the current firmware (continuously calculated as data is received). */ - uint32_t firmware_image_crc_last; /**< The CRC of the last executed object. */ - uint32_t firmware_image_offset; /**< The offset of the current firmware image being transferred. Note that this offset is the offset in the entire firmware image and not only the current object. */ - uint32_t firmware_image_offset_last;/**< The offset of the last executed object from the start of the firmware image. */ - }; - struct - { - uint32_t update_start_address; /**< Value indicating the start address of the new firmware (before copy). It's always used, but it's most important for an SD/SD+BL update where the SD changes size or if the DFU process had a power loss when updating a SD with changed size. */ - }; - }; -} dfu_progress_t; -ANON_UNIONS_DISABLE; - -/** @brief Event types in the bootloader and DFU process. */ -typedef enum -{ - NRF_DFU_EVT_DFU_INITIALIZED, /**< Starting DFU. */ - NRF_DFU_EVT_TRANSPORT_ACTIVATED, /**< Transport activated (e.g. BLE connected, USB plugged in). */ - NRF_DFU_EVT_TRANSPORT_DEACTIVATED, /**< Transport deactivated (e.g. BLE disconnected, USB plugged out). */ - NRF_DFU_EVT_DFU_STARTED, /**< DFU process started. */ - NRF_DFU_EVT_OBJECT_RECEIVED, /**< A DFU data object has been received. */ - NRF_DFU_EVT_DFU_FAILED, /**< DFU process has failed, been interrupted, or hung. */ - NRF_DFU_EVT_DFU_COMPLETED, /**< DFU process completed. */ - NRF_DFU_EVT_DFU_ABORTED, /**< DFU process aborted. */ -} nrf_dfu_evt_type_t; - -/** - * @brief Function for notifying DFU state. - */ -typedef void (*nrf_dfu_observer_t)(nrf_dfu_evt_type_t notification); - - -#if defined(NRF_DFU_TRANSPORT_BLE) && NRF_DFU_TRANSPORT_BLE - -typedef struct -{ - uint32_t crc; /**< CRC of the rest of the parameters in this struct. */ - ble_gap_id_key_t ble_id; /**< BLE GAP identity key of the device that initiated the DFU process. */ - ble_gap_enc_key_t enc_key; /**< Encryption key structure containing encrypted diversifier and LTK for reestablishing the bond. */ - uint8_t sys_serv_attr[SYSTEM_SERVICE_ATT_SIZE]; /**< System service attributes for restoring of Service Changed Indication setting in DFU mode. */ -} nrf_dfu_peer_data_t; - -typedef enum -{ - DFU_PEER_DATA_STATE_INVALID = 0, - DFU_PEER_DATA_STATE_INITIALIZED = 1, - DFU_PEER_DATA_STATE_WRITE_REQUESTED = 2, - DFU_PEER_DATA_STATE_WRITE_FINISHED = 3, - DFU_PEER_DATA_STATE_WRITE_FAILED = 4, -} nrf_dfu_peer_data_state_t; - -typedef struct -{ - uint32_t crc; /**< CRC of the rest of the parameters in this struct. Calculated by the bootloader. */ - uint8_t name[20]; /**< New advertisement name to set. */ - uint32_t len; /**< Length of the advertisement name. */ -} nrf_dfu_adv_name_t; - -typedef enum -{ - DFU_ADV_NAME_STATE_INVALID = 0, - DFU_ADV_NAME_STATE_INITIALIZED = 1, - DFU_ADV_NAME_STATE_WRITE_REQUESTED = 2, - DFU_ADV_NAME_STATE_WRITE_FINISHED = 3, - DFU_ADV_NAME_STATE_WRITE_FAILED = 4, -} nrf_dfu_set_adv_name_state_t; - -#endif // NRF_DFU_TRANSPORT_BLE - - -/**@brief DFU settings for application and bank data. - */ -typedef struct -{ - uint32_t crc; /**< CRC for the stored DFU settings, not including the CRC itself. If 0xFFFFFFF, the CRC has never been calculated. */ - uint32_t settings_version; /**< Version of the current DFU settings struct layout. */ - uint32_t app_version; /**< Version of the last stored application. */ - uint32_t bootloader_version; /**< Version of the last stored bootloader. */ - - uint32_t bank_layout; /**< Bank layout: single bank or dual bank. This value can change. */ - uint32_t bank_current; /**< The bank that is currently used. */ - - nrf_dfu_bank_t bank_0; /**< Bank 0. */ - nrf_dfu_bank_t bank_1; /**< Bank 1. */ - - uint32_t write_offset; /**< Write offset for the current operation. */ - uint32_t sd_size; /**< Size of the SoftDevice. */ - - dfu_progress_t progress; /**< Current DFU progress. */ - - uint32_t enter_buttonless_dfu; - uint8_t init_command[INIT_COMMAND_MAX_SIZE]; /**< Buffer for storing the init command. */ - -#if defined(NRF_DFU_TRANSPORT_BLE) && NRF_DFU_TRANSPORT_BLE - nrf_dfu_peer_data_t peer_data; /**< Not included in calculated CRC. */ - nrf_dfu_adv_name_t adv_name; /**< Not included in calculated CRC. */ -#endif // NRF_DFU_TRANSPORT_BLE - -} nrf_dfu_settings_t; - -#pragma pack() // revert pack settings - -#ifdef __cplusplus -} -#endif - -#endif // NRF_DFU_TYPES_H__ - -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/nrf_bootloader_info.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/nrf_bootloader_info.h deleted file mode 100644 index 812cddbf37..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/bootloader/nrf_bootloader_info.h +++ /dev/null @@ -1,188 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -/**@file - * - * @defgroup nrf_bootloader_info Bootloader Information - * @{ - * @ingroup nrf_bootloader - */ - -#ifndef NRF_BOOTLOADER_INFO_H__ -#define NRF_BOOTLOADER_INFO_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "app_util.h" -#include "nrf.h" -#include "nrf_mbr.h" - -/** @brief Macro for getting the start address of the bootloader image. - * - * The macro is not a compile time symbol. It cannot be used as a - * constant expression, for example, inside a static assert or linker script - * at-placement. - */ -#ifndef BOOTLOADER_START_ADDR -#if (__LINT__ == 1) - #define BOOTLOADER_START_ADDR (0x3AC00) -#elif defined(CODE_START) - #define BOOTLOADER_START_ADDR (CODE_START) -#else - #error Not a valid compiler/linker for BOOTLOADER_START_ADDR. -#endif -#endif - - -/** @brief Macro for getting the size of the bootloader image. - */ -#ifndef BOOTLOADER_SIZE -#if defined ( NRF51 ) - #define BOOTLOADER_SIZE (BOOTLOADER_SETTINGS_ADDRESS - BOOTLOADER_START_ADDR) -#elif defined( NRF52_SERIES ) - #define BOOTLOADER_SIZE (NRF_MBR_PARAMS_PAGE_ADDRESS - BOOTLOADER_START_ADDR) -#elif (__LINT__ == 1) - #define BOOTLOADER_SIZE (0x6000) -#endif -#endif - - -/** - * @brief Bootloader start address in UICR. - * - * Register location in UICR where the bootloader start address is stored. - * - * @note If the value at the given location is 0xFFFFFFFF, the bootloader address is not set. - */ -#define NRF_UICR_BOOTLOADER_START_ADDRESS (NRF_UICR_BASE + 0x14) - - -// The following macros are for accessing the SoftDevice information structure, -// which is found inside the SoftDevice binary. - -/** @brief Macro for converting an offset inside the SoftDevice information struct to an absolute address. - */ -#define SD_INFO_ABS_OFFSET_GET(baseaddr, offset) ((baseaddr) + (SOFTDEVICE_INFO_STRUCT_OFFSET) + (offset)) - -/** @brief Macros for reading a byte or a word at a particular offset inside a SoftDevice information struct. - * Use MBR_SIZE as baseaddr when the SoftDevice is installed just above the MBR (the usual case). - */ -#define SD_OFFSET_GET_UINT32(baseaddr, offset) (*((uint32_t *) SD_INFO_ABS_OFFSET_GET(baseaddr, offset))) -#define SD_OFFSET_GET_UINT16(baseaddr, offset) (*((uint16_t *) SD_INFO_ABS_OFFSET_GET(baseaddr, offset))) -#define SD_OFFSET_GET_UINT8(baseaddr, offset) (*((uint8_t *) SD_INFO_ABS_OFFSET_GET(baseaddr, offset))) - - -#ifdef BLE_STACK_SUPPORT_REQD -#include "nrf_sdm.h" -#else -/** @brief The offset inside the SoftDevice at which the information struct is placed. - * To see the layout of the information struct, see the SoftDevice specification. - */ -#define SOFTDEVICE_INFO_STRUCT_OFFSET (0x2000) - -#define SD_INFO_STRUCT_SIZE(baseaddr) SD_OFFSET_GET_UINT8(baseaddr, 0x00) - -/** @brief Macro for reading the size of a SoftDevice at a given base address. - */ -#ifndef SD_SIZE_GET -#define SD_SIZE_GET(baseaddr) SD_OFFSET_GET_UINT32(baseaddr, 0x08) -#endif - -/** @brief Macro for reading the version of a SoftDevice at a given base address. - * This expression checks the length of the information struct to see if the version is present. - * The version number is constructed like this: - * major_version * 1000000 + minor_version * 1000 + bugfix_version - */ -#ifndef SD_VERSION_GET -#define SD_VERSION_GET(baseaddr) ((SD_INFO_STRUCT_SIZE(baseaddr) > (0x14)) \ - ? SD_OFFSET_GET_UINT32(baseaddr, 0x14) \ - : 0) -#endif -#endif - - -/** @brief Macro for reading the magic number of a SoftDevice at a given base address. - */ -#ifndef SD_MAGIC_NUMBER_GET -#define SD_MAGIC_NUMBER_GET(baseaddr) SD_OFFSET_GET_UINT32(baseaddr, 0x04) -#endif - -/** @brief Macro for getting the absolute address of the magic number. - */ -#define SD_MAGIC_NUMBER_ABS_OFFSET_GET(baseaddr) SD_INFO_ABS_OFFSET_GET(baseaddr, 0x04) - -/** @brief The number present at a specific location in all SoftDevices. - */ -#define SD_MAGIC_NUMBER ((uint32_t)0x51B1E5DB) - -/** @brief Whether a SoftDevice is at its regular location. - */ -#ifndef SD_PRESENT -#define SD_PRESENT ((SD_MAGIC_NUMBER_GET(MBR_SIZE)) == (SD_MAGIC_NUMBER)) -#endif - -/** @brief The multiplier for the major version of the SoftDevice. See \ref SD_VERSION_GET - */ -#define SD_MAJOR_VERSION_MULTIPLIER (1000000) - -/** @brief Read the major version of the SoftDevice from the raw version number. See \ref SD_VERSION_GET. - */ -#define SD_MAJOR_VERSION_EXTRACT(raw_version) ((raw_version)/SD_MAJOR_VERSION_MULTIPLIER) - - -#define BOOTLOADER_DFU_GPREGRET_MASK (0xB0) /**< Magic pattern written to GPREGRET register to signal between main app and DFU. The 3 lower bits are assumed to be used for signalling purposes.*/ -#define BOOTLOADER_DFU_START_BIT_MASK (0x01) /**< Bit mask to signal from main application to enter DFU mode using a buttonless service. */ - -#define BOOTLOADER_DFU_GPREGRET2_MASK (0xA8) /**< Magic pattern written to GPREGRET2 register to signal between main app and DFU. The 3 lower bits are assumed to be used for signalling purposes.*/ -#define BOOTLOADER_DFU_SKIP_CRC_BIT_MASK (0x01) /**< Bit mask to signal from main application that CRC-check is not needed for image verification. */ - - -#define BOOTLOADER_DFU_START (BOOTLOADER_DFU_GPREGRET_MASK | BOOTLOADER_DFU_START_BIT_MASK) /**< Magic number to signal that bootloader should enter DFU mode because of signal from Buttonless DFU in main app.*/ -#define BOOTLOADER_DFU_SKIP_CRC (BOOTLOADER_DFU_GPREGRET2_MASK | BOOTLOADER_DFU_SKIP_CRC_BIT_MASK) /**< Magic number to signal that CRC can be skipped due to low power modes.*/ - - - -#ifdef __cplusplus -} -#endif - -#endif // #ifndef NRF_BOOTLOADER_INFO_H__ -/** @} */ diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.c b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.c deleted file mode 100644 index ef5f6b82d2..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.c +++ /dev/null @@ -1,624 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "sdk_common.h" - -#if NRF_MODULE_ENABLED(NRF_FSTORAGE) - -#include "nrf_fstorage_sd.h" -#include -#include -#include -#include "nordic_common.h" -#include "nrf_soc.h" -#include "nrf_sdh.h" -#include "nrf_sdh_soc.h" -#include "nrf_atomic.h" -#include "nrf_atfifo.h" -#include "app_util_platform.h" - - -#if (NRF_FSTORAGE_SD_MAX_WRITE_SIZE % 4) -#error NRF_FSTORAGE_SD_MAX_WRITE_SIZE must be a multiple of the word size. -#endif - - -/**@brief fstorage operation codes. */ -typedef enum -{ - NRF_FSTORAGE_OP_WRITE, //!< Write bytes to flash. - NRF_FSTORAGE_OP_ERASE //!< Erase flash pages. -} nrf_fstorage_sd_opcode_t; - -ANON_UNIONS_ENABLE; -/**@brief fstorage operation queue element. */ -typedef struct -{ - nrf_fstorage_t const * p_fs; //!< The fstorage instance that requested the operation. - nrf_fstorage_sd_opcode_t op_code; //!< Requested operation. - void * p_param; //!< User-defined parameter passed to the event handler. - union - { - struct - { - void const * p_src; //!< Data to be written to flash. - uint32_t dest; //!< Destination of the data in flash. - uint32_t len; //!< Length of the data to be written (in bytes). - uint32_t offset; //!< Write offset. - } write; - struct - { - uint32_t page; //!< Physical page number. - uint32_t progress; //!< Number of pages erased. - uint32_t pages_to_erase; //!< Total number of pages to erase. - } erase; - }; -} nrf_fstorage_sd_op_t; -ANON_UNIONS_DISABLE; - -typedef enum -{ - NRF_FSTORAGE_STATE_IDLE, //!< No operations requested to the SoftDevice. - NRF_FSTORAGE_STATE_OP_PENDING, //!< A non-fstorage operation is pending. - NRF_FSTORAGE_STATE_OP_EXECUTING, //!< An fstorage operation is executing. -} nrf_fstorage_sd_state_t; - -/**@brief Internal state. */ -typedef struct -{ - nrf_atomic_flag_t initialized; //!< fstorage is initalized. - nrf_atomic_flag_t queue_running; //!< The queue is running. - /** Prevent API calls from entering queue_process(). */ - nrf_fstorage_sd_state_t state; //!< Internal fstorage state. - uint32_t retries; //!< Number of times an operation has been retried on timeout. - bool sd_enabled; //!< The SoftDevice is enabled. - bool paused; //!< A SoftDevice state change is impending. - /** Do not load a new operation when the last one completes. */ -} nrf_fstorage_sd_work_t; - - -void nrf_fstorage_sys_evt_handler(uint32_t, void *); -bool nrf_fstorage_sdh_req_handler(nrf_sdh_req_evt_t, void *); -void nrf_fstorage_sdh_state_handler(nrf_sdh_state_evt_t, void *); - - -/* Flash device information. */ -static nrf_fstorage_info_t m_flash_info = -{ -#if defined(NRF51) - .erase_unit = 1024, -#elif defined(NRF52_SERIES) - .erase_unit = 4096, -#endif - .program_unit = 4, - .rmap = true, - .wmap = false, -}; - -/* Queue of fstorage operations. */ -NRF_ATFIFO_DEF(m_fifo, nrf_fstorage_sd_op_t, NRF_FSTORAGE_SD_QUEUE_SIZE); - -/* Define a nrf_sdh_soc event observer to receive SoftDevice system events. */ -NRF_SDH_SOC_OBSERVER(m_sys_obs, 0, nrf_fstorage_sys_evt_handler, NULL); - -/* nrf_sdh request observer. */ -NRF_SDH_REQUEST_OBSERVER(m_req_obs, 0) = -{ - .handler = nrf_fstorage_sdh_req_handler, -}; - -/* nrf_sdh state observer. */ -NRF_SDH_STATE_OBSERVER(m_state_obs, 0) = -{ - .handler = nrf_fstorage_sdh_state_handler, -}; - -static nrf_fstorage_sd_work_t m_flags; /* Internal status. */ -static nrf_fstorage_sd_op_t * m_p_cur_op; /* The current operation being executed. */ -static nrf_atfifo_item_get_t m_iget_ctx; /* Context for nrf_atfifo_item_get() and nrf_atfifo_item_free(). */ - - -/* Send events to the application. */ -static void event_send(nrf_fstorage_sd_op_t const * p_op, ret_code_t result) -{ - if (p_op->p_fs->evt_handler == NULL) - { - /* Nothing to do. */ - return; - } - - nrf_fstorage_evt_t evt = - { - .result = result, - .p_param = p_op->p_param, - }; - - switch (p_op->op_code) - { - case NRF_FSTORAGE_OP_WRITE: - evt.id = NRF_FSTORAGE_EVT_WRITE_RESULT; - evt.addr = p_op->write.dest; - evt.p_src = p_op->write.p_src; - evt.len = p_op->write.len; - break; - - case NRF_FSTORAGE_OP_ERASE: - evt.id = NRF_FSTORAGE_EVT_ERASE_RESULT; - evt.addr = (p_op->erase.page * m_flash_info.erase_unit); - evt.len = p_op->erase.pages_to_erase; - break; - - default: - /* Should not happen. */ - break; - } - - p_op->p_fs->evt_handler(&evt); -} - - -/* Write to flash. */ -static uint32_t write_execute(nrf_fstorage_sd_op_t const * p_op) -{ - uint32_t chunk_len; - - chunk_len = MIN(p_op->write.len - p_op->write.offset, NRF_FSTORAGE_SD_MAX_WRITE_SIZE); - chunk_len = MAX(1, chunk_len / m_flash_info.program_unit); - - /* Cast to p_src to uint32_t to perform arithmetic. */ - uint32_t * p_dest = (uint32_t*)(p_op->write.dest + p_op->write.offset); - uint32_t const * p_src = (uint32_t*)((uint32_t)p_op->write.p_src + p_op->write.offset); - - return sd_flash_write(p_dest, p_src, chunk_len); -} - - -/* Erase flash page(s). */ -static uint32_t erase_execute(nrf_fstorage_sd_op_t const * p_op) -{ - return sd_flash_page_erase(p_op->erase.page + p_op->erase.progress); -} - - -/* Free the current queue element. */ -static void queue_free(void) -{ - (void) nrf_atfifo_item_free(m_fifo, &m_iget_ctx); -} - - -/* Load a new operation from the queue. */ -static bool queue_load_next(void) -{ - m_p_cur_op = nrf_atfifo_item_get(m_fifo, &m_iget_ctx); - - return (m_p_cur_op != NULL); -} - - -/* Execute an operation in the queue. */ -static void queue_process(void) -{ - uint32_t rc; - - if (m_flags.state == NRF_FSTORAGE_STATE_IDLE) - { - if (!queue_load_next()) - { - /* No more operations, nothing to do. */ - m_flags.queue_running = false; - return; - } - } - - m_flags.state = NRF_FSTORAGE_STATE_OP_EXECUTING; - - switch (m_p_cur_op->op_code) - { - case NRF_FSTORAGE_OP_WRITE: - rc = write_execute(m_p_cur_op); - break; - - case NRF_FSTORAGE_OP_ERASE: - rc = erase_execute(m_p_cur_op); - break; - - default: - rc = NRF_ERROR_INTERNAL; - break; - } - - switch (rc) - { - case NRF_SUCCESS: - { - /* The operation was accepted by the SoftDevice. - * If the SoftDevice is enabled, wait for a system event. Otherwise, - * the SoftDevice call is synchronous and will not send an event so we simulate it. */ - if (!m_flags.sd_enabled) - { - nrf_fstorage_sys_evt_handler(NRF_EVT_FLASH_OPERATION_SUCCESS, NULL); - } - } break; - - case NRF_ERROR_BUSY: - { - /* The SoftDevice is executing a flash operation that was not requested by fstorage. - * Stop processing the queue until a system event is received. */ - m_flags.state = NRF_FSTORAGE_STATE_OP_PENDING; - } break; - - default: - { - /* An error has occurred. We cannot proceed further with this operation. */ - event_send(m_p_cur_op, NRF_ERROR_INTERNAL); - /* Reset the internal state so we can accept other operations. */ - m_flags.state = NRF_FSTORAGE_STATE_IDLE; - m_flags.queue_running = false; - /* Free the current queue element. */ - queue_free(); - } break; - } -} - - -/* Start processing the queue if it is not running and fstorage is not paused. */ -static void queue_start(void) -{ - if ( (!nrf_atomic_flag_set_fetch(&m_flags.queue_running)) - && (!m_flags.paused)) - { - queue_process(); - } -} - - -/* Flash operation success callback. Keeps track of the progress of an operation. */ -static bool on_operation_success(nrf_fstorage_sd_op_t * const p_op) -{ - /* Reset the retry counter on success. */ - m_flags.retries = 0; - - switch (p_op->op_code) - { - case NRF_FSTORAGE_OP_WRITE: - { - /* Update the offset only if the operation is successful - * so that it can be retried in case it times out. */ - uint32_t const chunk_len = MIN(p_op->write.len - p_op->write.offset, - NRF_FSTORAGE_SD_MAX_WRITE_SIZE); - - p_op->write.offset += chunk_len; - - if (p_op->write.offset == p_op->write.len) - { - return true; - } - } break; - - case NRF_FSTORAGE_OP_ERASE: - { - p_op->erase.progress++; - - if (p_op->erase.progress == p_op->erase.pages_to_erase) - { - return true; - } - } break; - - default: - /* Should not happen. */ - break; - } - - return false; -} - - -/* Flash operation failure callback. */ -static bool on_operation_failure(nrf_fstorage_sd_op_t const * p_op) -{ - UNUSED_PARAMETER(p_op); - - m_flags.retries++; - - if (m_flags.retries > NRF_FSTORAGE_SD_MAX_RETRIES) - { - /* Maximum amount of retries reached. Give up. */ - m_flags.retries = 0; - return true; - } - - return false; -} - - -static ret_code_t init(nrf_fstorage_t * p_fs, void * p_param) -{ - UNUSED_PARAMETER(p_param); - - p_fs->p_flash_info = &m_flash_info; - - if (!nrf_atomic_flag_set_fetch(&m_flags.initialized)) - { -#if NRF_SDH_ENABLED - m_flags.sd_enabled = nrf_sdh_is_enabled(); -#endif - (void) NRF_ATFIFO_INIT(m_fifo); - } - - return NRF_SUCCESS; -} - - -static ret_code_t uninit(nrf_fstorage_t * p_fs, void * p_param) -{ - UNUSED_PARAMETER(p_fs); - UNUSED_PARAMETER(p_param); - - /* The state is re-initialized upon init(). - * The common uninitialization code is run by the caller. */ - - memset(&m_flags, 0x00, sizeof(m_flags)); - - (void) nrf_atfifo_clear(m_fifo); - - return NRF_SUCCESS; -} - - -static ret_code_t write(nrf_fstorage_t const * p_fs, - uint32_t dest, - void const * p_src, - uint32_t len, - void * p_param) -{ - nrf_fstorage_sd_op_t * p_op; - nrf_atfifo_item_put_t iput_ctx; - - /* Get a free queue element. */ - p_op = nrf_atfifo_item_alloc(m_fifo, &iput_ctx); - - if (p_op == NULL) - { - return NRF_ERROR_NO_MEM; - } - - /* Initialize the operation. */ - memset(p_op, 0x00, sizeof(nrf_fstorage_sd_op_t)); - - p_op->op_code = NRF_FSTORAGE_OP_WRITE; - p_op->p_fs = p_fs; - p_op->p_param = p_param; - p_op->write.dest = dest; - p_op->write.p_src = p_src; - p_op->write.len = len; - - /* Put the operation on the queue. */ - (void) nrf_atfifo_item_put(m_fifo, &iput_ctx); - - queue_start(); - - return NRF_SUCCESS; -} - - -static ret_code_t read(nrf_fstorage_t const * p_fs, uint32_t src, void * p_dest, uint32_t len) -{ - memcpy(p_dest, (uint32_t*)src, len); - - return NRF_SUCCESS; -} - - -static ret_code_t erase(nrf_fstorage_t const * p_fs, - uint32_t page_addr, - uint32_t len, - void * p_param) -{ - nrf_fstorage_sd_op_t * p_op; - nrf_atfifo_item_put_t iput_ctx; - - /* Get a free queue element. */ - p_op = nrf_atfifo_item_alloc(m_fifo, &iput_ctx); - - if (p_op == NULL) - { - return NRF_ERROR_NO_MEM; - } - - /* Initialize the operation. */ - memset(p_op, 0x00, sizeof(nrf_fstorage_sd_op_t)); - - p_op->op_code = NRF_FSTORAGE_OP_ERASE; - p_op->p_fs = p_fs; - p_op->p_param = p_param; - p_op->erase.page = (page_addr / m_flash_info.erase_unit); - p_op->erase.pages_to_erase = len; - - /* Put the operation on the queue. */ - (void) nrf_atfifo_item_put(m_fifo, &iput_ctx); - - queue_start(); - - return NRF_SUCCESS; -} - - -static uint8_t const * rmap(nrf_fstorage_t const * p_fs, uint32_t addr) -{ - UNUSED_PARAMETER(p_fs); - - return (uint8_t*)addr; -} - - -static uint8_t * wmap(nrf_fstorage_t const * p_fs, uint32_t addr) -{ - UNUSED_PARAMETER(p_fs); - UNUSED_PARAMETER(addr); - - /* Not supported. */ - return NULL; -} - - -static bool is_busy(nrf_fstorage_t const * p_fs) -{ - UNUSED_PARAMETER(p_fs); - - return (m_flags.state != NRF_FSTORAGE_STATE_IDLE); -} - - -void nrf_fstorage_sys_evt_handler(uint32_t sys_evt, void * p_context) -{ - UNUSED_PARAMETER(p_context); - - if ( (sys_evt != NRF_EVT_FLASH_OPERATION_SUCCESS) - && (sys_evt != NRF_EVT_FLASH_OPERATION_ERROR)) - { - /* Ignore any non-flash events. */ - return; - } - - switch (m_flags.state) - { - case NRF_FSTORAGE_STATE_IDLE: - /* Ignore flash events if no flash operation was requested. */ - return; - - case NRF_FSTORAGE_STATE_OP_PENDING: - /* The SoftDevice has completed a flash operation that was not requested by fstorage. - * It should be possible to request an operation now. - * Process the queue at the end of this function. */ - break; - - case NRF_FSTORAGE_STATE_OP_EXECUTING: - { - /* Handle the result of a flash operation initiated by this module. */ - bool operation_finished = false; - - switch (sys_evt) - { - case NRF_EVT_FLASH_OPERATION_SUCCESS: - operation_finished = on_operation_success(m_p_cur_op); - break; - - case NRF_EVT_FLASH_OPERATION_ERROR: - operation_finished = on_operation_failure(m_p_cur_op); - break; - - default: - break; - } - - if (operation_finished) - { - /* The operation has finished. Change state to NRF_FSTORAGE_STATE_IDLE - * so that queue_process() will fetch a new operation from the queue. */ - m_flags.state = NRF_FSTORAGE_STATE_IDLE; - - event_send(m_p_cur_op, (sys_evt == NRF_EVT_FLASH_OPERATION_SUCCESS) ? - NRF_SUCCESS : NRF_ERROR_TIMEOUT); - - /* Free the queue element after sending out the event to prevent API calls made - * in the event context to queue elements indefinitely, without this function - * ever returning in case the SoftDevice calls are synchronous. */ - queue_free(); - } - } break; - } - - if (!m_flags.paused) - { - queue_process(); - } - else - { - /* A flash operation has completed. Let the SoftDevice change state. */ - (void) nrf_sdh_request_continue(); - } -} - - -bool nrf_fstorage_sdh_req_handler(nrf_sdh_req_evt_t req, void * p_context) -{ - UNUSED_PARAMETER(req); - UNUSED_PARAMETER(p_context); - - m_flags.paused = true; - - /* If there are any operations ongoing, pause the SoftDevice state change. */ - return (m_flags.state == NRF_FSTORAGE_STATE_IDLE); -} - - -void nrf_fstorage_sdh_state_handler(nrf_sdh_state_evt_t state, void * p_context) -{ - UNUSED_PARAMETER(p_context); - - if ( (state == NRF_SDH_EVT_STATE_ENABLED) - || (state == NRF_SDH_EVT_STATE_DISABLED)) - { - m_flags.paused = false; - m_flags.sd_enabled = (state == NRF_SDH_EVT_STATE_ENABLED); - - /* Execute any operations still in the queue. */ - queue_process(); - } -} - - -/* Exported API implementation. */ -nrf_fstorage_api_t nrf_fstorage_sd = -{ - .init = init, - .uninit = uninit, - .read = read, - .write = write, - .erase = erase, - .rmap = rmap, - .wmap = wmap, - .is_busy = is_busy -}; - - -#endif // NRF_FSTORAGE_ENABLED diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.h deleted file mode 100644 index b35d15fe4e..0000000000 --- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_SDK_15_0/TARGET_SOFTDEVICE_COMMON/libraries/fstorage/nrf_fstorage_sd.h +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2016 - 2018, Nordic Semiconductor ASA - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form, except as embedded into a Nordic - * Semiconductor ASA integrated circuit in a product or a software update for - * such product, must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * 3. Neither the name of Nordic Semiconductor ASA nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * 4. This software, with or without modification, must only be used with a - * Nordic Semiconductor ASA integrated circuit. - * - * 5. Any software provided in binary form under this license must not be reverse - * engineered, decompiled, modified and/or disassembled. - * - * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/** - * @file - * - * @defgroup nrf_fstorage_sd SoftDevice implementation - * @ingroup nrf_fstorage - * @{ - * - * @brief API implementation of fstorage that uses the SoftDevice. -*/ - -#ifndef NRF_FSTORAGE_SD_H__ -#define NRF_FSTORAGE_SD_H__ - -#include "nrf_fstorage.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/**@brief API implementation that uses the SoftDevice. - * - * @details An fstorage instance with this API implementation can be initialized by providing - * this structure as a parameter to @ref nrf_fstorage_init. - * The structure is defined in @c nrf_fstorage_sd.c. - */ -extern nrf_fstorage_api_t nrf_fstorage_sd; - - -#ifdef __cplusplus -} -#endif - -#endif // NRF_FSTORAGE_SD_H__ -/** @} */