From e31d2c3add7e770891d46007594cca29faf64d04 Mon Sep 17 00:00:00 2001 From: Mikhail Ivasenka <46024793+coolmaker2006@users.noreply.github.com> Date: Fri, 5 Sep 2025 12:14:34 +0200 Subject: [PATCH 1/3] Add API Connectivity documentation and index entry for data exchange - Created a new document for API connectivity detailing authentication, authorization, and data flow for integration partners. - Included diagrams to illustrate the architecture and data flow between ERP, Kelch, ToolManagerOffice, and tapio services. - Added an index entry in the data exchange section to link to the new API connectivity document. --- docs/data-exchange/assets/choose-addon.png | Bin 0 -> 30869 bytes docs/data-exchange/assets/create-key.png | Bin 0 -> 29795 bytes docs/data-exchange/connect-api.md | 102 +++++++++++++++++++++ docs/data-exchange/index.md | 3 + 4 files changed, 105 insertions(+) create mode 100644 docs/data-exchange/assets/choose-addon.png create mode 100644 docs/data-exchange/assets/create-key.png create mode 100644 docs/data-exchange/connect-api.md create mode 100644 docs/data-exchange/index.md diff --git a/docs/data-exchange/assets/choose-addon.png b/docs/data-exchange/assets/choose-addon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5547f35da42b2081066a8e25858b9e7bf1d923 GIT binary patch literal 30869 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 Kpzc0=_CEkQO0J*) literal 0 HcmV?d00001 diff --git a/docs/data-exchange/assets/create-key.png b/docs/data-exchange/assets/create-key.png new file mode 100644 index 0000000000000000000000000000000000000000..eeac93cb3cd69c57f19ba718e6e774065ef74b45 GIT binary patch literal 29795 zcmc$`byQSc_%;l}BPbv!3epG)A_CGmga}AUDh(ptBHbVeDkUNfGf0PYw}3G8zzp3; zOEYx7`}n-^*So%VtzUd==^DhDea_kY-uJ$)>%Q*!r20aRXekW!Yy!6}I(Iy3$U{QKJ5=Q>U}IJcak zzqr%p4DL8MPDk?3q%_?PH>L>U@5@a2@6?KNMnxnCEeRq3_pb|M$0U-+#y`tVn^|`PE5WXtw&-l<(=VGKY^3tc*_X~K2_7T#nrVy!eJGdjKl0&K`-c7Dw`V)Zkg93Ve4Z?UER&N7`?><2EdGCo z<(~={oW5&cvl#pK*G)NR8vLDew?=G=5Uk1O!N2#RTs7l+`r&vfiL3tPPyXC?D`^om zJ~w>J$ZMlQ=)CcCQ}6iy3^wV6qKgpStiC%~e{r(*K}z+y?-6`89zIj?_1|ZY&AEf$ z`*D^4Ow!AXIA}Jqx(P(Zwyb~S zhql=e#udt@BN=Va)lBx8gK(-_I3*p2Gky|bbfT5)M|TBmwTWd36;7@L;XuSPbez~}RurJ8Ok7ff$+vu8+V%Q#X!C3!5oE)w|hGMbU z?p+Ld& z0W`Fd_>nxn_)vS5F5(|aho*DaGtuQ_r}ieiW=VYu@P^!`70!-?n^LNXa^ZA=fABcI zJYP#1HiDwY=g&3!qaOE03z4j4w}Qc4oR1b(mg)kkHfq`q!!s7|p(#E|@%)o(&`i2@ zmiwx#)xA+gs-MatSq-e4E;Y_T?dFu*4Ba+rp!mX8jzOFgx+4-x#L+L-mT{XRIve*D z+aDCr_(pD1F6<_H>6s{;hQn#E60Hi?mFNEEZ}+GLCv3}JwnI@&Z3%{K0D;1tIDamV zN4G`fiR~3^y+ZU@m5TT6c0@Yj@@#o-K#n0i>geKh%jj6PS2k$~tdy|W&M)$k_9scx zeCcOXTfUT=Ahfif6i>eE{t!qiE|lzymfxfS4iZ}NCiV!UE|{n9(UsHb%AI_?=q2rqp^biZG2Dy-YAeS5w?f}~tz$w0mk z-MIZq-?6PQZi#23$ag<~`zIdhFVyqZUMtsO9g7b(MGcj^${%sbtopd4rUb!!Sf|9o z@Sa`u0-+hBvJtRhT<7_jn6H_XUw$ZfaNjjQ>Rz^vk?y933ha)d``m}Fs(TT2mlvnm zI$YKqT|s;zhm%gN!pq6zh8~MCh2^hPgF|#Hyf$mHdG-hGF$nO}(PdVWJ+;mI1F-du z5?cIO5#Br(D*ey;okopA+WfIt#HF{;tUq20g`VxrCa~kw*UBH`FqO?9j9kabZB;5M zQq=~jz2|9WJ|;{Rc`vdXg9izp_vjCGB&M+~mZBxFzAYO`KgF*atr7HdA;oQaHL;MD zPJnC_2KGUW%02Uiy0wd>{mw!oYP6^MNT{9sM5|EZZHiTUxV*R>S~4|CM&t|q>Z$km z!bsHqZ{BW`Qw_U5v?AA3#a829CRdvevP9BJpm;LQ$hU@F($Mnzhg$34_z@b1`hgfY zUpg(1>GLy0lj7r&XFo`E!5qz3-*4I^K6dWN(kgI{xi62_pmm=O;C51G5uU;46pdIecNaGskf99sDbm2SiGe+Oa735j zc2U~s)XT4R#?d=})VQ)O-`!z9|0w^*t)z(tu!@eS8UO7nN)$BOYU@GKvDN?>TI%Llh*s2IH zTHUdJb8&Ilq*C>mr*=?i(ix+?!~5XE0^xJu+)Qc+68PJT<7K37_@=5}$?SWg;5b81 zwu=ah7`V^D*r?acZa0@v!XIYA$+yzg8%1>CCLB|Ken%DWXD{F`hA6sTW_0%zZd$mGF@`HUag^ z(e%BBzZy|*%`0u=4|h{l$#;5qQNO6`+bHxN4Nq9)!+OX?o^1(jdjUpi zUAd*2t;W+=?ZY9u2@K~eat8cPgN>QTs!rdgDB#C)b$MKx+}xqMpQVEB z&Kmh0%0+KP(e5Tk>-a30Vd7?ZQH}Ki8 zqRuP*g~U9h-5QE`)+#x4zrTAaoJDy$q{{{@zm#+;@wE1r#B#;TkPx97$V`8fv{PeX z$hJ}qITF6Ayehf+2XXp5eWClzUzk;2Q~fYfS&|>`XEx%;*J87ak67dxJWD$6!=4Qs`d5abg*nZKy6+CDqRmZ5kq{CRb0UkY~ISL## zd23p@Wc+;2bUlHq1ugZM&`0|>t*I?#+spWKrGvbSO!4l(#%~UCXV~XW{DXSD^O$VH zb;jqgO_v`WIxk0xuB3u(U$SfT5hdb%c{&q`67p~IE)*z)-#gWpbJa;4caDIMABCF5 z>SQ6gyf=u%2%<%BRtj^CJn30Qp(6qVo8coH2&G2}ELKHMUjb(sUxV)*oJ@i$54DA0 z8vDDKSr!6E-OJYVf2h!60|5`4dmCZQLCG`dtrx@JASb;azu~gvdmU%zRB|Q zpvt!rBFw{ou%}$>ca)~s(pRu*?N&&Ddt?P9M&Fhk3OvTp2{oCW$1`ZZP?Njb5M^+< z{*G$pLL|v>-7QOghIgAdY6}l+kVnH?aNH|gF-mll8I*dif`!xf&MPIDpEE}*;yhEa z5UYAdLLo)N&$srY?1lGe%8Q%oNJ3|lUg!E57TEl==t^B!+2T&|IjvLAO}u>F6x<)R zfASn*D<2{b7m6n(E_NattbJc@iLK^_FL|Vfh)xGe2TK^~$#6NYQn8=|osHpEjIcVQ z(RhM}`8lJ@6D@BG(kA7tt8aX?jC}SBb<4~<3%y)xi0d5)*&2jcMq~G2cwDxb!pR^O zvcPgOPD|s#G0(xxTL{$BXl;G*O^W4DC$rUDBe5Mbiwp1F-&HQp=^eAHnrb;&D`Jq) zP?T(kyX~7U%WRM-r#Bu{6tziy3VT;!_Wc#gn75ZtW3ef+*n60Hh;zV+#=rq3x>dj9 zG;sELDcYdOb6LI@$&I8X=RHZXueCZ_w~(NT5c!i+XdZP9Q+A$#x2hI-Cc+cBr#^5d zri}vYD*OY$;uvm?L#v9{AGbaqNDVaRR&27-?XH5r$v7eYW0^sxif8D1ym<7!SN6*) z1FyN#qK1uHm+#4HwwCx%5$iBP!Db*0x(3;5_4zb8;< z9)GK6HMPY)IFp(GBXu}-7He+KM`!&Fw?9nAf}rVq!(pCCkKB+pvDRhC*Eed=OviZ~h-yMh?lO z-{rX@L|`tqm8;Q$ zkK7*;$Vt~&yv*`EUW{vfO2nagtcjR8TN0cD=;ia}R^3*k@n+3(#HC=jo=GCE?Ph{jYMUQ71GC(wJy^vq zj^>TCQ(Qk|=e(Y5K*+1E3(h89?6>Nin+Z2C9dcq_G zRfqMRdW9m_%X^Zt0?#4`(&a+1Cl~S|zXutVO6wpf?$#@|hr+wu zc+VIFpZt6!Qno*Hzm3v}_Hvh&6ty<#J|8{@_uBjvK!kfMpyxdi=jc8$SwmxhODe@@ z79S9sF2o(BC>*n8l17LCw?g1sLJ^E^HvBIwFH4`Oxy$4w|Z^kffKYx+%HM=9(_{T z%BuvP=Bw`HwWsvTo$l~p|M$8v7oP!B)sYKifbQ34&k84qRQ!ms{&cf$r`dNpw>4Dc zl&H3LX-dY~{U@)4fER$GAORu>Bwt5uHC_4=3k2VwqYfrzptsQ@3|_IWE$WvMlp^I9 zCudRmxOIH*VLFmuR18Wj<0#^5{-y1a3^RAU$->CK?cI6L@xJhO(D7Fd=+X_n+kdr^ zuO|vK6@t)JGN^j~>(rC~ko58&`|#C$YR~gp59ZuG`m4y@yz-sfr2QB5 zcc2Dku2x8K5c!ujllm8ex{?i|4QF#&(w303a!@X9_(=Eh z-p2**F4G&5+bUbp{P>jn9o=g3tX=$v@n(ynv6tky+jTY2o|#{{H%AdziY0h-1a$winqOw4Eitrpu6w2-^VlY2iVAx z4VF?f27^No*_199DL@Dfs!92V;LS%{rRIL(K$aKDqhC9MV&GyP@762kfNb^=AqOyl z;9s5jbN_mHBEuDUf(2Z7_=1><$MiM6Br*6ikBp4mICS^7TIh)4CVOL&SaA;;`6~Q2 zFWFK5oYZG32s_MwxXlY5i}0B7<98Qs5o1-e87wAo<~XTf*Rd;srMQ7{@q*(>Nwvno5oHa<0ue&Ll62AllPN# z75i^~H~$t}PXKL{uP4m^iE{Y=TG;=K5O2~C#9z@zmxrGsBE${;rdeE5NC3XnO-Ef} zyuuI+DbRgp!T(!;E&z9!QA#c5{uTn6EztS8J=bbNHkc=wvxuvjw?idpuTKk|evncl z7)D~}62uA~HusXrF!fE)=Ucx&071LWJpi{if)XgFnYxG)6J$FzLM>gk?I*O!zkVho z45#8{87A!I>3*zSL}IOj^Nqy!NOVNsNoV3OfYAFz3c?{`N4hL9HTK|&+#L#jiK~B; z!5^7*Nn)wTQc43#9M}9mj#?rGeb0_Y*L(lXQOy5lsE-^Uxf8#e;gYc{gb;{h|BlHD zrLK=0Cw4gBUOnEQ{#%iN$tX$L2AJbZapdDBig}b){Jn$z_}pu7laT^VmHa+2ZzpE zAi1_#(R*(CY;Gyg4s zpqVA&gJNhaOx8_1`0VKwl@jkK>D8pqPv9|L@P_j1#mpK8V*|s z7`(~gfW>YDiT`E0?*h0WaZ%%mb+S1+Lq4WtaR)pJ(#~%=#qA9ah9**M_j&dC!9*+A zAM7S4)85!#O7Z<%l@EYaB5XL&xu4Zim3iPtw+qCVDR#&?3l2E5dSKO zYq&XMYr^&=V2Cu?i(E6|!8Vnp(6mu5U?<#0} z@3ghnWBX{}0Q7bVG8kXTtRdgsMa_JBG5Ce-nYwh#i7AGyv(RDS@Htiy14*?p4&p6B z!F(K6kx|TY!4G1!nanSm`K-jpzFQ`tFS>77jr~}Q=QjE6_-p1&Yzd^$;?Xyu9}>(H z*?eE@o<^Z`tj?*7RK}e{&K;p@!TzM@T0tvF1?)3QF$S_1?sILR5vLG zm=GyxS=K8+Wb>m$_AKJH|B{SM!d9fux{2|Kfm`?`uOE*eplvBxR=1@_EP!YlPeqW> z&0bi|#L23sOX^z(77?jSgkA?+@{@9bwQ>m1+qfrv4yQ1D!pvVLUI&suI*bvO1|2^Y zrGc~Bq`h^s<&DEkE+4iqYW_SPnUAOqK(aZE52xHnA?e#}eQ?LLT!%p)%sFN#wE!rt za~Q;hvu#A%ArWWwYxmX6xY}VikVQ+DOq1*?SFh9NWr{Yp0i}ZykA`QO@AQp$20Nfz zw5JD)aYhl{3a4MsvFl~1S4+E5V4iDil5)83(S1&=%se)H*ZBa`%PL9=$MxJBkjs|O zwm!80YQQx}?m3%$K7LysDY*80TaIM1plX_0{J2x)h1Mx%YNzEOy0Dw8$$Qd42UHn6 zCIuf`RF0X4t|@I;y%KW|5a(&q5hX|O;SAJ@dw8g_Yo_t$x8ZB| zOkS9Op=L~cev>$$hcWXw|3|4pPY*}U!dGr)1uMaXx88F^Mjs!n(%4rU_w@79@yjw? z9wFxsdoF=GPY7u)qku)XLYf9%29nNn z#kq7ef5ZnFN&~*DiThc~{HsUibixtZESEsXX^&yc%3F4yt9~P@ogMQ^HEjbJ=j16l7^qpu6k5YUzN0*A)17gm?XB$Fuu$s z)3aERXjggcOc$<&b=>~?>BaMfv>=xG=egnmH#;Ud%X)Z9)5E`qx-$l(z$oIqfH~S zysc)PU{vZ?q_WbNSnmZY%KJ4`+`zjgg$t{`xiDZ`n4)STJ*$8fPSivXhMT|l*r(;< zb7KDa-QPd)UgCpWINTAsLfdgma6aXQu^f#T!Vj)W%XELcFaM`V;U6Mch?S1CzhuTpgV;-iJOdttCe^e!x& z#F>_W&ud@&U@@c9qe09`3-g4_qDhI}_o6W426_MGFPTHPoF_ObbLVv;AZZO86)Z3lC#WNBX#L{s`;ww zmf>D+-u{%#Cj531&7HN-WU#G|0W#=qQG!dvEJV!B)Y%bD(l;nY;`<9>KXQog6_ z&%M(81Zheghr~KK(>HrtipYxqF^L2}^P0c=GD*WXHBW-VBX0>>;yR&YhdL9@5yy7T~Pn^Mf8GUgK9~Uww z%y9P&+h-=ri|rdbZ#^hhg6tUu>p=njA3zleoMCUFa+G5@EteRpT%^O`#TSY*#75K? zt7GL8*y*Q5vNO|}dtg@%A}Th#{5yW!a_>L;MEv?@V$guJ_8;E_^t(j-sDS&Da~_`u zt*%&#$0gFfOp?f4HvQ7+&I_aRQt0rgB1({1l5da7l2MX7{AF6$X^B>fOl0I)`ays= zmN;!>Ifx@tGE`Wgkqro%Em~jo}r`tT2XISKP|E{(cob-)ItYUC1r9OH> zOVzcVEco|-u&+Ixefe#ZubVl#SJcLRgbbs4`s>s| zn*xh^lcKG)gshF8VG=SKA4W3mK}xKn_^!#bMf%WBvXJhVW)=M7ZGvo zy_@w|UWx@s*9}8Ghd3mEdYFsWLq)xs>CXK@DYHuhPKw7+;U~L z9F?O?0+&E=`a_zigJ+6!pKTZ?bNK+`r0RYq-b-*5X4$h{7uZZkfuz*0la32;-_Xuu+n+OL67v2X`9)kh|ucVHN9pLbns*+Ed* z9VmX+Vz|#4*1UVTkwL%!rq$l#j>k=heXfFzv9n@L9sw-otvguEM<$-x(^zH9TIBL( zn5MHbCt7PH&U3^f)kO3Vq#yT7hK^|f$ln6c7&7HLQGi^2S!aZ*zF+_z4@khwKY$^TU})Rsz57 z*PxvA9T2izd031J@)FoB9Q(tNjmE0N4cje5bKgVguLH%dFpSDQ(Idq^Wbe7PfrX8a zobHVUn=5N7OYpFBKw#)^2rqnj;(fH;RfWlqp)kYb`OFwhmn19~dlqisF>-FJh##A} z1LF1@SI4YR@Ol=y$<*fKUeY}Lp2dY zfYZS}Re<7k+pRwEo(3LSGi;IHIlDfn92rA|j~h?1tO$b#gO!52%l8ok`!58%Va*s+ zZSujb=g31izNNIAljfC7BZLN<@pVq;N^8(-0oU%3y?UI%kzknmDG zGrcoZUL$tC_5M3pbio^E5|Fz3`RP9QB`=%?Z~iXY`I?$oh1}|CnzhAJ>zAxvR5~G6 z9;<}c)ElR1nw|f05$5>&SK+F591~!_Z?(a#)^R37H9dV6zp`#)LmBj*RqbXLsw>-s z+S*Qo-wIaRT~L8QyUBESWl1%ZuEzVKNIpBW_M0E?XUGfmQth5{T*C0W6_C%zIb++t zWLfbkA8(MWh~3--xOy9)%iCEpB9UmGJUSDZ-BT9C^zl~cQm;_(db!N<7(^$<4@x3G z+>;L0Y*&g=Mx5=Im0C?lJ1aGr%{skGKg}O-wlVd=HgP1%HCRQg??f4)JWVkvGi5!G zm*SR^QUsFPtzgH#Kn^rmej{#BYGqVjDAWB&_eG+d?}fapunf|fzoFp;>wXqN>6)&c z*Pp3Prm=nV*W$-M`Zi4&d=G2;hEHzXcI5=60b@WxBM=zZZ6DY~O4C8+y(X11?3)e; zY5rs9UR2z^=jle(eEq0wR<0|(YaE5nn2-7%taL(i>)`&e4}2-=z>E1bz|OcM>tzLB zN7vTreZ(Nj4UeS z_ER;nr!$wn+Hafxshd)H&Cm-Rf;*!fhTs1BX#q8F--8G*yNOMAAqMEIcLAO;df5o9 zS$w&!#2Mu|hj+jGU?E$8IPh2?&*KhyA+{8&XHV6*{ede85)LA|6_Ff6hx$D=D=Zlp z!KUNh!oAmep!EDpyF0PXvGt@699=Qo81`|&F}s|~t><;Xbt(En&pG13q-7(p4IqCK z@R8SmEMTH{3}|=$_8AWHh~8`crcIEJVZ*Xslx}wiTrPaQ2%e>PFs`XQ;1KOhJgnfv zbDMz9Sv4Ny-TCFTd6R&DC zd>W8X2TIY$`YN@8??8r4T62CSGM$$x=MahXj1WB7+5(D}`z52ntwQebASaO0*oC7~uh|$GvT*>Q)Tq*27E&+?B;H;i~Zxu1Oeypop;oNI@S)FA7 zJbp0_*?F{rv=emArfqjfA&_zNe1#z7@Bf*#`6x49tH+Hp1MF13DDEHeSz^W)URx` zy^lOQoi}=FpoUjOg!ETLpJh`z_UZHvh{&3Gu*{z@;WUDU=~&aXQSixmHzf_lWhpv8 zzr`4>cC-6#la6w7%i$U6yyQ0}ma|Qce;`SHw*#%R6es+^syjQIo6cAF{VY%Cl}49z zbJi)9H2`1dJAJKTDsLp8Qn$lTF~Hr+Bf!vA^PqYiHgD*&KNQhNCCoz zr6%%zemN&S;`5rOqHhXFoO9I-qFncPoElDZvA;2nE8jz0?O5Y0u}_C~q7i4Ni9Q1< zXCmAT=r8x|j5vlO0y3se?q^CMpN+d_ZPn|v&$wN+aI9rot)2pY4-tBwy@9UL2q8pY zl9^ImIfn(@!yF0O6i`u}(X7Y-53C-#A~DS;`sE(%G-CeK#-DmzCqn z#8iUS25@JR|K9)NqJ&jmmKD(&Wra45oJCg6QVCp(!$3!6n9JZ&b?f|A1v+ioBzM|J zJwx!2s}kWQ+H?stVY+PgS_*ECrmf8r#LS_L75wGKY1$shuFo!LITgs!O}y2cLhHq? zBJE*R%n{2O5cGu~M3viADsnLa%3 z2$k*}Ej1CQOfO~;m5f>V4E`EC*g01uUXKB-xThav_%0zQ#`Rv-U5MH#Lz zq3%q32c*OM`}EA${)Q2&oe-svU~L)jL8@TH6OSJQ7&r&8f7ogAEkSq*b1&Pm%0%au z(2~woq(YSSsd#SX*29|_$C4NK3}fZxsX*Xly8NJg@cxHQR2nw0i7&2~etsYBAd|-t zhze8beqK9a1XHd$<2K3|uRqpv7B|NvZ`CyN6!HdY?jOC@^=);YViOr=tI3Q`6r6Tv zj!k0$Y3@tJfOqYX*JJ-%BXq8#_X-u&9cn2#vY~kKtZH~(vG?5bo!GEfy^A@ciQN^< zP7>4pCS|Oiou0Lima-cNlpW#}sy=rkF6+K;#o@%Ek4v8qB^EOcp(|ES;wp>it;Vgb z)V5$v(@qbH{)R^)weKaQaAw8lv5s8UTaPqlM6H=n$06jR()jM31HWx+Jn5Wn+}@J@ z$R1Ga)2QfQ1}770<_6O6B~+#T={9HLg}0HEjbEEq+UE?6E`^hqS=R0)go+6595um@ zE6^?@29!xm{XxuL#sv>HSo6B9SQ0jFM8Ez>tZ!}3tGXEZsa&Ndz$JT{$en-E9qov= zZZH@TD`cRZs3`xPyxDt^CwDPENOR1$?AKm`>KuI)owY`SX0G#77ct93HNdW7kylPX z+ITY8Djufo7iqCqHB=!@3O2G5?knr81VIid8+U^>VL7k7x{W2Sk*duIllLr}Tzn0` zg}cmCkOf~WdD(pmEiU=I5QARfb_e@SO@B5n2FjtQEyGh_V&j%)z4?IkTMKYyUw%S( zg`#_bkvrXH_KKYH`xA->j^&8+!EEt6vD$Awb&W)6_sgb54F zAWP(Y*$2oBo=tS?>aMVY@g$Vh^r(_u$E|iQfr>0fKY}+VInAn$uEgz!dQ7-}I{T%( zP*q5P{8tXCy$>@}+acP%LJcL!Vo>mKb}3D5l+w5@GMVZz4_VbrB-By9zpu)?8iEtMzDC7V@@x7ze zlRH}aH;p>rCX_^+gVdejW`bGBq)W^+u&6TiqM8OF`zV+$bO=JX5aCLo+>46Z^}H$?vH)T zll1;?Rsez`?5809rEManTG3tcX?%D#GcdaqE8iqEDKA`})mK*ZGh`)ZzRgMFU zsMhAtkb};OzTdL!W@6*c&-=J!4>T-IC87p?dvIG{gDn2q8XbZ8*N`}wuFjcb=$I!`DkpMmftx3`N&Ucd8C36E9bUmxOMz0W1I)Q zyyw%9m#K)JI;_w5$YXWHN_c1=O^lpjCmF{@6Q@L!;RC1qy#oBr6iqx>W+%nzAJL^`w?51fj94| zS3Hs7f2u$KVRpC5%3a7P+IX!3eI>tLE3wr;q#ba__WeWMNlZy z`5Kl?ycfrvk|g2ehc)JWzsRpZiTe(fJLg~+s|l*Mgboo*ePu3j?7H7E9h*n>M>pLx@kfOAxw4vp)@jf4=UD=DjG}A9Pe>KFu6Rpn3w8-y zJrnfP2Siz~*nL0&_Hp#&A>pW{mKP{#y7lH;iVT0^6n3bd3qGPs7CK!oQ_)8;Tx^Fp z(oz=o3QRnP*L(CJT>35%aZ{X}2av3jybNFnJ+g$@o~-_UA%#MTy2#)5j@1rcW~jMn z-M*$yz3}Xik9*WAJLPxxbjKIJgEB;cjl=_dn6rZ-2Ps$0U`t9Py3OxQ@)!Y|5y8cTCC1KJaP=%^xRbsz0=&AvS%Vjhxrm<;>|JUoUO{lep=e2 zYZYgtB_cZK8FOGJBD)5o$m3v7a;-o&3;;Z_F2Yy3Ap=NL!ExG(yX~GkbD5k|@w($r zpTJm})wXW{SPVimpEK#jzP;ee)x^!IYwt(xeH8;{A!B#fZ4JE}Z& z7}69)a~xPU#;U zPO=a3;>X}4@pakma{k_L^3GXIe;?>yrYot^=o1vcEhZnK+aFnm7k+86OL- zlpZ#MI`91h-RDK_e}oHHt#aDdnmk)s-adj^`@2^WZiITsLT1?WQ03VS7N(W&!GFDd zx#v_kz|A55=s&YjmrsEbC!9e-95iZh&w=ix+^|)zIQ@6>P%WnwG&yKcVVZ!w0%nYY z9TKa+_BG9Veh$Z-dIRxt4)h=r12?vgnbKN`fi1&?j`>C-qFK0R#L(*l=x?jy$#U2W zF|n1k^WxC&7QP`w-{0Xlz<|;lUX_zLQ3LMjr)SACjZEN3Iyr?orq1cl(f2jztCs+D zFbzZz_w)saeC1>zZqEE+WhMt8cRH>V{M9*CXEw2$-bZsGF_$Mz;3j#^Uqj8mKtE;B zY(FqE8%0(0tpNjFmcHoKw1Co$^W(Fv&9i$x^2@SjRUWd_Oaq-Fa2*rUezlpEG&OP~u)@N+<(Jzl5%34O#z-LGe6@L|`+T z9-y~cZ%1@VC;z?;7>k7AbQIb0<(@PUvg4v-)q>ChvC(X+T|7jUWp4Hl?w#qDN|SE_-pLX zR$N0Y#nA048||Lvt=#P@q`~lg9hMPtz2;pB92xOZ9-z&eea8EK6PUcBMAsRV%tTyp z`KG+9ME1R2!A$82tS4|67y}*m22it{&XP^5;=Zrwo6$zYhX8Deyv-)Tfqvk6n(&k;mvUA z&9+duv|dI*Rd@;m=Yc1{0C`kHe{5%-!228i(Y7`N``F9dJklrF`{Z_}Nup7U$P@7- zd!6I`K9#rwsf(&(pU<1af}J3w(9hADfg&o&tEgGS*^DgBaDG$5@Hvq!__Otpp~J`adycQ^z(iIG*r}g>9-GXQ3XT2u)ci?*i)#V*dE}y zuF+h`yYsgW04ZiX=DOu>jX*)G%kr2H7i>ZKU0|(-|M}bd{I@%qkK_GUqw_ynF)9o| zpqKvJ5M8we-sV*OCoey%X6H-i6lkYx0aB9=6)$Ybr=7|o=pRb`C!jZ+*MQR6{Mz79P4X&)!5cTTR?rUY>t!D?gryr7RTaHX3VFLEu zNI*qmx3Fi<4+3kuJDnuS`lpA2`}z? zl>ZAQvsU@@3Q-W$!fyU_^wn_oO%TpTM;i`)G>~i<0@;Cv@##EQz8jAg8w1}7Tdsb{roAUMfQmr zP_D@*F=gOc#YS)+tN{h$4yalBeSoCE9bGjJWi8OC=}wmf3~BQfTcB6sI@D;GRU=-y z`Il(zn*qZ~VOYv5-wCgGQ>I2dkx*gS80_-gu#{SFIP!RMS)9^FD$kAxy(25KP_($- zwC)%%om@q$U=Crs{;2o)h$yId5u;s>CmkfHt%0h9NZf&^vCwU}u%}PM1aKSgB`O zLIr@#@gNyEvLH%jNc?n7XC`fp9rL%1PC~;Zv5;I{)E)FR%{K&zSyr5xO%eJh3OmDt z=u#3IfF7r{Tq8UWb+*$1He_^`1a-hh^o80YLG$gE5sw%p9OQlIMTY&iQ{ES?gw(18!X1HOaFn-XrzP}e1Pqh7lm1*UrjXquLE zq_92JWWNSR@^m*TxT0Rf8*dmQX=!UsL0ZFK^19Xi|4NxsO zL*&+=$?TM?b|ozW^fQ*FV}H{l|CL4)q9VZhWt)J;7DrmYW4hIyKlw%NjxwKpiO{vY zPPayIAA`2iZlxoo#LU(H&pv%WFT>{R78asaHb;RDA<9|5-BQSR<@B4?7;?zj+<#s` z{A{}wbnP|15l^8ijp*w!(>hrg3Ez0_H5$CWGfKFW;Ohk>dbf1|OfegRl`bHBw^r&0 z+V|(RO)g!`AB%|avSDof40R59t@eOU-h|s>BS<)A}hR*s6%R?O=-IeCch>Y{3h=gwf zDG7fH=lx9r=VMJG&c77X%Pf=bo(ebl$b7E!kewozr`$Bq7cE=U-w>Nilsj?0%HUX= z=4>k76M0;ESrbV?H}Oz};0WQk8gD`c^`+O--+!FV`!;N?qjtEiQD#JIIC9_A2UEjT zK?H2%#C=g|cQc~C+aYk7cry0#b%UVxVghTahXE$Fz(2(nu~wh@>+5X=c_SdG7q6Fg zx1(vYq!Jw{=I@pc9fqfxMyTs5sO1+pM3r;OOvsmIfu+7PS$eK>UcoPv$Riz!pCV&>2k z!MiOne-vSLE74Z9HnD(X^#*Fxd3v%n8~8@G6+Wf;$aFGh&aG$n(Y&1ljM0{KqMy7R zll{vHw7z}H{PYc<+2|>8WsFJ4KC=(ocYVL}eUoc;1rg+3wFm~Fs%(QC%)1Wy9Czwv z2Yh8OYNINPh6PyGTlb-mUV$T`f2VoE5la19jr4=#)ILE7)AdIP_u4BX|i)wj=q@#_$-+dwrdsg&6W7P zGi(}_+zrf2_C0%l+hI%2rFqdyU=xG}h$#z|1?Y3&YdsD$LHtDEL@hIZflD*1GD+rY zsT3vAZr#3;nI)6U_!?wD2g~DzD0IWv=l51u3z_lc9X3B@NHM1fF&cf0R*`#uEqJ}m zz=|Quq|OjO178L7zdZZ`pbc=x$<6wX$h{3W`JosAoIfgne5CMDKAZlq4Jvkg zu~+w97>CL6MSwxXuLUH(0sifToy1|#G)xf~3b-CeEZWSGIb&kfR)k{c7auuxIk*w} zMg^3qIa@%+us?AcHB#6M+#^y~6dsc=D0%l`N6rp0Ie)wi$~Q`2o|Lqzg{9w8qY?yrHC(C)O6vgrAS=Z zCdTlL^|sErnNOyxDb66Ns=D;*GGr8hnvaDxK}DPx%IHm`_aEwb1KFw-k5sIm|I7DT zDdogk%SZOEVk>n6vNUZ;Ui7QabKM2#*b=hFsQ7t%Wq-<~D&(^C`k_f;zbeIchiip1 zx4O2H2>uFb&Q-P%oq-G_+ z-c^n}UV8ynj88g)>gI==N^*?PB)?t1!Z%;>2mZX*>|k^uQ8BtB&E_5Z!0m6ki-X<~ zI3N2S=g@Wi;aX#_V8%=J4GIL=N>wP4CI)@29|e+PZQ`9w7D>}3p$kIEqh!?CQ2xLg z3kJhWAtjFDy+x>om4BUakvVqw4E~)>M4Zj?kK%3X5(8SVL5ebEP$>3XoQT|u+m9Jn z(<6}lriu>nRe3wdVNIiArCjl7MVItk@bfKop0s^2Iq6)R3tV%BIPER(s~^y1<#yp+ zD6U@SrZ7*uhl-u${$+)*~@?V#a$)FOaiNSCTF zNbZEex<;kIGht*&3`}-(gzrJdo%b2J)Tn<*$@p?p7m~ladD8yA(%;b*nMk5wY02UY z0SKk*2}z-xwU)IOybo(KD(AtHlYq7Zn;!Rf-wP>wqmGoRwQs<&sXA-%Wxe#S8c|7k=!wb`l67FpZ zOlR#XMO?!tBy^_{2fnjI;|iy*UyTYW&p3<5JyPTf{y`2wuC(PCg=k^a>O$HbSh!;t z8P34%h;ivkwxlfQuRnpkgAoy6kuo-8%aA!IgCcjy793HI?L2X^f46SRix}#wNVD;C zqZW1u&A>*#;ID4aG6_y>hyU3))`+C?PnE7@D$ffDkst(>ncyrQ7P5zJS=2c#PK9knw2?p}R(uFRE_AMBC2KYOLK_hIP& zXz#4UqVC>x57J615`&baN~bR{Afhx5B`+X|Gz?M-5)Lh(5)w)b-JmGlDUC3IFcONS zGzv(EaMt48XaDy**ZJe@eeJWa{T~iq!?$M5v+n1bjH&=!y79>OWM5S5{t4|vWbZgNCjo(G>D+92`tS7q6A5XtSc$Si{%niMjEYD~cy&yRXf*dPVAf4=C`c#)UwA}Il zf6jDA`gWnn~mxlQT+>5di!^&u0%o5X0k3-=)`7eF!^I=Ez zFDr{wpD>FrrzV)~az9O7&m6{xMD-P+n~Hc2le~+rO?_3JY8CCOd5!E`HicV>g=4V3 zNqu+M8!RVvw{fd;E*c;Z6MDTmhzU9`r55u$UyGCI&eXlFqaZ-b!ISC*p*R(@f-ib~ zXIxQ@!4to>8v60lwwJ#mcge_`vzS}WryV5d@O++;bD$&%GeumW{M=)1)_~EE$!_Cy z0r)J%0VNb#j`5@TJwRpXfiDq;l65Stw}4ET1lNCrwDo_N0R9imasG?A-~T^Zv;UKQ zGXjdXtNBNh^sKC`<`7Tu?`p|v_->!<+B1l3s0SG*NcN)A5UkLLVTP-dJD0wB1D91W z<9$y~-{Uquc{*tA+w=1i2N}Wj0VSGtcj!B?kkQ|qPjU`{L7{pmc!?iA3ZjxCKjmJ9 zA4!~AhmIkN2;{Z-Bj3#dU4{}04%OgK&dN}+NC`j;)ATI+i6@hsC;H(r@Yn!r&gjE z4-h_Br@@BpDHBXshJwb3D6~A9gSD?PyujHP+i|vpzNBFH^8MY5|6Ykr9i(#uBhSkBbGJqOAOk_w?yxlbhuP)ql z^r$`$#C5YjtT+e)f2wQ10x8&fc?3fm25@sCA%_8aWvBg)7yMeNWmmOFs7kOv{S}02 zvS{;}kNv=fiV&avLq#|RJ!vNjGtap!Xbpb=9h|&ruU*)Jm%{;M(fv){}e zL9Oaknf7PZ_L}8Oy7Hr69!=+}#vf@|_v#;|PX2=XE?(S0BZxS@aaJgWdmK%|&U+r4 zH6WqZ3Z5v#eH-I{2d|}Z^Ykm6VD^?!eh6rxY;U1)x}F>hCF@>&;Ax$3J&kMmZYE7W z0}q&RWar}NtX9~p79S41^hmXyZCJJmrb6zULGai0qGxMT6P~khOKZ?U4;s@e7Eu*o z@%JF1qR);B;LGZhEHs#AO#B0tyN!vBrjx@abC~xEz=PBdYtVV${)(uR8hH?_&2^CZ z`Y&#wLu-Dzr*UOeGw-)@(h#@asoh8bCvrztN`{d!1#yB_?E68 zgUv`J9Ebu>)bGVlCt9r}v0q7@$i>g+JRf%fkJGONBS_R~F}UY=QDXsOSJpx3DHuXj zCN43UxP1InglN_BN4(Up?Vt)vLLF$z(7NcL;{q?|PUm(BKN~Mx-RM*!Sa7y>h&=?F(+#fCp!`w2MhwH__DhCdCXiGdR1!PJeH* zcI$Qri*p--!>JfFo+d30z}a9*^j|y9&-Z^+Ti00PBeazSWrc|e^-2Zscy_Q{`?v&j zKsycKO41edZF2BwGLb<}9LJ@{nb6 zPg%}v=*D}Y*}6@bDotI%KcszFa!G8@WVXftgg`%;14;h9CK4Ga_Q9Dx74thbExc*L z_@mT!msToQmMaom=~;10*Ua|SNA0pAX57LAD-DwszNvHGJ4+sx?ZDWRArg6bQF3rx zmI>wUqLsCS{kirbJ+gfMK!fno681X{1OSwm>sA$4B==Q@fk4g>t z8zVpL4xdp&Oa87J=j&SAks?5Uv-Rh1kOgw!KTc4{CbhXU9_0%bm`>1qmYWo39oi+< z;wG1|b2?=LCK;nYkf8Z?K)ZN7RN*K?%m&>N=&Hi%u21=ZUri3!(<~_XXUkgQZjr9yNKGa+De5vyB7F>8Uv60Y z1cd-A(r1bdfK@1av z;e!BAt{nO}Yms#Y>7Gp8Q_ZGCB7TZ&oS@8pn37nMm;?5-dkg)oY2_rri4`~T|AEi0 zr5;`Cy)IJK82Oe>DQLgRa}ZJ{q!~%@79UW{+RT~?H8vsbTT&JqyPfz*{sM-s3xAV} zh6J^5>y$q>j~HBh@^>rd<%cGdv`s||q}?YCLPL4lxzyKzrRbj5*`@Y91kbT_srzG~ zZGFuWZ7GwBlDxK^SwP%R@VU+ZYp}k?%|mymiS0}Z!c!06@t^G2J1-N1m2+aW(3!sA z!Ef6aak2bib0>l(CxG$@MSEi?Qm%t;;IrnlsnE~>iskB(LAM;{1V%|sIq`O?#O4U> zRi|O%7-G9^J1hBu?z6akyDXG349T1KkGD$jRHZhf83*sGwe-WtW^dfav4BU&N$KNH${G=Z+4jeJb^4+Y(t;A&gHQuqT*xKnf2{(#ri_ zrB-C^ciJIdYDPv*p<=$?zDIgPZWSdS=$#}j$~v@Jr#yfOk5LO`4TlR#9HpEtep^tP{}JkgcRx)1o4i_Bq4vls-;ufAal1QCCE!e%#k0_#Gyi{^O%< zTq}`NM7|_DdMKYF3wLnxXYwQ%a%ZIqW~C(rxw~TZSx4x+4YCHFtx!rXG}IWlODlYk z23os`0LJ`*Odz|=b%Or(b&LhVlR6sV;^MSff41Kb`rgAQ{eb&B0_X2_pYO{J9fFt? zvVPu+7XvpaIX^OvxCNGO9eTT(WrWDo38W@1zwlmg@8*ebTO((yQTeRRHRFBR4Vw>prLp`R{yaVlxP zk|Mrhq}ji=e0zQ$NP6KXd29i8mCd+l79OqH14IKEE7&e?*tAzBgP{M$V^pfMH!yO{ zQnV?RW>X=_HwsbCVn{Emz{TiAydEloPoP0+!^9w~pV&>B-JAb%l;tHHp?z7Jx9tq+ zL=uM%+5?~JA_!a|k1agDfNzd9H(Vj&^Y^2!^38CI9hn ze`kaCtg*>i^XiNJ>VOW_i&7GKokE7&EUnNsneAR5>fsAEIm(H8r-RQQ$`-0COx?j6 ztkv5oHhU09)4xms+5PVfTlyM$ANIGll=WN(U(J6mun{6ji8&zkDuYHmhL8a-%KY1T z9BEAtPS?(NhT!QjS--OViHi%Rc3CUOvrFRJ(Tk-arPA&68fN4#f3_#p%-SnAi$6w) zA09t%Y@@=4nk+E|JP0?wDt02*W-J_71#{aQRpWbCjO=#mBJ47iyM-FoHxy`&;I5a- zws1L-Ca1$T*;ToaE>>T`Db)nEXpsnHH>7P+vE6DUn|(Q_VGrMryYnp2IEV z7v%2NY#}ALB;0c!@S9c@jCJ(|9V%U&;xtTWL5IMuV~K5r@-G^rLdKPNQv;6*(Jy$} zqSx}{G>eO&4qlA|!bJwy(w}(WXtn}_$bbn2o^4j|_j9#sdgE@#pX)@meD}|FY$Auo zdK}#ynF&f}uZ#&Vhx=0^c_Lqj=PVc{L@u$|f5YLP1sJo}+UAf+gh-$=ot-MjRc{n< z@ucCUjzFaxF&l%QChRZLo>7ezR~Id-Hqr}fm($&pVPg||TX8w-h9G%EhpS#z_ZeoI zITX!}F@M71i9h)z~ z6>P;|rOu>er|z#O6RuHY*02n5zTu8Fz!iRp`ARY(fVQaa&^e4wbzLp+p6{%9!6xd( zjCRicdMwcQ_&##LRM^FY%X1=BS0CHHEw#9EP2wq+Y0Z6`XzHmgZx)C%Z0dI?1Ux5ro|ett_IW)h zI-nWQODc^F5jqOn3KvAq}(t!#WqI(kVsD%CPi6TgSafp(aI+ zZl$sUdn29r(ZatGC>l(mhB4_1%3oPeUQ7e88eNG|DU%aZdq}2)+?-B96|R5;+SoP{ z=X^s=G?7PbXa>>g9`4cMHX`t5MOQuu=N_^tL_)LO_bTu;rpUQBY_svcW|APk;(?D& zgc<{hrkwDt*hzfh2gH1$@H2~snjOi5OP1pFKgrG(jLxSHKe!uPsTV_<2`YS16? z6fi83Z0efjmZAl}y&&}SVm4t3@zNgWPdk?i-?6^T9D_|_abSZgyPN_C|Y?~h@Zn=Assx3@BsZJ1t@%U|H7p&e z`~6Yu0japym)G?=L7z=Mvfg(P9mySiig>;=Id*^AZbunMBmE_aT86)paZOlN3HzYf zS8h*3ygcAZP=?J*n-D8s^4hnO&arrf&)1kF+ix%K%|U=Q$u)fQeGo(1Nc^PVb94O$ z$4$lCXRj}(u#Zrm&9$S}HL?+y>ZeHvG=kz~Bhep38Sq5<&Vxm;Qp?S`{t1{wuxYFPHZ@BB3qrA66PZ4-?WZ zzV^@6sb2_9;^%pS?{l%t9%GSI`2L2x5|NWO?qdHaPK8EcyqpX%7*A&7MMkH!cFGD8 zBUmO349ANSYQ5#(K>tWgGq`%zpL`hZ@%A*Ma~z=8O8nm_P@j7V@*QOrAuBLj?mv$V z_1{A(`hRLz`>(3%{cnhu^lcRtl>}fA^90t5Q{*hOtYri6GEW230~KVRt?)t;*C=po zwLGWeY5@*3ws|0pf#&K8Akk0*(}S%^m0}R--Hshi&^Q8sH*!c9N)WSF*DMB@ppKL) z@C}&WkV4ep{{F`xvQX&#p=6h@|NS%k^ifS}raO`Y%9iM&k;Mxhi@<;Ie-+WTylY1# zuY3gNbGr3ntDG2t4Nhkhq6bAl9Bo%d9l$4IK81W`|2_Dlp!;4`7+9e_=R<8gAz}8E zHpUxO*9sGF=Uegn`#=YvX0%YrOpl8275SX z-wUS`6@Vkeprf(_L>pStj<@ovkua}p{m{V#0B2qQ0#O@FaL@&J!QU-lv8o0Ao~91U ztF2e^lF$DFNoxpoG|06RtYwAwrxo^ffgsobZiE9Enc?a~?g_|thRiH2P+$1abbL_V zIJSXnX#^GpmKLB(jN^B8dNJN-khUje3%>5c zoE77_E6Bi_^>!Nc&LWtPNEi$`F1a)lPT!k6Fc<~ke+aZ~0WrjjkiTy@q=;)fTx((n zu)*_?AvTJ+3c=v4Lssr?Zf%G+5?Y7^vL@WH+q$1Gn}GD6kdr#4feyLSo|(sI=Le5U zzcruOA0MT~#ezJmt!(Mwqu(n@KZbZ%Gz~QLCT=x?P-loRfEJkp;qS_LobhH4N=Y0! z>;r^ESDEAAtUU-(i(97*?M9#whCs%?Z(6nl2pK%)U~PKZQtTMM#|u zWqo3JX%{NY(BWM20#5@PRgl6F46d(qujGh{c~=x?Ne%sw9}oyBp(*yr31rqcsyGs6 zc0oJQ%@ao7QNRy2>L&2Ys}MXNC6!mguoQ81Ab<~OS8-`#4a7DOZA3YIN>&yMvvI(4 zm;CaAsD4AoiZ3mY8t&i;Y;{$|;0f$p10mI>wx5O&wyl2cJ-veMsrse72%6JLLV_Y- z+(|I7a7sX7+toB|FxZ}2W--0EPiDnUP&h3&?QnddMMs78V$kJ5|6U(?pYxTrAZI6N z!l2r@=Ck&6L$*>n%-RR2!{`+|Lk=tP=kJ}C*`=>JE-@A#Z2BD z;I>{g#b&2sqrFxE_v$Z(Kv&e%!3fJRftqemmz7iTN75n5Rs_=9jZ(l)sC~Wd0_quH zc5&F$Cq}v+#ZhiUo`86jRU?HjL>P+q+heWZj2$=~h4Crrv288PF-wgcK%Kqw0>8-m z36x8TqUFw1K^?@El_JuRp@~_p`uHAU09k<2S0})KPf0;Z368Rf&4R{*IVJha!QgFk z#PF*#<=knx0t)w%Aj`g^`La*iaG2W^uTgp7>r{Ig`8k^9?*fl<0yH+nJaV zGe6|<6Y#u}1MJq?tOVYl8^$m90P=wynxx2%^DdC0>EIlf>p0kNIOX~UoG5lEym}DG zt7G;2mHfeCbs>yEiv~?R7pxi=TLsgVHvD{hPN7?!F*V#t401{&mGN8r>hVCfJ_&2$ z+v|REJqk5c563fX{KegvXL}v}<%ZxzC1Zw_?#KF?@q-sYxHIgKJLfOI#1KU6<$VcY zNreMlfd49;2co)abInfz|D>eklCx^aftfX~3O-93W-nL1es7#l0E#k+rOWNmvm8?v zew*WXp#QUXs>Q&y+P*74CZo?1Y|=4fRH(hk0qY?g8_B z`^LKuwdfwA`)UYPcy@}!@>`@T+O4e%->1hYvEds@604vaQ8K109;MUQmo)8nvg>zk zvQi=SamE!^t)9hO{*i>FZ$WJ!FV&hwx(F^*+AmX;iXBOc41%EinFLPuTWNUfDQacQuUn^C!I(o+1Oe=2^k6lnV?hL)Y4GA0~?Ws8~tj(PLXJ~TA} zd(s_7ZqA&2i2oZ3am!nfDHdMwA$`YCTRcDaj`(khmD#-l53>sd(-2PaP4y?L42|F^ zFa^zLT`Gt+!fe>=D0+xxS_#kq!?(S+e2;=%zeIgjjzLJO$4|_%UfN4Zxudv2j98tj zB(v39`)jmurudzbXf^ zdn;J7>}xubE5&G?n@>7c(WzZWCVHGHT_rl)mzWb*x+yL^m_=Tpv~L}4;3m{OxmxdO zMtc}&OkXT0AYCUwpYzvJIcSoFf+Ds-%;xPwEq$H$`gFOLH4+Y7i#ZF8z}%hr%SY?N zUxAm=QB#`=F%n3#XIIs9lcv}-1sQ}#c-DX9>rexv-MD z@7`d=)nnx0NC;gP)fBgZhp!^fdot>xhxyeGo@-5knv~leS_Z%m63zdjVGkk{Gt>MN z#X_()-tD?qrO_V)3egAvsR5+^jNjm8HC<;~g6Mw=RGj?b>NL1rFHIjojQ;Xpzwr=e z>$Uo1AdYYV&Mh$`-aReiAP#t$;y3=s`)3#kh4 zXR5BChc5b=!PqVX+AQ<8!Ih36r2S{Jz|_$28E9ljTk$r|urZqeo$a+$08}nkX$x3& z@Z=EHSZ0C>M}Uq3|M>J@4jEN0L9o2In12K@#A*=^Pc%P+!3FD6AI(9q=M4&8L_FkF zhuPTM6G(uzGN{%CwQYG%Qz~Os)USNctD-k$S?gDb$ME*YK6r65g`LiEv0yLE!%a^ppNj literal 0 HcmV?d00001 diff --git a/docs/data-exchange/connect-api.md b/docs/data-exchange/connect-api.md new file mode 100644 index 0000000..94b5ef9 --- /dev/null +++ b/docs/data-exchange/connect-api.md @@ -0,0 +1,102 @@ +# API Connectivity + +## Overview +The tapio allows integration partners to connect ERP systems, Tool Managers, and Kelch measurement systems with tapio services. +Partners can securely access Tadamo and MaintenanceService (MS) APIs through **AuthorizationKeys** generated from add-ons. + +### Supported Add-ons +- **ERP Add-on (SharpeningUI)** +- **Kelch Add-on (SharpeningUI)** +- **ToolManagerOffice Add-on (Twinio)** + +Each add-on can generate its own **AuthorizationKey**, which serves as the credential for API access. + +## 🔑 Authentication & Authorization + +### AuthorizationKey + +An **AuthorizationKey** is issued via the add-on settings in the tapio portal. +- The key is generated by the customer and shared with the integration partner (e.g., ERP, Kelch, or Tool Manager system). +- The key is **valid until explicitly revoked**. + +### Scope + +Keys are scoped to the customer subscription and application. + +## ⚙️ Add-on Configuration + +- Go to the tapio portal. + +- Navigate to the relevant Add-on (ERP, Kelch, ToolManagerOffice). +![Choose Add-on](./assets/choose-addon.png) + +- Create an AuthorizationKey (one-time copy). +![Create key](./assets/create-key.png) + +- Paste the key into your integration system configuration. + + +## 🔄 Data Flow + +- ERP / Kelch / ToolManager → calls TADAMO or MaintenanceService with AuthorizationKey. + +- Tadamo/MS validate AuthorizationKey with subscriptionId and applicationId. + +- SharpeningUI and Twinio act as the customer-facing add-ons where keys are managed. + +```plantuml +@startuml azure-architecture + +' azure symbols +!define AzurePuml https://raw.githubusercontent.com/plantuml-stdlib/Azure-PlantUML/master/dist +!includeurl AzurePuml/AzureCommon.puml +!includeurl AzurePuml/Databases/AzureSqlDatabase.puml +!includeurl AzurePuml/Networking/AzureCDNProfile.puml +!includeurl AzurePuml/Compute/AzureFunction.puml +!includeurl AzurePuml/Web/AzureWebApp.puml +!includeurl AzurePuml/Security/AzureKeyVault.puml +!includeurl AzurePuml/Integration/AzureServiceBus.puml +!includeurl AzurePuml/DevOps/AzureApplicationInsights.puml +!includeurl AzurePuml/Storage/AzureStorage.puml +!includeurl AzurePuml/Analytics/AzureEventHub.puml +!includeurl AzurePuml/Analytics/AzureDataExplorer.puml +!includeurl AzurePuml/Compute/AzureServiceFabric.puml +!includeurl AzurePuml/Databases/AzureRedisCache.puml +!includeurl AzurePuml/Storage/AzureBlobStorage.puml +!includeurl AzurePuml/Storage/AzureQueueStorage.puml +!includeurl AzurePuml/Compute/AzureFunction.puml +!includeurl AzurePuml/Web/AzureSearch.puml +!includeurl AzurePuml/Integration/AzureServiceBus.puml +!includeurl AzurePuml/Web/AzureAPIManagement.puml + + +left to right direction +' skinparam linetype ortho +skinparam linetype polyline + +skinparam actor { + BorderColor DeepSkyBlue + BackgroundColor #d6eaf8 +} +skinparam component { + BorderColor DeepSkyBlue + BackgroundColor #d6eaf8 +} + +actor ERP +actor Kelch +actor ToolManagerOffice + +AzureAPIManagement(applicationGateway, "Application Gateway", applicationGateway) +AzureWebApp(apiTadamo, "Tadamo", "astdm") +AzureWebApp(apiMaintenanceService, "MaintenanceService", "asms") + +[ERP] -->"AuthorizationKey" [applicationGateway] +[Kelch] -->"AuthorizationKey" [applicationGateway] +[ToolManagerOffice] "AuthorizationKey"--> [applicationGateway] + + +[applicationGateway] --> [apiTadamo] +[applicationGateway] --> [apiMaintenanceService] +@enduml +``` diff --git a/docs/data-exchange/index.md b/docs/data-exchange/index.md new file mode 100644 index 0000000..50d8db9 --- /dev/null +++ b/docs/data-exchange/index.md @@ -0,0 +1,3 @@ +# Data Exchange + +- [How to connect to API](./connect-api.md) From a6fd7bbf1f90f1eb523719c5f66880b3f383aa9c Mon Sep 17 00:00:00 2001 From: Mikhail Ivasenka <46024793+coolmaker2006@users.noreply.github.com> Date: Wed, 24 Sep 2025 15:26:50 +0200 Subject: [PATCH 2/3] docs: update API Connectivity documentation to correct add-on references and enhance authentication section --- docs/data-exchange/connect-api.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/data-exchange/connect-api.md b/docs/data-exchange/connect-api.md index 94b5ef9..6168b54 100644 --- a/docs/data-exchange/connect-api.md +++ b/docs/data-exchange/connect-api.md @@ -1,22 +1,22 @@ # API Connectivity ## Overview -The tapio allows integration partners to connect ERP systems, Tool Managers, and Kelch measurement systems with tapio services. +The tapio allows integration partners to connect ERP systems, Tool Managers, and measurement systems with tapio services. Partners can securely access Tadamo and MaintenanceService (MS) APIs through **AuthorizationKeys** generated from add-ons. ### Supported Add-ons - **ERP Add-on (SharpeningUI)** -- **Kelch Add-on (SharpeningUI)** +- **Measurement Add-on (SharpeningUI)** - **ToolManagerOffice Add-on (Twinio)** Each add-on can generate its own **AuthorizationKey**, which serves as the credential for API access. -## 🔑 Authentication & Authorization +## 🔑 Authentication ### AuthorizationKey An **AuthorizationKey** is issued via the add-on settings in the tapio portal. -- The key is generated by the customer and shared with the integration partner (e.g., ERP, Kelch, or Tool Manager system). +- The key is generated by the customer and shared with the integration partner (e.g., ERP, Measurement, or Tool Manager system). - The key is **valid until explicitly revoked**. ### Scope @@ -27,7 +27,7 @@ Keys are scoped to the customer subscription and application. - Go to the tapio portal. -- Navigate to the relevant Add-on (ERP, Kelch, ToolManagerOffice). +- Navigate to the relevant Add-on (ERP, Measurement, ToolManagerOffice). ![Choose Add-on](./assets/choose-addon.png) - Create an AuthorizationKey (one-time copy). @@ -38,7 +38,7 @@ Keys are scoped to the customer subscription and application. ## 🔄 Data Flow -- ERP / Kelch / ToolManager → calls TADAMO or MaintenanceService with AuthorizationKey. +- ERP / Measurement / ToolManager → calls TADAMO or MaintenanceService with AuthorizationKey. - Tadamo/MS validate AuthorizationKey with subscriptionId and applicationId. @@ -84,7 +84,7 @@ skinparam component { } actor ERP -actor Kelch +actor Measurement actor ToolManagerOffice AzureAPIManagement(applicationGateway, "Application Gateway", applicationGateway) @@ -92,7 +92,7 @@ AzureWebApp(apiTadamo, "Tadamo", "astdm") AzureWebApp(apiMaintenanceService, "MaintenanceService", "asms") [ERP] -->"AuthorizationKey" [applicationGateway] -[Kelch] -->"AuthorizationKey" [applicationGateway] +[Measurement] -->"AuthorizationKey" [applicationGateway] [ToolManagerOffice] "AuthorizationKey"--> [applicationGateway] @@ -100,3 +100,10 @@ AzureWebApp(apiMaintenanceService, "MaintenanceService", "asms") [applicationGateway] --> [apiMaintenanceService] @enduml ``` +## 💻 Code Samples + +For practical implementation examples of how to configure authentication for the TadamoApiClient and MaintenanceServiceApiClient, see the code samples and documentation at: + +**[tapio Auth API Documentation](https://tapioone.github.io/tapio-auth-api/)** + +This resource provides detailed examples and best practices for implementing authentication configuration for both API clients. \ No newline at end of file From 86446113e8d45c284c9b58aa0d0fd5f5ded6c893 Mon Sep 17 00:00:00 2001 From: mickeytp Date: Wed, 24 Sep 2025 15:29:24 +0200 Subject: [PATCH 3/3] docs(connect-api): add code samples section for authentication implementation --- docs/data-exchange/connect-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/data-exchange/connect-api.md b/docs/data-exchange/connect-api.md index 6168b54..7e210bb 100644 --- a/docs/data-exchange/connect-api.md +++ b/docs/data-exchange/connect-api.md @@ -35,7 +35,6 @@ Keys are scoped to the customer subscription and application. - Paste the key into your integration system configuration. - ## 🔄 Data Flow - ERP / Measurement / ToolManager → calls TADAMO or MaintenanceService with AuthorizationKey. @@ -100,6 +99,7 @@ AzureWebApp(apiMaintenanceService, "MaintenanceService", "asms") [applicationGateway] --> [apiMaintenanceService] @enduml ``` + ## 💻 Code Samples For practical implementation examples of how to configure authentication for the TadamoApiClient and MaintenanceServiceApiClient, see the code samples and documentation at: