更新20260326
This commit is contained in:
0
.dotnet-home/.dotnet/10.0.103.toolpath.sentinel
Normal file
0
.dotnet-home/.dotnet/10.0.103.toolpath.sentinel
Normal file
@@ -0,0 +1 @@
|
||||
False
|
||||
@@ -0,0 +1 @@
|
||||
0329a74f90c02a155aa8f8964a334e98cb5d3918ab5927ae0ab94685a48ba627
|
||||
1
.dotnet-home/.dotnet/MachineId.v1.dotnetUserLevelCache
Normal file
1
.dotnet-home/.dotnet/MachineId.v1.dotnetUserLevelCache
Normal file
@@ -0,0 +1 @@
|
||||
0329a74f90c02a155aa8f8964a334e98cb5d3918ab5927ae0ab94685a48ba627
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqxUy07kRhT9Fau2sT31fnjHdDMKQgxoaCVRdvW4hgrucqtchiDEv0d2wwwwyiJSNpZ1dR/nnnPqPqFk94A6dHI4nN5DKhOqUYlriGIqG8waSnZYdkJ0XLWSasUx+xPVKJ7DI+qQ4t4Tb6BhIKHhAYvGsd43IYAhmARMBV962psJdU/IxjbAffTQjtNvkKc4JtSh32MK48My28bWD+Mc2jwOcJamYpNfwGxPr893l1fNhhO8ufx8zJxgWhq0MaAOBWlwz7FpvOxNwz0VjWE9biyDIG3PiMH+WBZTgZzs0E7h7geGMJYExXe0pazFDTXouUbBFrvAdnaC3eNhQbLStF3i9Rpef7sndA8ZdbR+JfTY7pMf4qf95OY4hE/rF9XokMcD5BJhZWRdchhsiWOqXmZshgipoBp9XkquZ+9hmlCHvthhgtfwabqJCb5ku4eHMd99Pc5tv57uUI2u8vgX+HJlyy3qEFHeSu2lp72kRJBeEMcd9JLJnhJChPfG9cYISwFT7RRog4WTmHojnDGoRpfX1dVgSz/m/TvBro8anP0HCa5PNqfJugHCx5V2Nt9AQR0SUjhgvabSSRusYbonFpgJ3jEpQDsVNCjFKLNeeKyJJ4oIa5QQSjJKUI0urL+NCaqzLeoQZtRYxXuDPaaWCGGt7rWR3DLGwWjvRGCGaOuEocoCts5wqYXl2llJFarRZkwlpnmcp+osFbjJq2JvNri8rk6yv40FfJnzosUfcrH+VR7D7Ev1w2oEt7glmC1FcznMpfoGIWbwZaVkl+eXfh9KqKQYL1DmnCGValG3+tVOi8Tcc0cosTiYnhGqlfasx0IRwqhhwmntQu9xTzhRVDCClfTMOKm8wiTQxZewOLtaH5NyRIugRSMJFw23lDdWaN4IiqUwCph2/B3H1eUQ/h+e33j7zfp6YYy0Sq6svVL68ly4RjU6h5xgeEPZRfR5nMa+VC9urd6R+GbONk6HwT7+NO4XTzkTnsH3/M0t+LufzfttTsvRrNZX8BBT8/eq/Hb0d5CrxTk2puU+fK+4mIcSd7cZbIBwMQb42PS5Rnuw05xhv57l9VIkyCuM7Xx031m6iMMQJ/BjChPqqJFGtIpz/YL33xM1My3j/Pn5+fkfAAAA//8DAEvu+ZMFBgAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqyUTW/cNhCG/4rAsyTz+0O31E5Rwwi8iBdp0duQHMVEtNKCopwGxv73grID170V6I0YcIYvn3lnnskMJyQD+XA+f3zCuaykJSXtIU657qjoODtSPSg9UNM7R7k18k/SknSHP8hAjAyBBYedQI2djFR1XoyhixEdoyxSrmStCV9XMjwTSH3EpxSwX9YvmNe0zGQgv6c5Lt/r25D6MC1b7PMy4e28FphDFXPz8eHueH/oriWj1/e/vNxcca0F+hTJQIRmo0HNO+617aS0tPNC2I76EWXkJkSoQiD1aS6YZ5j6NX570xCXMmMJA++56GnHHbm0JEKBKtvDiscf56pkx3RT4+0e3o/DM3nCTAbe/gT6Uu4qTOlq3fyETzidIa+Yr8JyOsEcSUvOeTljLgl3NE+Y/bKmUqmGYMBaxqIFI5WJViguTBQUo6VGRRcdaKlHHpQao7fOyFFGzmTUKKU3pCU7vGmCkpa5edV+PSWcC2nJ/UNzmKCMSz69w//wQvT2PwCtsuttqoQ2BqUQApz2nGI0OmjNfQBqRs+RBaTKSeOYoUw4Tp1Q2lgTgbpAWvIJwmOasbm9IQOhgjswcnQ0UA5MKQA7WqclCCHR2eBVFI5Z8MpxA0jBO6mtAmk9aF4JXC9zSfO2bGtzOxf8mncWZCC/wrTiC4UPOTymgqFsuQL6Q9cvHfISt1CaN3Mw2tOeUVGTtnLeSvMZY8oYClZUx7y91vtXCtec0iplyxnn0hygPDa/wfpIBiKD9IwzoNGNgnFrbBAjVYYxwZ1Q3lofx0BHJpnhSjBqdBDOaxMMZZFXA2H1YrPbnwMPbrSyc8LJTiotOhet6Jw1oraR+pG9Y9zcTzXvf+D8E9eryaQlLbnDPOP0DxyfUsjLuoyleXVb8w7Q522ua6fZnfc9zd1feydulvANc1M7CWmuE/bavEtLTgjrlvG0b63hmRzqeDXHfXkJ03MrRUseCuSynd/CljJ1uVwufwMAAP//AwCxFX/O+gQAAA==
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqyUy27dNhCGX0XgWpJ5Ey/apXaKukZgIzbaIrshObKJ6FAHFOU0MM67F5RP4Lq7AtkRA87w5zf/zAtJcEAykg/H48dnTGUlLSlxD3HKVUdFx9kDVeOgRqp7y9UwMPuFtCTe4HcyEi29Z95iJ1BhJwMdOicm34WAllEWKB9krQmPKxlfCMQ+4HP02C/rH5jXuCQykj9jCsu3+jbE3s/LFvq8zHid1gLJVzFXH+9vHm7vukvJ6OXtL683V1xrgT4GMhKh2KRR8Y47ZTopDe2cEKajbkIZuPYBqhCIfUwFc4K5X8PXNw1hKQmLH3nPRU87bsmpJQEKVNkOVnz4fqxKdkxXNd7u4f04vpBnzGTk7Q+gr+Uu/BwvynKc8RnnI+QV84VfDgdIgbTkmJcj5hJxR7P/dp6hxCU158cu54ipkJbc3jd3M5RpyYd3vO5fEVz/DwLPmF29TQehtEYphACrHKcYtPJKceeB6slxZB7pYKW2TFMmLKdWDEobHYBaT1ryOC8O5t/XnZ/l1JlANVccJVoulbKeojA4DRppAKWcMt4GYTSXJhgBFoBZh9pb5auyT+CfYsLm+oqMhApuQcvJUk85sGEAMJOxSoIQEq3xbgjCMgNusFwDUnBWKjOANA4U16Qll0sqMW3LtjbXqeBj3tmSkfwK84qvVD9k/xQL+rLlCvwvVYXc5SVsvjRv7mC0pz2joiZt5biV5jOGmNEXrOgf8nau958UrjilVcqWM6bS3EF5an6D9YmMRHrpGGdAg50E40YbLyY6aMYEt2JwxrgweToxyTQfBKNaeWGd0l5TFnh1EFYzNrv/Q0AmGbWd1tp30nvdgZC8G+ggndc+KMXfMW5u55r3Ezj/wHU2rTSkJTeYE87/wvEp+rysy1Sas3ubd4A+b6nunWZ38reYur/3Tlwt/ivmpnYSYqojdm7eqSUHhHXLeNjX1vhC7up8NQ/79hK650aKltwXyGU7voUNZcPpdDr9AwAA//8DAKenY437BAAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqxUTU/kRhD9K1ZfY3v7292+sTOsghAL2hklUW79UYYOpj1qtyEIzX+P2sAusMohUi6WVeqqevXeq3pC0dwB6tHJ4XB6DzHPqEY5rCGKqWwwayjZY9kL2WPVasKoZt2fqEbhHB5RjzruHHEaGgYSGu6xaCwbXOM9aIKJx1TwUtNcz6h/Qia0Hu6Dg3aaf4M0hymiHv0eop8eSm8TWjdOi2/TNMJZnLOJroDZnu7O95dXzYYTvLn8/PxyhrkUaINHPWKSDB1I2lArVcO5wo1lTDXYDsA97Zw3BYgJbYgZUjRjO/vbHxj8lCNk19OWshY3VKNjjbzJpsC2Zob946EgWWnalni9htff/gndQ0I9rV8JfS73yY3h091slzD6T+sX1eiQpgOkHGBlZB1yHE0OU6xeemzGADGjGn0uKbvFOZhn1KMvZpzhNXwar0OEL8ncwcOUbr8+922/nu5Rja7S9Be4fGXyDeoR6ZyRyklHB0mJIIMgllsYJJMDJYQI57QdtBaGAqbKdqA0FlZi6rSwWqMaXe6qq9HkYUp37wTbPWtw9h8k2J1sTqOxI/iPI+1NuoaMegTMYsc51WpwxBGuzWAH7pTWcrCactoZ4AS45Npqxp3hWmhNbKcEtUoIVKML425ChOpsi3qEGdWm44PGDlNDhDBGDUpLbhjjoJWzwjNNlLFCl9rYWM2lEoYrayTtUI02U8whLtMyV2cxw3VaFXszweWuOknuJmRweUlFiz9kGfcqTX5xufphNYJb3BLMStKSD0uuvoEPCVxeKdmn5aXehxQqKcYFypISxFwVdatfzVwk5o5bQonBXg+MUNUpxwYsOrJurLBKWT84PBBOOioYwZ10TFvZuQ4TT4svoTi7WpdJGk2FZrgxjLGGE8YaTQbdUA3EM46lgfccV5ej/394fuPtN+OrwhhpO7my9krpy7pwhWp0DinC+Iayi+DSNE9Drl7cWr0j8U2fbZgPo3n8qd0vjnImHIPv7zc34G5/Nu+3JZajWa1b8BBi8/eq/HZyt5Cq4hwTYrkP3zMuljGH/U0C48FfTB4+Fj3W6A7MvCS4W8/yeikipBXGdnl231m8COMYZnBT9DPqldKt6IR+Qftvz7RSLRFYHo/H4z8AAAD//wMAel4/lAIGAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqxUTW/jNhD9KwLPkkJSlEQJ6CF1smiQpjYSb7fojR/DmIhMGhSVbBDkvxeUlbWzvfTQGzHkzLx57w3fkBN7QD26PByun8HFEeUo2jlEMW0KXBWUbHHT102PeVnXlDe4+RvlyN7CK+pRy5QiqoOiggYKpnFdyMqoQmvoCCYa05qlmuJxRP0bErbU8GwVlH78E8JovUM9+mad9i+pt7ClGvyky+AHuHFjFE4lMFfXD7fb9aZYMYJX61+PL0cYU4HSatSjqiGmhYYWVDa8YIzjQlYVL7A0wDRtlRYJiLCldRGCE0M56qcTBu2jg6h6WtKqxAXt0HuOtIgiwZZihO3rISGZabpK8XwOz8f+DT1DQD3NPwg9lrtQg73Yj3Kyg76IIjxCNEHs4cWHJ3gWA8rRIfgDhGhh5mf9kJ0gEVzikjYUY5SjO6F21kF2c5WthzQwrmgnWmY6rDAVpK6F4IZ3DRNVxaDjSta66ggXsu5oKwAL2bGG14JxKRraohzdQnAwnHW8syr40ZuYLZJknzCsvIvWTX4asxsX4TGIeMz7IoYRUI42kxzsuLsHoV+3/n5Kd24a0pyrKQRwMduIuMt+E+MO9YgpJgklAuvOVITylqvK4LolpKJdVUvOpTYKG8JIS+uK4LZRVSebVrWYaKpRjtZTPExx0eabddffz3Bsg93vQZ9AbGcJNoOIxof9jQYXrbFJuTMPzrYbhnm2bKm8Giy4+EmG/0eClXfGPk4/mMTGaFaZmvNGdpJgoKblDLdGYq1MpTpdS2hpi1sOvFMYy5oRLjuFNZCaJUo2wetJxZ+NRHCFcnQ/ubTf2U1i5cW64nvDToRtgo9e+eHE2L8UXfn9wY82JlbMIvvXEe68S7fL3/E5+dLHUwzS/mTzypKu0TXFvFCK6ILxShdd25qiq0FyAwzaWqIcXXn1BCFL5hPWzWJ9+G39kF0GtbMRVJxC6vzXPM5R5y8fq3ZiovzjervyAS4Ph3yJ/vLMy2Tu9UP2YYxPdvg6ptc7P6YhYpjO/PUAg/mAdeayoyeze9A2gIrz1faYuFD0yXlL1mWI1ggVx7Qhv3s1O2Kx3/Lk535n/P/IPjY/02Bxw1KJ8bnO/HHOHvhP/+b7+/v7PwAAAP//AwB7sYkoLAYAAA==
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqxTy27UMBT9leiu49SvOE52MC2iqlArWgFi59g3jNXUHjlOAVXz78jpVFB2SOysK9/j8/ITBPOAMMCbw+HiEUNeoIbstxGnXBEqCGd3VA2tGqhueiZaIfhXqMFf4U8YoJPWMtsjEaiQSEdbMorJEuewZ5Q5yltZMM23BYYnML5x+OgtNnH5hGnxMcAAn31w8Xt52/jGznF1TYozXoYlm2ALmfOL26u76xuyk4zurt8+31xwKQCNdzCAUGzqUHHCR6WJlJqSUQhN6DihdLyzzhQixjc+ZEzBzM3i7n9zcDEHzHbgDRcNJbyHYw3OZFNoj2bBu5+HwmSz6bzM6228HYcneMQEA69fDH2GO7OzP7Px4cEEdzb54Jc91HBI8YApe9ws2VTOs8k+hur0yG72GDLUcH1b3cwmTzE9vPLp9ln65T8o/2Ds3gesLs9hACp4bzo59dRSbljbGqMn3StphJDYazu2TvRMm7HteWeQmrGXSrdG6tEo3kENuxiyD2tcl+oyZPyWNgUwwDszL/jM/U2ye5/R5jUVWV9UIYI/fN5FVwYMarhJ0a02V7+jYLShDaOiYKz5sObqIzqf0GYseu/SeoL/a4UrTmlhtqaEIVc3Ju+r92bZwwDSypFxZqjrJ8G47rQVE207xgTvRTtqPbrJ0olJ1vFWMNopK/pRdbajzHFXeJfkq61sivVKdB0lVAlNpOWOGOUm4iztbOco14y/sry6nsvef7D9xa5TU6SGGq4wBZz/sOODtykuccrVqTLVK4M+rqF88mqrz3cfyI8tmPNo7zFVJVjjQ+nzKcvj8Xj8BQAA//8DAF1B08wrBAAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqxUS2/jNhD+K8KcJYUPvW+79i4apKmDtbstehuRI4eITBoUlW0Q+L8XlJ1mve2hh96E0eCb7zHDV7B4IOjgw/H46ZlsmCCFYJaSYKLKmMwE37GqK6uONTmTVVMy+QekYO7oBTqoC6W4aimTVFFWaFZmvRxUpjW1nHHNRFlETNxP0L0CmlzTs1GUu+kr+ck4Cx38Zqx23+JsNLka3axz70a6tVNAqyKZ9aft3W7zkK0Kzlabj+fOiaYIkBsNHciKDzVVIhN91WRF0bCsl7LJWD9QoUWtNEYiaHJjA3mLYz7pp3cO2gVLQXUiFzJnmWjhlILGgJF2jxPtXo6RyWLTOtbTpbx8dq/wTB46kb4Zeoa7UaO5OUz9bEZ9M7r93tj9ytnB7GePIQ5O4ejdkXwwtBi02SbvnDjLWS4qwRikcI/q0VhKbtfJZoyKmRQt1sXQMsUE8rJEbIamrQqUsqC2UX2pZcsb7MtW1EgM+7aomhKLpsdK1JDCHXlL43cT743ybnJDSC6ZJFccVs4GY2c3T8mtDbS/iOjgM44TxYbZe7IhecDwmPyE0yN0UKii54Ij0+0guWjqRsmBlTXnUrSy7Jum14NiAy94LUrJWV0p2fZVrWrGtdCQwo78wVgcf3b7ffT573nXP9Y04DyGrZv9sjWTfoIUPhqL/uXc8etE+tL1yzmoN6Rl2cZxEZRcsl6Nhmy48v7/8f3BOz2r8GPUnElI4cts4wkmtzHkb8Zmf1bFDzK+401xH5PlBGopK2SNyqhElRWMRIai5VlRtqWs6gaxrSCFtVNP5JOYJRp7BbbZJh+8ejSBVJh9tOD3ZfZmmzyMGAbnD1fnupnDcQ7JF9LGkwoUWez8HKE+m5H+QfZN98Xfojnv1OTeer+S791kQnxa7o01Bxwhhe350BdD/uOdX6G+s/rXfYEOcA4OTqfT6S8AAAD//wMASF6U/hIFAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqyTT2/cNhDFv4owZ1HmP1GkbunaRQ0jWCNepEFvFDmKCcvUgqKcBMZ+94LaNRL3FqAXQRhoZt77zdMrRPuM0MOH4/HmBWNeoIYcthKnXBEqCGcHqvpW9VQ3hlHO2u4fqCHc4Q/ooZPOMWeQCFRIpKctGcToiPdoGGWe8laWmfbrAv0r2NB4fAkOm3n5jGkJc4Qe/g7Rz9/KbhsaN82rb9I84W1cso2uiLm+ebg77O/JTjK62/9x/nLBpQxogocehGJjh4oTPihNpNSUDEJoQocRpeed87YIsaEJMWOKdmoW//RTg59zxOx63nDRUMINnGrwNtsie7ALHn4ci5IN03Wp11t5e+1f4QUT9Lx+A3oed+WmcPW8DGuY/NX5me3yVJwe03zElANuXDar02RzmGN12bSbAsYMNewfqvvJ5nFOz+9gPZz93/6G/UPZfvMd3ZrR7+Y15tIroIaP1j2GiNXtNfRABTe2k6OhjnLL2tZaPWqjpBVCotFuaL0wTNuhNbyzSO1gpNKtlXqwindQw26OOcR1XpfqNmb8mjZv0MOfdlrw7OpDco8ho8trKoa/qCLxPs1+dbn6eRpGG9owWlTu13xcc/UJfUjoMhbrh7Re5v2nhStOaZGypoQxV/c2P1Z/2eURepBODowzS70ZBeO6006MtO0YE9yIdtB68KOjI5Os461gtFNOmEF1rqPMcw81YElCtYXPeqWoc0hGrTyRQ+eJMV1HqOGojDZOSf6OcbWfSt//wPkN1yU0UkMNd5giTr/g+Bhcmpd5zNUlPdU7QJ/WWH76akvStxDJ9+0S17N7wlSVS9oQS74vxzudTqd/AQAA//8DAGz3os87BAAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACqSUTW/cOAyG/4rBs+3owx+yb+kkxQZBkaAZdBd7oyW6EeJIA0lOGwTz3xfyTJF2L4tFL4JAi69ePqT8Bg6fCUa4PByuX8ilCCUku4UEE13FZCX4nnVj241M1QNTrOuHv6EEe0uvMELfaM31QJWkjqrGsLaa5KwrY2jgjBsm2iZr4tcI4xugrQ29WE21j18oROsdjPCndcZ/y3ejrfXiV1MHv9CNiwmdzmaurh9u93f31a7hbHf34XQyUswCtTUwguz43FMnKjF1qmoaxapJSlWxaabGiF4bzEbQ1tYlCg6XOpqndw/GJ0dJj6IWsmaVGOBYgsGE2faEkfavh+xkw3SV4+UW3rbjG7xQgFGUP4Ce5C70Yi+e47TaxVyc1oTxKW7rjDr58AolHII/UEiWNkaXMdLztLzuMT59PJ3J23j9nfSayOz86lKuWEAJG6NlwWS9K84Wd4sll7aPKVgXrf4vKQ4l3D0U9wum2YfnX1rycKJ88z8gf0L9aB0VN1cwApNiwL6ZB6aZQN62iGpWQ9eglA0NSk+tkQNXOLWD6JEYTkPTqRYbNWEneihh512ybvVrLG5coq9hKxdG+IhLpJP3y6AfbSKd1pAZ/NVlI/fBm1Wn4r3NnNWs5kzmpDUd1lR8JmMD6US5wH1Yz3r/ShGdYCxbWUMgl4p7TI/FHxgfYYRGNxMXHJkZZsmF6pWWM2t7zqUYZDspNZlZs5k3vBet5KzvtBymrtc940YYKIHyVBXbIDOakfLbQ0Zt1bB2qLAlVUnF275F3Umd3b8zLu6WLe/3Of/AdZ6jRkEJtxQcLT/h+GR18NHPqTjPSPELoM+ryz+QYpuXb9ZV37dOXHn9RKHInUTr8ls5N+94PB7/AQAA//8DAGR77q+HBAAA
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"Microsoft.NET.Workload.Emscripten.Current": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Emscripten.net6": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Emscripten.net7": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Emscripten.net8": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Emscripten.net9": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Sdk.Android": "36.1.43/10.0.100",
|
||||
"Microsoft.NET.Sdk.iOS": "26.2.10217/10.0.100",
|
||||
"Microsoft.NET.Sdk.MacCatalyst": "26.2.10217/10.0.100",
|
||||
"Microsoft.NET.Sdk.macOS": "26.2.10217/10.0.100",
|
||||
"Microsoft.NET.Sdk.Maui": "10.0.20/10.0.100",
|
||||
"Microsoft.NET.Sdk.tvOS": "26.2.10217/10.0.100",
|
||||
"Microsoft.NET.Workload.Mono.ToolChain.Current": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Mono.ToolChain.net6": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Mono.ToolChain.net7": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Mono.ToolChain.net8": "10.0.105/10.0.100",
|
||||
"Microsoft.NET.Workload.Mono.ToolChain.net9": "10.0.105/10.0.100"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
10.0.100
|
||||
@@ -0,0 +1 @@
|
||||
10.0.105
|
||||
@@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9K8KcRYWkPqnbrr2LBmnqYO1ui974MXKIyKRBUdkGgf/7grLTrLc99CZQw/fevHnDV3DygNDDh+Px0zO6OEEO0S5HnPKG0JIwuqNdT2lfiUKUVccq+hfkYO/wBXpoK62ZFkhKbJBUhtZElYMmxqBglBnK6yphyv0E/StIWxh8thoLP33FMFnvoIc/rDP+W+KWttCjn00R/Ii3borS6SRm/Wl7t9s8kFXF6Grz8Vw54ZQACmugh7qklRBMkbZuNKm4aolANhAjmBAlMllKeb5mXcTg5FhM5uldg/HRYdQ9L3hZUMIFnHIwMsokW8kJdy/HpGSxaZ3O8+V4+exf4RkD9Dx/M/QMd6NHe3OY1GxHczP6/d66/cq7we7nIGMizuEY/BFDtLgYtNlm75oYLWjBG04p5HAv9aN1mN2us82YOjZS06ZpkIiBNqRSqiVdZTQxtK5U1w6qpAJyuMPgcPwB9d7q4Cc/xOzie3bFs/IuWjf7ecpuXcT9RWgPn+U4YSqYQ0AXswcZH7Nf5PQIPVS6UowzSY0YSsa7ttPlQOuWsZKLslZdp8yg6cAq1vK6ZLRtdClU0+qWMsMN5LDDcLBOjr/6/T55+Q/f9Y81DnIe49bPYUnGZJ4gh4/WyfByrvh9QnOp+u08jDekJVDjuDSUXea5Gi26eOVv6qdB0amWEUrr5K0WRPDWkE52XBhUWA0D5PAQvJl1/HlkjJaQw5fZpVXKbtOwvllH/m6qn6T+oA1TrrIlykoyKpHXpOSoSKWZIYqZlpSNNB3DgbU0pW/t9ROGLM1LWncFttlmH4J+tBF1nENq88+Fe7PNHkYZBx8OV2tn8Pm8lgs/N0y0Q9cR1RpNqtoIIkxriNSlZpzSGtvEv5njcY7ZFzQ2oI6Yru7CnPg/2xH/1eGbWRfjq+4ctsm/1X7FoPxkY3pX7q2zBzlCDtvzli8u/s8lv0J9V/WfQYIe5Bw9nE6n03cAAAD//wMAt9L/qg8FAAA=
|
||||
@@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9KwLPokJSHxQN9JA6WTRIUxuJt1v0xo9hTEQWDYpyNgj83xeUlbWzvfQmjDgz7715M++olztAC3S9398eoI8DylF0U4gR1mBSYko2pF0QsqhJISrGK0L+RTly9/CGFohXWlMtAJfQAK4MqbEqrcbGgKCEGsLqKtWUzwNavCPpCgMHp6Hww98QBud7tEDfXG/8a+otXaE7P5oi+A7u+iHKXicwN7dP95vVGi8rSpar308vBxhSgcIZtEB1SSohqMK8bjSumOJYALXYCCpECVSWUp7SXB8h9LIrBvNyxmB87CHqBStYWRDMBDrmyMgoE2wlB9i87ROSSaabFM+n8PS5eEcHCGjB8g9BT+WudOeudoMaXWeuogzPEG2QO3j14QUOskM52ge/hxAdTPqsnrIzJEoKUrCGEYJy9CD11vWQ3d1kqy4RNlKTpmkAC0saXCnFcVsZjQ2pK9Vyq0oiUI7uIfTQXVR9cDr4wduYzbJnn/osfR9dP/pxyO76CM9BxlPeF9kNgHK0HlXnhu0jSPO28Y9j+tePXeKyHEOAPmZrGbfZH3LYogWqdKUoo5IYYUvKWt7q0pKaU1oyUdaqbZWxmlhaUc7qkhLe6FKohmtOqGEG5Wg1xv0YZ/2/uf72+wWOTXC7HZgziM0k87qT0fqwuzPQR2ddms6FzyZrdd3ELZsrLzsHffwkdcLfgGgVp5iQOsmsBRaMG9zKlgkDCiprT7JZ9zz+VItYa6rS1m3bKKEoAWZ5WxFuFTHallqYWgFnnPAWWqEJUXVFWyU0MUDrKtFeB29GHX81BCUlytHj2Kc9ze4S81fX4+9NdRZlHXz02ndnVf4ztaXf7f3gYmJu59F+HeDB9+nvfAM+J1/7eI5B2oNsWj1Sa1LyWmJTyhZXykosaEkxF8q0oA0jdZLoxusXCFkymHT9NJAPT62esuugty6CjmNInf+Z6Jxm+eVjZc5KFH/dbpY+wPV+n8/R3w5tkQy8eso+hv9p5F+H9Hrrh3jBeGb2BJ39wHVhJQOH07VyKcgMFdy2LVbcaFzVRmBhuMFSl5oyQmrg6Sic3Jo9gnEBdJzqbcKYus3CfvLk3Oo6RGeljkPanT+9nnw0G3N+8ivIi6n9zD41v5jc7KG5UtVOdaazOTnnf13N4/F4/AEAAP//AwCP62h1KgYAAA==
|
||||
@@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cNhCG/4owZ1HmhySKurlrBzWMwEa8SIre+DGKCcvUgqScGMb+94LaDez0UvRCECPO8J1nXuoNgn5GGOHycLh+wZAT1JD9FuKU94QKwuieDiOlYycazkQnJP8bavC3+AojyNZaZhUSgT2S1tGOGDFZ4hwqRpmjvGtLTf09wfgG2jcOX7zFZklfMSa/BBjhmw9u+VHu1r6x87K6Ji4z3oSUdbBFzNX1w+3+7p7sWkZ3d3+cTiZMpUDjHYzQCdoqxQyRXW9Jy40kCtlEnGJKCWRaaH1K8yFjDHpuknt61+CWHDDbkTdcNJRwBccanM66yDY64f71UJRsmK5KvN7C23Z8gxeMMPL6F9BTuQs7+4vnZFY/u4vTmnV6Sts6aZuX+Ao1HOJywJg9bowuU8JnM7/udXr6dDpTtun6J9o1o9sta8gwAmsZ1LBBmmed/RKqs8bd7DHk7WOOPiRv/7MWhRruHqr7Wedpic+/DeXhxPnmf2D+rO2jD1jdXMEIbY9qMJIRSruetMYqorh0ZNADVw4NttMENeyWkH1YlzVVNyHj97j1BCN80nPCk77LaB99RpvXWBr9qy/muo+LW22u3ofJaEMbRkVJWvNhzdUXdD6izVia2Mf1XO9fKbzntJDYrTFiyNW9zo/Vnzo9li5saxhnmjo1CcYHOVgx0U4yJrgSnRkG4yZLJ9YyyTvBqOytUKaXVlLmuIMasHin2uxKJ9cOvRqI1oUJDo4MHbOEM5ykoQo7XZi8c6zu5pLntKV93yNREy0sjSRD6yxxtGvNICcjqPqA5GyIdoAaHL6c3t4mgDum5DQMxEhnSds5RZSTjmgrLOOUdijLIG8xBpw/cPrsbVzSMuXqbJDqN3Jf1lD+H9Vmlh8+kJ/biK4W+4SxKiPWPpSncp7q8Xg8/gMAAP//AwBNtW+XhgQAAA==
|
||||
@@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUy27dNhT8FYHbigof4ku7xHZQw3Bs5F60RXd8HNmsZeqCouwGgf89oK6d2Am66EYQDjiHc2aG5ytK9h7QgN4fDmcPkMqCWlTiVmKESUw4pmRP9EDIIHjHqOkV03+jFsUL+IIGpHrvqTeAOUjAfSACOz56HAIYSmggTPS1p71Z0PAV2dgFeIgeunn5A/IS54QG9GdMYX6sd9vY+WleQ5fnCc7TUmzylczp2e5if3WNT3pKTq4+HE8usNQGXQxoQIKT3hjqsBLS4545hQ3QEQdDjeFALbf2CIupQE526pZw94NDmEuC4gfWMd4RzAx6alGwxVbazi6w/3KoTDaZTmu93crb7/AVPUBGA2tfBD22e+en+O5+cWucwrvti1p0yPMBcomwKbINOU22xDk1z3ecTBFSQS36UCG71XtYFjSgfV7hpXqWbmKCj9new+Oc7z4dr+0+ne1Ri67z/A/4cm3LLRoQVd5K7aVno2RU0FFQ1zsYJZcjo5QK740bjRGWAWHaKdCGCCcJ80Y4Y1CLrnbN9WTLOOf7N37tjhac/w8Hdu9PzpJ1E1TMRzst30fa23wDpXaSwgEfNZNO2mAN1yO1wE3wjksB2qmgQSnOuPXCE009VVRYo4RQkjOKWnRp/W1M0JyfogH1Eox2imJChMS98wYbpgLWVjMTwEE/jqhFJ3MqMa3zujTnqcBN3kx5xfJq17zP/jYW8GXNVe+/ZE33dZ7D6kvzI02UdKSjhFfQWg5raT5DiBl82cZ+NvJq9zOESUZIpbLmDKk01cHmd7tUG3vfO8qoJcGMnDKttOcjEYpSzgwXTmsXRk9G2lPFBKdESc+Nk8orQgOr0YMa3mZ7L+PYe+eCx6EnDvecSOyI1ph7LSVoUHaENzo2V1PFBeuJlBKwGUnV0ims+9qGiN5pNTpOzNuMvhpRV1Vop+SmzItsz6nvNWpRgIfjgthIskCNGrXGTgWPexEMNkEFbD33lBEiQNVIXUBOML3S8jL6PC/zWJrnqDZv1H1F7jQuh8l++YXjb571XHgO38+f3IK/+zW5n9dUF2azPYHHmPC/WyROZ38HuamRsjHV3fAdcblOJe5vM9gA4XIO8HPTpxbdg13WDPfbSt62RIK80Thdj7E8T5dxmuICfk5hQQNnRnWc9PKZ7n+e41p2TBH99PT09A0AAP//AwBhk8DZAAYAAA==
|
||||
@@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTS2/UMBD+K9Gc49SPOI5zg20RVYVa0RUgbn5MqNXUWTlOAVX735Gzi6DcuFjWyDPzvfwC0TwhDPDmcLh6xpgXqCGHrcQp7wgVhNE97QdKBykazmTHhPgKNYQb/AkDqNY55jQSgR2S1lNJrBgd8R41o8xTLtsy03xbYHgBExqPz8FhMy+fMC1hjjDA5xD9/L3sNqFx07z6Js0TXsclm+gKmMur+5v97R3ZtYzubt+eXi64lAFN8DCAFLTVmlmiZOdIy60iGtlIvGZaC2RGGHNqCzFjimZqFv/4B4Ofc8TsBt5w0VDCNRxr8CabAtuaBfc/DwXJJtNlqddbebsOL/CMCQZe/xb0NO7CTeHiabFrmPzF6cxmeSxMD2k+YMoBN102qtNkcphjdd60mwLGDDXc3ld3k8njnJ5eiXV/4n/9H/T3ZfvVD3RrRr+b15hhACYZ1PDBuIcQsbq+hAHaDnVvFSOUyo601mmiufKkNz3XHi224wg17OaYQ1zndamuY8ZvaSMAA7wz04In6G+SewgZXV5TYfWlK3m4S7NfXa7+6M9oQxtGRWla82HN1Uf0IaHLWPjt03qe908L7zilBcqaEsZc3Zn8UL03y0Nh4VrLODPU61Ew3qveiZFKxZjgWkjb99aPjo6sZYpLwajqnNC2U05R5rmHGrDYXW0JU16MQnBPcBw1aSmTxPpRkk5b2wnZITL5Ssfqdip93jjadR0SPdKipVWkb70jnsrW9mq0guq/JDm73/ZQg8fn03fZAHDPtBr7nljlHWml10R75YlxwjFOqURVPL7BFHH6S6cPwaV5mcdcnbNTvVLu4xrLl6+2HH0PkfzYLLqc3SOmqlhsQizpPrt6PB6PvwAAAP//AwAozg9nOQQAAA==
|
||||
@@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSTW0/cMBCF/0rk5zj4ljjOG12oihACFdRWffNlwloEe+U4XIT2v1fObgX0rW/WyHN85jvjNxT0I6ABne52508Q8oxqlP1aYoR1mHBMyR3pB0KGljeMql4o/hvVyF/CKxqQFNZSqwBz6AALR1ps+Gixc6AooY6wVhRNfT+j4Q1p3zh48haaOP+ANPsY0IB++uDic3lb+8ZOcXFNihNchDnrYIuZs/Pby7vrG7wRlGyuvxxuzjAXgcY7NKCWE6EUNVi2ncWCGYkV0BE7RZXiQDXX+tDmQ4YU9NTM7uHdg4s5QLYDaxhvCGYK7WvkdNbFttEz3L3uipMV01mp12t5PQ5v6AkSGlj9F+hB7sRO/sTGx0cd3Mnog5+3qEa7FHeQsocVyTrlNOnsY6iOj2wmDyGjGl3fVjeTzmNMj5843R5Gv/iPya+03foA1cUZGpDoQPVGUkxI22FhrMKKSYd73TPlwIAYR1SjTQzZhyUuc3URMtyn1SUa0Fc9zXDwd5rs1meweUnF+q+u5A0vPm+iKwWCanSToltsrt5xU9KQhhJeNJa8W3L1HZxPYDOUme7ScpT/p4V1jBTFzZIShFzd6Lytvul5W4aywlBGNXFq5JT1srd8JK2klDPFW9P3xo2WjFRQyVpOiewsV6aTVhLqmCu+S7rVulCjVYSB7DAxrMdCOIqVVQZTp3nbaRjb3n7CWl1Ppc9pS7quA6xGUtAaiXvhLHakFaaXo+FEfUByTFz0qEYOng6/YzXAHFVy7HtspLNYtE5h5aTD2nJLGSEtyJLrJaQA0wdOV96mOMcxV8d9qT6R+76E8sOrdXeefcAva2Jn0T5Aqkri2oeyzMeQ9/v9/g8AAAD//wMADd66CygEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/cNhD9K8KcRZmkqA/qlngT1HDdNbJuWvTGj9GasJZcUJRTw/B/D6i162zaQ28CNXzvzZs3fAavDggDfDgePz2iTzOUkNx6xClvCa0JZ3e0H5gYmr6ijMpO1n9BCe4an2CAThjDjERSY4tEWNoQXY+GWIuSUWYpb0TGVPsZhmdQrrL46AxWYf6KcXbBwwB/OG/Dt8ytXGWmsNgqhgmv/JyUN1nM5tPu+m57Sy4Fo5fbj6fKGecMUDkLA7T9iIxyRXSLhoi2VkQp5GRsBa9rSnUt2tM15xNGr6Zqtg/vGmxIHpMZeMXrihIu4aUEq5LKsrWa8e7pmJWsNm3yebker5/DMzxihIGXb4ae4C7M5C4Os17cZC+msN87v78MfnT7JaqUiUs4xnDEmByuBm13xbsmRita8ZZTCiXcKHPvPBZXm2I75Y6tMrRtWyRypC0RWnekF9YQSxuh+27UNZVQwjVGj9MPqDfOxDCHMRWvvhdnPJfBJ+eXsMzFlU+4fxU6wGc1zZgLlhjRp+JWpfviFzXfwwDCCM04U9TKsWa873pTj7TpGKu5rBvd99qOho5MsI43NaNda2qp2850lFluoYQ7jAfn1fRr2O+zl//wnf/Y4KiWKe3CEtdkzPYBSvjovIpPp4rfZ7SvVb+dhvGGtAZqmtaGitd5Xk4OfTrzN/fToux1xwilTfbWSCJ5Z0mvei4tahTjCCXcxmAXk34eGaM1lPBl8XmViqs8rG/Ok79b8ZPUH7RhzlWxRhlr2dum50RILYhAw4iSkpOeoVBaGa07DiVsgnnAWOR5KefPwLa74kM09y6hSUvMbf65cm93xe2k0hji4WztLD6e1nLl55bJbux7ojtriGisJNJ2lihTG8YpbbDL6d8u6bik4gtaF9EkzFfv4pL5P7sJ/9Xhm1mvxov+FLY5vNV+xajD7FJ+V26cdwc1QQm705avLv7PJT9DfVf1n0GCAdSSAry8vLx8BwAA//8DAAq+LnwPBQAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSTT2/UMBDFv0o05zj1v8RxbrAtoqpQK7oCxM2xx9Rq6qwcp4Cq/e7I2UUFblyiaOQZv/eb5xeI5glhgDeHw9UzxrxADTlsJU55R6ggnO1pP7B2oF1DudY9b79CDeEGf8IASlrLrEYisEMiHW3JKLwlzqFmlDnKW1lmmm8LDC9gQuPwOVhs5uUTpiXMEQb4HKKbv5e7TWjsNK+uSfOE13HJJtoi5vLq/mZ/e0d2ktHd7dvTyQWXMqAJDgboeo+MckPGDi2RnTDEGOTEd5ILQekoZHdqCzFjimZqFvf4qsHNOWK2A2+4aCjhGo41OJNNkT2aBfc/D0XJhumy1OutvP0OL/CMCQZe/wZ6Gndhp3DxtIxrmNzF6ZvN8licHtJ8wJQDblw2q9Nkcphjdb5pNwWMGWq4va/uJpP9nJ7+gnV/8n/9H/b35farH2jXjG43rzHDAKzVUMMHYx9CxOr6EgaQHep+VIxQ2nZEjlYTzZUjvem5djii9B5q2M0xh7jO61Jdx4zf0mYABnhnpgVP0t8k+xAy2rym4upLV/Jwl2a32ly98me0oQ2jojSt+bDm6iO6kNBmLP72aT3P+6eFd5zSImVNCWOu7kx+qN6b5aG4sHJknBnqtBeM96q3wtNWMSa4Fu3Y96PzlnommeKtYFR1VuixU1ZR5riDGrCsu9oSxhn1KKwhznhFpDGGaCMUMUxSqxnl0hf1rxyr26n0OWNp13VItKeF5ahIL50ljrZy7JUfBS38fyM5b1/2UIPD59NzOQlwTCvf92RUzhLZOk20U44YKyzjlLaoSipvMEWc/uD0Idg0L7PP1Tk71V/kPq6xPPlqy9H3EMmPbUWXs33EVJUVmxBLus9bPR6Px18AAAD//wMAGISxOzkEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSTT2/UMBDFv0rkc5yO/8RxcoMtiKpCrWgFiJtjj1mL1Fk5TgFV+92Rs4vacuNmjTzPb35v/ESieUAykDeHw7tHjHkhNclhK3HgioKgnN2DHlg7gGpA8L4F+EZqEq7xNxlIJ61ltkcqUCGVDlo6Cm+pc9gzYA54K4um+b6Q4YmY0Dh8DBabefmMaQlzJAP5EqKbf5a3TWjsNK+uSfOEV3HJJtpi5vLd3fX9zS3dSQa7m7enmwsuRaAJjgxEaY8MuKGjQkulEoYag5x6JbkQAKOQ6tQWYsYUzdQs7sezBzfniNkOvOGiAcp7cqyJM9kU26NZ8P73oTjZMF2Wer2Vt+PwRB4xkYHXf4Ge5C7sFC7s/PBgorvwIYZlT2pySPMBUw64IdmmnCaTwxyr8yO7KWDMpCY3d9XtZLKf08MrTnen0a/+Y/KPxu5DxOrqkgxEKuz12DEK0CoqR9vTnneOaqN573BE6T2pyW6OOcR1XpfqKmb8njaXZCDvzbTgyd+bZPcho81rKta/qpI3/gp5N7tSAFKT2zS71ebqGTeDBhoGomis+bDm6hO6kNBmLDPdp/Us/08LVxyK4m5NCWOubk3eVx/Msi9DWTkyzgy43gvGdaet8NB2jAnei3bUenTegmeSdbwVDDplRT+qznbAHHfFd0m32hZKgrbetZo6Lzoq285RY1pHtTC6ZQBaiYLoGWt1M5U+ZywopZD2HgrasaNaOksdtHLUnR8F9C+QnBOXmtTE4ePpd2wGuGN957WmY+csla3rae+KCyss4wAtdmUJrzFFnF5w+hhsmpfZ5+q8L9Urcp/WWH54te3OzxDpry2xy9n+wFSVxE2IZZnPIR+Px+MfAAAA//8DAAzhFqUoBAAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUXW/cKhT8KxbPxuHL2Pgtd5OqUVQlalbt1X3j49CgOHgFOG0U7X+v8G7V5qm6Lwgdc4Y5M4PfUNTPgCZ0eThcv0AsGbWohK3ECJOYcMzonowT7SciO8JG0gv1H2pRuIVXNKFBWEutAsxBAhaO9Nhwb7FzoCihjrBeVEz9LaPpDenQOXgJFrolf4GUwxLRhL6G6Jbv9W4dOjsvq+vSMsNNzEVHW8lcXT/c7u/u8U5Qsrv753QyQ64AXXBoQnL0QAnT2EiwWEiusdbAsJeCcU6I4UKe2kIskKKeu+yefnNwS4lQ7MQ6xjuCmULHFjlddKVtdIb966Ey2WS6qvV2K2/b6Q29QEITa38JeoK7sHO4eM5mDbO7OK1F56e8rV7bsqRX1KJDWg6QSoBNo8uc4dnMr3udnz6cztRtvv4Bdi3gdssaC5oQ7XvUok2kedYlLLE5c9zNAWLZPpYUYg72b1jVo7uH5n7WxS/p+Z0nDyeZb/6Hyp+0fQwRmpurii1BjWagmJBeYmGswooNDo96ZMqBAeE9atFuiSXEdVlzcxMLfEvbSGhCH/Sc4cTvMtnHUMCWNdU5/5WV931a3GpL89tLSjrSUcJr01oOa2k+gwsJbIE6xD6tZ7wv71uYZIRUKmtKEEtzr8tj81HnxzqFFYYyqolTnlM2DqPlnvQDpZwp3ptxNM5b4qmgA+s5JYO0XBk52IFQxxxqEdToNFtavTPMS+8xtaCxMKPCynOFSU8FUWYAx+k7HZu7ufY5bYmUErDypGppBjwKZ7EjvTDj4A0n6g9JznkQI2qRg5fT09sIMEfV4McRm8FZLHqnsHKDw9pySxkhPQw14beQIsx/6PQp2LTkxZfmHJDmnXKf11h/H80Wlu8h4h+bRVeLfYLUVIt1iPWlnF09Ho/HnwAAAP//AwBxb007hQQAAA==
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRU207kOBD9lciv2874Fl/yxgCjRYgBTbd2V/vmSxm8BKflOLAI8e+jpIGBGe3DvkRRyad86pzjekLZ3gHq0dF+f3oPuU5og2paS4wwiQnHjO6I7mnXE9kSziQ1/G+0QekcHlGPlPCeegOYgwQsAumw49HjEMBQQgNhnVh62usJ9U/IpjbAffLQjtMfUKY0ZtSjP1MO48Nyt02tH8Y5tGUc4CxP1Wa/kDk53Z7vLq/wsaDk+PLz4eQE09KgTQH1SOoIlDCLnQSPheQWWwsMRykY54Q4LuQBlnKFku3QTuH2B4cw1gzV96xlvCWYGfS8QcFWu9B2doLd435hssp0stQ3a3n97Z/QPRTUs82roId2n/yQPt1Nbk5D+LR+0Qbty7iHUhOsiqxDDoOtaczNyx3HQ4Jc0QZ9XiDb2XuYJtSjXZnhtXqar1OGL8XewcNYbr8erm2/nu7QBl2V8R/w9crWG9QjwxQDQ6SQ1itqFaHGd6oj3kWpjI9RdpZEFwKjhGoliKJaiNBxrgzRZpHtcttcDbbGsdx98Gt7sODsfziwPTo+zdYNsGC+2GF6G2lnyzVU1CPgjnghmNHRU0+FsdFF4bUxMjrDBFMWBAUhhXGGC2+F6YyhTumOOd11aIMurL9JGZqzE9QjIcFopygmpJNYOG+wYSpgbTUzARyIGNEGHY+5pjyP89Sc5QrXZTXlHcvLbXNU/E2q4OtcFr3/kku6r8oYZl+bH2mipCUtJXwBzXU/1+YbhFTA13XsFyMvtz9DmGSELFTmUiDXZnGw+d1Oi43CC0cZtSSYyCnTSnseSaco5czwzmntQvQkUkEV6zglSnpunFReERrYEj1Ywtus7yVICibGDjvNOywCF9gpGrDuBFex00LI+EHH5nJYcdYTKSVgE8mipVNYi+BxIJ1wWkXHifmY0Xcj6kUV2iq5KvMq20vqhUYbFOD+sCBWkixQo6LW2KngseiCwSaogK3nnjJCOlDLOzyHkmF4p+VF8mWcxlibl6g2H9R9R+4kTfvBPv7C8TfPBO88h7fzxzfgb39N7rc5LwuzWZ/AQ8r43zUSJ6O/hdIskbIpL7vhDXExDzXtbgrYAOFiDPBz0+cNugM7zQXu1pW8bokMZaVxMh9ieZYv0jCkCfyYw4R6TThrpTHyhe5/nqOUtKbj8vn5+fk7AAAA//8DALIzaaEABgAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9K8KcRYWUKFHSbdfeRYM0dbB2t0Vv/Bg5RGTSoKhsg8D/fUHZadbbHnoTqOF7b9684Ss4eUDo4cPx+OkZXZwgh2iXo5KWDaEVKdmOtj1r+5oXXUW7htO/IAd7hy/Qg+BaM90hqbBBwg2tiaoGTYzBjlFmaFnzhCn3E/SvIG1h8NlqLPz0FcNkvYMe/rDO+G+JW9pCj342RfAj3ropSqeTmPWn7d1u80BWnNHV5uO5csIpARTWQA8t6tYIKYgUhhKuKkZaKioiqpq3wtR0EOJ8zbqIwcmxmMzTuwbjo8Oo+7Ioq4KSsoNTDkZGmWQrOeHu5ZiULDat03m+HC+f/Ss8Y4C+zN8MPcPd6NHeHCY129HcjH6/t26/8m6w+znImIhzOAZ/xBAtLgZtttm7JkYLWpRNSSnkcC/1o3WY3a6zzZg6NlLTpmmQdANtCFdKkJYbTQytuWrFoCraQQ53GByOP6DeWx385IeYXXzPrnhW3kXrZj9P2a2LuL8I7eGzHCdMBXMI6GL2IONj9oucHqEHrrliJZPUdEPFyla0uhpoLRiryq6qVdsqM2g6MM5EWVeMikZXnWqEFpSZ0kAOOwwH6+T4q9/vk5f/8F3/WOMg5zFu/RyWZEzmCXL4aJ0ML+eK3yc0l6rfzsN4Q1oCNY5LQ9llnqvRootX/qZ+GuxaJRihtE7e6o50pTCklW3ZGVTIhwFyeAjezDr+PDJGK8jhy+zSKmW3aVjfrCN/N/wnqT9ow5SrbImyUrJSHdaENVQTjlqStqM1Qa5orXglha4hh7XXTxiyNC9p3RXYZpt9CPrRRtRxDqnNPxfuzTZ7GGUcfDhcrZ3B5/NaLvylYZ0Y2pYoYTThtelIZ4QhUlealZTWKFL6N3M8zjH7gsYG1BHT1V2YE/9nO+K/Onwz62I8b89hm/xb7VcMyk82pnfl3jp7kCPksD1v+eLi/1zyK9R3Vf8ZJOhBztHD6XQ6fQcAAP//AwA1E43PDwUAAA==
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cOAyG/4qhs+Xo+8O3btLFBkGRoAm6xd4kkW6MeuyBLE+3COa/L+RJ0WZvvRmESb18+JIvZA4HJD15dzy+P+FcVtKSMu4hwYShTFLBn5jrueu16py3ijHzD2nJeIffSU+sSoknj1SiQaqAaRrlkCgAes44MKFVrRm+rKR/IWHsAE9jwm5ZP2Fex2UmPfl7nGH5Vt8OY5emZYMuLxPezmsJc6pibt4/3j3dP9Brxdn1/R+XP1dca4FuBNITh8mBDZYGC4yqKDl1zEpqpVbOgmaDtZe0cS6Y5zB1K3z9qQGWMmNJveiE7BgVnpxbAqGEKjuGFZ++H6uSHdNNjbd7eP/sX8gJM+lF+wPopdxVmsardYsTnnA6hrxivkrL4RBmIC055uWIuYy4ozlhjss6lko1JRuc4xxcsEpbcFILaUEyBMesBg8+GGUGkbQeINaxDAoEV2BQqVgb3eFNUyjjMjev2q+nEedCWnL/2DxMoQxLPrzB/3ghevsbQKts0hPJtDTWopJSBm+iYAjWJGNETIHZIQrkCZn2ynpuGZdeMC+1sc5CYD6RlnwI6Xmcsbm9IT1RBr2LllPGtKEqJk+9sEBdcMIDRlTDQFpyvcxlnLdlW5vbueCXvPdLevJnmFa8dPoup+exYCpbrhA+m2rIh7zAlkrz0wCcdazjTNakrRy30nxEGDOmghXHU95e6/0vRRjBWJWy5YxzaR5CeW7+Cutz7SKpyAUPDPwguXDWJTkwbTmXwksdnYswJDZwxa3QkjNrkvTR2GQZB1FNgtVvzW5xo4zjXCP1XkaqklY0BgZ0QOUDRK9Qqjccm/up5kFIzBiD1A+ssoyWOgWJAtMqOjtEyfwvSF7NohxpCeDpsq+7AAHc28E5Gi0kqjR46sECDUkmLhjTaOta3GGecfqF04cx5WVdhtK8Wq15Q+7jNteb0+y2+zbO9N99RDdL+oq5qSMO41zX63Wq55YcMKxbxsN+svoX8lB3q3naL5fknfeKt+SxhFy244+w6aRg5nw+n/8DAAD//wMA4RImNfcEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUy27dNhCGX0XgWpSHF/GiXWqnqGsENmKjLbrjZWQL0aEOKOqkgXHevaCOg8TddScMNDM/v/lnXklyByQD+XA8fjxhKitpSZn2EAeuKAjK2ROYgZmhl53h2jBh/iYtme7wGxmIliGwYJEKVEhlhJ56MQYaI1oGLALvZa3pnlcyvBI3dRFPU8BuWf/AvE5LIgP5c0px+Vp7u6kL87LFLi8z3qa1uBSqmJuPj3dP9w/0WjK4vv/l8ueKay3QTZEMxGAwUTtNnY5ApReMGtCCatFLo2MPo9aXtCkVzMnN3Rq//NAQl5KwhIF3XHRAuSXnlkRXXJXt3YpP345VyY7ppsbbPbx/Dq/khJkMvP0O9FLuKszTVVmOM55wPrq8Yr4Ky+HgUiQtOebliLlMuKPZXzvPrkxLat6aXc8TpkJacv/YPMyujEs+vOP1eEFw+z8InDB7MhABvVBaoxRCOKs8B4xaBaW4Dw706DmygNBbqS3TwITlYEWvtNHRgQ2kJc/z4t38+7rzsxy8iaC54ijRcqmUDYDC4NhrhOiU8soEG4XRXJpohLPOMetRB6tCNcknF16mhM3tDRmIVGiN14wC9IpKHyy1XEdqnOE2okc5jqQl10sqU9qWbW1uU8HnvPMjA/nVzSteyH3I4WUqGMqWK9S/VG32kJe4hdL8cACDDjoGoiZt5biV5jPGKWMoWPE+5e2t3n9SuOIAVcqWM6bSPLjy0vzm1pf6iiA948xBtKNg3GgTxAi9ZkxwK3pvjI9jgJFJpnkvGGgVhPVKBw0s8uoSrIZrdo+PIGKP4KlnIKgEpal3uqfBaMmU59j3+I5jcz/XvOgCKKWQ2hEqS6+pkTHQCL30Ro9egP0JyZv5pCEtiXi6LOwugEdm9WgM9ToGKvtoqY06UhdEYBygR1334g5zwvknTp+mkJd1GUvzZt3mHbnPW6pHp9lt/HVK9J99RDdL+IK5qSN2U6r79TbVc0sO6NYt42G/WcMreajL1Tztp0uwzlrJWvJYXC7b8XtYdYKDOp/P538BAAD//wMANx7CC/gEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9KwLPokLqi5SBHlIniwZpaiP2dove+DGMicikQVHOBkH++4Kysna2l96EEWfmzXtv5g05sQe0QNeHw+0RXBxQjqKdQiUpW0wqXNIt4QvKF01TVLxuK0L/RTmy9/CKFojVSlHVAa6gBVxr0mBZGYW1ho4SqknZ1KmmeBrQ4g0JW2g4WgWFH/6GMFjv0AJ9s077l9Rb2EL1ftRF8D3cuSEKpxKYm9vN/Xa1xsuakuXq99PLAYZUoLAaLRAHxTUTDAumCa5lRTEnrMKsamrOdEMMY6c06yIEJ/pi0M9nDNpHB1EtyqKsCoLLDr3nSIsoEmwpBti+HhKSiaabFM+n8PS5eENHCGhR5h+Enspdqd5e7Qc52l5fRRGeIJog9vDiwzMcRY9ydAj+ACFamPhZbbIzJEoKUpRtSQjK0YNQO+sgu7vJVn0aWAtF2rYF3BnS4lpKhnmtFdakqSVnRlakQzm6h+Cgv6j6YFXwgzcxm2nPPvVZehetG/04ZHcuwlMQ8ZT3RfQDoBytR9nbYfcIQr9u/eOY/rmxT7MsxxDAxWwt4i77Qww7tEC1qiUtqSC6MxUtOeOqMqRhlFZlVzWSc6mNIobWlJVNRQlrVdXJlilGqC41ytFqjIcxzvx/s+72+wWObbD7PegziO1E87oX0fiwv9PgojU2qXPhs8lafT/Nls2Vl70FFz9RnfC30HHJKCakSTSrDncl05gLXnYaJNTGnGgz9mn8yRYxRteVaThvZScpgdIwXhNmJNHKVKrTjQRWMsI48E4RIpuactkpooE2dRp7HbweVfzVEJRUKEePo0t7mt2lyV+sw9/b+kzKOvjole/PrPxHtaXfH/xgY5rczNJ+HeDBu/R3vgGfk699PMcg7UE2rV5HGDRMamxASVx3aQlN2+CmYaZirJVccpSjG6+eIWTJYMK6SZAPT6022XVQOxtBxTGkzv9M45y0/PKxMmcmir9ut0sf4PpwyOfob0deJAOvNtmH+J8k/zqk1zs/pCFiGC88tIHefMC6cJKG4+lY2RQsNe2Y4RxLphWuG93hTjONhaoULQlpgKWbcDJr9gjaBlBxqrc9dZt5/WTJudV1iNYIFYe0On96Ndlo9uX85FeQF6L9zD41vxButtBcqU4ybE5XczLO/zqa7+/v7z8AAAD//wMAj+SLDikGAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9KwLPokJSlEgZ6CF1smiQpjYSb7fojR/DmIgsGhSVbBDkvy8oO2tne+lNGHFm3rz3Zt7QoHaAFuhyv79+hiGNqETJzyFGWItJjRndELmgctG0FWMtE23zLyqRv4VXtECCG0NNB7iGFjC3pMG6dgZbCx0l1BLW8FxTPY5o8YaUryw8ewNVGP+GOPowoAX65gcbXnJv5SvTh8lWMfRwM4xJDSaDubp+uN2s1njJKVmufj+8HGHMBSpv0QJJMNIKJbASlmCua4olETUWdcOlsA1xQhzS/JAgDqqvRvt0wmBDGiCZBatYXRHMOvReIquSyrC1GmHzus9IZpqucrycw/Pn4g09Q0QLVn4Qeih3YXp/sRv15Ht7kVR8hOSi2sFLiE/wrHpUon0Me4jJw8zP6qE4QaKkIhVrGSGoRHfKbP0Axc1VserzwFYZ0rYt4M6RFnOtBZbcGmxJw7UUTtekQyW6hThAf1b1zpsYxuBScaS9+NRnGYbkhylMY3EzJHiMKh3yvqh+BFSi9aR7P27vQdnXTbif8r9h6vMsyylGGFKxVmlb/KHGLVogbrimjCpiO1dTJoU0tSONoLRmXd1oKbV1hjjKqWBNTYloTd3pVhhBqGUWlWg1pf2Ujvx/88P19zMcm+h3O7AnEJuZ5nWvkgtxd2NhSN75rM6Zz2Zr9f08W3GsvOw9DOkT1Rl/C53UgmJCmkyz6XDHhMVSSdZZ0MCdO9Dm/OP0ky3inOW1a6RsdacpAeaE5EQ4Taxxtelso0EwQYQE2RlCdMOp1J0hFmjD89jrGOxk0q+GoKRGJbqfhrynxU2e/MUP+HvLT6SsY0jBhP7Eyn9UW4bdPow+5cndUdqvI9yFIf893oDPyZchnWKQ96CYV4+YTjnFOeZSMMzb2mHNOom1bKRtOgaKNahEV8E8QSyywZQfZkE+PLV6KC6j2foEJk0xd/5nHueg5ZePlTkxUf11vVmGCJf7fXmM/vYsq2zg1UPxIf4nyb+O+fU2jHmIFKczDz1A7z5gnTnJwvPhWPkcZJZ2wkmJtbAG88Z2uLPCYmVqQxkhDYh8Ew5mLe7B+ggmzfU2h25HXj9Z8tjqMibvlEljXp0/g5ltdPTl8cmvIM9E+5l9aH4m3NFCx0pcznXmqzkb538dzff39/cfAAAA//8DAKMPt6spBgAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTy27UMBT9lcjrOPUrsZMdTEFUFWpFK0DsHN8bxiK1R45TQNX8O3JmUFt27Kwr3+Pz8hMJ9gHJQN4cDu8eMeSF1CT7bSSY6CiTVPB7ZgZuhtY0PedMaPmN1MRf428yEK2c465HKrFDqoC1dJSTowDYc8aBiVYVTPt9IcMTsb4BfPQOm7h8xrT4GMhAvvgA8Wd52/rGzXGFJsUZr8KSbXCFzOW7u+v7m1u6U5ztbt6ebi64FIDGAxmIQWdAW02tBkbVKDk1TEuqZauMhpZNWp/WfMiYgp2bBX48c4CYA2Y3iEbIhlHRk2NNwGZbaI92wfvfh8Jks+myzOttvB2HJ/KIiQyi/mvoCe7Czf7CxYcHG+Bi8sEve1KTQ4oHTNnjZsmmcp5t9jFU50d2s8eQSU1u7qrb2eYppodXPt2dpF/9h/KP1u19wOrqkgxEddibUXPKWNtRNbqe9kIDNdaIHnBENU2kJrsYsg9rXJfqKmT8njaWZCDv7bzgid+b5PY+o8trKtS/diVv/OXzLkIZMFKT2xRhdbl6tpuzhjWcyYKx5sOaq08IPqHLWDTdp/UM/8+K6AQriLs1JQy5urV5X32wy76IcmrkglsG/SS5MNo4ObFWcy5FL9vRmBEmxyauuBat5Ex3TvZjp51mHAQU3iXdaiuUbIVqOyNoN3JNlRCaju1oqXHMQGctTNK8srW6mcseWMe6rkPaT6xYO2pqFDgKrFWj0dMoWf/CknPiqmABPp5+x0ZAAO/1ZAwdNTiqWuhpDxqoddJxwViLupTwGlPA+YVPH71LcYlTrs59qV4592kN5YdXW3d++kB/bYldRvcDU1UStz6UMp9DPh6Pxz8AAAD//wMAA/VUBigEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSTT2/UMBDFv0rkc5z6TxLbucG2iKpCregKEDfbM6FWU2flOAVU7XdHzi4qcOMSRSPP+L3fPL+QaJ+QDOTN4XD1jDEvpCY5bCXBRE+ZpILvmR64HjrdGKa57uVXUpNwgz/JQFTrPfcGqcQeaQuso06OngKg4YwDE11bZtpvCxleiA0N4HPw2MzLJ0xLmCMZyOcQYf5e7rah8dO8QpPmCa/jkm30Rczl1f3N/vaO7lrOdrdvTycXXMqAJgAZiEavQVlFrQJGWyc51UxJqmTXagUdG5U6tYWYMUU7NQs8vmqAOUfMfhCNkA2jwpBjTcBmW2Q7u+D+56Eo2TBdlnq9lbff4YU8YyKDqH8DPY278FO4eFrcGia4OH2zXR6L00OaD5hywI3LZnWabA5zrM437aaAMZOa3N5Xd5PN45ye/oJ1f/J//R/29+X2qx/o14ywm9eYyUB4Z0hNPlj/ECJW15dkIG2PRjvFKWNdT1vnDTVCAdVWCwPosB1HUpPdHHOI67wu1XXM+C1tBshA3tlpwZP0N8k/hIw+r6m4+tKXPNylGVafq1f+nDWs4UyWpjUf1lx9RAgJfcbib5/W87x/WkQvGCtS1pQw5urO5ofqvV0eigvfOi64ZWBGyYVW2suRdYpzKYzsnNYORs9G3nIlOsmZ6r00rldeMQ4CSE2wrLs6JUyOFhEtBQaGtp1E6gwfqVcjgtStdmNR/8qxup1KH1jP+r5HakZWWDpFdQueAutap9XoJCv8fyM5b7/VpCaAz6fnsgkQwI0ataZOgadtB4YaUECtl54LxjpUJZU3mCJOf3D6EHyal3nM1Tk71V/kPq6xPPlqy9H3EOmPbUWXs3/EVJUV2xBLus9bPR6Px18AAAD//wMAXAx0szkEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUTU/kOBD9K5Gv2874M7ZzY4DRIsSAplu7q735owJegtNyHFiE+O8jp4GBGe1hL1FUqlf16tVzPaFk7wD16Gi/P72HVGa0QSWuIUZYhwnHjO6I7qnupW4NpVII9jfaoHgOj6hHSnhPvQHMoQMsApHY8cHjEMBQQgNhUtSa9npG/ROysQ1wHz200/wH5DlOCfXoz5jC9FB729j6cVpCm6cRztJcbPKVzMnp9nx3eYWPBSXHl58PmTPMtUAbA+qRBq+DsgpbFQgWjlOsieJYcSm0CpIMSh1gMRXIyY7tHG5/cAhTSVB8z1rGW4KZQc8bFGyxlbazM+we95XJKtNJjW/W8PrbP6F7yKhnm1dBD+U++TF+upvdEsfwaf2iDdrnaQ+5RFgVWYccR1vilJqXHsdjhFTQBn2ukO3iPcwz6tEuL/AaPU3XMcGXbO/gYcq3Xw9t26+nO7RBV3n6B3y5suUG9cgwxcCQTnTWK2oVocZLJYl3Q6eMH4ZOWjK4EBglVCtBFNVCBMm5MkSbDm3Q5ba5Gm0Zpnz3YV/bwwrO/scGtkfHp8m6ESrmix3nt5F2Nl9DQT0C7ogXghk9eOqpMHZwg/DamG5whgmmLAgKohPGGS68FUYaQ53SkjktJdqgC+tvYoLm7AT1SHRgtFMUEyI7LJw32DAVsLaamQAOxDCgDTqeUolpmZa5OUsFrvO6lHcsL7fNUfY3sYAvS656/9VVd1/lKSy+ND/cRElLWkp4BS1lv5TmG4SYwZd17JdFXm5/hrCOEVKpLDlDKk3dYPO7nesahReOMmpJMAOnTCvt+UCkopQzw6XT2oXBk4EKqpjklKjOc+M65RWhgVXrQTVvs74XaQlxmgP2lEssKA3YggxYUlDcqEGIoD/o2FyOFResJ13XATYDqVo6hbUIHgcihdNqcJyYjx59N6KuqtBWdasyr7K9uF7UfgHuDwdiJckCNWrQGjsVPBYyGGyCCth67ikjRIKq7/AccoLxnZYX0edpnobSvFi1+aDuO3Incd6P9vEXjr95Jrj0HN7yj2/A3/7q3G9LqgezWZ/AQ0z439USJ5O/hdxUS9mY6m14Q1wsY4m7mww2QLiYAvxc9HmD7sDOS4a79SSvVyJBXmmcLAdbnqWLOI5xBj+lMKOeG8Narjr1Qve/8gTRXcsEE8/Pz8/fAQAA//8DAGtTrSYABgAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUXW/cKhT8KxbPxuHDNthvuZtUjaIqUbNqr+4bcI4bFAevAKeNov3vFd6t2jxV9wWhA2c8Z2bwGwnmGclILg+H6xcMOZGaZL+VBBM9ZZIKvmd65HrsdDOwXijB/iM18bf4SkaiWue4G5BK7JG2wDpq5eQoAA6ccWCiawum+ZbI+EaMbwBfvMNmSV8wJr8EMpKvPsDyvXzb+MbNywpNXGa8CSmb4AqZq+uH2/3dPd21nO3u/jndTJgKQOOBjESj06CMokYBo62VnGqmJFWya7WCjk1Kndp8yBiDmZsET785wJIDZjeKRsiGUTGQY03AZFNoW5Nw/3ooTDaZrkq93srbdnwjLxjJKOpfgp7gLtzsL56TXf0MF6c1m/SUtnUyLi/xldTkEJcDxuxx0+gyJXy28+vepKcPpztlm65/oFszwm5ZQyYj4V1HarKJNM8m+yVUZ4672WPI22GOPiTv/oZVPLp7qO5nk6clPr/z5OEk883/UPmTcY8+YHVzVbB7HLRVnDLW9bS1bqCDUEC10WIAtNhOE6nJbgnZh3VZU3UTMn6L20hkJB/MnPDE7zK6R5/R5TWWOf/tC+/7uMDqcvXbS84a1nAmS9OaD2uuPiP4iC5jGWIf1zPel/ctoheMFSprjBhydW/yY/XRpMcyhWstF9wwGCbJhVbayYl1inMpBtlZrS1Mjk285Up0kjPVOznYXjnFOAggNcESnWpLq5K8HDDKUVnadi2juhU9FYN0egIBvR7e6VjdzaUPjGN93yMdJla0tIrqFhwF1rVWq8lKVvp+SXLOQ6tJTQBfTk9vIyCAD2rSmloFjrYdDHQABdQ46bhgrENVEn6LMeD8h06fvItLWqZcnQNSvVPu8xrK76PawvLdB/pjs+hqcU8Yq2Kx8aG8lLOrx+Px+BMAAP//AwACjRCuhQQAAA==
|
||||
@@ -1,4 +1,4 @@
|
||||
<Window x:Class="Cardiopulmonarybypasssystems.MainWindow"
|
||||
<Window x:Class="Cardiopulmonarybypasssystems.MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
@@ -21,7 +21,20 @@
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Border Grid.Row="0" Padding="14,12" CornerRadius="18" Background="{StaticResource HeroBrush}">
|
||||
<Border Grid.Row="0" Padding="12,10" CornerRadius="18" Background="{StaticResource HeroBrush}">
|
||||
<Border.Resources>
|
||||
<Style x:Key="HeroCompactPillStyle" TargetType="Border" BasedOn="{StaticResource PillBorderStyle}">
|
||||
<Setter Property="Padding" Value="10,5" />
|
||||
<Setter Property="Margin" Value="0,0,6,6" />
|
||||
</Style>
|
||||
<Style x:Key="HeroCompactButtonStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Setter Property="MinWidth" Value="84" />
|
||||
<Setter Property="MinHeight" Value="34" />
|
||||
<Setter Property="Padding" Value="10,6" />
|
||||
<Setter Property="Margin" Value="0,0,6,6" />
|
||||
<Setter Property="FontSize" Value="14" />
|
||||
</Style>
|
||||
</Border.Resources>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
@@ -34,31 +47,31 @@
|
||||
Foreground="White"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
<WrapPanel Margin="0,8,0,0">
|
||||
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
|
||||
<Border Style="{StaticResource HeroCompactPillStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="阶段" />
|
||||
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding CurrentStage}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
|
||||
<Border Style="{StaticResource HeroCompactPillStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="设备" />
|
||||
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding DeviceStatus}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
|
||||
<Border Style="{StaticResource HeroCompactPillStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="告警" />
|
||||
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding AlarmSummaryDisplay}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,8,6">
|
||||
<Border Style="{StaticResource HeroCompactPillStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="待处理" />
|
||||
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding PendingCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Style="{StaticResource PillBorderStyle}" Padding="12,6" Margin="0,0,0,6">
|
||||
<Border Style="{StaticResource HeroCompactPillStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Foreground="#D9F6F9" FontSize="11" Text="合格率" />
|
||||
<TextBlock Foreground="White" FontSize="14" FontWeight="Bold" Text="{Binding ComplianceDisplay}" />
|
||||
@@ -72,8 +85,14 @@
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="1" Margin="16,0,0,0" VerticalAlignment="Center">
|
||||
<StackPanel Grid.Column="1" Margin="12,0,0,0" VerticalAlignment="Center">
|
||||
<WrapPanel HorizontalAlignment="Right">
|
||||
<WrapPanel.LayoutTransform>
|
||||
<ScaleTransform ScaleX="0.92" ScaleY="0.92" />
|
||||
</WrapPanel.LayoutTransform>
|
||||
<WrapPanel.Resources>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource HeroCompactButtonStyle}" />
|
||||
</WrapPanel.Resources>
|
||||
<Button MinWidth="92" MinHeight="36" Padding="12,7" Margin="0,0,8,8" Command="{Binding ToggleAcquisitionCommand}" Content="采集" Background="#FFFFFFFF" Foreground="{StaticResource HeaderBrush}" />
|
||||
<Button MinWidth="92" MinHeight="36" Padding="12,7" Margin="0,0,8,8" Command="{Binding AcknowledgeAlarmCommand}" Content="消警" Background="#33FFFFFF" />
|
||||
<Button MinWidth="108" MinHeight="36" Padding="12,7" Margin="0,0,8,8" Command="{Binding CompleteDetectionCommand}" Content="完成检测" Background="#FFF0B145" />
|
||||
@@ -143,50 +162,50 @@
|
||||
Background="#FF6B8791" />
|
||||
</Grid>
|
||||
|
||||
<UniformGrid Columns="7" Margin="0,8,0,0">
|
||||
<Border Margin="0,0,6,0" Padding="8" Background="#FFE7F5F3" CornerRadius="10" BorderBrush="#FFD9E9E4" BorderThickness="1">
|
||||
<WrapPanel Margin="0,8,0,0">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFE7F5F3" CornerRadius="10" BorderBrush="#FFD9E9E4" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="实时监控" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding RealtimeMonitorCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,6,0" Padding="8" Background="#FFEAF0FB" CornerRadius="10" BorderBrush="#FFDCE3F2" BorderThickness="1">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFEAF0FB" CornerRadius="10" BorderBrush="#FFDCE3F2" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="实时+手录" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding RealtimeAssistCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,6,0" Padding="8" Background="#FFFDF0E5" CornerRadius="10" BorderBrush="#FFF0E0C8" BorderThickness="1">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFFDF0E5" CornerRadius="10" BorderBrush="#FFF0E0C8" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="手动录入" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding ManualEntryCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,6,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="当前范围" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding FilteredItemSummary}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,6,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="合格项" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding QualifiedCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,6,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="预警/不合格" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding WarningCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,0,0" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<Border Width="132" Margin="0,0,6,6" Padding="8" Background="#FFF5F9FA" CornerRadius="10" BorderBrush="#FFDCE7EA" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" FontSize="11" Text="待处理" />
|
||||
<TextBlock FontSize="18" FontWeight="Bold" Text="{Binding PendingCount}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</UniformGrid>
|
||||
</WrapPanel>
|
||||
|
||||
<TextBlock Margin="0,8,0,0"
|
||||
FontSize="13"
|
||||
@@ -206,7 +225,7 @@
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource CardBorderStyle}">
|
||||
<Border>
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="项目清单" />
|
||||
<DataGrid Margin="0,4,0,0"
|
||||
@@ -257,7 +276,36 @@
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource CardBorderStyle}">
|
||||
<Border>
|
||||
<Border.Style>
|
||||
<Style TargetType="Border" BasedOn="{StaticResource CardBorderStyle}">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding HasSelectedItem}" Value="False">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="当前筛选为空" />
|
||||
<TextBlock FontSize="14"
|
||||
Text="当前筛选条件下没有可编辑项目。请清空搜索、切换“全部”,或调整筛选条件后继续。"
|
||||
TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border>
|
||||
<Border.Style>
|
||||
<Style TargetType="Border" BasedOn="{StaticResource CardBorderStyle}">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding HasSelectedItem}" Value="False">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="当前选择摘要" />
|
||||
<WrapPanel Margin="0,4,0,0" ItemHeight="Auto" Orientation="Horizontal">
|
||||
@@ -334,35 +382,46 @@
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border Style="{StaticResource CardBorderStyle}" Margin="0">
|
||||
<Border Margin="0">
|
||||
<Border.Style>
|
||||
<Style TargetType="Border" BasedOn="{StaticResource CardBorderStyle}">
|
||||
<Setter Property="Margin" Value="0" />
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding HasSelectedItem}" Value="False">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="项目详情与结果填写" />
|
||||
<Grid>
|
||||
<Grid Margin="0,2,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1.12*" />
|
||||
<ColumnDefinition Width="16" />
|
||||
<ColumnDefinition Width="0.88*" />
|
||||
<ColumnDefinition Width="0.7*" />
|
||||
<ColumnDefinition Width="12" />
|
||||
<ColumnDefinition Width="1.3*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<StackPanel Grid.Column="0" Margin="0,0,0,4">
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="类别" />
|
||||
<TextBlock FontSize="16" FontWeight="SemiBold" Margin="0,0,0,10" Text="{Binding SelectedItem.Category}" />
|
||||
<TextBlock FontSize="15" FontWeight="SemiBold" Margin="0,0,0,8" Text="{Binding SelectedItem.Category}" />
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="判定要求" />
|
||||
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.AcceptanceCriteria}" />
|
||||
<TextBlock FontSize="14" Margin="0,0,0,8" TextWrapping="Wrap" Text="{Binding SelectedItem.AcceptanceCriteria}" />
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="检测方法" />
|
||||
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.TestMethod}" />
|
||||
<TextBlock FontSize="14" Margin="0,0,0,8" TextWrapping="Wrap" Text="{Binding SelectedItem.TestMethod}" />
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="记录要点" />
|
||||
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItem.RecordFocus}" />
|
||||
<TextBlock FontSize="14" Margin="0,0,0,8" TextWrapping="Wrap" Text="{Binding SelectedItem.RecordFocus}" />
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="数据来源" />
|
||||
<TextBlock FontSize="15" Margin="0,0,0,10" TextWrapping="Wrap" Text="{Binding SelectedItemMeasurementSource}" />
|
||||
<TextBlock FontSize="14" Margin="0,0,0,8" TextWrapping="Wrap" Text="{Binding SelectedItemMeasurementSource}" />
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="实时数据预览" />
|
||||
<Border Padding="12" Background="#FFF4F8FA" CornerRadius="14" Margin="0,0,0,10">
|
||||
<Border Padding="10" Background="#FFF4F8FA" CornerRadius="12" Margin="0,0,0,8">
|
||||
<StackPanel>
|
||||
<TextBlock FontSize="16" FontWeight="SemiBold" Text="{Binding SelectedItemLiveDisplay}" TextWrapping="Wrap" />
|
||||
<TextBlock Margin="0,6,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding SelectedItemLiveHint}" TextWrapping="Wrap" />
|
||||
<TextBlock FontSize="15" FontWeight="SemiBold" Text="{Binding SelectedItemLiveDisplay}" TextWrapping="Wrap" />
|
||||
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding SelectedItemLiveHint}" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<StackPanel Grid.Column="2" Margin="0,0,0,4">
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="填写说明" />
|
||||
<TextBlock Margin="0,0,0,6" Foreground="{StaticResource MutedTextBrush}" FontSize="13" Text="{Binding RealtimeMeasurementHint}" TextWrapping="Wrap" />
|
||||
<Border Margin="0,0,0,8" Padding="12" Background="#FFF8F4EA" CornerRadius="14">
|
||||
@@ -536,75 +595,133 @@
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</StackPanel.Style>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="血细胞破坏记录要点" />
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="4.3.4 共用试验记录要点" />
|
||||
<TextBlock FontSize="13" Text="{Binding HemolysisStandardSummary}" TextWrapping="Wrap" />
|
||||
<TextBlock Margin="0,6,0,0" FontSize="13" Text="{Binding HemolysisTemplateGuidance}" TextWrapping="Wrap" />
|
||||
<Border Margin="0,8,0,0" Padding="10" Background="#FFFFFAF6" CornerRadius="12" BorderBrush="#FFE8D9CC" BorderThickness="1">
|
||||
<TextBlock FontSize="13" Text="{Binding HemolysisSharedRecordHint}" TextWrapping="Wrap" />
|
||||
</Border>
|
||||
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="试验血液准备" />
|
||||
<Grid Margin="0,6,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="110" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="110" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="血液来源" />
|
||||
<ComboBox Grid.Column="1" ItemsSource="{Binding HemolysisBloodSourceOptions}" SelectedItem="{Binding HemolysisTestParameters.BloodSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="采血日期" />
|
||||
<DatePicker Grid.Column="3" SelectedDate="{Binding HemolysisTestParameters.CollectionDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedDateFormat="Short" />
|
||||
<StackPanel>
|
||||
<StackPanel.Style>
|
||||
<Style TargetType="StackPanel">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsHemolysisPrimaryInputSelected}" Value="True">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</StackPanel.Style>
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="共享基础条件" />
|
||||
<WrapPanel Margin="0,6,0,0" Orientation="Horizontal">
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="血液来源" />
|
||||
<ComboBox Margin="0,4,0,0" ItemsSource="{Binding HemolysisBloodSourceOptions}" SelectedItem="{Binding HemolysisTestParameters.BloodSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="228" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="采血日期" />
|
||||
<DatePicker MinWidth="180"
|
||||
Margin="0,4,0,0"
|
||||
SelectedDate="{Binding HemolysisTestParameters.CollectionDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
SelectedDateFormat="Short" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="抗凝剂" />
|
||||
<ComboBox Margin="0,4,0,0" ItemsSource="{Binding HemolysisAnticoagulantOptions}" SelectedItem="{Binding HemolysisTestParameters.Anticoagulant, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="初始 Hct" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.InitialHematocrit, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="调整后 Hct" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.AdjustedHematocrit, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="葡萄糖 mmol/L" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.Glucose, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="血红蛋白 g/dL" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.TotalHemoglobin, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,0,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="初始游离Hb" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.InitialFreeHemoglobin, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</WrapPanel>
|
||||
|
||||
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="抗凝剂" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" ItemsSource="{Binding HemolysisAnticoagulantOptions}" SelectedItem="{Binding HemolysisTestParameters.Anticoagulant, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="初始 Hct" />
|
||||
<TextBox Grid.Row="1" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.InitialHematocrit, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="测试回路与运行条件" />
|
||||
<WrapPanel Margin="0,6,0,0" Orientation="Horizontal">
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="充盈量 mL" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.CircuitPrimingVolume, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="容积差 %" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.CircuitVolumeDifference, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="设定流量 L/min" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.SetFlow, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,8,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="运行时间 min" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.RunTimeMinutes, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Width="190" Margin="0,0,0,8" Padding="10,8" Background="#FFFFFAF6" CornerRadius="10">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="目标温度 ℃" />
|
||||
<TextBox Margin="0,4,0,0" Text="{Binding HemolysisTestParameters.TargetTemperature, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Grid.Row="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="调整后 Hct" />
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.AdjustedHematocrit, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="葡萄糖 mmol/L" />
|
||||
<TextBox Grid.Row="2" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.Glucose, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<Border Margin="0,10,0,0" Padding="10" Background="#FFF4F8FA" CornerRadius="12" BorderBrush="#FFD4E1E6" BorderThickness="1">
|
||||
<Border.Style>
|
||||
<Style TargetType="Border">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsHemolysisReductionSelected}" Value="True">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}"
|
||||
Text="本项直接复用“血细胞破坏”维护的共享基础条件。如需调整试样准备、回路运行条件或标准取样点,请切换到“血细胞破坏”项目统一修改。"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
|
||||
<TextBlock Grid.Row="3" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="血红蛋白 g/dL" />
|
||||
<TextBox Grid.Row="3" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.TotalHemoglobin, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="初始游离Hb" />
|
||||
<TextBox Grid.Row="3" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.InitialFreeHemoglobin, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</Grid>
|
||||
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="测试回路与运行条件" />
|
||||
<Grid Margin="0,6,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="110" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="110" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="充盈量 mL" />
|
||||
<TextBox Grid.Column="1" Text="{Binding HemolysisTestParameters.CircuitPrimingVolume, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="容积差 %" />
|
||||
<TextBox Grid.Column="3" Text="{Binding HemolysisTestParameters.CircuitVolumeDifference, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<TextBlock Grid.Row="1" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="设定流量 L/min" />
|
||||
<TextBox Grid.Row="1" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.SetFlow, UpdateSourceTrigger=PropertyChanged}" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="运行时间 min" />
|
||||
<TextBox Grid.Row="1" Grid.Column="3" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.RunTimeMinutes, UpdateSourceTrigger=PropertyChanged}" />
|
||||
|
||||
<TextBlock Grid.Row="2" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="目标温度 ℃" />
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Margin="0,8,0,0" Text="{Binding HemolysisTestParameters.TargetTemperature, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</Grid>
|
||||
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="自动计算摘要" />
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding HemolysisCalculationTitle}" />
|
||||
<TextBlock FontSize="13" Text="{Binding HemolysisSamplingCompletionSummary}" TextWrapping="Wrap" />
|
||||
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding HemolysisCalculationSummary}" TextWrapping="Wrap" />
|
||||
<TextBlock Margin="0,4,0,0" FontSize="13" Text="{Binding HemolysisCalculationDetail}" TextWrapping="Wrap" />
|
||||
<Border Margin="0,8,0,0" Padding="10" Background="#FFFBE8E6" CornerRadius="12" BorderBrush="#FFF0C6C1" BorderThickness="1">
|
||||
<TextBlock Foreground="{StaticResource DangerBrush}" FontSize="13" FontWeight="SemiBold" Text="{Binding HemolysisRequiredPointAlert}" TextWrapping="Wrap">
|
||||
<TextBlock.Style>
|
||||
@@ -620,45 +737,77 @@
|
||||
</TextBlock>
|
||||
</Border>
|
||||
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="试验运行与取样记录" />
|
||||
<DataGrid Margin="0,6,0,0"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserAddRows="False"
|
||||
CanUserDeleteRows="False"
|
||||
HeadersVisibility="Column"
|
||||
ItemsSource="{Binding HemolysisSamplingEntries}"
|
||||
MinHeight="260">
|
||||
<DataGrid.RowStyle>
|
||||
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsRequiredPoint}" Value="True">
|
||||
<Setter Property="Background" Value="#FFFDF5DE" />
|
||||
</DataTrigger>
|
||||
<MultiDataTrigger>
|
||||
<MultiDataTrigger.Conditions>
|
||||
<Condition Binding="{Binding IsRequiredPoint}" Value="True" />
|
||||
<Condition Binding="{Binding HasRequiredData}" Value="True" />
|
||||
</MultiDataTrigger.Conditions>
|
||||
<Setter Property="Background" Value="#FFE3F6EF" />
|
||||
</MultiDataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="序号" Binding="{Binding Sequence}" IsReadOnly="True" Width="45" />
|
||||
<DataGridTextColumn Header="时间点" Binding="{Binding TimePoint}" IsReadOnly="True" Width="88" />
|
||||
<DataGridTextColumn Header="挂钟时间" Binding="{Binding ClockTime, UpdateSourceTrigger=PropertyChanged}" Width="80" />
|
||||
<DataGridTextColumn Header="游离Hb" Binding="{Binding FreeHemoglobin, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="82" />
|
||||
<DataGridTextColumn Header="Hct" Binding="{Binding Hematocrit, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F2}}" Width="62" />
|
||||
<DataGridTextColumn Header="白细胞" Binding="{Binding WhiteCellCount, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="78" />
|
||||
<DataGridTextColumn Header="血小板" Binding="{Binding PlateletCount, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="78" />
|
||||
<DataGridTextColumn Header="Hb g/dL" Binding="{Binding Hemoglobin, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="76" />
|
||||
<DataGridTextColumn Header="流量 L/min" Binding="{Binding Flow, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F2}}" Width="84" />
|
||||
<DataGridTextColumn Header="压力 mmHg" Binding="{Binding Pressure, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F0}}" Width="84" />
|
||||
<DataGridTextColumn Header="温度 ℃" Binding="{Binding Temperature, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="76" />
|
||||
<DataGridTextColumn Header="备注" Binding="{Binding Remarks, UpdateSourceTrigger=PropertyChanged}" Width="*" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<TextBlock Margin="0,10,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding HemolysisSamplingSectionTitle}" />
|
||||
<Border Margin="0,6,0,0" Padding="12" Background="#FFFFFAF6" CornerRadius="12" BorderBrush="#FFE8D9CC" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<DockPanel LastChildFill="False">
|
||||
<TextBlock DockPanel.Dock="Left"
|
||||
VerticalAlignment="Center"
|
||||
Style="{StaticResource CaptionStyle}"
|
||||
Text="黄色行为标准取样点;录入列较多时可左右滑动查看完整记录。"
|
||||
TextWrapping="Wrap" />
|
||||
<Border DockPanel.Dock="Right"
|
||||
Margin="12,0,0,0"
|
||||
Padding="10,4"
|
||||
Background="#FFF4F8FA"
|
||||
CornerRadius="999"
|
||||
BorderBrush="#FFD4E1E6"
|
||||
BorderThickness="1">
|
||||
<TextBlock FontSize="12"
|
||||
FontWeight="SemiBold"
|
||||
Foreground="{StaticResource HeaderBrush}"
|
||||
Text="左右滑动查看完整列" />
|
||||
</Border>
|
||||
</DockPanel>
|
||||
<ScrollViewer Margin="0,8,0,0"
|
||||
HorizontalScrollBarVisibility="Auto"
|
||||
VerticalScrollBarVisibility="Disabled"
|
||||
CanContentScroll="False"
|
||||
PanningMode="HorizontalOnly">
|
||||
<DataGrid AutoGenerateColumns="False"
|
||||
CanUserAddRows="False"
|
||||
CanUserDeleteRows="False"
|
||||
HeadersVisibility="Column"
|
||||
ItemsSource="{Binding HemolysisSamplingEntries}"
|
||||
HorizontalAlignment="Left"
|
||||
MinWidth="1040"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||
MinHeight="260">
|
||||
<DataGrid.RowStyle>
|
||||
<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsRequiredPoint}" Value="True">
|
||||
<Setter Property="Background" Value="#FFFDF5DE" />
|
||||
</DataTrigger>
|
||||
<MultiDataTrigger>
|
||||
<MultiDataTrigger.Conditions>
|
||||
<Condition Binding="{Binding IsRequiredPoint}" Value="True" />
|
||||
<Condition Binding="{Binding HasRequiredData}" Value="True" />
|
||||
</MultiDataTrigger.Conditions>
|
||||
<Setter Property="Background" Value="#FFE3F6EF" />
|
||||
</MultiDataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="序号" Binding="{Binding Sequence}" IsReadOnly="True" Width="45" />
|
||||
<DataGridTextColumn Header="时间点" Binding="{Binding TimePoint}" IsReadOnly="True" Width="88" />
|
||||
<DataGridTextColumn Header="挂钟时间" Binding="{Binding ClockTime, UpdateSourceTrigger=PropertyChanged}" Width="80" />
|
||||
<DataGridTextColumn Header="游离Hb" Binding="{Binding FreeHemoglobin, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="82" />
|
||||
<DataGridTextColumn Header="Hct" Binding="{Binding Hematocrit, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F2}}" Width="62" />
|
||||
<DataGridTextColumn Header="白细胞" Binding="{Binding WhiteCellCount, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="78" />
|
||||
<DataGridTextColumn Header="血小板" Binding="{Binding PlateletCount, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="78" />
|
||||
<DataGridTextColumn Header="Hb g/dL" Binding="{Binding Hemoglobin, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="76" />
|
||||
<DataGridTextColumn Header="流量 L/min" Binding="{Binding Flow, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F2}}" Width="84" />
|
||||
<DataGridTextColumn Header="压力 mmHg" Binding="{Binding Pressure, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F0}}" Width="84" />
|
||||
<DataGridTextColumn Header="温度 ℃" Binding="{Binding Temperature, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}" Width="76" />
|
||||
<DataGridTextColumn Header="备注" Binding="{Binding Remarks, UpdateSourceTrigger=PropertyChanged}" Width="180" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</ScrollViewer>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="结果记录" />
|
||||
@@ -706,14 +855,28 @@
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<DockPanel Margin="0,8,0,0" LastChildFill="False">
|
||||
<TextBlock DockPanel.Dock="Left" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="{Binding LatestAction}" TextWrapping="Wrap" Width="460" />
|
||||
<WrapPanel DockPanel.Dock="Right">
|
||||
<Grid Margin="0,8,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="12" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Grid.Column="0" VerticalAlignment="Center" Style="{StaticResource CaptionStyle}" Text="{Binding LatestAction}" TextWrapping="Wrap" />
|
||||
<WrapPanel Grid.Column="2" HorizontalAlignment="Right">
|
||||
<WrapPanel.Resources>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Setter Property="MinWidth" Value="84" />
|
||||
<Setter Property="MinHeight" Value="32" />
|
||||
<Setter Property="Padding" Value="10,4" />
|
||||
<Setter Property="Margin" Value="0,0,6,0" />
|
||||
<Setter Property="FontSize" Value="14" />
|
||||
</Style>
|
||||
</WrapPanel.Resources>
|
||||
<Button Command="{Binding SelectPreviousItemCommand}" Content="上一项" Background="#FF6B8791" />
|
||||
<Button Command="{Binding SelectNextItemCommand}" Content="下一项" Background="#FF6B8791" />
|
||||
<Button Command="{Binding ApplyResultCommand}" Content="保存并更新状态" Background="#FF2B8F6A" />
|
||||
</WrapPanel>
|
||||
</DockPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
@@ -723,52 +886,57 @@
|
||||
<TabItem Header="实时数据">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="0,6,0,0">
|
||||
<Border Style="{StaticResource CardBorderStyle}">
|
||||
<Border Style="{StaticResource CardBorderStyle}" Padding="14">
|
||||
<Border.Resources>
|
||||
<Style x:Key="RealtimeOverviewCardStyle" TargetType="Border" BasedOn="{StaticResource PanelSectionStyle}">
|
||||
<Setter Property="Width" Value="154" />
|
||||
<Setter Property="Padding" Value="10" />
|
||||
<Setter Property="Margin" Value="0,0,6,6" />
|
||||
<Setter Property="MinHeight" Value="82" />
|
||||
</Style>
|
||||
<Style x:Key="RealtimeOverviewValueStyle" TargetType="TextBlock" BasedOn="{StaticResource MetricValueStyle}">
|
||||
<Setter Property="FontSize" Value="18" />
|
||||
</Style>
|
||||
</Border.Resources>
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="运行健康概览" />
|
||||
<UniformGrid Columns="3" Margin="0,4,0,0">
|
||||
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" FontSize="18" Margin="0,0,0,8" Text="运行健康概览" />
|
||||
<WrapPanel Margin="0,2,0,0">
|
||||
<Border Style="{StaticResource RealtimeOverviewCardStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="PLC 状态" />
|
||||
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding DeviceStatus}" />
|
||||
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding TelemetryStatusDetail}" TextWrapping="Wrap" />
|
||||
<TextBlock Style="{StaticResource RealtimeOverviewValueStyle}" Text="{Binding DeviceStatus}" />
|
||||
<TextBlock Margin="0,3,0,0" Style="{StaticResource CaptionStyle}" FontSize="12" Text="{Binding TelemetryStatusDetail}" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,8,8" Style="{StaticResource PanelSectionStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="PLC 端点" />
|
||||
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="18" Text="{Binding PlcEndpointDisplay}" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,0,8" Style="{StaticResource PanelSectionStyle}">
|
||||
<Border Style="{StaticResource RealtimeOverviewCardStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="最后采样" />
|
||||
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="18" Text="{Binding TelemetryLastUpdatedDisplay}" TextWrapping="Wrap" />
|
||||
<TextBlock Style="{StaticResource RealtimeOverviewValueStyle}" FontSize="15" Text="{Binding TelemetryLastUpdatedDisplay}" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
|
||||
<Border Style="{StaticResource RealtimeOverviewCardStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="信号覆盖" />
|
||||
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding TelemetryAvailabilityDisplay}" />
|
||||
<TextBlock Style="{StaticResource RealtimeOverviewValueStyle}" Text="{Binding TelemetryAvailabilityDisplay}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,8,0" Style="{StaticResource PanelSectionStyle}">
|
||||
<Border Style="{StaticResource RealtimeOverviewCardStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="实时告警" />
|
||||
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding AlarmSummaryDisplay}" />
|
||||
<TextBlock Style="{StaticResource RealtimeOverviewValueStyle}" Text="{Binding AlarmSummaryDisplay}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Margin="0,0,0,0" Style="{StaticResource PanelSectionStyle}">
|
||||
<Border Style="{StaticResource RealtimeOverviewCardStyle}">
|
||||
<StackPanel>
|
||||
<TextBlock Style="{StaticResource CaptionStyle}" Text="主/回流偏差" />
|
||||
<TextBlock Style="{StaticResource MetricValueStyle}" FontSize="20" Text="{Binding FlowImbalanceDisplay}" />
|
||||
<TextBlock Style="{StaticResource RealtimeOverviewValueStyle}" Text="{Binding FlowImbalanceDisplay}" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</UniformGrid>
|
||||
<Border Margin="0,12,0,0" Padding="14" Background="#FFF5F8E9" CornerRadius="14" BorderBrush="#FFD9E2B3" BorderThickness="1">
|
||||
</WrapPanel>
|
||||
<Border Margin="0,8,0,0" Padding="12" Background="#FFF5F8E9" CornerRadius="14" BorderBrush="#FFD9E2B3" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock FontSize="15" FontWeight="Bold" Foreground="{StaticResource HeaderBrush}" Text="信号说明" />
|
||||
<TextBlock Margin="0,4,0,0" Style="{StaticResource CaptionStyle}" Text="{Binding TelemetryCoverageDisplay}" TextWrapping="Wrap" />
|
||||
<TextBlock FontSize="14" FontWeight="Bold" Foreground="{StaticResource HeaderBrush}" Text="信号说明" />
|
||||
<TextBlock Margin="0,3,0,0" Style="{StaticResource CaptionStyle}" FontSize="12" Text="{Binding TelemetryCoverageDisplay}" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
@@ -986,13 +1154,18 @@
|
||||
</Border>
|
||||
</WrapPanel>
|
||||
|
||||
<DockPanel Margin="0,12,0,8">
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" Text="趋势图" />
|
||||
<DockPanel Margin="0,10,0,8" LastChildFill="False">
|
||||
<Button DockPanel.Dock="Right"
|
||||
MinWidth="96"
|
||||
VerticalAlignment="Center"
|
||||
MinWidth="78"
|
||||
MinHeight="30"
|
||||
Padding="10,4"
|
||||
Margin="0"
|
||||
FontSize="13"
|
||||
Command="{Binding ClearTrendDataCommand}"
|
||||
Content="清空曲线"
|
||||
Background="#FF6B8791" />
|
||||
<TextBlock Style="{StaticResource SectionTitleStyle}" FontSize="18" Margin="0,0,0,6" Text="趋势图" />
|
||||
</DockPanel>
|
||||
|
||||
<Grid Margin="0,0,0,0">
|
||||
|
||||
@@ -12,4 +12,4 @@ public sealed class ManufacturerLimitSettings
|
||||
public double PressureDropLimit100 { get; set; } = 24;
|
||||
public double AntiCollapseAllowedIncreaseRate { get; set; } = 50;
|
||||
public double RecirculationAllowedLimit { get; set; } = 8;
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,7 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
{
|
||||
_ipAddress = Environment.GetEnvironmentVariable("CPB_MODBUS_IP") ?? DefaultIpAddress;
|
||||
_port = ParseIntSetting("CPB_MODBUS_PORT", DefaultPort);
|
||||
_slaveId = (byte)ParseIntSetting("CPB_MODBUS_SLAVE_ID", DefaultSlaveId);
|
||||
_slaveId = ParseByteSetting("CPB_MODBUS_SLAVE_ID", DefaultSlaveId);
|
||||
ApplyUnavailableDeviceState();
|
||||
}
|
||||
|
||||
@@ -161,13 +161,15 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
|
||||
lock (_syncRoot)
|
||||
{
|
||||
var liveReadSucceeded = TryReadPumpStatesAndFlows();
|
||||
TryReadPressureChannels(liveReadSucceeded);
|
||||
var liveReadSucceeded = TryReadPumpStatesAndFlows(out var failedFlowRegisterCount);
|
||||
var pressureReadSucceeded = TryReadPressureChannels(liveReadSucceeded);
|
||||
SyncDerivedChannels();
|
||||
if (liveReadSucceeded)
|
||||
if (liveReadSucceeded && pressureReadSucceeded && _master is not null)
|
||||
{
|
||||
_lastSuccessfulReadAt = DateTime.Now;
|
||||
_lastErrorMessage = "实时数据正常";
|
||||
_lastErrorMessage = failedFlowRegisterCount > 0
|
||||
? $"实时数据已更新,但有 {failedFlowRegisterCount} 路流量寄存器无数据"
|
||||
: "实时数据正常";
|
||||
}
|
||||
|
||||
return BuildAlarms();
|
||||
@@ -297,8 +299,9 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryReadPumpStatesAndFlows()
|
||||
private bool TryReadPumpStatesAndFlows(out int failedFlowRegisterCount)
|
||||
{
|
||||
failedFlowRegisterCount = 0;
|
||||
if (_master is null)
|
||||
{
|
||||
ApplyUnavailableDeviceState();
|
||||
@@ -326,11 +329,20 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
|
||||
foreach (var pump in _pumpControls.Where(item => item.FlowAddress.HasValue))
|
||||
{
|
||||
var registerValue = _master.ReadHoldingRegisters(_slaveId, (ushort)pump.FlowAddress!.Value, 1)[0];
|
||||
var flowValue = ConvertRegisterToFlow(registerValue);
|
||||
pump.FlowValue = flowValue;
|
||||
pump.FlowAvailable = true;
|
||||
SetChannelValue(FlowChannelNames[pump.Key], flowValue, true);
|
||||
try
|
||||
{
|
||||
var registerValue = _master.ReadHoldingRegisters(_slaveId, (ushort)pump.FlowAddress!.Value, 1)[0];
|
||||
var flowValue = ConvertRegisterToFlow(registerValue);
|
||||
pump.FlowValue = flowValue;
|
||||
pump.FlowAvailable = true;
|
||||
SetChannelValue(FlowChannelNames[pump.Key], flowValue, true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
failedFlowRegisterCount++;
|
||||
pump.FlowAvailable = false;
|
||||
SetChannelAvailability(FlowChannelNames[pump.Key], false);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -342,13 +354,13 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
}
|
||||
}
|
||||
|
||||
private void TryReadPressureChannels(bool liveReadSucceeded)
|
||||
private bool TryReadPressureChannels(bool liveReadSucceeded)
|
||||
{
|
||||
if (_master is null || !liveReadSucceeded)
|
||||
{
|
||||
SetChannelAvailability("近端压力", false);
|
||||
SetChannelAvailability("远端压力", false);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
@@ -357,10 +369,12 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
var distalRaw = _master.ReadHoldingRegisters(_slaveId, DistalPressureRegister, 1)[0];
|
||||
SetChannelValue("近端压力", ConvertRegisterToPressure(proximalRaw, Channel("近端压力")), true);
|
||||
SetChannelValue("远端压力", ConvertRegisterToPressure(distalRaw, Channel("远端压力")), true);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleConnectionFailure($"读取压力失败:{ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -429,6 +443,16 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
});
|
||||
}
|
||||
|
||||
foreach (var pump in _pumpControls.Where(item => item.StateAvailable && item.FlowAddress.HasValue && !item.FlowAvailable))
|
||||
{
|
||||
alarms.Add(new AlarmMessage
|
||||
{
|
||||
Timestamp = DateTime.Now,
|
||||
Level = "中",
|
||||
Message = $"{pump.Name} 流量寄存器 D{pump.FlowAddress!.Value} 无数据,请核对 PLC 点表和寄存器映射。"
|
||||
});
|
||||
}
|
||||
|
||||
return alarms;
|
||||
}
|
||||
|
||||
@@ -495,6 +519,14 @@ public sealed class ModbusTelemetryService : IModbusTelemetryService, IDisposabl
|
||||
: fallback;
|
||||
}
|
||||
|
||||
private static byte ParseByteSetting(string key, byte fallback)
|
||||
{
|
||||
var rawValue = Environment.GetEnvironmentVariable(key);
|
||||
return byte.TryParse(rawValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out var parsed) && parsed is >= 1 and <= 247
|
||||
? parsed
|
||||
: fallback;
|
||||
}
|
||||
|
||||
private static double ConvertRegisterToFlow(ushort rawValue) => rawValue * FlowRegisterScale;
|
||||
|
||||
private static double ConvertRegisterToPressure(ushort rawValue, DeviceChannel channel)
|
||||
|
||||
@@ -12,7 +12,7 @@ using QuestPDF.Fluent;
|
||||
|
||||
namespace Cardiopulmonarybypasssystems.ViewModels;
|
||||
|
||||
public partial class MainViewModel : ObservableObject
|
||||
public partial class MainViewModel : ObservableObject, IDisposable
|
||||
{
|
||||
private readonly IModbusTelemetryService _telemetryService;
|
||||
private readonly DispatcherTimer _timer;
|
||||
@@ -214,7 +214,7 @@ public partial class MainViewModel : ObservableObject
|
||||
TraceEvents.Insert(0, NewTrace("任务初始化", $"已载入 {InspectionItems.Count} 项检测标准,实时端点 {_telemetryService.EndpointDescription}"));
|
||||
|
||||
_timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) };
|
||||
_timer.Tick += (_, _) => RefreshTelemetry();
|
||||
_timer.Tick += OnTelemetryTimerTick;
|
||||
_timer.Start();
|
||||
}
|
||||
|
||||
@@ -250,6 +250,7 @@ public partial class MainViewModel : ObservableObject
|
||||
public ObservableCollection<string> HemolysisBloodSourceOptions { get; } = new(["肝素化牛血", "肝素化猪血", "肝素化羊血"]);
|
||||
public ObservableCollection<string> HemolysisAnticoagulantOptions { get; } = new(["肝素", "枸橼酸钠", "其他"]);
|
||||
public bool HasFilteredItems => !FilteredItemsView.IsEmpty;
|
||||
public bool HasSelectedItem => SelectedItem is not null;
|
||||
public IEnumerable<DeviceChannel> FlowSensorChannels => Channels.Where(IsFlowSensorChannel);
|
||||
public IEnumerable<DeviceChannel> OtherChannels => Channels.Where(channel => !IsFlowSensorChannel(channel));
|
||||
public bool IsTelemetryOnline => _telemetryService.IsLiveConnected;
|
||||
@@ -364,14 +365,30 @@ public partial class MainViewModel : ObservableObject
|
||||
public bool IsAntiCollapseSelected => SelectedItem?.Clause == "4.3.2";
|
||||
public bool IsRecirculationSelected => SelectedItem?.Clause == "4.3.3";
|
||||
public bool IsHemolysisSelected => SelectedItem?.Clause == "4.3.4";
|
||||
public bool IsHemolysisPrimaryInputSelected => IsHemolysisSelected && string.Equals(SelectedItem?.Item, "血细胞破坏", StringComparison.Ordinal);
|
||||
public bool IsHemolysisReductionSelected => IsHemolysisSelected && string.Equals(SelectedItem?.Item, "血小板/白细胞减少率", StringComparison.Ordinal);
|
||||
public string HemolysisStandardSummary =>
|
||||
"血细胞破坏记录要点:试验介质应采用肝素化牛血、猪血或羊血;装配两个通用且等同的回路;两个回路初始血液通道试验液容积差不应超过 1%;关键条件包括血流量为制造商临床使用规定的最大值、血中葡萄糖 10 mmol/L、血红蛋白 12 g/dL;标准取样点为试验前、30 min、180 min、360 min。";
|
||||
IsHemolysisReductionSelected
|
||||
? "共用记录要点:血小板/白细胞减少率与“血细胞破坏”共用同一套试样运行与取样记录,减少率以前后标准取样点的细胞计数变化计算。"
|
||||
: "血细胞破坏记录要点:试验介质应采用肝素化牛血、猪血或羊血;装配两个通用且等同的回路;两个回路初始血液通道试验液容积差不应超过 1%;关键条件包括血流量为制造商临床使用规定的最大值、血中葡萄糖 10 mmol/L、血红蛋白 12 g/dL;标准取样点为试验前、30 min、180 min、360 min。";
|
||||
public string HemolysisTemplateGuidance =>
|
||||
"录入建议:先填写试验血液准备和回路运行条件,再在下方表格录入取样数据;系统会自动汇总 ΔfHb、NIH、白细胞减少率和血小板减少率。";
|
||||
IsHemolysisReductionSelected
|
||||
? "录入建议:本项复用“血细胞破坏”已维护的基础条件,仅需核对下方共用取样表和减少率计算结果,无需重复录入试样准备。"
|
||||
: "录入建议:先填写试验血液准备和回路运行条件,再在下方表格录入取样数据;系统会自动汇总 ΔfHb、NIH、白细胞减少率和血小板减少率。";
|
||||
public string HemolysisSharedRecordHint =>
|
||||
IsHemolysisReductionSelected
|
||||
? "当前为“血小板/白细胞减少率”项目。本区沿用“血细胞破坏”同一批试样运行与取样记录,基础条件不重复录入,只核对共用记录和减少率结果。"
|
||||
: "当前录入的试样运行与取样记录会同时服务“血细胞破坏”和“血小板/白细胞减少率”两项,建议先完成基础条件,再统一录入标准取样点。";
|
||||
public string HemolysisSamplingCompletionSummary => BuildHemolysisSamplingCompletionSummary();
|
||||
public bool HemolysisHasMissingRequiredPoints => GetHemolysisMissingRequiredPoints().Count > 0;
|
||||
public string HemolysisRequiredPointAlert => BuildHemolysisRequiredPointAlert();
|
||||
public string HemolysisCalculationSummary => BuildHemolysisCalculationSummary();
|
||||
public string HemolysisCalculationTitle => IsHemolysisReductionSelected ? "减少率计算摘要" : "自动计算摘要";
|
||||
public string HemolysisCalculationDetail =>
|
||||
IsHemolysisReductionSelected
|
||||
? $"白细胞减少率 {FormatHemolysisDisplay(GetHemolysisWhiteCellReduction(), "F1", "%")};血小板减少率 {FormatHemolysisDisplay(GetHemolysisPlateletReduction(), "F1", "%")};{BuildHemolysisSamplingCompletionSummary()}"
|
||||
: BuildHemolysisCalculationSummary();
|
||||
public string HemolysisSamplingSectionTitle => IsHemolysisReductionSelected ? "共用试样运行与取样记录" : "试样运行与取样记录";
|
||||
public string PressureTrendCurrentSummary => $"近端 {ProximalPressureDisplay} / 远端 {DistalPressureDisplay} / ΔP {DeltaPressureDisplay}";
|
||||
public string FlowTrendCurrentSummary => BuildFlowTrendCurrentSummary();
|
||||
public string HemolysisRecordTemplate =>
|
||||
@@ -455,6 +472,7 @@ public partial class MainViewModel : ObservableObject
|
||||
|
||||
partial void OnSelectedItemChanged(InspectionItem? value)
|
||||
{
|
||||
OnPropertyChanged(nameof(HasSelectedItem));
|
||||
OnPropertyChanged(nameof(SelectedItemTitle));
|
||||
OnPropertyChanged(nameof(SelectedItemStatusText));
|
||||
OnPropertyChanged(nameof(SelectedItemCaptureModeText));
|
||||
@@ -469,12 +487,18 @@ public partial class MainViewModel : ObservableObject
|
||||
OnPropertyChanged(nameof(IsAntiCollapseSelected));
|
||||
OnPropertyChanged(nameof(IsRecirculationSelected));
|
||||
OnPropertyChanged(nameof(IsHemolysisSelected));
|
||||
OnPropertyChanged(nameof(IsHemolysisPrimaryInputSelected));
|
||||
OnPropertyChanged(nameof(IsHemolysisReductionSelected));
|
||||
OnPropertyChanged(nameof(HemolysisStandardSummary));
|
||||
OnPropertyChanged(nameof(HemolysisTemplateGuidance));
|
||||
OnPropertyChanged(nameof(HemolysisSharedRecordHint));
|
||||
OnPropertyChanged(nameof(HemolysisSamplingCompletionSummary));
|
||||
OnPropertyChanged(nameof(HemolysisHasMissingRequiredPoints));
|
||||
OnPropertyChanged(nameof(HemolysisRequiredPointAlert));
|
||||
OnPropertyChanged(nameof(HemolysisCalculationTitle));
|
||||
OnPropertyChanged(nameof(HemolysisCalculationDetail));
|
||||
OnPropertyChanged(nameof(HemolysisCalculationSummary));
|
||||
OnPropertyChanged(nameof(HemolysisSamplingSectionTitle));
|
||||
OnPropertyChanged(nameof(PressureTrendCurrentSummary));
|
||||
OnPropertyChanged(nameof(FlowTrendCurrentSummary));
|
||||
OnPropertyChanged(nameof(HasAntiCollapseBaseline));
|
||||
@@ -498,7 +522,13 @@ public partial class MainViewModel : ObservableObject
|
||||
if (value is not null)
|
||||
{
|
||||
LoadSelectedItemDraft(value);
|
||||
return;
|
||||
}
|
||||
|
||||
ResultValue = string.Empty;
|
||||
ResultNote = string.Empty;
|
||||
ResultOperator = OperatorName;
|
||||
SelectedResultStatusText = "待检";
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
@@ -827,9 +857,9 @@ public partial class MainViewModel : ObservableObject
|
||||
[RelayCommand]
|
||||
private void ExportReport()
|
||||
{
|
||||
var outputDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
|
||||
var outputDirectory = ResolveReportOutputDirectory();
|
||||
var timestamp = DateTime.Now.ToString("yyyyMMdd-HHmmss");
|
||||
var batchToken = string.IsNullOrWhiteSpace(BatchNumber) ? "未填写批号" : BatchNumber.Trim();
|
||||
var batchToken = string.IsNullOrWhiteSpace(BatchNumber) ? "未填写批号" : SanitizeFileNameSegment(BatchNumber.Trim());
|
||||
var pdfPath = Path.Combine(outputDirectory, $"检查报告-{batchToken}-{timestamp}.pdf");
|
||||
|
||||
try
|
||||
@@ -1060,6 +1090,7 @@ public partial class MainViewModel : ObservableObject
|
||||
var filtered = FilteredItemsView.Cast<InspectionItem>().ToList();
|
||||
if (filtered.Count == 0)
|
||||
{
|
||||
SelectedItem = null;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2158,6 +2189,7 @@ public partial class MainViewModel : ObservableObject
|
||||
OnPropertyChanged(nameof(HemolysisSamplingCompletionSummary));
|
||||
OnPropertyChanged(nameof(HemolysisHasMissingRequiredPoints));
|
||||
OnPropertyChanged(nameof(HemolysisRequiredPointAlert));
|
||||
OnPropertyChanged(nameof(HemolysisCalculationDetail));
|
||||
OnPropertyChanged(nameof(HemolysisCalculationSummary));
|
||||
OnPropertyChanged(nameof(SelectedItemLiveDisplay));
|
||||
|
||||
@@ -2236,6 +2268,78 @@ public partial class MainViewModel : ObservableObject
|
||||
private double PressureDropFlowPoint(double ratio) =>
|
||||
Math.Max(RatedMaxFlow, 0) * ratio;
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_timer.Stop();
|
||||
_timer.Tick -= OnTelemetryTimerTick;
|
||||
|
||||
foreach (var entry in PressureDropEntries)
|
||||
{
|
||||
entry.PropertyChanged -= OnPressureDropEntryPropertyChanged;
|
||||
}
|
||||
|
||||
foreach (var entry in KinkResistanceEntries)
|
||||
{
|
||||
entry.PropertyChanged -= OnKinkResistanceEntryPropertyChanged;
|
||||
}
|
||||
|
||||
foreach (var entry in RecirculationEntries)
|
||||
{
|
||||
entry.PropertyChanged -= OnRecirculationEntryPropertyChanged;
|
||||
}
|
||||
|
||||
foreach (var entry in HemolysisSamplingEntries)
|
||||
{
|
||||
entry.PropertyChanged -= OnHemolysisSamplingEntryPropertyChanged;
|
||||
}
|
||||
|
||||
HemolysisTestParameters.PropertyChanged -= OnHemolysisTestParametersPropertyChanged;
|
||||
|
||||
if (_telemetryService is IDisposable disposableTelemetryService)
|
||||
{
|
||||
disposableTelemetryService.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTelemetryTimerTick(object? sender, EventArgs e) => RefreshTelemetry();
|
||||
|
||||
private static string ResolveReportOutputDirectory()
|
||||
{
|
||||
foreach (var folder in new[]
|
||||
{
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
|
||||
Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
"Cardiopulmonarybypasssystems",
|
||||
"Reports")
|
||||
})
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(folder))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Directory.CreateDirectory(folder);
|
||||
return folder;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
return AppContext.BaseDirectory;
|
||||
}
|
||||
|
||||
private static string SanitizeFileNameSegment(string value)
|
||||
{
|
||||
var invalidChars = Path.GetInvalidFileNameChars();
|
||||
var sanitized = new string(value.Select(ch => invalidChars.Contains(ch) ? '_' : ch).ToArray()).Trim();
|
||||
return string.IsNullOrWhiteSpace(sanitized) ? "未填写批号" : sanitized;
|
||||
}
|
||||
|
||||
private readonly record struct AntiCollapseComparison(
|
||||
bool HasBaseline,
|
||||
double BaselinePressureDrop,
|
||||
|
||||
1297
tmp_MainWindow.xaml
Normal file
1297
tmp_MainWindow.xaml
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user