mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-08-14 05:21:42 +08:00
Compare commits
No commits in common. "987a688e8ec16cc08de6f01297b2894fd069f91a" and "19a3c1768cf06dcfac1495954ff7e7ba9b47b8c0" have entirely different histories.
987a688e8e
...
19a3c1768c
@ -109,7 +109,6 @@ echo "helloworld!"
|
|||||||
### Shell 字符串入门
|
### Shell 字符串入门
|
||||||
|
|
||||||
字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号。这点和 Java 中有所不同。
|
字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号。这点和 Java 中有所不同。
|
||||||
在单引号中所有的特殊符号,如$和反引号都没有特殊含义。在双引号中,除了"$","\"和反引号,其他的字符没有特殊含义。
|
|
||||||
|
|
||||||
**单引号字符串:**
|
**单引号字符串:**
|
||||||
|
|
||||||
|
@ -38,10 +38,10 @@ tag:
|
|||||||
|
|
||||||
我们知道网络通信的双方必须要采用和遵守相同的协议。TCP/IP 四层模型是下面这样的,序列化协议属于哪一层呢?
|
我们知道网络通信的双方必须要采用和遵守相同的协议。TCP/IP 四层模型是下面这样的,序列化协议属于哪一层呢?
|
||||||
|
|
||||||
1. 网络接口层
|
1. 应用层
|
||||||
2. 网络层
|
2. 传输层
|
||||||
3. 传输层
|
3. 网络层
|
||||||
4. 应用层
|
4. 网络接口层
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -51,7 +51,7 @@ tag:
|
|||||||
|
|
||||||
## 常见序列化协议对比
|
## 常见序列化协议对比
|
||||||
|
|
||||||
JDK 自带的序列化方式一般不会用 ,因为序列化效率低并且部分版本有安全漏洞。比较常用的序列化协议有 hessian、kryo、protostuff。
|
JDK 自带的序列化方式一般不会用 ,因为序列化效率低并且部分版本有安全漏洞。比较常用的序列化协议有 hessian、kyro、protostuff。
|
||||||
|
|
||||||
下面提到的都是基于二进制的序列化协议,像 JSON 和 XML 这种属于文本类序列化方式。虽然 JSON 和 XML 可读性比较好,但是性能较差,一般不会选择。
|
下面提到的都是基于二进制的序列化协议,像 JSON 和 XML 这种属于文本类序列化方式。虽然 JSON 和 XML 可读性比较好,但是性能较差,一般不会选择。
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ public class RpcRequest implements Serializable {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
> 序列化号 serialVersionUID 属于版本控制的作用。序列化的时候 serialVersionUID 也会被写入二进制序列,当反序列化时会检查 serialVersionUID 是否和当前类的 serialVersionUID 一致。如果 serialVersionUID 不一致则会抛出 `InvalidClassException` 异常。强烈推荐每个序列化类都手动指定其 `serialVersionUID`,如果不手动指定,那么编译器会动态生成默认的序列化号
|
> 序列化号 serialVersionUID 属于版本控制的作用。序列化的时候 serialVersionUID 也会被写入二级制序列,当反序列化时会检查 serialVersionUID 是否和当前类的 serialVersionUID 一致。如果 serialVersionUID 不一致则会抛出 `InvalidClassException` 异常。强烈推荐每个序列化类都手动指定其 `serialVersionUID`,如果不手动指定,那么编译器会动态生成默认的序列化号
|
||||||
|
|
||||||
我们很少或者说几乎不会直接使用这个序列化方式,主要原因有两个:
|
我们很少或者说几乎不会直接使用这个序列化方式,主要原因有两个:
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ Kryo 是一个高性能的序列化/反序列化工具,由于其变长存储
|
|||||||
|
|
||||||
另外,Kryo 已经是一种非常成熟的序列化实现了,已经在 Twitter、Groupon、Yahoo 以及多个著名开源项目(如 Hive、Storm)中广泛的使用。
|
另外,Kryo 已经是一种非常成熟的序列化实现了,已经在 Twitter、Groupon、Yahoo 以及多个著名开源项目(如 Hive、Storm)中广泛的使用。
|
||||||
|
|
||||||
[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) 就是使用的 kryo 进行序列化,序列化和反序列化相关的代码如下:
|
[guide-rpc-framework](https://github.com/Snailclimb/guide-rpc-framework) 就是使用的 kyro 进行序列化,序列化和反序列化相关的代码如下:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
/**
|
/**
|
||||||
@ -130,7 +130,7 @@ public class KryoSerializer implements Serializer {
|
|||||||
try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
|
try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
|
||||||
Input input = new Input(byteArrayInputStream)) {
|
Input input = new Input(byteArrayInputStream)) {
|
||||||
Kryo kryo = kryoThreadLocal.get();
|
Kryo kryo = kryoThreadLocal.get();
|
||||||
// byte->Object:从byte数组中反序列化出对象
|
// byte->Object:从byte数组中反序列化出对对象
|
||||||
Object o = kryo.readObject(input, clazz);
|
Object o = kryo.readObject(input, clazz);
|
||||||
kryoThreadLocal.remove();
|
kryoThreadLocal.remove();
|
||||||
return clazz.cast(o);
|
return clazz.cast(o);
|
||||||
@ -146,7 +146,7 @@ Github 地址:[https://github.com/EsotericSoftware/kryo](https://github.com/Es
|
|||||||
|
|
||||||
### Protobuf
|
### Protobuf
|
||||||
|
|
||||||
Protobuf 出自于 Google,性能还比较优秀,也支持多种语言,同时还是跨平台的。就是在使用中过于繁琐,因为你需要自己定义 IDL 文件和生成对应的序列化代码。这样虽然不灵活,但是,另一方面导致 protobuf 没有序列化漏洞的风险。
|
Protobuf 出自于 Google,性能还比较优秀,也支持多种语言,同时还是跨平台的。就是在使用中过于繁琐,因为你需要自己定义 IDL 文件和生成对应的序列化代码。这样虽然不然灵活,但是,另一方面导致 protobuf 没有序列化漏洞的风险。
|
||||||
|
|
||||||
> Protobuf 包含序列化格式的定义、各种语言的库以及一个 IDL 编译器。正常情况下你需要定义 proto 文件,然后使用 IDL 编译器编译成你需要的语言
|
> Protobuf 包含序列化格式的定义、各种语言的库以及一个 IDL 编译器。正常情况下你需要定义 proto 文件,然后使用 IDL 编译器编译成你需要的语言
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ Github 地址:[https://github.com/protostuff/protostuff](https://github.com/pr
|
|||||||
|
|
||||||
### hessian
|
### hessian
|
||||||
|
|
||||||
hessian 是一个轻量级的,自定义描述的二进制 RPC 协议。hessian 是一个比较老的序列化实现了,并且同样也是跨语言的。
|
hessian 是一个轻量级的,自定义描述的二进制 RPC 协议。hessian 是一个比较老的序列化实现了,并且同样也是跨语言的。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -228,9 +228,11 @@ HotSpot 虚拟机中字符串常量池的实现是 `src/hotspot/share/classfile/
|
|||||||
|
|
||||||
JDK1.7 之前,字符串常量池存放在永久代。JDK1.7 字符串常量池和静态变量从永久代移动了 Java 堆中。
|
JDK1.7 之前,字符串常量池存放在永久代。JDK1.7 字符串常量池和静态变量从永久代移动了 Java 堆中。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
**JDK 1.7 为什么要将字符串常量池移动到堆中?**
|
**JDK 1.7 为什么要将字符串常量池移动到堆中?**
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2022-09-06T14:35:41.829Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.2.8 Chrome/102.0.5005.167 Electron/19.0.15 Safari/537.36" etag="dGLsEM3-UfL9EMsk75H_" version="20.2.8" type="device"><diagram id="Xgdt_0h40LWhFTECzWBk" name="Page-1">7Vltb5w4EP41lq4fEgHmxXyEzSZ3OZ10p5zU3n2pvOBlaQzeAye76a8/2xiWFzdKU9imUhMpwTPgl+eZGY/HAK6K402F97s/WEoocKz0COAVcBzkeOKvFDw1gtDVgqzK00ZknwR3+WeihZaWPuQpqQcvcsYoz/dDYcLKkiR8IMNVxQ7D17aMDkfd44xMBHcJplPp+zzlOy21/fCk+JXk2a4d2vfcRrPByX1WsYdSD1iykjSaArf96EXWO5yyQ08E1wCuKsZ481QcV4RKWFvImu+uv6Dt5lyRkr/kg03ooL94Xe7RP671wK/rKC0udC+PmD5oLPRk+VMLjlodkZ3YAMaHXc7J3R4nUnsQ1iBkO15Qra7vCU/kui3R2LKSa7JtX7Qziuta6zo0ZCPF9a4bYZtTumKUVaKt4ITxdKntvEnFybEn0ku/IawgvHoSrxyHpqYttGPlcOLb87Vs16PabV/E2sayrusT1uJBw/0V0DvnhP4MCPtjiOEUYtszQWwvBTGcQrwOQXgFwhCsfYAsgGyw9gC6BiGSKhTI52+ioQ8ucOAWJSRJJD28YvdkBPuznM3AydjsPTe49KasOJ20z4u/FC2uwfJ9yiUee1wOsPf/e5DxMU4a3CKhrLLNL55YthjbOv1/pwCzJIYXtQJRvmv7+6NStP2Ip0z9F6xHwg4CsA5AtAKRD9YuiBGIHamSDz2DELYS2yCy2mmKVTcz1Z3NaTCpR1Dqfi+Dgagzhc5k0GVgsBnomGzG6z6f3Wq8mePlGHdM0PZ1jvrFfW0ODw6HdEB/GlUdU1RFS3mvbwiqwl1ECLXkQ2QDtJIeI3wr9p91phF7AhE+2tJMVBh2L0zzrBTNROBMhDyW+OYiv4u0osjTVA5jtImh1YzJHTC/KNNoGKthaGAaGZheLEMJJkzf/va3ipMxiKCKnM0OKphegRC2QRXNu4Nut84rd9Al6YIv2lmhga/F9lW0bIQkttibgrdOBLReGCCX85vQECEDGfRilXeEa4Bi5UbXMlrKRFTEw5nTTk/+voor2e711PwszGEw4tBwOjMfHZaisM2bBxx2KaMPojWIvZ8cPsch+u4cGoobMi8R+Yc6/sUQiOSqSVmimfesH5o61zfsZOelblocuVQ/P0jSuGNV/lnIMG0ZM2WR9gJU2s6IS0MVxj1nEmmbijBTL/TkqSGOwPpa5pII/Umq4oaUbTt8+8Q75+XZHfLcpTg9nrtU6DxEf3tZR0zNago6vad3wLF6xZ0tLnL61HwjOsLFXikhlDWTHaGPRHI50Qw7OVWIHG9/HOmaWUplyaoC06H6oLGUereZp1JSwoU1XYilJnmZGb+XJnuhrU+qtQEO1LkwrlJ3b/WmppS8wmW9FZ223cvLBv3CgVXpcPT+52le7ynWsOUlzXtfbinDvN/juFh2e/W7fem/tPilHfNrqtVDn5rjTNDe3DyNdq/+jmYbvAMu5h2G8pVMKMUB2v8Z20Y3Cd6w5mWKbaa7mjlC2+rTh+zfq4+Px/dpeKD3h+yjuzHdkskNy5OVY3kGWKlTgbpHiAO9ZYXRLX7EN/Jms/WcTWUMgi+vWYtDpDiAqIJLFKtLDD3UJzGUukS9TMo3aE3SLijeEBp316XjwZ/PgmP1q/rkmOesNKVVsxcW4LgW7nrGIk9gSo1fUwgXzdN9sNL17tvh+n8=</diagram></mxfile>
|
<mxfile host="Electron" modified="2022-08-21T10:24:28.581Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="bd3tHMP7a5qsqreZ313q" version="13.4.5" type="device"><diagram id="Xgdt_0h40LWhFTECzWBk" name="Page-1">7VlLb+M2EP41BLqHBHqRoo6SI6dNUaBFCuy2lwUt0bI2tOTKTOzsry9JUbYosYmDtdwssPLB5Ayf880Mh0Pgz9b724ZsVr/VOWXAc/I98G+A57mug8SfpDy3lCgKW0LRlLludCTcl1+pJjqa+ljmdGs05HXNeLkxiVldVTTjBo00Tb0zmy1rZs66IQUdEe4zwsbUj2XOV92+UHRk/EzLYtVNjWDQctaka623sl2RvN71SH4K/FlT17wtrfczyqT0OsG0/eb/wT2srKEVP6XDIvLwH3xbbfBfgfPI59s4X1/pUZ4Ie9Q71ovlz50ImvqxyqkcxAV+sluVnN5vSCa5OwG6oK34mmn29oHyTO7bEZVlXXENqYtEvWBku9W8gzRkZbyVbl204XTfI+mt3dJ6TXnzLJrsTYXRenaQ+u6IGkSatuoBBh1NJFpTisPQR1mKghbnG0TrXVK0Z5AgQq+L0IUWEQbRVCL0xyJMIxDdgCgCKQLYAdgFKQR4DiIsWTiU5W8S87JkbFazulF9/SXOaJZJ8fOmfqA9zgLDADoXAMaHkQFMEMAxML4FmHAqXAKLaiPGpSw2pDKEj/55lA4uyVrBxYLZFIufoNiymNs5/n9QwnKk/K62SoCyrYs2e8XoxhGlQv0L2GOhCCFIQxDPQIxAGoAEg8STLFnoaYRQlsQFsdMtU+y6Xake7Jwak0OK88CmMdhb+AhdRGPC6xAaSgMjizX73jW8oNrAM3vEoeAJxUurqaIM08Xy/zyeROBjwOE7Yzg8m3PFU4GBLL5VGI3wpI4sxC7AM2k3wsIS9KJJDSAUEuGDk8vAo6orOgBPkwgri0pUMyFnKuiJlG8pgrFYM9ZlnstprIphqs4QXAP5SZHGgYm0b0EaW5D2pkI6HCF998ufylsmIPaV/2wPUoH0DER+51rxeQ/S5dKzH6Q5WiD4qlucEjPfjHxgND5gL2uceFpPSV1xSIU2LCIU+uQ9YXGyo/TQVGBEFk8ZSueXqCgkSgFOlDnNpdeUcanwi2eOQqH8WY829b0GmKz3OrXfxECGAyDRqdeJqXDsrogGkIcoEoE4BQn8AeRrQAYn3wsnA9KStZCRiohI1L0w8YHw4G0QE5/5FPv+8YOO5fp4WfzGqZFr9X0nseSqbsqvgkZYh5gtuHSnyHJ5A1sMx7YYXDK2dG0pmrEpQnmZSGKQzmWIifHvtFnf0kq531SeoOJAxcL9Ol2L6P2rgndZ5AMT+UMM1EP+ECtdBvpvzwKJpTlt/qdX+gA8p5cLWpJ1yZ7bPmIgst4opu/LFMuKsicqsRxxzEGOCSUPbvYDXrtKyazqZk2Yyd5pWUp+0K5TMRnlQpuuxFazsiqs/aXKXmntk2ytgAa7FMpV6eGd3tIUkzek2i7FoN3wQp+7Bru6yc3Z+93zcrthRIutrFjZ67lkNeH9EYe5tbubX91rdGquTBvmW7LXpk2d49KAzPSKa7EO17VYhz+ZdViSXdLbiZs2+uHbhgGKmau0+Tbb2805XNvsy6fi75vPT/uPebRjD7vic7CwvYrJIwzKRLO8H8zUjUG9OyShPrKi+I48kVv5XtlZzqKxOsHTU9zilikuJyozEyfq0UNP9UVMpZ5Gr7PqHWqT1AtGFpQlJHsoFH04+ctxcaJ+akxOeFlXtkDLooYjnbNo5gtZ80GgbMncuaEtUA67NPobNFFUj2+/itd7QvfTfwE=</diagram></mxfile>
|
@ -1 +1 @@
|
|||||||
<mxfile host="Electron" modified="2022-09-06T14:36:27.978Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.2.8 Chrome/102.0.5005.167 Electron/19.0.15 Safari/537.36" etag="d-arCyLaYE9YaHgRQ8RU" version="20.2.8" type="device"><diagram id="Xgdt_0h40LWhFTECzWBk" name="Page-1">7Vltb9s2EP41BNYPMUS9Uh8lx86WYcCGDOi2LwUt0bIaSvIkJnb660dSlCzKbJamkpsCTYBEvJP48jx3x+MROMvieFPj/e63KiUU2FZ6BM41sG1ke/yvEDy1gtBVgqzO01YET4K7/BNRQktJH/KUNNqLrKooy/e6MKnKkiRMk+G6rg76a9uK6qPucUbOBHcJpufS93nKdkoK/fCk+Jnk2a4b2vfcVrPByX1WVw+lGrCsStJqCtz1oxbZ7HBaHQYiZwWcZV1VrH0qjktCBawdZO13689o+znXpGQv+WAT2ugP1pR79LdrPbB1E6XFlerlEdMHhYWaLHvqwJGrI6ITCJz4sMsZudvjRGgP3Bq4bMcKqtTNPWGJWLfFG9uqZIps6PN2RnHTKF2PhmikuNn1I2xzSpcVrWrelnA68flSu3mTmpHjQKSWfkOqgrD6ib9y1E1NWWjPyuHEt+cr2W5AteMqIVY2lvVdn7DmDwruL4DeviT0F0DYH0PsnEMMPRPEzlwQO+cQr0IQXoMwBCsfIAsgCFYeQGsQIqFCgXj+KhqG4ALb2aKEJImgh9XVPRnB/ixnU3Biw0UXnBUtDjTQYgcL75wYfy5eXIPp+5QJQPa41MD3/30QATJOWuAirqyzzU8eXzcf2zr9fycRswSIV41EUbwL/f1RKrp++FMm/3PaI24IAVgFIFqCyAcrF8QIxLZQiYeBRXBjiSGIrG6afNXtTFVnU1pM6hGUut/MYiBaBLrFuPBkREOjcWyT0Xi9KU1uNt7EEXMMPCZo+zpX/ezONgEjdvj/Dmyb4iqay319Q1jl/sKDqCUeIgjQUrgMd67Yf9abRuxxRNhoUzNRYdi/MM2zkjcTjjPh8ljgm/MML1KKIk9TMYzRJnSrGZOrMT8r00jfQfvcY8g0MjBtz8V0cMb07S9/ykAZg8iRobPdQznTSxA6XVRF0+6h2639yj10TrocN9TjpIEu6Bjomm1fRfMGSAL53hS8PR5GXmO9MD7O5zahIUAGIubFMu8IVwDF0ovWIliKTJSHw4nzTk/8voor0R701P7MzGEw4tBwPDOeHWY7nXWbrMZhnzL6IFqB2PvB4XMcom/OoaG6IdISnn7I81/sAJ5btRlLNPGW9V1T5/qGdP+y1J1XRxby5zvJGXdVnX/iMkw7xkxJJJyBSmiPuDSUYdxL5pDQVIU590JPHBriCKzWIpVE6HdSFzek7Nrh2yfevizPrs5zn+IMeO5TocsQ/fVlHT41qy3oDJ7eAdsaFHe2uMjpU/sN7wgXghTV3Y7QRyKoHCv0Lk71IdvbH0e6do5CWVZ1gamuPigkhd5tZymVlDBuS1d8oUleZsbvhcFeKdsTamV+mjrnplWq7q3B1KSS1bhstrzTrntx16BeOFR1qo8+/DzNmz3FCrS8pPngyy2tMBv2OC6V3V7/ChfBS0tfyi2/pFite9QUJwJfP5lBg29AaPCN2SrR0FC7EukkPz37PyLbqATp6QUvU2QzXdVMEdiWH//K/rn+8Hh8n4YHen/IPrgb0yWZ2K48UTcWJ4ClPBPIa4Q4UBtWGN3iR3wjLjY7z9nUxhD48oo1P0Ly44estkSxvMNQQ33kQ8k71EVSvkFrEnZB8YbQuL8tHQ/+fA4cy1/ZJ8Msr0pTUjV5WWFUBrdN5Z3AlBS/pgLOm6erYKkbXLU7q/8A</diagram></mxfile>
|
<mxfile host="Electron" modified="2022-08-21T10:24:46.856Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="LR0y7CYq0n5yvvFi4cRd" version="13.4.5" type="device"><diagram id="a2K6uZTu2fNJCbd-G3UG" name="Page-1">7Vnfc6M2EP5rNNN7SAYQEuIRHJI27c30xje9mb7JIGwuAhxMYuf++kpC2MjoLs7UuLmZ2g+GXf38vt3Vag3grNzdNXS9+lhnjAPPyXYA3gDPc10Hix8peekkYRh0gmVTZLrRQTAvvjEtdLT0qcjYxmjY1jVvi7UpTOuqYmlryGjT1FuzWV5zc9Y1XbKRYJ5SPpZ+KbJ21e8LhwfFr6xYrvqpMfI7TUn71normxXN6u1ABBMAZ01dt91TuZsxLtHrgen63X5Hu19Zw6r2lA7k41/+Y5bMH2FVovnHB4i/fL1y9WqfKX/SW9arbV96DJr6qcqYHMUFMN6uipbN1zSV2q1gXchWbcm1evPA2lRu3BEveV21mlMXi/clp5uN1u3hkC/jvejtPbOmZbuBSO/tjtUla5sX0WRnWow2tD3s2wNtCGvZasAYcrSQalNZ7oc+gCkeNJ5vwNa7JLRnQBDj1yF0kQVCP5wKQjiGMAlBeAPCECQYEAcQFyQIkFsQEqkigXz+VzDnBeezmteN6gtzkrI0lfC3Tf3ABpoFQT5yLkFMYBIDfTQmBlqICabixRY1MG8lFmtaGeDjxycZ4eK0Ay4Syma5+AWJLYu5ncPvBwWWI/G72igAZVsXr3dK0Y8jnpbqV9AeCUMIQBKAaAYiDBIfxATEnlTJh4FFCGOJXRA5/TLFrruV6sHOaTEZYiTzbRZDvAXE+CKuHFwjw2YQtNmM17e6iNWgMwfEY9wpI7nVU3FK2CL/L08nkfiYLuyMY6tni61kKjKwJbQKnxGB1JEPkQvITLqNcLAY/9CjjigUiLRHB5fBR1VX7Ig8LaK8WFbiNRU4MyGPJb6FSMYirSiLLJPTWA3DNJ1jcg3mJ2Wa+CbT0MI0sTDtTcV0MGL6/rfPKljGIIIqfHbnqGB6BkLYR1Zy3nM0zz37OZrhBUavRsUpOYPm+YrCcay8rHOSaSMlc8UZFdi4CHEA6Xvi4uRA6eGpyAgtkTKQwS9WSUiYABIrd7qVUVOmpSIunjkJRfJrPdrU5zXC5PugU/eZmMjjpBWfepuYisf+hmgQuU8iMYgSEKP/iXyNSP/ka+FkRLoWIkWmIjISdS2MIRARvEtiojOfYj8/f8ix3AQuy9+4MnKtPj9JLrmqm+KbkFHeM2ZLLt0pilzekS8GY1/0L5lburYKzdgVkbxMxBFIbmWKScifrCnvWKXCbyJPUHGgEhF+nb5F+P5Nwbss877J/D4HGjC/z5UuQ73tOv+2IpBYmtOVfwZPH4DnDEpBOS0L/tL1EQPRcq2UEMoKy4rxZya5HGnMQQ71JA+td0e6bpVSWdVNSbmp3mospd7v1qmUnLXCmq7EVtOiWlr7S5O90tYn1doADXUhjKvSwzuDpSll29Bqk4tB++GFPfcNtnWTmbMPu2fFZs2phq2oeDHomfOatsMRj0tr9ze/u9fBqaUy7ZhvKV6f45qAzYKKa/EH17X4AzyDP+zi+R83Zf0JJyvyd1C1n7KgvLIlJSLuIVmclEnlTKWZqlYdBzrOhdE9faZ38k+uHu5FY/Wc08ui4moiMlp1nY9iVSjXU30VU6n/067T6h2GV2kYnC4Yj2n6sFTy48l/nEzF6qvGbGlb1JXtdLbE5ZHRWUzz+3aITsiuAlt2ta/QvsESxevhD0OlG/zvCpN/AA==</diagram></mxfile>
|
@ -0,0 +1 @@
|
|||||||
|
<mxfile host="Electron" modified="2022-08-21T10:29:39.387Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="mPmJMHXkRfkTfWY3qFe_" version="13.4.5" type="device"><diagram id="gYNeldG73rc2GvLzjtzR" name="Page-1">7Vnfc6M2EP5rNNN7SIafQjyCQ9ImvU5vcjOdPsogMBcZuViJnfz1lYSwkVETZ864uZnDD4ZdSUjft7taLcCfLbc3LV4tPrOCUOA5xRb4V8DzXNeB4k9KnjtJHEedoGrrQjfaC+7rF6KFjpY+1gVZGw05Y5TXK1OYs6YhOTdkuG3ZxmxWMmq+dYUrMhLc55iOpX/VBV90UuRFe/mvpK4W/ZtdGHeaJe4b65WsF7hgm4HIz4A/axnj3d1yOyNUgtfj0vW7/g/tbmItafgxHdZ/o+1dUf/u3aLqJVvelhu2vdCjPGH6qBesJ8ufewRa9tgURA7iAj/dLGpO7lc4l9qN4FzIFnxJtXr9QHgu1+2Ih5I1XDPqQvFcUbxea90ODfkwXko/L9Jysh2I9NJuCFsS3j6LJlvTXrSZ7VDf7EkLoZYtBoSFjhZibSjVbug9luJGw/kOaL1zQnsCBCF8G0I3tEAYxFNB6I8hzGIQX4E4BhkEyAHIBVkI0DWIkVShSN5/F8xlTemMUdaqvn6JcpLnEn7esgcy0MxRGITOOYiJTGL8IBwT41uIiabiJbCYNqRcYrHCjQE+/OdRBrg074BLhLKt5r+EYsni3c7+/5MCy5H4XawVgLKtC1dbpejHEXeV+he0J8IQIpBFIJmBBIIsACkCqSdV8mZgEcJYUhckTj9NsepupnqwU1pMERJUBDaLQd7ch/AsrhxdhobNhL7NZry+1VmsJjxxQDzEHRNUWj0V5ojMy/9zdxJpj+nCzji2erbYiqYiA1pCq/AZEUgdeZO4AM2k2wgHS+GrHnVAoUCEH2xcBh8Na8gBeVqEaV014jEXOBMhTyW+tUjFEq1Y1kUhX2M1DNN0Dsk1mJ+UaRSYTPsWppGFaW8qpqMR07e/fVXBMgWJr8Jnt48Kpmcg9vvIik67j5alZ99HCziH4ZtRcUrOfHN/DeNxrDyvc6JpIyVxxR4V2biIYeTjj8TF0YHSg1OREVsiZSSDX6qSkDgDKFXudC2jpkxLRVw8cRIayp91a1PXW4TJ50Gn7pqYyMOkFR57mpiKx/6EaBC5SyIhSDKQhj+JfIvI4Ohj4WREWooWMlMRGYk6FqY+EBG8S2KSE+9iPz5/oWM5CZyXv3Fl5FJdP0guuWBt/SJkmPaM2ZJLd4oil3fgi9HYF4Nz5paurUIzdsVQHibSBGTXMsVEqD+GS2St1YKDKoCAbTsuAXwmHHfE7U/13YiDEkEmN2ixXyMR3Z1+AvHHtzTvvIYVmIa1S7EGhrVLxc5jWd9fYxJTc7rq0uDuE/CcQaWpxMuaPnd9xEB4uVJK35cFnAWhT0RyOdKYgwwMNZSGaui6WUplw9olpqZ6o7GU+qCbp1JSwoU1XYil5nVTWftLk73Q1ifV2gANdS2Mq9HDO4OpKSVvcbMuxaD98MKe+wYb1hbm24fdi3q9oljDVje0HvQsKcN8OOKh295e3bmX6NhKnHbM99TGTZ86xZkEmtUb1+IdrmvxDv8E3kHuw69/3uQPqJ19cdEfqy93q8L22UYG2VBWQmUGO1M5rSqMp5GOenFyi5/wjfye1oM/b4+Jvq/UYMU5SKTPqnaQpKoqr1/1TbxKfbq7zJsPGGylmVA8JzTF+UOl5Icvfz1zS9VPjckxr1ljSwVOfjaGR6RykS2V25WD32GJ4nH/cVLpBp94/exf</diagram></mxfile>
|
Loading…
x
Reference in New Issue
Block a user