From 377b60fd67ecabb38778c70161d8814fd9556e25 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 30 Jul 2026 21:56:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=B6=88=E4=BA=86=20i8*=20=3D=3D=20i8?= =?UTF-8?q?*=20=E5=AE=9E=E9=99=85=E4=BD=BF=E7=94=A8=20strcmp=20=E7=9A=84?= =?UTF-8?q?=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- TransPyV/output/81eb28ba912467a6.deps.json | 2 +- TransPyV/output/af9484a65085bf4b.deps.json | 2 +- TransPyV/project.json | 3 +- TransPyV/temp/_phase1_manifest.json | 2 +- TransPyV/temp/_sha1_map.txt | 30 +- TransPyV/temp/_shared_sym.json | Bin 1935807 -> 1936696 bytes includes/_dict.vp | 2 +- includes/hashtable.vp | 2 +- includes/json/__init__.vp | 6 +- includes/llvmlite/README.md | 32 +- includes/string.vp | 2 +- includes/vqt6 copy/README.md | 16 +- includes/vqt6/README.md | 16 +- lib/core/Handles/HandlesExprOps.py | 20 +- output/0aee670b21336458.deps.json | 1 - output/2fc26eea087ef83c.deps.json | 1 - output/31e49accebfc8aac.deps.json | 1 - output/365bda2247672994.deps.json | 1 - output/456f759a4386bff4.deps.json | 1 - output/48fa8cc758d3826b.deps.json | 1 - output/4c1a951897705690.deps.json | 1 - output/50a9a323abc4f8b6.deps.json | 1 - output/51f0144d6e8188d9.deps.json | 1 - output/66de93aaeebc0601.deps.json | 1 - output/769a4c9b8dda31e0.deps.json | 1 - output/7eebc4cb93b5411e.deps.json | 1 - output/81eb28ba912467a6.deps.json | 1 - output/83ba314b4637eec9.deps.json | 1 - output/888ea5bd6ab516ae.deps.json | 1 - output/8f12094c840be06a.deps.json | 1 - output/91deafbda43b7059.deps.json | 1 - output/991fcea935d9abd6.deps.json | 1 - output/9b6b85241ca93967.deps.json | 1 - output/a46e7c3dca673846.deps.json | 1 - output/af9484a65085bf4b.deps.json | 1 - output/b364fabc3464f01d.deps.json | 1 - output/b9a78482fe087bf5.deps.json | 1 - output/be8c2d7b882881c8.deps.json | 1 - output/c2f9cecc28b371d3.deps.json | 1 - output/cc996d05f2d77de1.deps.json | 1 - output/ce731971ddc0446d.deps.json | 1 - output/d1a9872c0f1dcc87.deps.json | 1 - output/d9322f0db660edd8.deps.json | 1 - output/da9ba7d2c32b72ad.deps.json | 1 - output/ef39899ab2293109.deps.json | 1 - output/f05b14a2ad5767a7.deps.json | 1 - output/fa1da4500865813e.deps.json | 1 - wiki/01-overview.md | 54 +- wiki/05-classes.md | 4 +- wiki/10-imports.md | 12 +- wiki/12-project.md | 22 +- wiki/13-bootstrapping.md | 40 +- wiki/all.md | 3555 -------------------- 54 files changed, 129 insertions(+), 3730 deletions(-) delete mode 100644 output/0aee670b21336458.deps.json delete mode 100644 output/2fc26eea087ef83c.deps.json delete mode 100644 output/31e49accebfc8aac.deps.json delete mode 100644 output/365bda2247672994.deps.json delete mode 100644 output/456f759a4386bff4.deps.json delete mode 100644 output/48fa8cc758d3826b.deps.json delete mode 100644 output/4c1a951897705690.deps.json delete mode 100644 output/50a9a323abc4f8b6.deps.json delete mode 100644 output/51f0144d6e8188d9.deps.json delete mode 100644 output/66de93aaeebc0601.deps.json delete mode 100644 output/769a4c9b8dda31e0.deps.json delete mode 100644 output/7eebc4cb93b5411e.deps.json delete mode 100644 output/81eb28ba912467a6.deps.json delete mode 100644 output/83ba314b4637eec9.deps.json delete mode 100644 output/888ea5bd6ab516ae.deps.json delete mode 100644 output/8f12094c840be06a.deps.json delete mode 100644 output/91deafbda43b7059.deps.json delete mode 100644 output/991fcea935d9abd6.deps.json delete mode 100644 output/9b6b85241ca93967.deps.json delete mode 100644 output/a46e7c3dca673846.deps.json delete mode 100644 output/af9484a65085bf4b.deps.json delete mode 100644 output/b364fabc3464f01d.deps.json delete mode 100644 output/b9a78482fe087bf5.deps.json delete mode 100644 output/be8c2d7b882881c8.deps.json delete mode 100644 output/c2f9cecc28b371d3.deps.json delete mode 100644 output/cc996d05f2d77de1.deps.json delete mode 100644 output/ce731971ddc0446d.deps.json delete mode 100644 output/d1a9872c0f1dcc87.deps.json delete mode 100644 output/d9322f0db660edd8.deps.json delete mode 100644 output/da9ba7d2c32b72ad.deps.json delete mode 100644 output/ef39899ab2293109.deps.json delete mode 100644 output/f05b14a2ad5767a7.deps.json delete mode 100644 output/fa1da4500865813e.deps.json delete mode 100644 wiki/all.md diff --git a/README.md b/README.md index 688813a..fe188ac 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,13 @@ TransPyC 已用自身实现以下组件,证明其作为系统级语言的成 - **自研 LLVM IR 生成库** —— [includes/llvmlite/](includes/llvmlite/)(~1,500 LOC),用 TransPyC 自己写的 IR 文本生成器,18/18 测试通过 - **zlib 移植** —— [Test/ZlibTest/](Test/ZlibTest/),完整 deflate/inflate/huffman/checksum(~1,900 LOC) - **Win32 FFI 绑定** —— [includes/w32/](includes/w32/),file/memory/process/sync/console 全覆盖 -- **泛型容器** —— [includes/linkedlist.py](includes/linkedlist.py),`@t.NoVTable` + PEP 695 递归泛型继承 `class GNode(GSListNode[GNode])` +- **泛型容器** —— [includes/linkedlist.vp](includes/linkedlist.vp),`@t.NoVTable` + PEP 695 递归泛型继承 `class GNode(GSListNode[GNode])` ## 核心设计理念 - **Python 语法,LLVM 语义**:源文件是合法的 Python 语法,但通过 `t` 模块类型注解赋予 LLVM 级别的语义 - **类型注解即编译指令**:类型注解决定 LLVM IR 的生成,不是可选的提示 -- **两阶段编译**:先提取声明接口(`.pyi` + `.stub.ll`),再翻译源文件为含代码的 `.ll` +- **两阶段编译**:先提取声明接口(`.vpi` + `.stub.ll`),再翻译源文件为含代码的 `.ll` - **SHA1 命名空间**:每个源文件按内容 SHA1 哈希命名,自动消除跨模块符号冲突 - **零运行时开销**:编译为原生代码,无 GC、无解释器、无虚拟机 diff --git a/TransPyV/output/81eb28ba912467a6.deps.json b/TransPyV/output/81eb28ba912467a6.deps.json index 666c8e6..46f055c 100644 --- a/TransPyV/output/81eb28ba912467a6.deps.json +++ b/TransPyV/output/81eb28ba912467a6.deps.json @@ -1 +1 @@ -{"w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "sys": "0c67644125bea0fd", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "lib.core.Handles.HandlesFunctions": "1073ffca7e27aae5", "HandlesFunctions": "1073ffca7e27aae5", "lib.core.Handles.HandlesAnnAssign": "15bb32adb7093ed7", "HandlesAnnAssign": "15bb32adb7093ed7", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "llvmlite.__init__": "1d74d1d3a174c684", "__init__": "f3444ec56937284f", "llvmlite": "1d74d1d3a174c684", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "ast.base": "22bc0df83b3f0e62", "base": "22bc0df83b3f0e62", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "stdio": "285b6aa29a34754d", "posix": "28de517e3820658a", "lib.core.Handles.HandlesAssign": "2b59175b77f1304e", "HandlesAssign": "2b59175b77f1304e", "llvmlite.__types": "2d8debefda779c40", "__types": "2d8debefda779c40", "hashtable": "2fbec3db55b30ad4", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "lib.core.Handles.HandlesStruct": "371fa89e15d8c015", "HandlesStruct": "371fa89e15d8c015", "stdlib": "3aa6057398be5673", "lib.StubGen.Converter": "3c5f1c61545644a9", "Converter": "3c5f1c61545644a9", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesFor": "456fb516ba3c5002", "HandlesFor": "456fb516ba3c5002", "lib.Projectrans.Utils": "4650533467115342", "Utils": "4650533467115342", "main": "484879ffecdf2b08", "lib.core.Handles.HandlesMain": "4a7b57e6bd18f65e", "HandlesMain": "4a7b57e6bd18f65e", "lib.core.Handles.HandlesReturn": "4c644ade1f0d6d02", "HandlesReturn": "4c644ade1f0d6d02", "string": "4daf5ed3f8e421a1", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "llvmlite.__builder": "5a1d8c48f1243746", "__builder": "5a1d8c48f1243746", "lib.core.Handles.HandlesTranslator": "62805d8ad3e9b5ba", "HandlesTranslator": "62805d8ad3e9b5ba", "lib.core.Handles.HandlesImports": "6293eee0a5805aa5", "HandlesImports": "6293eee0a5805aa5", "lib.core.Handles.HandlesBase": "63a3d17e96a083ac", "HandlesBase": "63a3d17e96a083ac", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "llvmlite.__module": "692919c5a194ac8d", "__module": "692919c5a194ac8d", "lib.__init__": "6a19179426e9a883", "lib": "6a19179426e9a883", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "w32.fileio": "72dbbb563aa943b0", "fileio": "72dbbb563aa943b0", "_list": "7cadfe07e983fd90", "llvmlite.__function": "874bac141c97bae9", "__function": "874bac141c97bae9", "lib.core.IncludesScanner": "8d6185cf886c0334", "IncludesScanner": "8d6185cf886c0334", "lib.core.Handles.HandlesWhile": "8dc65d4c71e2936a", "HandlesWhile": "8dc65d4c71e2936a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.StubMerger": "9dbc46e5249ed198", "StubMerger": "9dbc46e5249ed198", "subprocess": "a335eb99f2e34479", "lib.core.BuildPipeline": "a38b726f4a82545f", "BuildPipeline": "a38b726f4a82545f", "linkedlist": "a5e9a83e9db303ad", "atom": "aa246c6e6aa30484", "lib.core.Handles.HandlesClassDef": "aa45364399b86a03", "HandlesClassDef": "aa45364399b86a03", "lib.core.Handles.HandlesType": "af1cc6aaab47a7d1", "HandlesType": "af1cc6aaab47a7d1", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "argparse": "b370d93b74bf55cc", "ast.exprs": "b543bc1dfb592119", "exprs": "b543bc1dfb592119", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "platmacro": "b57252077e6b596b", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExpr": "bde6b4cc0847ee6d", "HandlesExpr": "bde6b4cc0847ee6d", "lib.core.VLogger": "bdf5730851fb95f2", "VLogger": "bdf5730851fb95f2", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "lib.Projectrans.Config": "c0042adc0b7ec5df", "Config": "c0042adc0b7ec5df", "lib.core.Phase2": "c1bb03b1eae141e0", "Phase2": "c1bb03b1eae141e0", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "memhub": "ca40915f11b8b6ad", "lib.core.Handles.HandlesVar": "cb1aa3a78af6f362", "HandlesVar": "cb1aa3a78af6f362", "ast.lexer": "e217def267d3d4a8", "lexer": "e217def267d3d4a8", "viperlib": "e307a2d809cef071", "lib.core.Handles.HandlesExprCall": "efefa18c5d6c2d81", "HandlesExprCall": "efefa18c5d6c2d81", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "ast.__init__": "f3444ec56937284f", "ast": "f3444ec56937284f", "lib.core.Handles.HandlesIf": "f4cdbca2f8802c12", "HandlesIf": "f4cdbca2f8802c12", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Phase1": "fc26f66203d7cbb7", "Phase1": "fc26f66203d7cbb7", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "ast.parser": "fde6db0747bdd959", "parser": "fde6db0747bdd959"} \ No newline at end of file +{"w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "sys": "0c67644125bea0fd", "lib.core.Handles.HandlesImports": "0ccfde54972334b1", "HandlesImports": "0ccfde54972334b1", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "llvmlite.__init__": "1d74d1d3a174c684", "__init__": "f3444ec56937284f", "llvmlite": "1d74d1d3a174c684", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "ast.base": "22bc0df83b3f0e62", "base": "22bc0df83b3f0e62", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "stdio": "285b6aa29a34754d", "posix": "28de517e3820658a", "lib.core.Handles.HandlesType": "2b30cc2ce96fa464", "HandlesType": "2b30cc2ce96fa464", "lib.core.Handles.HandlesAssign": "2b59175b77f1304e", "HandlesAssign": "2b59175b77f1304e", "hashtable": "2b77d783c41d21d1", "llvmlite.__types": "2d8debefda779c40", "__types": "2d8debefda779c40", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "lib.core.Handles.HandlesStruct": "371fa89e15d8c015", "HandlesStruct": "371fa89e15d8c015", "stdlib": "3aa6057398be5673", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesFor": "456fb516ba3c5002", "HandlesFor": "456fb516ba3c5002", "lib.Projectrans.Utils": "4650533467115342", "Utils": "4650533467115342", "lib.core.Handles.HandlesMain": "4a7b57e6bd18f65e", "HandlesMain": "4a7b57e6bd18f65e", "lib.core.Handles.HandlesReturn": "4c644ade1f0d6d02", "HandlesReturn": "4c644ade1f0d6d02", "string": "4daf5ed3f8e421a1", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.IncludesScanner": "4e052c29b4fe769c", "IncludesScanner": "4e052c29b4fe769c", "lib.core.Handles.HandlesAnnAssign": "53812752bc672fdb", "HandlesAnnAssign": "53812752bc672fdb", "lib.core.Phase1": "553972e4135f827e", "Phase1": "553972e4135f827e", "llvmlite.__builder": "5a1d8c48f1243746", "__builder": "5a1d8c48f1243746", "lib.core.Handles.HandlesTranslator": "62805d8ad3e9b5ba", "HandlesTranslator": "62805d8ad3e9b5ba", "lib.core.Handles.HandlesBase": "63a3d17e96a083ac", "HandlesBase": "63a3d17e96a083ac", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "llvmlite.__module": "692919c5a194ac8d", "__module": "692919c5a194ac8d", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "json.__init__": "6ddf430432a0e373", "json": "6ddf430432a0e373", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "w32.fileio": "72dbbb563aa943b0", "fileio": "72dbbb563aa943b0", "lib.core.Handles.HandlesExpr": "787e3cfd2e1cf583", "HandlesExpr": "787e3cfd2e1cf583", "_list": "7cadfe07e983fd90", "lib.core.Handles.HandlesExprCall": "82ee4327adfe0c18", "HandlesExprCall": "82ee4327adfe0c18", "llvmlite.__function": "874bac141c97bae9", "__function": "874bac141c97bae9", "lib.core.Handles.HandlesWhile": "8dc65d4c71e2936a", "HandlesWhile": "8dc65d4c71e2936a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.StubMerger": "a26c73d7332b54b4", "StubMerger": "a26c73d7332b54b4", "subprocess": "a335eb99f2e34479", "lib.core.BuildPipeline": "a38b726f4a82545f", "BuildPipeline": "a38b726f4a82545f", "linkedlist": "a5e9a83e9db303ad", "atom": "aa246c6e6aa30484", "lib.core.Phase2": "aa34a7a33a3afab0", "Phase2": "aa34a7a33a3afab0", "lib.core.Handles.HandlesClassDef": "aa45364399b86a03", "HandlesClassDef": "aa45364399b86a03", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "argparse": "b370d93b74bf55cc", "ast.exprs": "b543bc1dfb592119", "exprs": "b543bc1dfb592119", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "platmacro": "b57252077e6b596b", "lib.core.Handles.HandlesFunctions": "b8a6e05318020e54", "HandlesFunctions": "b8a6e05318020e54", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.VLogger": "bdf5730851fb95f2", "VLogger": "bdf5730851fb95f2", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "lib.Projectrans.Config": "c0042adc0b7ec5df", "Config": "c0042adc0b7ec5df", "lib.__init__": "c2a4277744568003", "lib": "c2a4277744568003", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "memhub": "ca40915f11b8b6ad", "lib.core.Handles.HandlesVar": "cb1aa3a78af6f362", "HandlesVar": "cb1aa3a78af6f362", "lib.StubGen.Converter": "cba5876ccb277f42", "Converter": "cba5876ccb277f42", "ast.lexer": "e217def267d3d4a8", "lexer": "e217def267d3d4a8", "viperlib": "e307a2d809cef071", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "main": "f30a3b2d5f6bf092", "ast.__init__": "f3444ec56937284f", "ast": "f3444ec56937284f", "lib.core.Handles.HandlesIf": "f4cdbca2f8802c12", "HandlesIf": "f4cdbca2f8802c12", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "ast.parser": "fde6db0747bdd959", "parser": "fde6db0747bdd959"} \ No newline at end of file diff --git a/TransPyV/output/af9484a65085bf4b.deps.json b/TransPyV/output/af9484a65085bf4b.deps.json index d01d4bb..4860860 100644 --- a/TransPyV/output/af9484a65085bf4b.deps.json +++ b/TransPyV/output/af9484a65085bf4b.deps.json @@ -1 +1 @@ -{"w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "sys": "0c67644125bea0fd", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "lib.core.Handles.HandlesFunctions": "1073ffca7e27aae5", "HandlesFunctions": "1073ffca7e27aae5", "lib.core.Handles.HandlesAnnAssign": "15bb32adb7093ed7", "HandlesAnnAssign": "15bb32adb7093ed7", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "llvmlite.__init__": "1d74d1d3a174c684", "__init__": "f3444ec56937284f", "llvmlite": "1d74d1d3a174c684", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "ast.base": "22bc0df83b3f0e62", "base": "22bc0df83b3f0e62", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "stdio": "285b6aa29a34754d", "posix": "28de517e3820658a", "lib.core.Handles.HandlesAssign": "2b59175b77f1304e", "HandlesAssign": "2b59175b77f1304e", "llvmlite.__types": "2d8debefda779c40", "__types": "2d8debefda779c40", "hashtable": "2fbec3db55b30ad4", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "lib.core.Handles.HandlesStruct": "371fa89e15d8c015", "HandlesStruct": "371fa89e15d8c015", "stdlib": "3aa6057398be5673", "lib.StubGen.Converter": "3c5f1c61545644a9", "Converter": "3c5f1c61545644a9", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesFor": "456fb516ba3c5002", "HandlesFor": "456fb516ba3c5002", "lib.Projectrans.Utils": "4650533467115342", "Utils": "4650533467115342", "main": "484879ffecdf2b08", "lib.core.Handles.HandlesMain": "4a7b57e6bd18f65e", "HandlesMain": "4a7b57e6bd18f65e", "lib.core.Handles.HandlesReturn": "4c644ade1f0d6d02", "HandlesReturn": "4c644ade1f0d6d02", "string": "4daf5ed3f8e421a1", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "llvmlite.__builder": "5a1d8c48f1243746", "__builder": "5a1d8c48f1243746", "lib.core.Handles.HandlesTranslator": "62805d8ad3e9b5ba", "HandlesTranslator": "62805d8ad3e9b5ba", "lib.core.Handles.HandlesImports": "6293eee0a5805aa5", "HandlesImports": "6293eee0a5805aa5", "lib.core.Handles.HandlesBase": "63a3d17e96a083ac", "HandlesBase": "63a3d17e96a083ac", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "llvmlite.__module": "692919c5a194ac8d", "__module": "692919c5a194ac8d", "lib.__init__": "6a19179426e9a883", "lib": "6a19179426e9a883", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "w32.fileio": "72dbbb563aa943b0", "fileio": "72dbbb563aa943b0", "_list": "7cadfe07e983fd90", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "llvmlite.__function": "874bac141c97bae9", "__function": "874bac141c97bae9", "lib.core.IncludesScanner": "8d6185cf886c0334", "IncludesScanner": "8d6185cf886c0334", "lib.core.Handles.HandlesWhile": "8dc65d4c71e2936a", "HandlesWhile": "8dc65d4c71e2936a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.StubMerger": "9dbc46e5249ed198", "StubMerger": "9dbc46e5249ed198", "subprocess": "a335eb99f2e34479", "lib.core.BuildPipeline": "a38b726f4a82545f", "BuildPipeline": "a38b726f4a82545f", "linkedlist": "a5e9a83e9db303ad", "atom": "aa246c6e6aa30484", "lib.core.Handles.HandlesClassDef": "aa45364399b86a03", "HandlesClassDef": "aa45364399b86a03", "lib.core.Handles.HandlesType": "af1cc6aaab47a7d1", "HandlesType": "af1cc6aaab47a7d1", "argparse": "b370d93b74bf55cc", "ast.exprs": "b543bc1dfb592119", "exprs": "b543bc1dfb592119", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "platmacro": "b57252077e6b596b", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExpr": "bde6b4cc0847ee6d", "HandlesExpr": "bde6b4cc0847ee6d", "lib.core.VLogger": "bdf5730851fb95f2", "VLogger": "bdf5730851fb95f2", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "lib.Projectrans.Config": "c0042adc0b7ec5df", "Config": "c0042adc0b7ec5df", "lib.core.Phase2": "c1bb03b1eae141e0", "Phase2": "c1bb03b1eae141e0", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "memhub": "ca40915f11b8b6ad", "lib.core.Handles.HandlesVar": "cb1aa3a78af6f362", "HandlesVar": "cb1aa3a78af6f362", "ast.lexer": "e217def267d3d4a8", "lexer": "e217def267d3d4a8", "viperlib": "e307a2d809cef071", "lib.core.Handles.HandlesExprCall": "efefa18c5d6c2d81", "HandlesExprCall": "efefa18c5d6c2d81", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "ast.__init__": "f3444ec56937284f", "ast": "f3444ec56937284f", "lib.core.Handles.HandlesIf": "f4cdbca2f8802c12", "HandlesIf": "f4cdbca2f8802c12", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Phase1": "fc26f66203d7cbb7", "Phase1": "fc26f66203d7cbb7", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "ast.parser": "fde6db0747bdd959", "parser": "fde6db0747bdd959"} \ No newline at end of file +{"w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "sys": "0c67644125bea0fd", "lib.core.Handles.HandlesImports": "0ccfde54972334b1", "HandlesImports": "0ccfde54972334b1", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "llvmlite.__init__": "1d74d1d3a174c684", "__init__": "f3444ec56937284f", "llvmlite": "1d74d1d3a174c684", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "ast.base": "22bc0df83b3f0e62", "base": "22bc0df83b3f0e62", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "stdio": "285b6aa29a34754d", "posix": "28de517e3820658a", "lib.core.Handles.HandlesType": "2b30cc2ce96fa464", "HandlesType": "2b30cc2ce96fa464", "lib.core.Handles.HandlesAssign": "2b59175b77f1304e", "HandlesAssign": "2b59175b77f1304e", "hashtable": "2b77d783c41d21d1", "llvmlite.__types": "2d8debefda779c40", "__types": "2d8debefda779c40", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "lib.core.Handles.HandlesStruct": "371fa89e15d8c015", "HandlesStruct": "371fa89e15d8c015", "stdlib": "3aa6057398be5673", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesFor": "456fb516ba3c5002", "HandlesFor": "456fb516ba3c5002", "lib.Projectrans.Utils": "4650533467115342", "Utils": "4650533467115342", "lib.core.Handles.HandlesMain": "4a7b57e6bd18f65e", "HandlesMain": "4a7b57e6bd18f65e", "lib.core.Handles.HandlesReturn": "4c644ade1f0d6d02", "HandlesReturn": "4c644ade1f0d6d02", "string": "4daf5ed3f8e421a1", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.IncludesScanner": "4e052c29b4fe769c", "IncludesScanner": "4e052c29b4fe769c", "lib.core.Handles.HandlesAnnAssign": "53812752bc672fdb", "HandlesAnnAssign": "53812752bc672fdb", "lib.core.Phase1": "553972e4135f827e", "Phase1": "553972e4135f827e", "llvmlite.__builder": "5a1d8c48f1243746", "__builder": "5a1d8c48f1243746", "lib.core.Handles.HandlesTranslator": "62805d8ad3e9b5ba", "HandlesTranslator": "62805d8ad3e9b5ba", "lib.core.Handles.HandlesBase": "63a3d17e96a083ac", "HandlesBase": "63a3d17e96a083ac", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "llvmlite.__module": "692919c5a194ac8d", "__module": "692919c5a194ac8d", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "json.__init__": "6ddf430432a0e373", "json": "6ddf430432a0e373", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "w32.fileio": "72dbbb563aa943b0", "fileio": "72dbbb563aa943b0", "lib.core.Handles.HandlesExpr": "787e3cfd2e1cf583", "HandlesExpr": "787e3cfd2e1cf583", "_list": "7cadfe07e983fd90", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesExprCall": "82ee4327adfe0c18", "HandlesExprCall": "82ee4327adfe0c18", "llvmlite.__function": "874bac141c97bae9", "__function": "874bac141c97bae9", "lib.core.Handles.HandlesWhile": "8dc65d4c71e2936a", "HandlesWhile": "8dc65d4c71e2936a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.StubMerger": "a26c73d7332b54b4", "StubMerger": "a26c73d7332b54b4", "subprocess": "a335eb99f2e34479", "lib.core.BuildPipeline": "a38b726f4a82545f", "BuildPipeline": "a38b726f4a82545f", "linkedlist": "a5e9a83e9db303ad", "atom": "aa246c6e6aa30484", "lib.core.Phase2": "aa34a7a33a3afab0", "Phase2": "aa34a7a33a3afab0", "lib.core.Handles.HandlesClassDef": "aa45364399b86a03", "HandlesClassDef": "aa45364399b86a03", "argparse": "b370d93b74bf55cc", "ast.exprs": "b543bc1dfb592119", "exprs": "b543bc1dfb592119", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "platmacro": "b57252077e6b596b", "lib.core.Handles.HandlesFunctions": "b8a6e05318020e54", "HandlesFunctions": "b8a6e05318020e54", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.VLogger": "bdf5730851fb95f2", "VLogger": "bdf5730851fb95f2", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "lib.Projectrans.Config": "c0042adc0b7ec5df", "Config": "c0042adc0b7ec5df", "lib.__init__": "c2a4277744568003", "lib": "c2a4277744568003", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "memhub": "ca40915f11b8b6ad", "lib.core.Handles.HandlesVar": "cb1aa3a78af6f362", "HandlesVar": "cb1aa3a78af6f362", "lib.StubGen.Converter": "cba5876ccb277f42", "Converter": "cba5876ccb277f42", "ast.lexer": "e217def267d3d4a8", "lexer": "e217def267d3d4a8", "viperlib": "e307a2d809cef071", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "main": "f30a3b2d5f6bf092", "ast.__init__": "f3444ec56937284f", "ast": "f3444ec56937284f", "lib.core.Handles.HandlesIf": "f4cdbca2f8802c12", "HandlesIf": "f4cdbca2f8802c12", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "w32.win32base": "fc980acec33d69a7", "win32base": "fc980acec33d69a7", "ast.parser": "fde6db0747bdd959", "parser": "fde6db0747bdd959"} \ No newline at end of file diff --git a/TransPyV/project.json b/TransPyV/project.json index bdf4f80..ce786c1 100644 --- a/TransPyV/project.json +++ b/TransPyV/project.json @@ -3,8 +3,7 @@ "name": "TransPyV", "version": "1.0.0", "source_dir": "./App", - "temp_dir": "./temp", - "output_dir": "./output", + "build_dir": "./.tpv_build", "compiler": { "cmd": "llc", "flags": ["-filetype=obj", "-relocation-model=pic"] diff --git a/TransPyV/temp/_phase1_manifest.json b/TransPyV/temp/_phase1_manifest.json index b2b9363..a7302c1 100644 --- a/TransPyV/temp/_phase1_manifest.json +++ b/TransPyV/temp/_phase1_manifest.json @@ -1 +1 @@ -{"D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\Projectrans\\Config.vp": {"sha1": "c0042adc0b7ec5df", "mtime": 1785332415.2264168, "size": 14060}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\Projectrans\\Utils.vp": {"sha1": "4650533467115342", "mtime": 1785332415.2054548, "size": 4900}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\StubGen\\Converter.vp": {"sha1": "3c5f1c61545644a9", "mtime": 1785332415.2120533, "size": 35262}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\__init__.vp": {"sha1": "6a19179426e9a883", "mtime": 1785332415.1753137, "size": 820}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\BuildPipeline.vp": {"sha1": "a38b726f4a82545f", "mtime": 1785397411.8500457, "size": 23570}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAnnAssign.vp": {"sha1": "15bb32adb7093ed7", "mtime": 1785332415.1796682, "size": 22584}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAssign.vp": {"sha1": "2b59175b77f1304e", "mtime": 1785343736.8740923, "size": 24369}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAugAssign.vp": {"sha1": "31e49accebfc8aac", "mtime": 1784751046.0461829, "size": 12874}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesBase.vp": {"sha1": "63a3d17e96a083ac", "mtime": 1785332415.2080498, "size": 8740}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesBody.vp": {"sha1": "81eb28ba912467a6", "mtime": 1784566611.8626723, "size": 8538}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesClassDef.vp": {"sha1": "aa45364399b86a03", "mtime": 1785345709.6485052, "size": 142863}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesEnum.vp": {"sha1": "f05b14a2ad5767a7", "mtime": 1784741624.7278736, "size": 8520}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExpr.vp": {"sha1": "bde6b4cc0847ee6d", "mtime": 1785398911.198053, "size": 145938}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExprCall.vp": {"sha1": "efefa18c5d6c2d81", "mtime": 1785397182.7094119, "size": 261395}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExprOps.vp": {"sha1": "be8c2d7b882881c8", "mtime": 1784791452.111348, "size": 12796}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesFor.vp": {"sha1": "456fb516ba3c5002", "mtime": 1785332415.1896677, "size": 17319}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesFunctions.vp": {"sha1": "1073ffca7e27aae5", "mtime": 1785332415.2064638, "size": 45439}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesIf.vp": {"sha1": "f4cdbca2f8802c12", "mtime": 1785390159.3673935, "size": 5626}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesImports.vp": {"sha1": "6293eee0a5805aa5", "mtime": 1785332415.2416043, "size": 25274}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesMain.vp": {"sha1": "4a7b57e6bd18f65e", "mtime": 1785332415.1935978, "size": 21362}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesNonlocal.vp": {"sha1": "af9484a65085bf4b", "mtime": 1784540868.0555332, "size": 5336}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesReturn.vp": {"sha1": "4c644ade1f0d6d02", "mtime": 1785394149.332443, "size": 6334}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesStruct.vp": {"sha1": "371fa89e15d8c015", "mtime": 1785352932.9305031, "size": 48672}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesTranslator.vp": {"sha1": "62805d8ad3e9b5ba", "mtime": 1785332415.2370398, "size": 18196}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesType.vp": {"sha1": "af1cc6aaab47a7d1", "mtime": 1785350678.7589717, "size": 60329}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesVar.vp": {"sha1": "cb1aa3a78af6f362", "mtime": 1785332415.2565334, "size": 15697}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesWhile.vp": {"sha1": "8dc65d4c71e2936a", "mtime": 1785390170.5239043, "size": 5202}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\IncludesScanner.vp": {"sha1": "8d6185cf886c0334", "mtime": 1785398707.0211506, "size": 13021}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Phase1.vp": {"sha1": "fc26f66203d7cbb7", "mtime": 1785398809.9049404, "size": 51449}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Phase2.vp": {"sha1": "c1bb03b1eae141e0", "mtime": 1785398659.7543666, "size": 50899}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\StubMerger.vp": {"sha1": "9dbc46e5249ed198", "mtime": 1785398798.4501393, "size": 92415}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\VLogger.vp": {"sha1": "bdf5730851fb95f2", "mtime": 1785332415.2542837, "size": 10068}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\main.vp": {"sha1": "484879ffecdf2b08", "mtime": 1785398833.4931703, "size": 27267}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\_list.vp": {"sha1": "7cadfe07e983fd90", "mtime": 1785338614.5410473, "size": 3238}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\argparse.vp": {"sha1": "b370d93b74bf55cc", "mtime": 1785347242.759819, "size": 18275}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\__init__.vp": {"sha1": "f3444ec56937284f", "mtime": 1785332415.2553575, "size": 3421}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\astaux.vp": {"sha1": "4337fb260448bbe2", "mtime": 1784006094.7981195, "size": 11489}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\base.vp": {"sha1": "22bc0df83b3f0e62", "mtime": 1785332415.1850114, "size": 14992}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\exprs.vp": {"sha1": "b543bc1dfb592119", "mtime": 1785332415.2436252, "size": 40886}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\lexer.vp": {"sha1": "e217def267d3d4a8", "mtime": 1785332415.2310088, "size": 24109}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\match.vp": {"sha1": "4dd6b3f1427d1cc5", "mtime": 1782961799.8492737, "size": 12309}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\parser.vp": {"sha1": "fde6db0747bdd959", "mtime": 1785348036.106818, "size": 87525}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\stmts.vp": {"sha1": "657e182b27c2a022", "mtime": 1783929993.759902, "size": 37926}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\tokens.vp": {"sha1": "b547ac4f380bddb6", "mtime": 1783165480.469121, "size": 13722}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\atom.vp": {"sha1": "aa246c6e6aa30484", "mtime": 1785389628.701967, "size": 1198}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__init__.vp": {"sha1": "96837bcc64032444", "mtime": 1777902641.540433, "size": 186}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__md5.vp": {"sha1": "19f8024d10c828e8", "mtime": 1784356818.7075372, "size": 5847}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha1.vp": {"sha1": "0df65b8ed15664b0", "mtime": 1784356827.656474, "size": 4516}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha256.vp": {"sha1": "c9d54a4158f7f5a8", "mtime": 1782266203.9352357, "size": 5332}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha512.vp": {"sha1": "6ff26590374ae6fc", "mtime": 1782266223.3380039, "size": 7162}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashtable.vp": {"sha1": "2fbec3db55b30ad4", "mtime": 1785337460.8923311, "size": 9701}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__init__.vp": {"sha1": "57288496f7c2d1ad", "mtime": 1783239811.8873823, "size": 7653}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__parser.vp": {"sha1": "240a9a4157959a9f", "mtime": 1782826918.100951, "size": 7517}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__writer.vp": {"sha1": "20cd49775c100a38", "mtime": 1782826901.8906734, "size": 3784}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\linkedlist.vp": {"sha1": "a5e9a83e9db303ad", "mtime": 1785337078.812168, "size": 17137}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__init__.vp": {"sha1": "1d74d1d3a174c684", "mtime": 1785332415.2151341, "size": 17031}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__builder.vp": {"sha1": "5a1d8c48f1243746", "mtime": 1785342190.6646752, "size": 51186}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__function.vp": {"sha1": "874bac141c97bae9", "mtime": 1785342172.222551, "size": 30049}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__module.vp": {"sha1": "692919c5a194ac8d", "mtime": 1785332415.2502255, "size": 23144}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__types.vp": {"sha1": "2d8debefda779c40", "mtime": 1785332415.2141044, "size": 18976}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__values.vp": {"sha1": "f9e36e2cd6fa659f", "mtime": 1784566611.8301415, "size": 6739}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__verify.vp": {"sha1": "6b3bc463fd044545", "mtime": 1784566611.82952, "size": 14751}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\memhub.vp": {"sha1": "ca40915f11b8b6ad", "mtime": 1785336321.3175714, "size": 21931}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\platmacro.vp": {"sha1": "b57252077e6b596b", "mtime": 1785332415.2187803, "size": 1266}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\posix.vp": {"sha1": "28de517e3820658a", "mtime": 1785335629.2014928, "size": 10586}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdarg.vp": {"sha1": "71e0a3ffcb3ebfad", "mtime": 1781258888.113146, "size": 277}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdint.vp": {"sha1": "f5522571bcce7bcb", "mtime": 1782383975.8824987, "size": 4356}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdio.vp": {"sha1": "285b6aa29a34754d", "mtime": 1785332415.1829746, "size": 561}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdlib.vp": {"sha1": "3aa6057398be5673", "mtime": 1785319487.0321114, "size": 374}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\string.vp": {"sha1": "4daf5ed3f8e421a1", "mtime": 1785332415.2233481, "size": 11037}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\subprocess.vp": {"sha1": "a335eb99f2e34479", "mtime": 1785319401.2041914, "size": 7841}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\sys.vp": {"sha1": "0c67644125bea0fd", "mtime": 1785325556.7317626, "size": 5606}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperio.vp": {"sha1": "c9f4be41ca1cc2b4", "mtime": 1782812279.506002, "size": 1556}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperlib.vp": {"sha1": "e307a2d809cef071", "mtime": 1785318582.5499828, "size": 56783}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\fileio.vp": {"sha1": "72dbbb563aa943b0", "mtime": 1785332415.1891341, "size": 13751}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32base.vp": {"sha1": "fc980acec33d69a7", "mtime": 1785332415.2228394, "size": 2653}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32console.vp": {"sha1": "bbdf3bbd4c3bc28c", "mtime": 1781200703.5338137, "size": 5604}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32file.vp": {"sha1": "f6b51804a0ba8ff0", "mtime": 1782531158.744144, "size": 8424}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32process.vp": {"sha1": "067c78e9f121dce3", "mtime": 1781200703.5409546, "size": 4802}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32sync.vp": {"sha1": "06f53cc594b4ac6c", "mtime": 1782297500.2581685, "size": 4726}} \ No newline at end of file +{"D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\Projectrans\\Config.vp": {"sha1": "c0042adc0b7ec5df", "mtime": 1785332415.2264168, "size": 14060}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\Projectrans\\Utils.vp": {"sha1": "4650533467115342", "mtime": 1785332415.2054548, "size": 4900}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\StubGen\\Converter.vp": {"sha1": "cba5876ccb277f42", "mtime": 1785403633.0886283, "size": 35262}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\__init__.vp": {"sha1": "c2a4277744568003", "mtime": 1785403660.4383688, "size": 820}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\BuildPipeline.vp": {"sha1": "a38b726f4a82545f", "mtime": 1785397411.8500457, "size": 23570}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAnnAssign.vp": {"sha1": "53812752bc672fdb", "mtime": 1785404927.245082, "size": 22880}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAssign.vp": {"sha1": "2b59175b77f1304e", "mtime": 1785343736.8740923, "size": 24369}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesAugAssign.vp": {"sha1": "31e49accebfc8aac", "mtime": 1784751046.0461829, "size": 12874}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesBase.vp": {"sha1": "63a3d17e96a083ac", "mtime": 1785332415.2080498, "size": 8740}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesBody.vp": {"sha1": "81eb28ba912467a6", "mtime": 1784566611.8626723, "size": 8538}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesClassDef.vp": {"sha1": "aa45364399b86a03", "mtime": 1785345709.6485052, "size": 142863}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesEnum.vp": {"sha1": "f05b14a2ad5767a7", "mtime": 1784741624.7278736, "size": 8520}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExpr.vp": {"sha1": "787e3cfd2e1cf583", "mtime": 1785405514.8234684, "size": 148987}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExprCall.vp": {"sha1": "82ee4327adfe0c18", "mtime": 1785407383.1033268, "size": 264383}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesExprOps.vp": {"sha1": "be8c2d7b882881c8", "mtime": 1784791452.111348, "size": 12796}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesFor.vp": {"sha1": "456fb516ba3c5002", "mtime": 1785332415.1896677, "size": 17319}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesFunctions.vp": {"sha1": "b8a6e05318020e54", "mtime": 1785407412.993293, "size": 45475}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesIf.vp": {"sha1": "f4cdbca2f8802c12", "mtime": 1785390159.3673935, "size": 5626}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesImports.vp": {"sha1": "0ccfde54972334b1", "mtime": 1785404358.8328092, "size": 25274}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesMain.vp": {"sha1": "4a7b57e6bd18f65e", "mtime": 1785332415.1935978, "size": 21362}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesNonlocal.vp": {"sha1": "af9484a65085bf4b", "mtime": 1784540868.0555332, "size": 5336}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesReturn.vp": {"sha1": "4c644ade1f0d6d02", "mtime": 1785394149.332443, "size": 6334}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesStruct.vp": {"sha1": "371fa89e15d8c015", "mtime": 1785352932.9305031, "size": 48672}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesTranslator.vp": {"sha1": "62805d8ad3e9b5ba", "mtime": 1785332415.2370398, "size": 18196}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesType.vp": {"sha1": "2b30cc2ce96fa464", "mtime": 1785407406.1083772, "size": 60347}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesVar.vp": {"sha1": "cb1aa3a78af6f362", "mtime": 1785332415.2565334, "size": 15697}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Handles\\HandlesWhile.vp": {"sha1": "8dc65d4c71e2936a", "mtime": 1785390170.5239043, "size": 5202}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\IncludesScanner.vp": {"sha1": "4e052c29b4fe769c", "mtime": 1785404099.6734524, "size": 13049}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Phase1.vp": {"sha1": "553972e4135f827e", "mtime": 1785403724.71735, "size": 51453}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\Phase2.vp": {"sha1": "aa34a7a33a3afab0", "mtime": 1785404255.077619, "size": 50923}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\StubMerger.vp": {"sha1": "a26c73d7332b54b4", "mtime": 1785404303.553987, "size": 92427}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\lib\\core\\VLogger.vp": {"sha1": "bdf5730851fb95f2", "mtime": 1785332415.2542837, "size": 10068}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\TransPyV\\App\\main.vp": {"sha1": "f30a3b2d5f6bf092", "mtime": 1785403637.7077572, "size": 27278}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\_list.vp": {"sha1": "7cadfe07e983fd90", "mtime": 1785338614.5410473, "size": 3238}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\argparse.vp": {"sha1": "b370d93b74bf55cc", "mtime": 1785347242.759819, "size": 18275}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\__init__.vp": {"sha1": "f3444ec56937284f", "mtime": 1785332415.2553575, "size": 3421}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\astaux.vp": {"sha1": "4337fb260448bbe2", "mtime": 1784006094.7981195, "size": 11489}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\base.vp": {"sha1": "22bc0df83b3f0e62", "mtime": 1785332415.1850114, "size": 14992}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\exprs.vp": {"sha1": "b543bc1dfb592119", "mtime": 1785332415.2436252, "size": 40886}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\lexer.vp": {"sha1": "e217def267d3d4a8", "mtime": 1785332415.2310088, "size": 24109}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\match.vp": {"sha1": "4dd6b3f1427d1cc5", "mtime": 1782961799.8492737, "size": 12309}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\parser.vp": {"sha1": "fde6db0747bdd959", "mtime": 1785348036.106818, "size": 87525}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\stmts.vp": {"sha1": "657e182b27c2a022", "mtime": 1783929993.759902, "size": 37926}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\ast\\tokens.vp": {"sha1": "b547ac4f380bddb6", "mtime": 1783165480.469121, "size": 13722}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\atom.vp": {"sha1": "aa246c6e6aa30484", "mtime": 1785389628.701967, "size": 1198}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__init__.vp": {"sha1": "96837bcc64032444", "mtime": 1777902641.540433, "size": 186}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__md5.vp": {"sha1": "19f8024d10c828e8", "mtime": 1784356818.7075372, "size": 5847}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha1.vp": {"sha1": "0df65b8ed15664b0", "mtime": 1784356827.656474, "size": 4516}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha256.vp": {"sha1": "c9d54a4158f7f5a8", "mtime": 1782266203.9352357, "size": 5332}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashlib\\__sha512.vp": {"sha1": "6ff26590374ae6fc", "mtime": 1782266223.3380039, "size": 7162}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\hashtable.vp": {"sha1": "2b77d783c41d21d1", "mtime": 1785407919.1879103, "size": 9719}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__init__.vp": {"sha1": "6ddf430432a0e373", "mtime": 1785408324.3244681, "size": 7707}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__parser.vp": {"sha1": "240a9a4157959a9f", "mtime": 1782826918.100951, "size": 7517}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\json\\__writer.vp": {"sha1": "20cd49775c100a38", "mtime": 1782826901.8906734, "size": 3784}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\linkedlist.vp": {"sha1": "a5e9a83e9db303ad", "mtime": 1785337078.812168, "size": 17137}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__init__.vp": {"sha1": "1d74d1d3a174c684", "mtime": 1785332415.2151341, "size": 17031}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__builder.vp": {"sha1": "5a1d8c48f1243746", "mtime": 1785342190.6646752, "size": 51186}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__function.vp": {"sha1": "874bac141c97bae9", "mtime": 1785342172.222551, "size": 30049}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__module.vp": {"sha1": "692919c5a194ac8d", "mtime": 1785332415.2502255, "size": 23144}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__types.vp": {"sha1": "2d8debefda779c40", "mtime": 1785332415.2141044, "size": 18976}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__values.vp": {"sha1": "f9e36e2cd6fa659f", "mtime": 1784566611.8301415, "size": 6739}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\llvmlite\\__verify.vp": {"sha1": "6b3bc463fd044545", "mtime": 1784566611.82952, "size": 14751}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\memhub.vp": {"sha1": "ca40915f11b8b6ad", "mtime": 1785336321.3175714, "size": 21931}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\platmacro.vp": {"sha1": "b57252077e6b596b", "mtime": 1785332415.2187803, "size": 1266}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\posix.vp": {"sha1": "28de517e3820658a", "mtime": 1785335629.2014928, "size": 10586}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdarg.vp": {"sha1": "71e0a3ffcb3ebfad", "mtime": 1781258888.113146, "size": 277}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdint.vp": {"sha1": "f5522571bcce7bcb", "mtime": 1782383975.8824987, "size": 4356}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdio.vp": {"sha1": "285b6aa29a34754d", "mtime": 1785332415.1829746, "size": 561}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\stdlib.vp": {"sha1": "3aa6057398be5673", "mtime": 1785319487.0321114, "size": 374}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\string.vp": {"sha1": "4daf5ed3f8e421a1", "mtime": 1785332415.2233481, "size": 11037}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\subprocess.vp": {"sha1": "a335eb99f2e34479", "mtime": 1785319401.2041914, "size": 7841}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\sys.vp": {"sha1": "0c67644125bea0fd", "mtime": 1785325556.7317626, "size": 5606}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperio.vp": {"sha1": "c9f4be41ca1cc2b4", "mtime": 1782812279.506002, "size": 1556}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\viperlib.vp": {"sha1": "e307a2d809cef071", "mtime": 1785318582.5499828, "size": 56783}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\fileio.vp": {"sha1": "72dbbb563aa943b0", "mtime": 1785332415.1891341, "size": 13751}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32base.vp": {"sha1": "fc980acec33d69a7", "mtime": 1785332415.2228394, "size": 2653}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32console.vp": {"sha1": "bbdf3bbd4c3bc28c", "mtime": 1781200703.5338137, "size": 5604}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32file.vp": {"sha1": "f6b51804a0ba8ff0", "mtime": 1782531158.744144, "size": 8424}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32process.vp": {"sha1": "067c78e9f121dce3", "mtime": 1781200703.5409546, "size": 4802}, "D:\\Users\\TermiNexus\\Desktop\\TransPyC\\includes\\w32\\win32sync.vp": {"sha1": "06f53cc594b4ac6c", "mtime": 1782297500.2581685, "size": 4726}} \ No newline at end of file diff --git a/TransPyV/temp/_sha1_map.txt b/TransPyV/temp/_sha1_map.txt index d319891..d730a28 100644 --- a/TransPyV/temp/_sha1_map.txt +++ b/TransPyV/temp/_sha1_map.txt @@ -1,9 +1,8 @@ 067c78e9f121dce3:includes/w32\win32process.vp 06f53cc594b4ac6c:includes/w32\win32sync.vp 0c67644125bea0fd:includes/sys.vp +0ccfde54972334b1:lib/core/Handles/HandlesImports.vp 0df65b8ed15664b0:includes/hashlib\__sha1.vp -1073ffca7e27aae5:lib/core/Handles/HandlesFunctions.vp -15bb32adb7093ed7:lib/core/Handles/HandlesAnnAssign.vp 19f8024d10c828e8:includes/hashlib\__md5.vp 1d74d1d3a174c684:includes/llvmlite\__init__.vp 20cd49775c100a38:includes/json\__writer.vp @@ -11,70 +10,71 @@ 240a9a4157959a9f:includes/json\__parser.vp 285b6aa29a34754d:includes/stdio.vp 28de517e3820658a:includes/posix.vp +2b30cc2ce96fa464:lib/core/Handles/HandlesType.vp 2b59175b77f1304e:lib/core/Handles/HandlesAssign.vp +2b77d783c41d21d1:includes/hashtable.vp 2d8debefda779c40:includes/llvmlite\__types.vp -2fbec3db55b30ad4:includes/hashtable.vp 31e49accebfc8aac:lib/core/Handles/HandlesAugAssign.vp 371fa89e15d8c015:lib/core/Handles/HandlesStruct.vp 3aa6057398be5673:includes/stdlib.vp -3c5f1c61545644a9:lib/StubGen/Converter.vp 4337fb260448bbe2:includes/ast\astaux.vp 456fb516ba3c5002:lib/core/Handles/HandlesFor.vp 4650533467115342:lib/Projectrans/Utils.vp -484879ffecdf2b08:main.vp 4a7b57e6bd18f65e:lib/core/Handles/HandlesMain.vp 4c644ade1f0d6d02:lib/core/Handles/HandlesReturn.vp 4daf5ed3f8e421a1:includes/string.vp 4dd6b3f1427d1cc5:includes/ast\match.vp -57288496f7c2d1ad:includes/json\__init__.vp +4e052c29b4fe769c:lib/core/IncludesScanner.vp +53812752bc672fdb:lib/core/Handles/HandlesAnnAssign.vp +553972e4135f827e:lib/core/Phase1.vp 5a1d8c48f1243746:includes/llvmlite\__builder.vp 62805d8ad3e9b5ba:lib/core/Handles/HandlesTranslator.vp -6293eee0a5805aa5:lib/core/Handles/HandlesImports.vp 63a3d17e96a083ac:lib/core/Handles/HandlesBase.vp 657e182b27c2a022:includes/ast\stmts.vp 692919c5a194ac8d:includes/llvmlite\__module.vp -6a19179426e9a883:lib/__init__.vp 6b3bc463fd044545:includes/llvmlite\__verify.vp +6ddf430432a0e373:includes/json\__init__.vp 6ff26590374ae6fc:includes/hashlib\__sha512.vp 71e0a3ffcb3ebfad:includes/stdarg.vp 72dbbb563aa943b0:includes/w32\fileio.vp +787e3cfd2e1cf583:lib/core/Handles/HandlesExpr.vp 7cadfe07e983fd90:includes/_list.vp 81eb28ba912467a6:lib/core/Handles/HandlesBody.vp +82ee4327adfe0c18:lib/core/Handles/HandlesExprCall.vp 874bac141c97bae9:includes/llvmlite\__function.vp -8d6185cf886c0334:lib/core/IncludesScanner.vp 8dc65d4c71e2936a:lib/core/Handles/HandlesWhile.vp 96837bcc64032444:includes/hashlib\__init__.vp -9dbc46e5249ed198:lib/core/StubMerger.vp +a26c73d7332b54b4:lib/core/StubMerger.vp a335eb99f2e34479:includes/subprocess.vp a38b726f4a82545f:lib/core/BuildPipeline.vp a5e9a83e9db303ad:includes/linkedlist.vp aa246c6e6aa30484:includes/atom.vp +aa34a7a33a3afab0:lib/core/Phase2.vp aa45364399b86a03:lib/core/Handles/HandlesClassDef.vp -af1cc6aaab47a7d1:lib/core/Handles/HandlesType.vp af9484a65085bf4b:lib/core/Handles/HandlesNonlocal.vp b370d93b74bf55cc:includes/argparse.vp b543bc1dfb592119:includes/ast\exprs.vp b547ac4f380bddb6:includes/ast\tokens.vp b57252077e6b596b:includes/platmacro.vp +b8a6e05318020e54:lib/core/Handles/HandlesFunctions.vp bbdf3bbd4c3bc28c:includes/w32\win32console.vp -bde6b4cc0847ee6d:lib/core/Handles/HandlesExpr.vp bdf5730851fb95f2:lib/core/VLogger.vp be8c2d7b882881c8:lib/core/Handles/HandlesExprOps.vp c0042adc0b7ec5df:lib/Projectrans/Config.vp -c1bb03b1eae141e0:lib/core/Phase2.vp +c2a4277744568003:lib/__init__.vp c9d54a4158f7f5a8:includes/hashlib\__sha256.vp c9f4be41ca1cc2b4:includes/viperio.vp ca40915f11b8b6ad:includes/memhub.vp cb1aa3a78af6f362:lib/core/Handles/HandlesVar.vp +cba5876ccb277f42:lib/StubGen/Converter.vp e217def267d3d4a8:includes/ast\lexer.vp e307a2d809cef071:includes/viperlib.vp -efefa18c5d6c2d81:lib/core/Handles/HandlesExprCall.vp f05b14a2ad5767a7:lib/core/Handles/HandlesEnum.vp +f30a3b2d5f6bf092:main.vp f3444ec56937284f:includes/ast\__init__.vp f4cdbca2f8802c12:lib/core/Handles/HandlesIf.vp f5522571bcce7bcb:includes/stdint.vp f6b51804a0ba8ff0:includes/w32\win32file.vp f9e36e2cd6fa659f:includes/llvmlite\__values.vp -fc26f66203d7cbb7:lib/core/Phase1.vp fc980acec33d69a7:includes/w32\win32base.vp fde6db0747bdd959:includes/ast\parser.vp diff --git a/TransPyV/temp/_shared_sym.json b/TransPyV/temp/_shared_sym.json index 35b5b659bf11d7347b2399dc768268d1fcb7a82d..21dcd81e0cd83c6ed895976979e4d8ea51efd36c 100644 GIT binary patch delta 121486 zcmZ@h2UwIx)48QygX8YrD^}EK>|*bVJ$CF}Kn3JfKoGkE8hb-Q#xBNQ5>cbCi4CJh zlUVReS7S6r(@ZQWCNYWs?Ce_(k-Ir5&laH>OT;wVT9iOshVWS(w zH)_zdY12lH8aHVc1-Zv1-=X))B{vQq)wJoDrp+3TZd89vgZg9YA8ONgXS%IXLR8}h zqZ>3I)hIEcX_Mxoq5l7ZBq*8S956Tb+=AG12KcL|DOhDNZmeNfZzrp=lr zG#s5cra?me(TR@AQO}@tX#G-`S#*qt3e)R2)X}nUWwU{a(HCut7mKtMm3BYJ-Wf@gyu~W;~Oq21OCnZ)11`PPGcY29Z0%M?lZ8>&=0NE^xJxF%jxL zF$BpeF~(ejf{_#Y8s}?3-~PrG8u02s;{pw6GT2z40x&^?zk|}lMm>)iJLY*zW}+Vk^@YHEk7=A7m0_%JfXJ-|tyY{S z=lYC=S{a1dH2!(az7#(U+3`-AUWQzpZrrY^Ao53(bh0q~)?_~n785G}Jhe0?M1DHm zuNYev@|b4nJThW5*8q{L<>+LAX*BnFO#6AyV`3H}rIqNIeC#y2$#dLRT2N12An(Z!+F4N!PR^Rk?}+PGh5Jf&v_9T?lgr}Rt;w}EH;+G5-}<2rU;VTF=#yBhB@_P-OF zMg&6TJ@4ynBNu<@*DU)l`L+IrE5=2tpuF^|pIzvkQ2E?P#>*P{uTONcT2RDtu5OGt-rly7v z?@U!Tx|rZlxb~HCl3Hxk0#kpO{WWSlaZ8tt`T;d&eT^Dl8)Z@p2kU6Tt7=>wV<6d3 z@ZHfhR>(%K&fgektL5^F*zREo4ex3tvImXpL+-|74`?x}I%6>%VOkv6)Ex_lde^ zveL26Sdu0l^T>Ertxn1$BrbYv%u*5MeldRJ_j>@O{*C6u{%V|}V5#lf{HD1ON`5o` zPo?Fy>kmjXg5!y9Ke_DT6RnKA=;8tJ`5(GL5UK-nT zY{Rj=e6MbSEk_L_z*gI0f$(;wQ20K`G~1tJ(-t^TCvYT`R5m%_Zm?;VKkFg&#^k2=W#9(;Si$*)Q!PTpwT78LHQpS|dT5hBI=6)8W6{?H=TNXt} zZG+QIjhZN#RINOkv}hX~s8L2G6r`wL>RACRQzY~j{$AH(iywvg6X&si z1wL+|N5kvJoUVk%RNW3+ehgI01fo)_{!kh9_SjC9i8`dMHv|VYUc}2NpCLHnehz#= z3C*h_$2!4LeB?zss^%ES1^7-2mh6WwQnKh3RPvqR$bIx8jsw+^BYcPOdzc;xdR4!u zVH(LA5l7GfJ&Y)Zf2wJk!$$0YiM90bjjUsmpjvHHH{0wTFTFHBKYr}XBl5>q^W_K? znYs$(jJ3U9ifOxGnxZr5hIFlKieVRaz}0%D>gAXKV{ZtCl`mr0*cur=-Uad3 z3|ePWEwI6dZP3Q2LVUF@t~OB^JZ@`BWtDeB&W-kW$`J-@I--t~yWwgdKM&&oFCXhaf zwBWr|?b)DP$Q-F;2% zZ5dRgI@nAWMMm}0Iz6DqQ8p;WwN5C#t}9h*8V2Y4n+C8Gdtqg=RNZ#ARDI41u`hKo zH5kJIHykr6`W_Ph(!luiq{jKaUrI^;E=;>MP&du5q4><6FbG?>;y!;DR^CT0EdESy z6z*+#_h6HrB0x-@x@w~xP0BC0GQ?x=8owA0#`)YlrXOJQBc0vZ<#RVHW-RBE+CZ85%@N69kK z^e3&YfG_3=8JeaE0&a-}@|ho!?~RD_xvi0AF7Ar@i&ZVT=}v}8-SGf!lJ2Qy;Qk1= zdfNKDB-5nsCE+QC6w{Gngo86o8LGLowW31)v$Y~@`zem}pi62`b%<>=QP$1YjH2z8US}%) zxs8_QAKoG`KF73CttH=KBU}ld+gk}__%^#~bu&}V=XY7$4YTK=)P~ng)78q58xXr* z)y?ZoT*d&M3#|&Ey&RS%u*o=L0OfEcax@q7)vd@^J zFzqU1+BH;3zh0MDzh@d5%my6?%&dL^moJ$bs(^gsG8V+99v4YhD6A70h-&gqw@HvY z{?AmzbrLY_W7Ap=zyVueqCEUlQ-KZ*{ak@2-ib(*2VXO-^P}CsT_%?!TGyMVT?E}8 zW>18)YxY2S#4U6MXSmuuC{d34+H{CRROa+=Ob0Yz)jgq>D0$zR*65TUaHpoqz?C+*5fk=eCPsHy^Unjz;DFp`e9D$4dtDIA%D>%L{I%tHcZGB2f z_gADVGJoj`P-HR3vuT1@{6VNjv^~HX_>|Q=ifuS0mJ(Y_>DwVha&hOyi@iF?m&O_h1=cvsIY`z6nf4RQoaW^!HcB#oBYvYPQ?OlENaipoaG9rYEDvcNyTUE7yjxIk zKOBm?lj$DwG~|Wb$zcidP_KClW1HWV|0!z@4Q5B)RYnurM_A>}?~3l1RmHr;fDm=y z1y#+9G+@dr=B*l#Q^SnIhblC;mU%8gH0-3*G2^g9DiY=K^~|pc5_VpBaDDSEg_Iz- zYG~eJuxQ6!KBdrZjm>XqJPA$BIMOJTtmeW3Vd>(Q=0cSOD_fgqakiWji7+x6z1wuK zIh!N6mk2Srtw3lFLhMo@;()Z&kbZ(~WILU$cs~vjo!etbl4cxl`0!%8ZnHwYLFQnH z?qHs2-TbaLbQHepms4xd(LCRucv>Oi;ukw;Cv!r0%`^VJp$=TNnVW#x7<&Bm?u_vl za|Y^n3oT<9Ah-(Gh43cBMj8{CS$$~*s1##%$T?lin>CM6yl?7f4u$ny%|i@Rh2X<~ zv8$3`0_Yrjx|t^%HVY1(;zACn-_kM>E_XL)8qN}dXSO)LlwqOpXAg7N@VitKb;bW3 z@dxun7xLr4GZFsnX-;R>v%J3-V3LdUbPt*c6?$Xcq6iN>!KIpp9VCJE6L_B6Qt>#7 zSfF+cR;pzm^K>>{aPS0|$|2H;oMT*H^Dx`Sv)sqD{BMx&D?AI21_gNoeA}^3nDp~_z(3gYRo=Ve0RtNz&ao}8t07*b1nh{z#eA81Zt70yv+Ow*tQ(j1Q9 zfm?Bixk9PHMZ_jSR5~?r_@ea?rNAX@*I_!A0++^y*2B&7R1FlpG%Pe3fx`k?I&rQg z0q%ww_t=_@8I#zkVN|1r4dSB`8a8bxZw@#9Vq(+I!=vCb32fPU=#v}TQ+~CqvAsdX zLROm93nkqG8beV+=*#l0d7!C_<+c@#tw=m)i!o8Y6KTZd0Txkd zWC%i)jW|$DJ5K}8<(KhbNd=Bo!!t9^M^b01<4K%Cf=_B1XYt?Md+*c|zj=?}T-!KP z;2jWE$9Pr!P3}srYs^v+8mI;|X!Rl|Yd9 zTN@V(q7t^Z1smXvnJWhw%j zzyn8ori4^$VX=6}gj7%puS*+A;(pa{`A!+JKN7z_a5DT}Jv6O%zbnDxdsQsav}z zsO`j4^AS~>j89xlf-44vuh{IT;h@zbYm}030f;tu5MjwB6|^<@)?vY|f#MM; zDQ^jrEiTJ6RTjSVTEbw~YI_Jg>u>1_g@cXF3ohCoKy)O|AWF%|vrH4XTGlcT8&X{3 zi9V0Bh@bM=>II+RRGi5a@$(fm!xJI5s>KZV`dNC)wx8YA4Z#^Y-}Wk+SBP(hT1+rc zs0(HA+AEe>+%CQ(DgO%&Gs)F0vlT>M_Q8J8yGCiaaZO#|gH5;=!Q(Fr%p74cK~ycv zWN!VgT9&`8Jk*tQz6&3Tk&2d_(w9Iemqy<(8N zTvJOSN7FQ3ubJfy1bDkc+6apT*|;Nt;ms|(NRrR!BZr|7qW2?4#x+DGYB2n<0Is*P ztW%|Lw6>g8e|ra`rZ&-*V908334x2hm`A|;ww6{Z9Z%uP@@U`chv4eTj8ejHs@VJv zmh1SNFJk7xuN^I$IG|R+2w|Nq+f-K6E?Dx$cDUVGZ4UFvDMREopZ+j5R{Yg-R&f!!(#tx-sIMjy*b z;?sx9+CB_iu45|q(b!quP$bW#<-uF?}4_SgNYT45|0Xt8SjW}aH0KY1-L zuiX|$60kv*B9#Nx?o)qrH=-URm<#L{__8AQzs*DRvT#`z$-7D~%r{$Fa&4+(*Q*+k zMXM|Z*Gi7pdIqM1T#z-=GE>FcVl8)--_%to9Mj`;2I?OJ<1Gu2i)IO!kz+Q?y+>K< zZpypm@E_kI1`IiT*Sh6do-GW~F7?*jfiHvWKxBt7%e>2B^Dc*Pzij&)r`>k4J#j(f zFKlw-FCwO#U~`J$%>sLQHl`RZ71+zMjAHn)!0u%$iy;{7mD%=UsLB65Rt&ws9?7m0 zLmJp$X5~*q0f+Ap?1YP8x3MS1aFa7RQxauph>*wb!i} zQiKwcCNYZh$HtEzpE^1|-{&oY!)vi_b&BA?I=cgYUTY6-){aX!pOeU#l$ws!8pLUO z`HHqNWAc3yilFv7yQkdT7jaC;9G~x7D+&qC7?V6X-?yJ2C#+a!4`Sz3QhLIKeBX6~ zyzEgCTtt;Djzh6i3?NXA$!rt1N!OX&EFvB)2*K=A}+Do|oP zH+hK)Wn_-Z_ia%jGFDb0GWL=Rk$rbmC?z2&-}k40puz@hz^(^H;fbRsq~-hK4|2oZ zY}!E>y1`zq<+6h>FgiV9Qoe6Hr?{W1`7^5E^go_(6+`c^s4^bgA z9HQc0&PbSwO5BG~$@2|2DLpe~biS{S;0&EkoE;89+(zsJLk>X}|2Opz*f!av5F*Yy z1n+D_q1!)fveR60w%&iLVU%@(|SCWG^%P7tZ^9j3gx>XYIF;;(4x? zNQsS4PmiCL@9W6v-WSj_uok1Sh9ebfG5bpuoRTml7R!iD z))=O8%N&|z{iY;O8a=i{dw!K0{tF2x@%IY|1G=DuQElZ@{o%-bahQElwOCA400;-yM1bS^jbC$k{p$9T-I0D(o zkht$f41GJIyIw#T(5rX8@8XLH+{zm-B5*73AAx_kF@L{^f&0cHL%r9z^W;*_BL@uN zZC6`{_}6hHY9+&r*X?DRjpvNI6WjIg-Lq?l*mfP!?wKzn^&8MW-?vnTORw9#%{Fir zy`L)5z1sCc@qL`8cOHe-yDvIKh6-Cz`r-=<=-F;Cdf>&RuD#F)GNf+B>EUns*A>ih zmZNYPas0BIDZp2bpsK94g2mGpGi!Ae%5Ae(VLj;IGO&4`DKx-0oS^cdv3)!Bz#tGb zbH7e~VmtIhcg{QtMcc4P?mP#VwxQS7oP%$-*(#OK zknj6}Q}vn;?9{hw=OMAZyXX5}Iu9$i+dVL7yFHxQ6d;=ekp#TLq7)>iRKfy$(dXgL zc6%ju;If^BOrgXlycf zUrVkom?OHPRmV6vl*q}G#^(DXxHPf%jZfyIR!2=;|8yLACvlK0#&Q$VC*hQ%VY-Y@ z9TlI2GwXL8MOE#Un!*tAd+mQOjI`@by6FRO?hhtfUi3@QXnxxKPk4>oob;U?(0SU=b_hoQd)W zL!FqcK&a2h?nL?h;m(r;Mf~bXlplFs%5{^ScnW~Ds~0fg)O4J4DeKZhu3ye!F#w%TA?fr*Mn=F_eU{eI zrD#SSR=7XVnPMF#*!;Zbr-*zwPH_175NyM}ilRjs&KYb6dgf_Z`)0xM97a~xyEr4WBk9Ex!mHubCGX$1Qb(*2%mvSaB$2tcG z_{#QFO4y>7FdtOL4Ax#y`70V;-lNW5Mc3(R&S@;UCm1Zw7g>TDlG$=043yJHY2J>I zbxF0h#!P2=z@eT7*gQt^vZD%f^hM0`sm!*w97@%u&vH&?Un)FNcZE3yvr{qW&}^rV zv0hXaEdb*0sN`E&S`_@nm0!K&PJrxOPasU0=bFMYdc(tcu5Ux<_NJzvFP>L5YmktD z`R1naV-gdhM%OPWad(Hb1+I-Ozc++0bUkF-dV^t+>ppv{H#}J6`iY(G4ec(w(xBH8 z*PPIgg{~@4=|h)~_o*Q0vJ}hurZ*HXMWJ7N%Wp1o{Z&R!V?mA~pa<}qr}7`WT-Hd| zxIZ^54bl!{Oys`rn!!5thX*^$q(W*(R~e28g-stIdO&|}P#QeEg1%MJMp(MgmBAAF zb0gD4>=W(SMb}i8iJCY%?ih9nLce#(HI2>dFJl$L4WX<1lPeVSspAmWohvB39WT)@ zEv5745=0;F4_GBEDn~NG^3%@nf=^sV`LC<4?u^xo5p5H7(Htmef9$Fm#5TmhBa5dw zOb3_JHL-*s@LhBDU?&vzqQUM!7_t@_xS^=eB+t0+N)BW%_YwMdLK-4BBLnY(yg=A> z%azQ!D)d{8jY!{u^yu!`MX7|Vw_SahuMa$09^M>AeC_(4E$ag-Q_z&B+mLa5oN#vt zgnr|i%nmA=cJsl_E{f;-@VIg3Y|9`V8bPeK8z&=L)*Kq2v~g2HPZG^DVdl0 z3hQ~=8mxO!hI<&TkAQ*;uI72Uqg||u!o%~X(BnIdw^#duVPHga`14H^P=g`}{{G&T zz$T~~@kALm{NQ@PRw528p|Z@1!s?)P0|nA}%BaNiYWU^kI-Xhd_l+|Mq9 z!4LrPuQ{4P_9wxC@aIt!JN3ZzwxO=Trd2|NUpaMx{MKY?^D z2!ziQAG-z_CJUy>z)%eF$1Y=lp;%ySad=m-)$gu<4c`ic^PFp(UyJ?q#Ffe{{mE%^ z;UBJz0kY)>`$@)D4^jqwI+iRP1bupApU-`04~9`c+q12OgD{N6gMuxC;Oc`gd|XHo z&pF0Du>08AL82*C1vE&t{nH%;F?;a;o*s9EbA8hoD(Az7oc7568)Ib$(<}#@cXArxBDCdYiGTL%3sYsv_7`-mwg8qfYev7KkVU-mK`@rLf}?fbM}Pgdv;r|{0F7WY9t$0FT$+haTcQ`KFn@7S!9;@-yN07c!93wSH!v*wO=5XCH= z>9m0NOqKk<#*P)bAn%xcO*r3V$)YpNhI*M&y_4i}DIM9LDKuVSN?qI*t zb`JIP1;#^=ym7cASJRb0(oa`ToMVSZSw70KQ3U`22Q1m|=q+b=ci?HtLJD^Z@CAu} zb}k<4r*4YRfk#4$(aXj=@Fto9Y)=tJlY-T0N)70K+x&D#D(3@i9G@IN$+46me!L6= zCOde?hpVAd611E`0HvWXO>um}b@P-o-8<7q;OHfe5U4rLG0XbfZtdXZ0~~lBg^h$Z zf4MwB9QCJTU-sjO8X`u_Tp1@s;%Gj@G1YoL{y*b~&e35ea(pH@{KpSkq>_%Fvm7(5 z-wF=@k%T4`;uty`Eqx+5{Kgdc>RVji5Jz&BBbChSOjupk z1b^o`lGqN^fa?|24%Lx%h+5_7&E6jlIjbBRmBK3Rup>P7dpB%p7^qpG$HG}~3}b^(c8zY| z*h#o7#lp$@KzO*uF_29c76ixX0j2k_6`LJFU|r|v$2Ka4#{EgdFb&gsVQn{{)9S8A zj}$BF#^~xwu?=H)6iv#2PMY)xpc3OZI{L8Sk-{}a7xfZpZ$RFgw8=4q)etPfKE1F~ zwhv}KM#7^pdNb>$>@Gz2q$=_$B+sMc23w^R8(Ev?OfpYxb-cgyI=0ARg(YpPLu<6J zS_#*h;n`Lk46Z4fC+U{aZkuecv)vKP{!x@k zt)=)zvS`8LHzk7ZeA2YP2&QK^xBJm{Fq z_A5%3>q;<9u$_IX;B$4n+V{t>KNaGt{}Lmh@Cdd@xp=B&aK6q#0}$DEN=ApaRX7TC z4(hxmM=`kK6yh2pio^C>AE`6zzi<0Z+WOEOc+4@A#~Gipar*8jHtAH=(Brs_R7f9RcC@9l>Dx2}kusLN}$bkVV~JDJ=DVM&G}Il02h@6oKCqX4gc%pp!Z%2_qgZ}*2fmubQajo(z1}Co8RH#+}&qg9d39u})6E8;uIj0&t zu(G?eNnT;MK$TTw(1>G2uyeej4RHWDL(v8pgj;c=#6=7K#@p|H_^J?MbS^b47gDs3 zL@I9TW&`QO=V=r1~u2`>uwU}&Dl_}m>R*`UfZ=Ry{ftZdNFxlM##{j!uE zy2(cYhBpQbQV+-th^Szw4mN`{mE|W>_7Tt?%54ZC=*Xm1>{PO-K2JSD?yty@I~9{s zRM@HjX&n1TVc_XTSpGXQ;9x-vn+#TXG|Sln_Wyxc>svxhg3w@Tl%WA9VKd_U7GCEE zhCu?sD=TAVhXp{)M|RoPxM8#U4VpG?Fluy@rVSFujG|<`ob|CCSMtf@AU+mz*cqSN zR}fVHmXsuq``nJfi!=)5)NA&Y1W~qo><#-D1o6Z=?7oR9hmqsdfY@aVZrkJ7v~kexYkPCfLS2I>fp_d<*oJX%H3;*$eiSp*{l=co zPLJ~&AQU5kva=|i%Dxd~>KQ8aSv*c9NVPz~hvmw`zI*nSEMmM+L!AT}v6E!M@Vl5O zVc*%uvnJyyBd8dU7r?)_ujT*`P_TXAof`W6c#4L~l%cgXZrl)0I}#ezZ`e4oS%ant z{F_D$HVtGeBN%D$IUc9A`P@ntg>b+OI4TyHN7@MKf|GayMM&|_~ zzc^;VF<)3STVlhg_=ckzjA@+MWK?2Q^9JHuUJnOJgJ9st-Yl+-4i!$7#Zd0>iFc-g zapqOn)(;3<=Tm_-d={1n5ua&*18Us$_JiL(^UmQyw?9YnSD$<5T5F_G_4vsG;%PK3 zuIveiJ70LGS(^(YKP^y+`UwB|HSh5Xwh25jNtel+<@+2u)I8tkng9o{duy`t6NHaZ z1&s;lV-qaA;T>peqx09#_qCeD@2Aha;!x;#l}} z9m2wAAp|o@yiEdp^Mxw9t&f^`Pk=QQJYkUal{bg&7gV~N&nu~niJ@@w3vUPBH4AgSJqh{zcnT(kIOkbhcfR_I6dFv zhFc%v@Y$f6GbtFel$3vi%sS56IFt)uR$XUgUhY6E9$az64VY8US%>#)1dImEDH5Ap zP~V9eJUq#w4Bom%&ffxA=Tv!RbLXE1{2>m`9=CMjVpSKhdbl>V&_zhT9IV!f+i?Q1-yCR+i8O0F3xo8`{@+d!!dNZ4!%mD)h_9{ z@G71ay**Jx7+vE<9vaSw{G_XMEW0@o;=AF^* z2ll`-q3THPih~`e@Z%?1mJ)e>Pv>~nGaa_{w>_u#XfNk*mX;3nyOW@dIpsj|ndTB& z(xaAexEJG`TFP6rr9jeh&0Dx03WD5solb6+3I6Qs%%FN)a*vTu=Q#U>@QdE~{W_0a zvMM;p05N%?UO8<=aIis+S>nXo!@hN}(&_O)aU0_ZsJGndgMG`KKO5d8Y+i{p1a9Tp z0%h9@=c~-{iH7AXF1YfRa~!;}49o4X%6Z4|z0j1FXB#1J$a4-d82-`tA?^tal#^FG zhhkp+rPXhQw}iOxpf+GV=^Q5)u5os=vX&&Y@aeq?6#Z*`g|89GCtf+~P3LcR)+kfV{c6r?6Dv_L zD(42qCJUa_X&x_ZJA-SaJ5!+iS?4#b%487(WJIfT&aYT!1)~~qJs^3q0S>rLUY4Se zXv$uA-Z|0$mJs)J;8|CgWOic?d~ZN?`EiK*Y=|)l@1&(oN{<~65#PI;%Y`>gt(Ceq zk8mf+hr`|3_?%~-hiZJynp<|5G1`Jx$(Pq4Pc_#?UPTr z-RBKFD+QNExRW4eyT=GsN4Ur5<+gMkkpk=nm|NaG4$?M91ma^j_k06%i$k41mv?_* zfVbn3G^?`PEVqtye}d=Tm<9*iXe#54RgieaGQ;=^>W3GozhK4ss_(W6gBz_14rilojY3@E{ zfJLpbf%MN>54T=M1E$VI(w99DHl$F~@Ix}t zV}b4lU?yZT8#GnK7+<d;@dI3a-9rp(=|GDw zoWa!3eTQvUcxh!?y}$c9dso5GQnbwg_q^w#4s6}*E_PSpq8R7F2WVCWI5WUK*boZs zrc27Il*b|P?Ri0}I~Z;Zbf+8Y2r>^#csK~%)K}qGgA+Ebz;pK8(by-O4{=Wh-wdg# z5~|8MA19>_bzh;gby)0GtA8cV9R?q`-AkBn8!6R;`q^-Ip5c8_5=ApFgpBGp5^cUO zC_JwDfoXYYljt_XpXJ>fna>NSbFe-b=y~vEoO`?BRe{hV9dH0H15|jAQCOi2LFdOl zJo0fdKL~x(HqmW@&7(1DHxXUy34Y}7s$tOj-WT#(*HBK&N4vwJYodFH;SWW>(p8e+ z=va3}C`xiCva&NMF0^jLNky#V3~^M;I}Xh`RPh=<_b8Sm1oV!ixi}oA*LP?hdb!Uor=KW6i zW5q=GIMxr*n4JXbex#b(W!WHGTk%S z2MUe%Q_Aoiac**%`0E@~Ir@F;% zjGS?|obhr|C0BL)^e$eGK^mc_hkus~hBXIFjl@*KzZ9nyDzh8Tg+iF0VSjZ8R~O!!&XKHKj>wLv2H@%oH|KYp zVbG++85`hhpCkN4TYZ)3);G@TyapI=f~?ko?#z&Ktix!wR8ZAgPz}`raN779mrw@; z3!O}(dc0NhCHq(@lYa(J^9+_bgFVTCh+DX#@-w6Yl)dL1!OF}Lb{4;jXQD_}7x&9K zfQQ<5*z(@;y&0bG1Ne`tS)T8Mlpg^G7BiQxs-Ln^^sgJD-m>2c@J;fAAnkg<2(T>n zTk4r+4SS9FEBN7y zmU*(Q6$GAtpikvTJbpQ6xhKO~R}icF5$WC!tnf^+wh_b{enh;0G{f3U;1~GeZIMnR zOkU|pvyK$R!x}LOhOY9=w5ACB5e=UJujV0sw!mKy_^WxIZ>`G(>V2J6uDRN?+n_ip zL2dyaJSY|}OOR`=^W&A_sWv z9V|z0@!&Q@6>hWDgAZX5!faxa+;_VNUkj?x(48LqWQGc*?e^Rvh~EN)o7J%MP43`b zEIxKj$7;x_bw2r*H$10_oi6`{*KnKUYDFGQ1R|G?8hB7ak+rkl^5881p{A};|MK+d zo>FuCpslc5#`1q6F4{Rwe#e75CzRnDVDfR#687aBWqA|L@QfZwlu(#?(u1ew3Zp!> zSSc8tmIlrHco)i%XFQFGfwRNOvz|qMn)o{?VOWA({GJETr4fpkZ1}?Rf?w0Xri+*f zXf?6C37QS^c2y3c$BB03&XJK}ISG@i5HiXeE-Ot&6NOfPSibHDK1(eU!M>mCc!D&PC2$4U@cbmkVm`P3>` z_m1adlB3G`?t0b|^k^kU+PH5$*#wcH{l53$^G|dGPk%v!Y30ky%YXFXl~Kh{WQ@G! zC#AKhtlu6e`Y4_DDjIoD%X3eR33NQ ziE#gt(TrbpnafsKC3)e z37_0=@hvA7Otozv?8VR7a5MNN*uJ6OAGA{BttM|4L8N!F#Vh(F%{EKJym;*a<*0+r zws|qZiZwRay^&O7t{fIQF=w(^DL43v9xjmM@^1CBXr7lWqAs|}<6XvXszTR<5a!2{ zU`HA6Y+j_c6<$`>`x-}3Qe|2>?>vnD&A`vkh=>nqtSvky0+H{&tCS< zvM%SBF-3;ryE$5h0Og5@L_}!11-gN7B!Qnsc;EJ_8lnnI-b463EhXsfK1SHPG zYkL=1&k3UcETj^hkXXl?Vf{pK_)kUR@UOPl2~+EO)2w#|hcX{U9Pws}YRszV&9wd| zi1S6m({zbz!OAeR9%kB>=6X`CLAg{%|7lCF!Rq>014(e`a~Gy?hog?d2G}4~1<`*3 zQ|&Xup@x|4Y%DmGsf75?IehPlbUilgtzA>jlF#$cHp$9q(U*7x%)K( zth^TJg^-@Ers5MO7)X>!!VthDRZIN8icK*mTdNl`&?yZvP%q&Tzrw`c zt|oj}$K!6|Z0`byZSGBF-g#n;!&3sBLaQx`vQ;g-$*he+=D7z>-V*O!$P1sxlIFpI zA$SCaNN!d^Ywu*XbRN_%_7V z#PZu4p2Y#aIf6%Ac0ndg<>f*3BF};V-y8GAB^Ml}5L?#3KA$h{wICb$;_9p3VF6Du z-$ALGmllYuA5t-`w*X3B#ep=Un>UG7T_F5SSwAGJwwj=IckeJ*Gs@MJzJa7l4)5U| z&n7Go$v(BPWj(P;RxJ>DKF-M#gtUF94t=bbcQ8Aw6ciJUi&jYVXj0C_?+$qeX$Zz3*qW$Jik|q#`vDg`YjYSi!6&PYn37n(|M$R z-rqZtO;&j5y8$ZCsaY5UPX~D8*;+vk_FEf(O0`1WLEirCxT=AFQ=pWFE`z;k?6#tT ze^`K1x$`3jc|&3D5bttkStLv>NfJJx;QVx`cMWSQDDeI_ccn`Cci(t!8Ot`AnL%CI6vBZnZ*inF#m|JW(Xg4h9-D- zvZabJ|BSC@r`|U2C3+{Y1BwRzAz#!$_mOD;c#`BDz&=)}{00Qq&mC(^_KvLmWU)40 zHOTkEu}gJE6X$LJanEIlYkSDHN%_9S}H8- z{1oV3AX{5J^}HV78>=vG@MEM-UXb{xmUg>%+n?({QwrmWjqw*MArQE1~8L>~gIXN=zn& zt2Uw;VdPBjDK=pl+@6oyYSmZRpEKEVArpL57>`!`&JHPhBE!Ub4#!#SyED+Vf-o;$ zUHVj!Iqp|snm)Sccn7j4suh3wMYtXUf6n&W;O&Oq))4)*0gt%i9C)Z<_eyvpYPo1J z{{2jD<6Q4Itb>B{Uvy%243{~LaU3U`?!1QcoKNsUuCfGG2XiBopYI*VRw!zeWhe!M zxOB#&vgd;57NqJr!UzKw;&_V2(9#rBRn;JAkvE%T`05q@S>*jo0q}Xr67LRwpc<@R z>c>lqN**-@)o>InT!t~KDpprsMve}Fmn-3VTNHtp4*1Y?0_t^K${LOqWvW#SLt> z;bGmBFe!^68eOHWQoVvSBV0;mF99`{Dvh^!e&_6T%wA-dtgs|PN(sfsUHsW#q&RDj zZ_s3P(}rW3Hf-2nRO3dY=#M#dgX~S-ijWl{S>S|SO0kX~FJamOX|#8{RU!q-J1a_?2t^y$H!4YI zGzeDIl0xNMRirr@O8%g#ggaZ*K>N85Uy<-l0YbEc+gn4LsdJ*R;H0fuZXKzX-(Avn zV-2$)ZiwRs&}Wyp2L7%xyPh;n*B4)3(MQ@lHB=zV*VJe%;rESHI~q2X@Z=XEs&l30 z5~gER=#`dA1&LO>wS-quR9aM9X^VjPHI)|a{Aq1EC=glJp_BBTF1M;?n`vF}BOWA%b{QwWMRhc9X1VQDY*jaQf{luMubyG2>BZo;7t@}1; zyE){djfj4GDSV{lrru&bF4*|hjsJ&@ddNk=R;q_+ccD<*JnId?;onWvYaTWz8;gN{ zUvT($7~EgtE+!Fet{5lfSpOCr{#^&pwMvBHl;g>dZ$Pd=g6|w7DT^31vF~a8Y7Knp9AEMk*c$=#4tmDl!SYj2NyqIBRedR zmLQE}Yz@C=(vex$(2zveLXfpjqVy+gBye;YL=`XPdJC|z(quMFk>ww5M85bpa4>u) z1uIi8Sz5#93#$11ogdi&7pyqD->)Kd3-Ik$nCLTjeoSV_A19@-%Lp-c*2Yi*)au4Ut&{hQOcpDHyoNZmXZQ| zU#k`z!c?cqu2;HUrZk)dtrJ%AKV3pKyW>m+>N^7_O9KL`tusKMV0_(MOX1^xz=ZQ* z`_6#bQ>6X@Jye!H3QIBm1rx0}ytS7ckgl>!QCR4bh-wkuc{K4NUC^qn)FaThM&;hP zPV634MqD$P;Qn-JHhWjmL%T(xE2!1tNmfrF^;dVneFxSF2)yuCs6!J~dk!9MD!Rq@%6~ z3+bXmSV%V=!a{nMDkNsT*x;&#=q*?|8(T1Ay%J}9gNr;Au#I!1cvi3;?+MzfvyFm- zHoB@3-4j#hNDJ9}>%~S_CDWy{y>oHw{Yg<@)JH1SsxG+mnzWXAHi**sNBT84KNpe> z=S#^ITH}bO*xr3D;8YqMUwLZI~a!8{4m+X&H;VBKm7zjJ^P zrEzxvpZ-+Z>9tZZLA2KRe!YY_dX-jTleCW@nhYBhN*4*DDK+tR36u4z&Z2G7WrFyn zM)}?j32&5n3gt&TC7WQHi+S}G74h1M`z;CoKFn@hCsirLc|jyeUq;jTHC_FRpJ3Y~ zrCSHSPSZyjoanGLOdO^{%3f(Fn~0UePZg-urtym6fJCqClLoMSg@sQWD2oI2@9Y?Q z2w#D7%k}wzL?ZS}y=*toC_Rt&RiT(!?g>R=W)YfZLH1!O6owQ@%UHw~GKD4+q~abt zRn)WafE3rF(H2c5Znc~05C&EY9l}o5njkgIqJ>tPj?^+AACyK^7_AGT!o*TS$%-j_ zZc?j=k@z+%5CkzTadmv;L`Py{9G3b;$huC#T`zZdfUoZBqPNoI z_Cf_=@Wb2KUy!D*!ERDa@(a9Y?4GwO#m6^n6yG$yVZ-=_@rm)HqUuggOU@TjH!Huo z@6WN~@??p@fnP&RCP0qPmGF?|uH?zIezBE;k1uQvY~_owB>A$-a|Qnd>{hX^4fJ~Y zGX=s!t+JkM4$uu-JodN4JLNpHtp~Uk5$OlFib%)nx8ZQ0yl0X%a~l=GS7@RL%n5#l z#2ppzym+1<>gCgO2fE4@1ZygKasr-gMVDQ|>ogC`O4b11zgvaN=&RL=k)Zipeh}%Y zXJDG8_T)NZ|gP}wt|+pjvaKj0nKaQL8#XO31ayr~)vXI}P9;uzY(eR>L`sNk%W z78<^t>e7q0a4_e%^voJ5P`$BwWwrzDl72gZy+2CeV+5X-dv{ObN-tXA`)K$());~6 zD^T&p(j9A@K=s#98E~PQE6tiF@B;+C-Mh$|El>jms{R>7{J4A6Fs&mhbQg zvhMp5zF9_y&UDLuDB+ndhxid5ZUcj4^Cdor`=J8mCzmBWbW>0=a?R5qE)xj<>+Blf z_hOnpg`yU5>|<$FX?FSTPgQ;QrE&7k&m}z2MRwXkZMr7m$&Ls#HoBr?&Av-M}CexxAxph$ z1IbqqC_|^epD-8hU=bq6T@Q5O-jmaK-7W;X-qaw23-;G4?}G3oS2u`xH_*jzWXrER zTw$n@zcy5@xM6bP!Mv*DBa5Pg^#2g%qK1+2p1@O`>5koXl^|j&FDXWBIfYlW&2ATF z6u7!u(pcHyb?s5*YWigW>Ng2!DegelE9(-GK(Se^yi2q_Rj6)77rrAwT@(pbE4f4? z)3t|ARd7Jp%*G>p+)N`USv2bv*8yFwpoR+%p%pE#qn2wS2Wa4oiE@R&#@eo#8s`1e z_M8A;emb;kiJuG4spDG0Npv@SQe6QU>bbt<$VcDfg>lp{mjk#MOM+JQ36M|McLf=& ztKSeqlwSv>cO}scTrLPbAx*Px7aYonMO_;s=_#CR^_c4rPpcj^o{C$nl%t zP)57wI6i8Q96@hVZI!|AIgW2yAcrJ4l(CRFu(l20-@N%`T=|IybJ)r}D#e>R(lWR`@|52pra1m~4p~H6oNLJJ;2OfB1y!8PmLlhMMDl2b zOy{zt$Ok$hdHxRZ8LCp0E1i+DTM<-;-RCU(sf#O#T~>H#hAyST+Z9zj5@cFSBK0{9 zQ3LT?X)U|CMl;t=svxZnkx%5Xc?F3jskACTV_YfhibAIKnx9}57~99Soc*y=WF%Ay^{Qii zT_ai9T_P>PDf~SJwd2ixuHmfBF45MMmO!#NLE`m%*55UrjaJB%kx=#O;ex&xjDG-9 zsG!^g^60UEWX#$Ra>cOS3J;|!R6S%L7Gr|-52aB7zRRjDJVAj>coMi!xVzx7gcl

wAqk%MGTcHFk-YT-B1zgM__H~)7z+057PWGu3?7ug32$( zYwkoh7~w>MYpNlcsKNYQzG@8~Z{RvN(d9GXffrY-PMLajkXjKMjdjHs_6rtzppPpH zY%HU}@TpKbNhl?IO2+Z8VEJ5GhG#;8UgKkt^dtzWD_FI?;`zO52Q}CVA5I4~C%9I# z-h0LSd$opWLpUr-aSdeYd&P@+q|nFVP@5UHr@AJxwR=VP<*(&cwdl8(;YOM(ixn%> z*927!dLvX!cTHe-1r_Llyeg~*eV+{1kbuyAms%s9O;VOj|KEq3h$gW2OaV~hpH6y_HiBjTfQKCLNQHeiJ$FJJ` zt*}6879&)f>9>%;Z?9B_-dWgAZD#qcCRA4$q2p{<4w=E174)S*wA#o;7L!Z(;eP>m z#ol{}$n+o{sT2WU1-f%tn?vHFw~AD)SMyD?k!FD32-mZWqc~<(sGM%6leN>eMOwR#i&ev5Gm1 z4@S$Lu}^3FMMY@dNB*m4?DyIK1dhK1R#b@3;h~fn=AOe3u02tt_(K|%g^qJMi+t!k zy;9;MI3#)Lf<3`d4*E3l(xod^4r8GTT)cp9jJuyNXNFUGtIZ{;T zL;F+%KA%TLz#rTo$L$a8e;bww6n|Z#3Ze2m!$E=P_qkL&4&PotWhVISvVDr-Gr_^H zbg3M81pP?;jX|bxkGpEm5m-mT|Lot3pW@Fj%Ad}1Pcj4q9l<`nG&BY_X1Ukt(Bf=& zE{9fUBWXg8d#wfxnd8nQzCHm+YCG4xL5J$Th7Tfwj=<^H+&?P+_JL>f6oK285E3xK zgZb`NBt@u?7r65|_tk^$K5%RyzQ$1idG8|ktf0`kGA&?RL(WEbkAlfz6=D4fcLr-C z%eGwie#SmIBA;I6?j(^$s>?suF}m8kiQk0SnI-B0r%#*vz~J5PLe53CQWK5aH4MJb zwZqW8ifvRs$|jC{A756D*n^#E=stg9+c(^=Yt>ZC+`=)p-*o?`SMWI{9g7qt6AP_< zpymPhHnqaq8^s`~bx=cp%Wk1_cy5#otnrpRJ)rn)14I;+Nde1Y_kz%pxBWaskI^A* z2iC=X1pRdDZ9qSz3E?o=-GL31=}H_tSn0+mW&AnwKeD?QnDx}Q z;%)b5?3ApGF8ndl9zZFwq|7mQJo`q_=rPi!wMas**rDEWcPuj=6)%!<*9(aZ7#HJh z3fUX+O%B;N=p??$>338pe|XY;gH1h3-(!MtTTlcCqw?~SVs}CWTXRfoH3$FC{ltKf zjLCsIc#?;I3z2`2wfGvgQ1EB&VeGYILR)TmoLx$hU;f-Z3?`391EMeEpDaU~7zX(l zdr;m49lvm&W?u+-{s)jW7P`9g>{E9LT)2kM!+NEnj;O~tnW{Rl?ejRm2TXW!!=1^N z9G6qRbk{IgHyo#?k#LeKz}MXT8M5&!cZPMJz`OkLKY!)Uv>q3Dw;%qKTka{=ivsTv zc%D3hQ@7pItTzPS>&L(6YvjK#@H}O%mYa76`TrL9vVQp4-(b0x6J#fUt%CgMnd*K? zfi1`I10{)f-IJ~51RK9atg7vG&pp*zTj2TKVSyhL;4_?nM{CQBw;E312jIlFpj8>q zckY?i?m~tiUn3r?^p$m(K=DMV%KG?wEOwm0^8;!Xf9(gXz@FbR@Fvfg95n2x0v&o%P6#={5l+$n$=2V#?33gwhh8X;)F6od%e}ywD~L`%V)Li&CDuZLSK{F6Q}+XFkwE!}fU3s<-TrY; zvK9*t|6stk$;+)J0iEPeh=*Z8h!Xs5d9+p&z6Fq!0K^8e}iYL z^`%o(G5^@m4I0QWQEd|(N|cC#c>(F*eb*UnS!KY!K`U^CYrLf=t_fm5M%!W9Tj-h4Ty$jA+25{WPk5m+0#@7nA51rYe?TV?vEf8_n>n?B# zbQst!I{UKf#bj(=QDPuC@8T7H5(~WK%!WVjc@tq{RnIJzpUxl6;YVL9yux4Igb(ri z4n?_|{OL-5I{aSC(~w;+rmsmrP#sSV{s)2hrzLip>Us>Uai$Q$oa(K-=(59LWRz!8 zU_O4nL5}EX#4oFUUEfnvlmD)Pr#1)ZlR?pCheP*99{ieiu{Z#wR>LCs$S${R!XMWl zM9*nnZRS~{@j(gygbkAD?bgs1o~3>y{=pGdM{Fw(9)GG(dK>=UM}wmIn>K_f?fF`J z59WUn!f_{2UewX^naY_67dm?Yjh5rPctIFLVtQy@Uw!k~Gk zXTErl1eB{lB7KY|aF{2HbH=y8?a+@3kQ0MPxA+Z&^6+3dz8~amqnu^UF6Jwfkr2HP zS4THTc$WAR?-6l?_y}}K0zQ;}I1-P-{KQ-SA7l3&7)9|v{+|R$LP#YcWjB>xLr4Mv z1?jy@69K~|xj>dQQYf~=-l75qMg+U4pkk$oN>LC53j%^7RxE%8L=*+(`+CmaZG!N5 z|9<)7k=bcGJ6mr1Zt?EeT=?2Bo%eK(TvqdJsa+eTRr(iOHzddvSLXk;ovPPHU#dK} zEUy7!WZAiKv;E)SVy}%%67Oc$DMfj4mj7>dVf%uvB z>efe%l4X|v6?Up#C4H&-65ILhvZ^qWCDUd7nC`8Fb@PH2^q3(nsJ2t>b8x;|^l^!9 zW&0|bPpW@hO?_*FH>W-wCpl|xzSKG2wc@J$zw+kMC+04$?d(k1eAR#3-U8{fbG|%s z1=rhSF~xCi|2A*ir|5jii6wF6{=?q3&(76}Oq6e(#s#YJrExR;%f0pLQ*^#OwNoM) z=lL)7=F#Wre0ikuL?yFB_P)Bt4OeAQLJRi4IVA&565? zYV`$)+D_DI_s^9@NYZ?3&VzdP`(AG&``q^vq4yV$y%{yX!42ExZADx9HM%?^FW1$j zTXxsHyxffJ?1HR}IxmZeruKM z!>BE_72LHaYL_!)|9)=X8?`XB^$ut6NDAuT?6>ztRro)+UC#`DPkfC~`mUM7`{iAR z8|_rp`wm%Cylv!-2o2SVPogUQzmS@ETc4!pALPad<;Ab(y=C-6=)N+tht^Oai!%Ht+BN7$+I=G(~0h{auPepa3n@Kvl|xI;!+m5SB6Rq~9eQ?q`u z&Rg@k_0Px4L4}>MVBM3e<7JJt)7)y&OVU&s&{sHTzbsD*_y%O_VW|19^0d<{@*rY5 z6K&rt(s`%-3n?4Qc;$ID{-(N#mEJ^ot7Z#z-)r)SrM2s#Zj{8D&};2@Z#T;2w!{9% zcG`1IU*VF5=$}U!LqoNCUHsMlq3_vOxO|P*+g4w4u=;p?{51cJ_v|X_^sQXq9Bofa z1NGYmd0=FcH;?|v$_1loy)k}H{rT_7iH!W%c>mkH`8XZs^q6m|8!|V>*0-MZX420( z`dTK3=Xd+R?@g&QGrUb%uvR8%<6H3){ZG87^aGD|3MQ$KH^oo&kJ@EF_UKFT-Okrg z9oj4p*GROUXYvY|Bz0noJk{unseP}RWq@?V)Zb zLY4BHJs_upqtu8$qsFZ}c`9m_AL)8O^}W+kH+eH3=f5xCrwlkZ<*eKDcKl0z{y*=w zmu~%7#hKmqPl0bgWRbreV?U3fyE1Y|{0#r#_iHzIzA~X}rxVp z?M;T=BVWnlCaWHgOL|Xu0BYb}*a3gTSxA0DNP+$^0H(u?C)9nNjcNXeUQ~S!H0bU( zNbSjLgzJh?Kgh1#BX)q4P zd+<8A9-e?FVJEx?C*UN+t`Oqj3g`uHD1d6X7hZ+e;4?S`eoqVj&<5JVh^Om$>RBTR z&W1Vg5G;eYU=#cZN1@3xLKI{}H<$)4xD9THXJI8AfP+x~S)l>6gZ5A`2Csy%TnE>~6YwPLhWFtV{0_;_2`MlbhQLfHg8N|syb7t;W{Gvx(OmGRT zgjKK+-hdC`BlsOoLx6nm*Wx3?Rvg4b2j~dBfe#8>6M)YLTSZU|Hv=CGwjLBb@`Ydt zu7(%k9oPn+!67&SCm}$-0Bi+90wh8P@M&OcFbsifAO|X;3hst`;4yd{)_QOq?1uN@ z8~7H^z+Vs|-|DqOp#`*ru8<9bVF*kE7tDouPz`(r*m?^1?60*RHoU^}_a4Dr@ICwh z_2hH9mLJ3bANjR9Ku72c{opE?1SL=kx591k5G;e2fbaQQ+u>dK96X2dH{cV#R*-!2 z)@lUpfsglE{eaK(T2tW~m;-zu*SZ((gB9>JY=k#pKYRi|!!K|i>d8lKt;jVje@zHB zhZfKiu7F9vCw#36sDx#(9G(L{ylZWQH((d+hC}c<90xwGYn_F2&{)0-E1%D0`7;S7 zKzrx_mqQO22E$=8Oo5qD1lPg!a1T_&GFT4J!Sk>Y-hf@O8xFze9y|^|!C5#5jpehh z@{L--1in&hwTBLHIrM;GFdQbs6qpG`a2;F^_dqo)gXQqtI+nlZ32uZpU>EF$L-08q zho9gqoP)-)A0=Ot6--Eg_Rs+?haNBthQnl-0yCiqLa)Q?g(_>~Mm4vmvCMzldiD5v zzbWdry$vgPxk#ur-T7Y6X>Z!-{S7O4#pnfz12)(N6Aws1d9P^Qf>qwM$UesB{^sj; z#-APzF!ZZq_Z0(;aQ~={_GsTn`BKtJZ_SXKbx!fY0JuYk@D} zTHAnc-&*^CPup7G!VwSt2B*MJz7A{gm0BwT_~NY95BSuqRRMfu)>;pIUDo;m_^7NE zB;R$_pOUrO65=DWR(Ig*vDOgao3Yj;;M=g)wHsMp`5vrw7u+pWS+{Prcj&Lmk*Hn7 zPkckT3g*H*$dOBa)-<>kZiDCGdH4wSz-jmcjJE_6dO>fhGHmzMeqP@g3WLgj)8CYEoQ6UeN#U)Xe`%?dFk5zjp}58;r2vrmTb|` z99lpoWI;dZ4`X2*(=`Z9*hu zL$__roIwN!!$i0Wro#-F19RaHxDymS2v5T^um;w`PIwQ#gs&iQyATBNU_d9qW2F=9 z2mN6@On^eL;5xV-?uGl{Nq7o2!W*y`_?WnL6pq1ps3)_}3Wo?th7{=J!F1>ayLy;H10LeuiHG%$n^_kWw3fYzpm{B zV?>%KZb5lrW?#c?HD&ZD+1?MwHk-z+x z&mWh0YKUA6Pr(X!4c5RrunqRXemDZ(!S8Sy8jKbiLThLPgJB5Fgd$i355O8&JK7_D zLhu0m1%HDf-}tpm=m}RqF66;2a4S3w&%iF&4JY9@h`&-Wpa=8>7v#e2LVxQHg3rP8 z@Dc2RKj91{j1>}L5DbPQD2DsTs>fH#X`FzG_DSOwtBjeRS4epkK84Sqo_q(|@`Hbu z$?|?4S~A!QxOaM0&Ko!h}+u(Ls3`<}IJUxzXT|;m!Y=iCaBOHY@@E4fl zg#_pe{a_r7hkS6u9dIW+3oGGu*a#oMhwz2qvA!gD0!~7M2|`0Kz=U+@41J*=On`}C z!A!UjJg^8JfM;PPya8{*CvX6c>D32c|(4%oeJwdRN)2 z&tjsMzv!EPqf}3F(EElS*`tl(#PA+dE zYBRK)B(ws)IBcZ@Ulz7{1K$$1Mgw0Dwx(U}Cp);M1k0cX7Q+U39X^M{a31PS7MekG z7zBf%3}%6X2jO+t2tUA&5Hv+-1nt4o0Y}3asDMg%5SGFw*bLvmw-7j02!eLd9uBOO z_2eLoU~nXq!7O+HYG5s_gHNZj{C`I99Q*^x*9a-l7y5x43gAw-3!a1L;RE;(PQmXG zlOx1Jceo6uz*O+Se8FQqLGVd<7k0ogI1Z81geK4xvSAWj4L5=Z9)~Aj2keAj;RG~s z2~p4my21pQ=)rk#E!+in!%}z%R>CS+4;z5b(ONrz&(2y0fzQiYKLVeTwa!3bt`Gz! zBtR!fhd#M1e|-s#g>m490+=0bYmw@Ckee-@~791{&uHA&>}3&>1qo zGYAL6B)A%ip#(fI9~QzQcoLq1HLw=mg&puIdco-gm7vUw?0$X7(?1OLN2%Li7g(@qn*t-dflK)mTw1Ac{1ct&SxLT;P z&K1b_PeP0v`BtIaT#@gwZXoeScoLohK9Oj>3!lINI0nasDyw3Kz2OX*E>WS70hurn zu7VrE1JA&-up8coQ}FwA=3t;yX9a-?3D6lbULuyum;w`XK)Dqfl2>jJE_EK52Ii-LQsgWhpGcGCu8Vb)49DPaI162ig=}y^E<6g4!4A2^J>96} z8)v=?*<(G{rzCv_N8uR!1%E@M5+NAk!2mv4XSD;qPiI{QLtrS(f^xVE?uJ+4HP{8a z;ShY@6OY4Ba2C!%<5D36Oh^!_EKh|!e=aAghja^zUceOT7Wvp0-O|f?VU{GVhL2${ z{0V0upcM{S*BQJb)0KY{PqWB9l4)`wpBtq*aq9- zPdHQMT`QZt6K#2{_}LO?Ko95%IWP_GfIDIB9AO=7gYB>n_QSVu1Wv*4&`{cB1wbss z39>tSlikpsL|rkLwQ>Z(kx&M+;Qq0~0$9x85?Bu#;1GNc|H64lohLMdfiMVWLJ>5{ zk$#DSMGQUwZwemkErQ>`x6trfApkNU6I_rB)o?GYgZ1zYd<&7+2~8jiy1-Pp2Ij*} zuo70m2Oj(o{)97-aJ`TSgJ3WeK`|(J5Z-_{;afNY0XGPN&>1pd3QUDN;7)i2UcG^x zoUH`khJCOfeuSg&H=Ko#8--9vf@DaC&d?Y7!33BH7R-eCa1%TP%iuNetic_y6F!4O z@CW<}(JUlQAq_ggU>E|qkO%YOCRhXyz$$nS-hek@AMA%8J$MxA%@_P28syC`GCJr4 zeW4#rfvHdiv*32P10IB>@Cv*NyWxHK9)1w2toLuWR|8LktPfTsbcJk~3{zk}+ypD& zX?PEI!O!puL`Zd3BxFJs41&Qh8Kyufl))`<>&;BMBKRPzgjKK+-Vmy+y-Vz-9wzDw zXm*Rx9PWmD;0yQ?__mJqEATZP>pX>30A<a}3BN)79fAQ@Krg{#xd`UM?QjP?2hYO?@FDyKe?yBq zg_bY`hC&e(!~L)TUV&F(KYRjz!&zu~m(a?CqhSnO2iL4DPl$x>a2ZU2sc;M23eUnySPvUu2keA{ z@G1NVN8t?obsx)L(EUOqh=X`&18t!jbcew(1g?TfFdb&VY?uSL!R@dZmcR;l8rHyC z*d}+)+za=?Gw>|D32!ZA`P)PA zWB3-1z@Kmi8ZQz;AQ6%v8@j<5xDwn@0CQk2+y!^TGFT2Tz-rh6o~?KYK8Mrr2ZTQ$ zL_kMKgAp(iN}&uMfEri>Yhe$34Bx@`@F$#s@ERckTGz1rwIMhN2E$~S0v?zTPr_5M z5#E3g;UhQ>KLKCTvVx%{w1QsH8^*#oC+7 zjo<;^hi=^ukHDkAJI}2b;Vsw%AHauj2L6Ip4+^be1dN1AsPf>W@EB}`x8Vo)5rUQq zji4>GgOM-_Wg&9x?*TQvhAKVX5z>}~R*1>zQ3%-Ca z;Ws!15swOykmkWo&>Q-|RWJ$4U>4jCcfe!tIIM>aumg6&LHHDYgrjf<{t~LJB~RKb zqkK$GR#!ni`a}He0Povu?G-YIv}tfR+ygJbYS;(+;XKrPTxbXFVG>*oH^VLPBD@4& z!PgM>gb)rpisdO0?@bjm!e=y5k4`so^}|bb-l8g}W(JXYFie1nPyo|mKHLP0-~o6R zR>Ef30-wPl_#I9|u=I)57+OJV=nn&68n}}2cDO^Rvd%wc_v6zoYhC#~@aUS@NVTlWm_~(NDa{n@j7QgqlG5L@0piz*||Z*}yAUt=nNSEP2MWH zg6rUVcmy7Wx8a?Y{2=^9@MnlxB}79v=nj)%3fv60zzTR8cEC>f6;43Rb3!cigezbM z6v91F4X?n=SMgK$4E}}l(CT@iH4K5FPyvLJYKoR?y`Idlg9M z^(DM~>+(o>h-Lsu17SQ&05=ps70ia);C5IHOJD^&4QpU6Y=iBvA3lNa;Cna?e?Y_4 zLVyRGg1q5W8VjwU3v`76Fc8MW1aLzERKaYx1MY;S@DMx)&%>MW7JLXF!Pl#q``-{e z4Szu3i$V~XkN}+^9r{6k7!MO*CKQ1O=7WLCUS0I$PNcu$a%`U_vRx7A09I|iW=V}(HmWWq$a3JSr38{kHv z$~wKquH&kuVBMp$rzlLUkX&Xb+bO9_w;~Ltz+P z4U>f`>$*4WMgCf%u7gM5QP=`o;Ws!1iIU$+f=-YQeV{M6AXlie!ZzC#%i*g!6JnGH z)V^y;E_mNV#%fp&55x2D0=xll!ftpUK8M5b6Z{P4;2#KiQwW6wNQ4g15&XD2y$2!Q zS7iCRhLq zLEa)IzgCYEdS`J}?@_z%+1y zrwnJoe7Fe~z(RNeo`lz64eWrO@EII}V{jb)hO#PvR`GVbL@s!r z;1q_Z!d>OU-B83}FQId~qnz*aZ_2jMvU1b*8De`pFZ&~Y36pGL3` z^o6N#4OBoS+y=M9Qg{fSgXdujY=r}G5RSu7a31Q(jJ2X58ahH6czWU$Fak!xRJcZ{ zvYPI+mk8ddV%-S$!TsEBK8efS&B0 z+CVmRgCQ^!Cc_jch7z~|ZiL0K1YUsEuno4u*YFLT1#()ezz!9@;^B=m9-pIE)ag zsv8u$3QKsF#46g&kx-BN)>FIf`;qmFC*&Oq@`4cgk-45SH$XMq3!FBwcEWN7ABH#K zEqEV3fWz>GP-P8z-=0lB6ZH%H3+JJ^q**N>6S9P=s_O8Z%A86y^=+e1VBRQ+zH<1I zZANt9mBS@`+e8(--7r1eZ)-g^(XU>0=wMe#ev!MPPen!H^pYAKsqe0}OvzIn;Y+TX z?#n^EzH`<(E%%B#6^yMcuga^e(UBH+rCCWrb+EUBfu-d&I))q2u9RsfvElg2!lH^A zJ)rL?vpP(d=*HeMBj{=!rEmAL?wcWrz6M|EuB*hCNbd7#kqi{hlx$AJ zOGNr=K+YGZ0H-lK+tTbe(wMn~z3(tKF<*X>4A&wb1b&cj>3$XWO55brcjoKaZh zuF-M&q`RDAm(<{~l~uVT+~w2VG9qI1IY9aTl%$3Bttu?aA6;1HE-EaMqD1ObTk`22 zNwz0TUdh9dK8qyp2A5x*>TvHE`xUt=D*C$%YIMBCv5OTbI2lHkmK2rdxr%CZv_3Ae z*2|%S)29QgO7bcTOG{+V5wG{yty_YmioglOOQ-8bGpP6PtOsS!tvbx(9XowDs!U1} zt@qR9HHb93Uuj7};q)3kq<_b)NcsJ)4$8?XEGewa$*Ix9`uAEs;vpq`OV$LJ^bs+7 z%Wd5$TjJ_QQrm2Ic_rOPgf*qtZjsmGI5TQMNma4TD7I)@J{I;C3#@L|8OdAS$lKr{ z(oqtzZsNN}bHAqMNWXd`>iJs-udY{bSa0h`{zb35Z-;TruTjf!e)WddtJk2Oy74_D z(euc1NsG`o2UCJugNLPC+!rhbxmR#R13!JI;D~yDddnbXBV>+AGsw@qY@~1}n^e=N zME*tUd)TCSzC6b>EJeQpVwhYDV#rUw{9%~Ce)Gey`j&_HJ`8K1U-~etp?>4TumJtK zhhc>@S;8^ot&bHPUZ+kZM}Un-!#*EdKfHcRNTm;}~k7-|8T>R5BEx-{&B;)G!pJ z-{c^*yv9(leuu-b#&Z7(gCY9$4Z}itcSF5lVfwud!@~7T8-~T{H#W$>EO}vqjJ`kr z{Pc?&Wc2wA)z`0RkkQ}DP(%H41{wWR3bsf3I5BkBd|OZ6-wT&U+im+42;i_q8TB^wv$iEbnR_424M z&yT2=qA$)%M)l=xBeBJlY6rH_iD>{iC~k#6a)cNL^5>?g=Seq)EqhNidvjU93HpLMT(WXS!z zeLgmx_58z1y=8!GpLFP`6N(t zgkE$)2b_@K7+=};PH2J?y2%MW?S%F^p?X)!+GdZq{guAZ1SfQz6MD=EZF54uIicjS zzOqA|P?ZyU)Cs-ognsjdJXXp$U*R!MXtont=7csoq3@hf@OWR@PEKf&6T00AJ?Dfz zazfEr{4%PN{YI>O{NwihMrxn)%!^@}Ql}18NT@o(otd8P%E<4Q-aXGa(2~|6xHBRU=C-koqY8mG%JKPD)aYDVzU1_-g6qgr+;8B~ECY6FSwv<13Qd&=(rz zgl=#`PdTC8PUwsiY7yWoJIo1{IibZ)=yfObtuK^rg#`KvcXC2kI-%>F(6QdqfAZ;{ z#80Ky0_m#(ae@w2IHAX#&<9TFZzq%*?<+Cb2^Bk`MNVj)6Z+f<`5C^lZ4G)&k9dp| zIok;>b3$94&`~E8W%|nYbVAde&_XA)-U)r_gc>Ax%X+M~zMwVQ3C(drk2s-iPUx5u zib(V|p_>!RaY756&=x0j%n3y$QPxfO_trr|#ZG966WZj2jyR!4$-WV1IiVaUbdM8S zYll?wA(_=dj3Fvr(4lTlD8~ui>V#H0p%0wUDJK-y*;h+XCzR`i?s7seIidZXvwcPW zb|O~b5-wvtMhm36hSJ$bu&yAF@P$q)w0#j>dWV+O>MP@=^IC1~1Q=ZR_ z)UZefxJck+h>EDF%FAWiS^az1XcyR$f!8OiPG1|t4LLet9)K**;O@GCS`bt!I_%W|1qlE($b<*X@^+%As!`ig1esMbsOQ zn9alc5yib0b}j0yN6Z-Y*byTvZ~!UGpHXX$7+HaX7fJT9yo-7hn`ohzcVtD zhcUoSX}W^eu8gjE*_rv-nVA{6U9xhs)YrE*jf=2Gkc)eg?D?g(EH>Mxj3Sa}{B_Yb z8M&G1d3hOm?(SU+Tv=VS(v)jMOk9vPhHSrWRD-@Y+Ihw@z^f&6nG`8dknir2)jc~S zGczl|znnS13j2O>UGI5W-&Q#l!OVuk=FS9v^65PxG|D!}vsVl$6a#4bt^>vAq zx((@~C%10nT@`YkB##o@gRe_8uUmows`Hfi=rNZ5_2H&>oh$jjx#}$aa(+opFioe{ zFMRo1U6fx%`p3syW)+f+JLB!8X;?jXb+e1|>Lo$WOyyLT=2W_JIjc5PUHzSr=Qm5e z^_`I&JWFb+_Akz@ajOMC7)dJed!teGT&j*2q-u*C@@8#y+4n}<#(JQNnAxi2d!u=X zj+iGA?&=oG?|UQ3^qrZSFOk)Otbi4=+Uc6q=pT&46b7wZNNqCORbJuF?^8a#La(WI zin{j)qh(xeE?q~VY`&d3nwfWAsyKP9J1O2ST4xAi>}>bEMR)xmr>pK&zy4qt0ryga zZgPTZ|DzE+L`T$@)1P)`NuDv(T^*g9nVp{BJu^2uE4QFam%O|*a#)Kf9ag9LwXw-` zLqbYzL{Lse-A>RITi2_eM~#F4J(Ws*{-d-=IW0<5KmTYnGIfMq+L`=1rBefzQzA+& zIBGPt!+LrW)$*f8qXeDUNRPX=3w*`595tFHK2GuIIulWw*?N4*F{6Xu8E#tK&v19ge$^ydf-iuJY+s#cpT5eRa$j zDId%1blhm>w`$3+MoTs4xDgh;iu^%2dP7}4-8-X}9yeOc7u#eEN%BuB?;+tILAX+@bI6U?Cw?+o2fRg{opqfm_-7;3?=3avXX#+Qq;F6~KN~IlsF*5yjs4mi2`8VYkBRg&f6@jUYm%=iz;8k*xOD=V6p4((3rHMn}JcbX~N{IbnnZ93-FazZ4zOR7V7tmCN#$Gs9g} zCZn)ssre_Q>ce)qW0X5wryLP6I-;>%uByT{-E9{PIVqj>jp}?-I_n$C=*~(}b5BaY zexq(bX^i(fu0B60)&H{OH=}u@lVqx2Qd*`qpEP0uBp{a})ZpJ_arje}{bsa}_?sLJ zN~`m~Y!z`=o`;Z}1J!W&S;o6s@3 zC2^TLu8n0ilB3C_eQM!pqjPj?QYQT;<&)D!NB_3_RKq`v%Mv?Cj_O9aU95j9GJQ ztjksVKaFhpU|Amj`lw}p8kYz4*Q2Q_QR#mgvFh}nMxx(f6?Mkw={HP`;onGg{~4o; z-x#&+jL|7^9N7bNGhDh#+SHhXo231-&D2g zFIhQesrUbqZKsQJ&DE^G4b!N-IHF@4%yAX^emk1|ZFEf3D{_Gpa94-PC6Ro+mZs@k z)(lnjx6vwc2Gz;ZS6NsvkHuq_D*Z>Mu+v#1Af?7CA~mA6s5hS-pQ;;?ctKpSJ(R=G zyRI$ntSs@fRFAWU88D05TIy12*jXc_iH-<#<;|)plp_P3f5};+SqklTRY%s2*O$eb zOBKy@6~VQU>YuYls*EN1oDm;zeQlP+a(9tiuJYAbI`xF)rYbMjbsQi(lp%>Tp&6)tBlbxVFZe{oAnnSZNmTe7&98F)3r*0ca! z?EBJsva}>*cM_%`vbhkBc z@ndHExYx+t?4sO*rK)l4Tc+jsb`EsT_=|EnYi4c5D%8)6_gL$xy7@%~>Q?RBuhdzC zb1I5TQSrx%)nTk)bgUz>QO&4rl(Gny(z{z z)6GV~yJu{V)VQcvZB}cGO7=I6m@SOD#eXxZQT}F(N2fKm%hcHqpzrMwTw+G*ws_A` zY^Uy~|CucB9)+b7Tm5&$X?1dkUQm}h>2F45v*_!QSNqA5!s29IuRHis)5;F6bWM%5 zOI=>yG-7vMa$3_=@A_s_k4_A>_mXrer!)0fc1zhy&PKgcXOCtN_1B$^|4qAiK01@@ zk#&IG!#XtuvLPwF*8ZW?8<;?LbMstfHSSBTAKu*7Cp06{sX5J8jh*m+tSb5Tx^h7s zjdR#|6jr*6^=8<+Y%P`QXQaC?wH9A0d!2dIR7Ey4V`ILceHYDn717X)>#x&fyt3zg zsqtQVtpCZZiW-{DJV!1$mb%MVosn2NcSsIr*P^>L9#`xxBpTjQk{cj zBcapk%koycsbzJLBl3&p@dcUmO7OhiP|00UzF#J?SOJVK>7wG7$`$C5)lqJ;sWbLE zYuClUnExwxo$Z4!n-xM+E}o&aO>xF=XAPtzCkrmzRN5QlOE>5L%Ke|_=ra&aE^3aU zcNS{f;~T%#WWPGx$V_h%Ly-VE9CerE+pSW`!Dd_8fg2KRdd~|bN*<22XGNF^sotzs zG6e(Wu)MaU%q=T%zgiP)Cbw-ya+BeOB{SXmBjwm7?GibuRdy());7LWt0m<^WqTrb zIOXKJ3*?BpwzH)2K8?-v)HY;_t5f-f`K>nUt8g<~YK5@C6zRdRkomvgFb5N@{i z8?8Eon;g`Q3O6(2#*#U-ps>6`mi@w9X&&c?WY>IYxY^2Yg4!HzCd)sWW$E%SGQw;s zC0j>GGbgJN5oVJ7lfLgH|CUF1`-8>o%?Pti(lqK0v6so5i{`1SA8EGm%TsM4rStRD zrf9hy@KK~0tg<7`u+TgyYc-a;+;n4Zij*-;SC2)SaWeW1k!G7t7M1&7&?9=&73J#U z?(XWA>F%B{r};Bo`Dv2JDpnCq%otxcb!cL?j4Pvp0DD2H?N(`fVG}bczJk<1dMb?GU5J<3dtFV^iIG_Kt3*6sFf5fW&3jJhw{ z3=VeU_N%05Gd4hP4w|VOqD@myFWK7+tJ!|#l35}rDSQQ+Nciz+nOXgrS!wd`muNFy zmcXEu>8yBebFxG+w>032h+)E>IeRy|_ORMQ@* zUBEeJUt;$+1=M{pW}_G#(YUglvx0R_8N3iR5~{DG#ZrShIPY zJ)SV{#Q9DJ$a^V9#>#s3sH%#+s0X~q|JIZAK+CRAGM?CrrrdYrUd@Cz*7etoQZL7t zQA=XYhB0+xt=++_S#9JLd3K!HE_9{TZJp9_5>*mswheopsMyAO1(fq>E8@%!eyi1( z1T#(@i!&R`YWPQ-OrD(jh&Q`NzDna7%DI=)JbPVI1@UHczqRV_c+;>~J4@Y|WE!fs zVFpFp8LbVBgIi|wO8!;6nbLuNl9O<3r^83Mi$}Ohzu+-|Rj;K>%Z4#3kt9r+qjf3n+YrA^KFtcUS&v^8!cCY zE}C2FWTM$3?ihJOeR=B4fR0IKtAw9PWe$xka^=>p|9W3cl_r_p;!pU>>m2ro?PO_A z`=nF8Cg|kf)8p0X zHfDgjHrWg|UZ(b-oPwg9vZ}i0LuA$1ku2-Mzv?9A{;e(7%E@f~OW{C0EGOHY-OFSa zbM;aSGrAS^avr|HC*EG@Ta}+bPY$B%#;3A?7>(;hs?{lS*N9#Wr6GG#%=Cap)R3Th zq?$=~xT7wm2BexzQ*>e@SvaKfoKo)+!Wws8TF6=PYg5fs|FBQg!>MLmKp0i&W!g}y zQq9JujtI{wEtkv6IkNXBdkntgd383`>=+P5i8z(hOjddwZflQxMl&1!NVIyaxfv7WTb0#|iDuKx966ULXMGCu?b{ieQ)^6Zt(Qn`ZBJ-Q z3o|@IXKyH%#`0#$bj(+fYeZZ6!Kc_J%jLGLz%&%$Cj*m?OK1PTA*Mm?{1p zKT#jFko}jA)L}0MslHs6j;yWNyGE|vuQsU6Wu_XJ(fmlK4kw3o znHtl|Y#X7|8_In|m0V4;J1#cK9=3X2*nhrQ`ma?}ofyni$-I>vU%UAEHnL@3(AsPm zxvRN6a652@lk+tQU#EjHs@~eu=`p-cTs`t@4I~qoix6A;-m}fsguW=RJWd~ZOxD{GFwNY?LC7l z)SR}mmp@fK+}7;qm#cQQHCu<}k%Rkz^)_rtJF|U!E>VfHqptVX-4^!(qzs<@fpq^;df{Ez&~{Lv9O}VNnKW)P)-}??Ici1+Gb!{|61eAB3SFU2bTDIs%8T<0<(7)u)hiv$&Y^dbfg6y0 z8It_&R^c6G?A0o>qnQ?V9~rm@*=}qpNek2i9nC&+l4f=Zdx(78gDe%* ze4aaUZf2%T-C8%;eCO zL_KFm%~5+gnP!tK2MnsQo+JLl3*!3^xw6K3f%sE(IQP-fn8{)I+0;^Zgz-5aTgVGjwrt0t5Ukk#^~xyGdSMf z6%4;};_wR(b-q$JWSXsGzoM=X?}3J#?UwtdWW=-76CKtoKj_7OjG_sM~zUN9X9a1r&J%;?7c7-Cza_vfP@nxx1MX(N2%3qV{a#iSB0Wh%_Br?#`QSms71T zGdmcab!@JzMNVy2dx?{}iZ3%0n{**Pph(W2=#yLgvMs;NY}=%pj(5pz%w^tor~^`8 zOb_DaN360!R*F(@TCR$}-0bhyTU~Rxd70lpwe)g13K^o_zue5q8bN`Wg6yn}t{Iv6 zS($lq+oao-mRH1OTUHpo$Oh%~BVwRlhjLYy9kj=&AK^s&N@BbJ3zXet}e-!JudG|X?%s* zE_Mb9zR~;A<%SCxeXBT~7~*T2?j~!D6i_esHRBV!9j9ZQw&~exbz$7iWAq#i^_KU} zSUC@x+}lh{at3LDFOPR7TRn6hHM*A>l;F(f%EDr|++kF^@D%J*FZPkcu)BMiAx0JT zL^?fG>C0_Zsh4`0Z6kGh04s7ysh-*DST8d<=GwZW_oiCcGWwQ&*Qx=%&CY%vHK(`y zklw6b>}|$`Trgkv^p+Euw<*6qW>Sc~Jjf#Cu1->4_cr5_ysM6N7vl)Fn>NAkesGVKgr4v8|;g>o=}tf=@ZR2_LJYJ6>4cevt7p( z)X=~=ywU4u)2^8X8F}3@3f$dXneKvaZn@7;_F}D->O?=YX~0T~B&$dInP#jvftY~0 zM@c>V%W3M>YHEKuow=ISRGq((H;=sf^^yLvL-2|^*k6``H7a<3+1_uR>N-Gntv0Bf z0cMA88>N_jcuqD4)!a1dcFFC>Z%8bcr@M8@?do!6ba!QDWp~NSPb<*(;mNJlZ>hHj zm_7X7STaz~jJ%=Z2AXLeT}VG%C-aqi!d%r&FRG!eN{(`@9gLNS@7M^D)!L-T7;{nn z0=vL_6yVuE3h4cAecxK$Qfk{kGbK#NSiN*kdDrc!fpWEAlWIE1?2z)Y)KMLq>2h^V z?~=mmW8iyrc(9og_aosiE=VBeD^lasw83VBlwvve zag4}-Zo0heVO5rQuF?N8Y9#BJA!c&;Pvl6mb4X_?&k(bD)CnTTIgv7O(ysXZA!bnc zDN?U>Qq_?mX6x|NL_S&@X$&=6hMytw9dD$Z;Tt*BY!!Z%$X{zCZy9Q~j{BELp5|i~ z$lDdDUMYU!^}qh{s)yg%xvS|;Gh~X%xvo)a8Q-W za99vU_j!xXQcn*vJNnC{?jI(#SWyAFv_P}tni+|ID>b>D+ zI{(iNH+#p&QPZ0}>}C#?|5iLP#zD1UglVd>5oTa~0x{qGA98{L!s(6&yv0GPK=wGT&wCsJI+p(guv%2M{XJur$yLHc&iv;Oul4^A)UxNZyp}sqC z@9V11Xfq~I56kb`cj9^#qBP>e6qtO&sdNzv56g~7beT{EWI#GeR`#t5LG}^ zdU`_G9Iz*WTUoHQ0L_-%J|ZB5NiUumyB=%gB(eXxH3=+CeeGYwp4W*Z^ncTzjO2>I*Aq?+?(`Q}|J1#*(xImxdhlT_L`Gq!P^ zNR>Wb&f3=A(0My$b)9wNRJ(DqK98DU2Kn8tu9{#bHSzBIG7`Hxt7)te?Hyni&z3ua z>Bn#{Eh4$W*!S%Z{|x>tZr~eWSpW zO2!r2R1aEj=p-3$-6TC|ZPH0nZJi{Qe6<-6ww09nJmTm~X_S88ahpykD%IELbr&Rr z@6gp$%+hBtq+yI)JxVpZbZ%E}ot}(l$ofDRDR5GBd-b5TM<>bU7jGew3_WP=BdJk= zJQGn`UZ|h8kl*CXC(AX<1Ee&TXDsDd!Ns!}^phl3PBz;le5Mo2+~vhpa)#4MWLY|- z)=xHDM1Mh!`el04*T#BMhO7DQ#liIzF`WeRUn>J-@zIHHsCa_dfZf*!Pf zAgSSud1a;cp@p{?b1c@5wT|g51@c@Shknv)FHJF%!hg2wblX1=c2~yaF=(C81n~lN z@CDN;4Ni(Urz@yUQoE;`Eh5hA60#t4PS;~xa*Z^<{-^YoM6#TEmxQKz&6 ziB79Y3@Wsn-9ugHG86pM_9<7MX||C^!LsD(%3c%+t|%;)8*i&}C5Bb8w?tZfz?a)j zv-;QOF0LxNRPL|cW^xOucTjE4{KDCn%1JBK4Y_7u;!yH7w%Z`Hp>Adw|Kqu4^Mnz# z)s?uX|0f4EHMgU!(X|<+b1#uG$d0zgsy=yUbjW`vwOQ(f+8T-rOX}88r$-Xh<~%c? z^Ca>{>Xu7?+10aK-(3$t7! zSrVsF{r{`&$^)t@zQ3Rd2nq@cygSGyf~LqOXj-P2n3`tUVjDg-;eza9wn$}*6}gl; z=!!aInL5u=o9M+&?J!xUHt>BF<^=%tq^2}Gz!2%U0mH{tDxpJKscs*! z06+qd>YA+5{AwSXm{x2q^_5D-kcE!wz`|4Yr>Odsj_S0$9-v3fMfEmEbs+AkdI_qh zUrW`a>|}4QPjAA2_k(kl%t6;XAcK6})WirABkZMkahp`7#7BsU&|skkx0Sb~iL|ZQCVa{AM+Fqsfid{;L!tDr48QWN`FpE$p)D@0$hq6HBJgHjg*?%P! zOHrfSNe`i1k!h7X0Elf=2yp;N?Z3v+R=25ATc&NQYaKOoJ1c6W4O~w}VFGW^wTXsR zo}xl0y@wa6%A}Z0j;atSa)f8qC@hsy>Vs4&`4OUlV)E(uLGWX`malHpRkdE`s;V+i z=Bqm$ecE+6^qCU#h@$|zsskCmzD5a&>2Q=nz&lFgDWyK{D8)|YC{3l5y2nv!)T4x| zv0lZ+3gxR$^U1X^GM3l7oW(NMB}FN=8B4P-dK+_?9+8h&ybt~9Pd}pL%lb6 z7C!NBQ@!3zPDe>k6S4yuo+Q!-;hHJS9B-JzbT&Tw|5N@gM3+3-XPni9E6n z06x~L5H99E64Ld#>L+ z8jWnV?|y!)Q5h5*zn}MSQbwjKRJV5>da>5(D>JH`i2o{hP93h)+nSW9;N<;$d6Npf>BM4Eg^>y>An=6`)F!=E%Sh5E1=PAuf|KRBT{P;ZVsneSQYv_Jn(hOKO ztN?33zXcTtT~cdDL><1L-`A|9h!>02_NZA^bYE(AAN#CX$?cs>`2LLDJ{yt z0r`Yjq}B#L7&uR;`TKcPD}YBop|ut@)X{uz3rv!t z1gaVyqgIPcJ9PLbqI!tDaSbAgiAb`cFUz9PFa+ggcmLsn}}MgFJ)pi9ri==qDb3^F1{ zWO;R2i@i`Sp~i_$ja^hqaH=HjOT7(!@P^CqP^OHa4s>duLACiNi(0M_H@!x(p)9l2 zxgJrbN^OV*A!>z)S9Ojlkk6OrOO5#Ng1Tn=>ooZ`S<7lFaibl8+EQm=D7N$GxB_xl&T#0XM@z{Z*u_`J?)1y78 zzYuD8{?KHV5edW{u6SH@#S5^5OaEbKq@CKTm+f!E@cPTqm?5JSg@fIU-F0ne@}PQR z6X->pB56aHNBz5@XI(8+at&FSDx-~%9eExA+bXq@mIxG~)#)Ew=w51BoF>3gUtLU7 z)JM#pIXB6vovUhm(3MKxHpc?W=UC1pOwh~g=Zo+=OQ_Q*J2XRfvin{Q^{~|gAY==1 zTbr;^>mTSkOAmW}^;YV>x1)OkA~W5H5K~jpHQlJ&8NJPW*P_09o3U$MriZR|wM5s3 zP&T6H675;C>rspPDmQkm%kRe*m`op^L>1XtmrrM;$lA3(QhG-J$l zx9yl}IirQ$%=8ddlB7Lf-9qDWEKZwkrxgP-RdWSj_tsS0x7gro`RXtx))b zx2esV^;i(XAJ@=3WoM~|nxdlmFoBoy(wOH)su?SVi{NegF7f*i)MtB-rg|8UUD2SU ziP}M(OByuix}iaHwGeXZrNf-2&iv6P2JF0<%X;b_>QQdy`W$CTD3(uOC4^$H>3gD4 zhSAV*3~RzjWuF)7wJq61ea6wLKF3X``YNHst0mGuq>*2GBaF9wuEkTT7YSnTl36It zvQ>e{!SHL9^xjmazTKqVJ(gUn42*eIAV7F#&Br@f+~mE=mtPBCQ7TZMvDJNw>b~iy zTU)b}X3qi%m$fJg(?EzrotlLe@*8H?c{{T{W!qXfX$m8&8(7x9zgZhagw3PE`Z^`FeuY~shLElcB=^v-#;B-Nkw?PV49XW8DC(%P3-&#k6i5Cav6%e4B39)K-R0O0jED53pC zIk30ZN?VO=j_$=TFZ``TwN|K~=9CD@a4 z=B>?T)z$U^Bo7GHHQ7ZrfIjzDPSi5dw+>f77%sC`v0kmy=VP zUs#E_n4{ppJQ`QHcyF^(?M1gn2733zO$B*m~bsqNJtTg|ym)HWlr?wMMqnP~68nryX8s+K*@;dGby0YxqeV zPPMw)3Fs$2? zZS0F?%jDVZFa-P|h7!l?+Lf>YC-fCmHm^i_nq&f*X`FZ69h~PLXzdR3t(df)> zqlPPpuA^QC_-K3A0S2c71hy+D;hL_>QIU zVin~gsFjF1A@NO$n`uTBOuJH@NvIBv7lkxaw9T7mYM{te&m#c(snW8=RO#yw9HJU0 zI3iQM$P7ozCO8@WL@7bg&I>^QK_;pGKmz!m(h+pq)IAFzbST#5e0FLaVtrj@S0 z4XVW=Dv+_b?FDF-9CtMp(C>FTS|A4|(Sw#4{_Oz^UKvph`dv>)4Gx&_5kR2s9@n9i zDzkXIBKXTZD84EK1BfiX^mZjRS&SjPdEq>`t<=JC0fMliwW3x_VGwWL4wK{(>MP0C z5?^v;3tFjUv87a!YAos2t!kRO?BgK*)nr-?tL3yN&$7 zN@aTJYRW@o@SIgJ`8D#>SHV_y7v;$S;h6|KNIwuodY90nyOZMsfIV8tzzeU0y9J1c*Q|zdU?cK76=nQh0wAM|XS#x`dWWP%AKy%n z+AkMN)aC({Q%G%nBw|}!@+}0cLjv;yRvX1%*CLj$RJRf^EnvAzVE0jlP4u4}ZD-<{ zZ=>omo_VHNi>fK@k>Wsu=-2!|99Q4wsN`89#`#Ef2Q`&3&h>Ln%cvpXChqxY^$}_+ zZoQ+iq$t1ETxXTDL;>sOE@yOVDJbbWhM6>m91a$QLox&v~4h%NXjN zYi^6M5ADMoT>VLc)$4wK-`&c|3419a!>VVt2bY22R6q@6`<3+9TK?QRyw!Y>{+4msGu4GW zVU036+GTL|DD@SpS|Wq9qv{Q-l*-X>Q64)-_8{0?kjBH5y_5cv<8c$TJwyF~>iqPC zuDuW#CL-Zy9<~gM`H1SunC_B{)tx-K9{CH2Tokyid1rv|` z<0yfWf#o|53X6zv`FdDnj##OFOR!|fc~7tmvFM#ZiBR<46C@dm-UTEJ3g!H`4pQHy z9;5a$NWD{gLG)(P>^+YCj|B1)5y##Mq;AD1zXfUEC4O_2_N;&~(?cw9?KYe-o${}Zq-z@#E2K)C3zIZ*{ z(NFMA>+yKx1V4y?r@;{i_|E?mku&;kP(~^OLdb;bmKjYewbrF-Z&kFmZom_I)W2$j z5*KVaz+c(`Zw47 z^L6(sma!4@OV$5U(Lm~545af&UVSeHSaYuu9+^R{ZMY-5e3&z8wxP?>o*ITuMGGJs zeV=<|X%?&~&+`YvZ|;MqZWP8?PxETP5=G^%CUDLsIf0jNQqp}`u>WkrTom?TF@!G? z#aOWM_bV)denUYO&s$FLs{54@34(;WK?IjoiPNLU71qNBl^lEkC)D}}l$ajT zL^L9~{sAR4>Iys9s_g0NBEI_p@JObTq6|6n5(i>a)Ogb4#Ozz`*=jld#G#I|NpGlfl*ok;D^}aB+jRU; zM)`wEDl^v*OgIHKY#c?4{^WyjXsO``A4GJATD~HW4T=*>-Q#rnSzMc_p+WEoTk+U$ z5x;V)GH!;b6O3O|wbfAXs{>$>9a^O6;Px_&jg7n{(6Nz2uZQ3rr~z%Z0WGzvKR`%f z(E1sqWxMbpL8==cQZDp$+4S9lH1=)7vVHiQec6y4(ARm{sM9su0EPd)S8AXT{* zKPZ~04#$U*<0zSeIjrHI?^I3;Xoi+O46H7HSYm~Qml=BfVKGC;9#&F|1wn_8xBuF< zogu`&*ZB#$X%|o+*+PqiM0&b_+a$f4fvtRzD?ml-ZAa z)|p^WoPGkV2=zxo6euYoqjYnWZx1NEV3;z?fA!}g%+m3HlL z%#%K8Vvj!wQnzVhNTf#VXH{qo-#w{J8YUP&ME=gaU7Wbwf+7ykgv&kU`#p*!65E<> zPdUNY?@^eOHuTCKW%5{WG-VdYa}MgX=ox#Ji~_ljpWbMfP4?}}+*WXlO$XSzS2;b( zKv;4J#Qc`0l+t0p+og!A9UP1rg##0a$<0qG>2ckFn=8S1b*^@r9opT^@w z69)_W1um~Yjivhc(^4uSLHg6Nr@b-7+541f?v6Gz!k72?N%g7En5q7pXOvTb(~4)5 z9M8mWkV5QP5Pz_Z_=jVz?PnttWyWUPXTNHS8cn>BcYt5;tTMCzNR-T1E0J{-6jPxu z;H`*^(f1-EmDBJW4!`}GJ< zf6+a{MD*)W?$>N)zT_556uCSi-~EzY;m2NbkCU9loi7JEiPo3Ri;Wzdb6-{_yF0zh zlj_T_;4EK+rFzY#j%Y~lf##}?oyY^K-m-kmR zH16bsUlTH|{57|F(bKOf+n^WKzpjkyYu>|7@TXo^ER*EMq&I?{i&HC|rp@O!^G0P* z6O!KWrX!WUp`13%8%)E&>UFO$`@X4E;3xeSys6Ca^*m$fDd;U|dJrb~GCut+CDiG} zXBcebTVjK|?JXrWpl*}jMt2c!%QFlTX-?Y5*>5YUAvM@brt=@)QY_=*A;z5dXw#-_ z)Bp?vefw=W(C+UjX`b21FyO1-0ireUNOnSkw)YM1D5+hjY@hNjy2yN2c7cQ!jr;0% z13cshzb9uR?>!~W`*E6U$LR!loJLX{rxURpHT?GXl%Z3+tcu4a($6*QFR#20f%o%g zHsgm#p8dYf97D;pBx#N@v!r3IH@z>`>4oSK+aV22c4OzHO84jQa4lYe4wO` zHmj_io*G{AA!uaEhmv2AaIeh%>qBwMKl-8hgqsrR3Af}UeS<7S(80_79C#1M!jBdz+i3q1X?H@@wDz}H=% z{(v`_4<8V_K>Wb~cY%!uC857_&;_9zc@!454H}^jkRky|LFg7C67oI?aBJB22^Me4OY6YAn6tqUYF zSQE~!_JgzD7(lk@l*3AK*BM|BA4cb|9+u-nLg)t~GwU-K`hh|6&iqVFN7HA@P+v{) zMl$2IpWC(qacM)zG*B4bpm>!1#h(idsy+`;_J97l9C+*z7c8M4voJbu)>xvyWC|gx_mgCzaf*?pC>QH{-xYHUWCS>GU1N9T2eW#6F9<=;p^NRT|*@r^RH3nwb= zTcC#{+^lcC%@O~$E9Yp*cNp4)@8r-#qL~snuOQ)z8vpKhasVOUi|HBsy;9Mow|43e zkXFaPw<)fa)Zf~9l-`qn=*lS@eGF6f^AB>$L}Jh}Ib}%rGG*5vlT)_)n3%E;jwwUC zbjl7L$COnbw@n!(Gw6_~i35*Qw)c2fPTBS!F=f?1$|)0xHIx9AA>qrE4f_dz;(n5V zkRVPx^QSH*wG}^O-r|0?%^M{%26S@X>VH;>FYqR}4U)%@FmJpjiGKJOV3zrd4KtCP zZA{+$3xerL!%K0C^NoOBu@Sc%PyM14Px5$d>NJ9U+pk!is$b>mh{T*rHvFzw#`|G<(GMBt`pExa9C!Z#$`Hz&NWSrh3lE$x&^4GQ z>_5U6X7qo|SJg#c53!zAn{9yTMz!hnCw@6(5uf&F;Hu5A|N5ZX^!l$-oM^b{a^ixz z|0?BODtmYSMVtzglV;*ZGJ|eNIwO0R{pAr~@-+DQFQweekXrs$rg_$J4A)Ud|5i?l z#O+5=H~L53g~(wcgMf1lA9ccP>o~(JnRs!T+IFIgZu4XQk-O-`f5dK3@sC^j+xL%B z7qn3J0qo=IRo~c7^{<5OaGGMOx#SVCLVw&h2Pu zH2gmo%zU}Rzoa{3d~$c`(TK!EuRfiITjSTdGhh5Cr}aQ@wp)87T-@3(>cJ+ZR^cqK zIqiD5tH;c(4q;x7Bt;=Cz&rXE(8rK#^wtIQE^oM&kL$_YUdvzKla*$fH)}IA{RCrY zXb5E%J|dKbyS<&C5z0K@&OaH-+}_TQ4#ScR3X=qY1ZiX!hA}TLD|^D2+uM05F%O0_ z%h+L%K7QLX_l7gpKijq`8*ZghL^jR8!kNiYYlc^`=6UyP?8V&eey{anXJPjn7!kPm zIT6u$@xu>9FmJoxX_3tPMYD*$X!FH>Gtwu%ozWXaa&m7;BuKd6+iQBWNiObcg-?x8 zY1*Se$5DM)xaS-B@A{zH98~k`p8K^vpc%LkyKn_ZkuQRAWE2wz`pPIav6J#h68_X^ zEUwOX$m20>NHm-5)lbK;a%-cRdjr=;(Ox9Mq`vMY!EJrnh%|Dkg#r5$&05z_TI-P1 z8L*G^WyM1b+o4&6IWV@sB+`%h;)wW1KhWCe{Uog+K>{fuhWX-}(;S0c(cqDDZwzze zk#i`9&CC!UIqf~=&lZTcBEo*z&2Aio3s30bAa1p?c&{5|1R~Gd-P-PoWoe_$SN2YycB(Jp}`pmt(yF&7A`P^R5AM z&5$T^1-mUt!cLC!33hFqoC16;{Lwfz#Onf3Cn+*If!2X z_7q>%wY?{PX|xJwXS=cCc| zs;N_ZOONrsLL49^qye3Ws`%3?OYn`tPd#i~A5ivSMb5&xil4LaAQ~EH0XY`_i^7s1 zIbs=0c5*r%K^*F%)A0f(@!Z7NK*0S!z;${tG85rVBwXzc7O}39C>orc$TGBZbwH+y zeTf*Zfx?kv83FqiUHk~cQI8_}MK-&)>y`9y%_MTfb2q~7=7E^2c>|fEC5kVu(U!cA zT=Fovl4FRQo^4Z!BkBsNfUX&C`&F^-(O z1L-a%nGK&s+6PED+AyAIIi47ag4v#+O@Y=#-r@p)p!zuARKr&$v*du*@fc8}nZVZ) zuDzfE)d=~5nYbv$J`+DCV!c2yAQl2^vq3^myj{T8AmK6YmcVBvX`TAb8A8QyRM%Eciwm%fjbG z8p~)i$h=vC4e7V00+M;Ll3;pE28flbPl}z%w-0Q`=d5EPwpXMnQiqzVwYM1BD}s8C z46+M@F1&+Um@Y-s=5&_M3HNXhZ!1)`Y|_k$7bJ`0_nk(MEHM(!EH#$y@37{cnjDn;$#I<2&A zs834KD??>}_*!NFeNeoa@qJnfgYH;%k_3L+N#2g62C6uuHN)4!hYVxGis;1gMt3nGAy(Ui;5+*%K}=CU)ejsBL)GK`NNg?RM% zs@l90$^gZrSkt5G>b(EOCU+uF5;ndD2Lg}#U0uG|?;g%)Q(c`*qeik+ny0*xK8eM) zkrEYrE#sgRxe$vUNz))WLJK6Yf&!LiaY!Eh&OJ34TX%B-yTs==XY)U^NfyvtWFbpW zbUR(*Qh9nIE6Q?KyiJ6vI>2J`o+@N1#z%NPfbQ`^VZiA-iWPa4e{b70O@O<4luv8% z>L@vV_*!yZZ&B{C$D|aG_EX@mMMK?r44{x>;a`qs<6V*3=#$w%BDL8k2PEDfJy{O- z2*CJd7dm;2SrQ`0!WWNWDU&=(_0CiDH)AA@_*!`0SSji$F|q(c+ZLCh^YHjs3Gex_ zY@m}=b1V&?!Qq3_6uf4d@uSG47Z+&gCWCQI&*60XEo(AtWM-*ES#T}#Cj1b$VqXUUk9s$!vAvMux}g`+``jX zKWrgWPGcFyw^ZG|UdMR0KJmS$xiH`O^JY9{yd)lcEg>?}LH+pu#s1V|g6t@7f;SRs znZSyY3}$pQ4O}4gh(lOPoqiXOjxt>;7h`Z@8=dSQ$4qA9HTzn0F^iv)4&mXE0zJx+ zBE87`elq09dz0A!(teRhcN$9G=Q<@M>kL+HHkf2e1%I$q@H3@?PZq}-{`MJW(ZWUG z2>*>deA1LI5-kr*k%ai+6k+K79dLuH_>6U!3LOJanJP-Fr`m;%&s&s%bbp-6(hK~w zA55DjF~--zS4{&(d-KvW;21AH$4)+;aoXqh6IbRg+DNZMR?{?gW`WsYm2Xi4?c?x^H-QH zIm=IB_6ZsqRaoR$c*aa$Z5G>S2Bg$RoGoV&-vDhE%g;7TKIB;NL-H(TjNhvaUz~BX zuy>w$j?J7Wl2@L?BE1_gat+3dTz`xg-=1S06ml#)e-=AqvfsuFRWHOb!sX{;ga>D_ z@IDiD(%n`Nc`l1Q$GoHJ4I1L6B~Ol3`VLIZlVhdJLQ_kfp`+$prb2^!|6ItTOZbU% znZGY{&NxrV*T(Z$T7h9_^T^BwhJ5)vNrw1Zc+B~1m}h1-2!g8fWm|r}koLRJHyc&% z_PT9(HmVG{z&^f!&K=t?0HTne_*&xJ+=B6_+2Zh?JzHF~WOK&&6|-4{(MI+#qLM1+VA#)Dj^VNlHVi$JVa*^!vo{OOT#2wLD z_Vq>_x_&uw5i2^U^DNtW(!Km*i2}YB{_Mr_$W4iS-JMWDu`{_rK~8RzIvC)zVLNV+4D+7XG`%3@D*m=90<(fBy0)dbVbQH z7b6sAwKL|3Ue!5*pYEK)3S37C`g{(nj&=4xdS*Pg-lHU#UL1DZXl1*C;F&n4jE(WC zJiReqcMY_$ETH}RM42QHd@W3C7zUkGSn5dyWbrZF++NX{VRm+a>#ciR=OaWx; z?csZ^aQ)DXC*}CFvjJq+so?B@eWAwJ0J~u|l6a8t&$R32lIu_nIYh0lb#dwy?nFNN zLzUIC;WkeP?PjjXa5Fbm9Nc%-+IIJZzJ{>0LLhdZ$4(mIY`rw;iS6B+=%6iy{Hh8jpInQiR%f`;E)ZrXj!%ON|vS$z1SFpd^ujw||v0}73 zUS~E^1nPaq%j>&>u0E)j)ZeqgPm;PA4UN(OITn6jgYdEYzlJWNsmw-+=lP97dv0y? zL_04wvXcVbyAS7M@1ERb+q)^Lb4nvGDCyF@mkLsep2;zcQ@wGNbf(sGPN7%Nnw zqGt2885wq4nuVsY3ZH zgz4|K7O%I9QS(_*fGfA66)SiDeA~)Vaxhff&WHpG^e>mSfq-PU;;h@E^GKy9H&js4 z%7%lfZ*66nfh_^x&_W+?#SM>!qe;MtAFs1ZlZzMFZ+KD`01>_*Kq9bR@rVbtbi31O z2f!;XGmA~+SSDtIR@^uMcAf#k7D{F>TQ)T^z83!eLN-COY}1w0xU&Le&z8&O zs@-$BEB1W%a>1UzUM>`Q+_4yU{qrShUjQA_%92Z~7Ci!5+*o|hk zy?ux@=E&e?Q-?@nj=VtYaTUv$Y4E%ZG!VZKug4~{_+*$QoXiFmahqrg$p89PVz2lf zxM=RxU3jG5xd^0n*CMHqA>p^hJ+e(M1ilu2ZX3(=dbat1sK=)AJkaKow)?Br+n}pi zvTr_Q21D3YS4*VvwWQ@@LBwgogKx^wtJx)92j;lVhEQy}#;1YpMRlVdf*i{<+<|-3 z1v@X7c3z7mns=?X=9IYWS{80p9#JQKnECp^EYuwm{=IS~4lLlg-P+JU0f!UcKJi zwWfhAV{Tx>XKOxzIZ`?ek|&QGDV=iAv3YSizy5auJdNeW8~j|cfj3G3_*(ef8`&iR zsSp1UG;j*OmUK;n^E8{+>C}s5rP~Gf9K|a+*ya; zVup$w%Pca%xKWh6oLucz23y`;L+44nxLrbMZD*6Z#BKT?4IsXj zv7~yLc8boUcHONKwOzNeJ7b&)_5?3k$}CQ<1>L^1ZI&R7W2nKmFJ{Ip1au>&Se|)O4R>-x&*XC1o}+dMOU(QSS*{herN zWcn9xV`Bok3O>Aw#mCY6G^ZaO!)jCEdH)OM2kgCo&EqzLl4uVU$;tjm0dZA3TJE1Y za{nC7mu_SUBwnvy>AzD|&?-MS&huAEdb(j1yVH2$84muIR$1tI=H1UhM?if0YS2;r zYFEs^WHp#yR+*&t%<0R;hK1`*llS6buLn3U-i!D0F5N_AmeacJ}|vPkzb1OJabpg)h8|wfW05S!-FE^JZyXEBOVb7QS&U z8>VNPZ`KM*48PmVGy(hNU3GUCG0ma7<@Dfd+n%!433IyHH}9HtVleC1+1bjgQ>{bj z*spz+Xwt>VJYhb3=-dG3uJ@C}_MoAWxsYSwJvRiTx6avMhKd}xux(%wUC3sCZ;&g2 zub&$0+0lpUg+&wNGB09fKExOkg$L+jVs;4NmjMJQQ zOuHTSKTSmy`}YL7e`_z)C&=@!d}Ew*pD<3&xzEg@9|yXvy?b95acJQtIj5DI1pi&X z$t8DwC`*6eWam!bRLlDNJ#Tt@QJyytx>P6LdK#R)VmF(ar)YD4TIIzLGWS{~6|R1u zOF47a19AlxKj72e_mVPxq%JC4{2XvZFO zr8S0al{|?mDG6?wkymfEpBHnsLP4LnTs(>C*lKnF97ex&O(%A@!3mt~-a_rLy{a7g zkev+zcp19=A*?$cyB=beWQvU|4(!i;3ZY`UAf#xO@!LA#S)|_)dD}M6Joh@v{o=Vn z+s!<8&h~(G%om&h{Yl-03IZ4SZMv zz!%2NhyB+%*)CT*;EY{T=R~Q6FW+U`5IEWRL8& z*{moT2i?NShk!=)=Wa17rNf)!jNuGb-oYk0T~K)x+t1kj7jazuyo06b4<)IOA&vZE zeEpIxYthiCWFrTUc^?ygE5{3=cpTdq4mpFKkn?}W6L{oY@;I-4f=%#xlG>$<)&_gl4^OiA zTzGf+8lNleNj7|{b}Mwg)QYvpJ?GmWAYgCnJTw0b0Ew9JweTZPvcUmz)2VyGO(lD5 z+$54q_pnf}_lS-O0yg{hAUuHMwWC40&{ln74;urom6P|fWZ$&p8}@qMvEM_vUp#fv zQ)Zq*j)k{870|);btkCEvHY)Wu4g@Cu(?vwznhn@pO!=wx6dd0s(}P<-{^4@LC&?_ym0CQkS^Bf;Gtatng^zrW zT^5~PR#sVFF*1L2VQyYterZm}vp=%Tp3%9bc__&(s~BBSY0WRl?j#1J)-j~vPb5Y<&G}RudFC67+uy;|2MlVC}=4E`UFc%ZfzKm)vz%6 z%hfj?d1Cj<_TJ59*1D4Fy0Y5&C?Xn2W*bRRHsWFF9~$j`|eSve}Vu!5q9w)f|s?oSwSf9#EkK^<$qXRif?ulo5G ziqGDyTZej#O$qM!?sqmSIJ$6DVMQLsm|KxkRylH1UdM{@iLF8B%&lml%h8hBiq?u+ zVDk004PR~JU$)Xwp{tk#B(w;~hs`t{Ds zw-#FS@~nB*N^2<}dP(Bgpc!Ji#Y8T?B(c3CI4N;PY{x~XC1wOgjj|SCjq-9vW#?vN zp*vPS$6oExar?}~n2Y6If({@klwq&z?1A!n_X$d71ks`eZ0!UBakR^~nLN5uu3W0HdABbtV~lTwo#rzACPn$$QdF{R1A)_u2* zH8oF(iEiFB+15S4 zV}Mlyv)>44ZiI6x^7{omW#@;3<{NDb z_@zTY8btL7u)rGw0%o&+h8IM4Zt67-`L7uauyas=4W`YvjfS?5v_>#>38)V71-h${ zm#k?F#m58vVR&S?TUtLTplFMBh2|yAOZ0k7T&oCJ|`gNz3*27hwgl<1C5PL4@TOiXIhEU{Tiv{Z5;cw;LSFI77q zkgS2&*pL9}ghpG*2-{xK?=UrO)~I>&CM{yz&5|3XL?@<5DX;2(*J(OIVohzTpJ(s} z*xN$iQ!>Wr-_Xch$gHOihlEqXuS4%AEJBKk(O1$yD|}#D`k^zY3u9yIbNcmjef37q)9W{>DP0Dbmq6$@8HDE z*R*Mn*GV4$#U1q%kWuYDt+k-!NF3yL(oaLW&oKm~bkv z&*i|Tx-_tLBjMh@_&4$cLDOA7359zPpq1$Z^d|VNyMBtX(}tH`8qsq^;}N|)oj1UR zv4-JrsfT_T`+Wn1{V%u$DqzsuaIvR;jK%>MzSPD*Y-PP16*v6cOP>_lV&h9M%`HqF zQDa!)h+3Xj0;R^z&65iSeXKrNlR!c_WMtXYN1v^kBkL>;^;!;14+w_(ef4i@-W9@< zKsDJ~ary+!Il*sxiQ-Sj+RO|NhNyn}DVpDeF#oa9YY|flg`xfRd74Ua^9E+5WTmQ! zE-sQ|Nij#-3UfM9K~Uf^0-=yS5KU9bqyd>r9YjULi%Jwhx54_i5J5#ih+aboLFIr# zD|8;JmP5oy%w*IsVqgYZ6eR@Lmu`e;A89n(0o(Z%X@8jZ7Gu9{l2%!@_vnv>4y{$g zhHi$vq1u{ocfa*26uY$Fv)h}bu#Q@T28vgk{80m{{SxMesD~PViB;C-Yh+fM^f*F0 zn^OhHTBk}sR@E-`64$C}=Mip9C7oM3R~=g#*P3xo}+6?LH zE81eB9u$YUrCW8i>l7d)wABVl_v&lcSL8ft_##K!NN|8G+MCE0iK-FfOEqflOSNq& zD4rRSTCY|1)18ds%+gDZ)vyz?FULbvqeooLo(;1adO=u{j(E< zJ|%Q%lAI8Uex4$mChDJQzEp6YFXfmiQxwSBv$Z$<y;*KGrg_wA)L8wzM8uWaQPDE(DmGTZmgkzOo>0TE6ljl71c++3LVHk9cd*g) z2f0B}DRx{X2Yd#XMZYb|LbOwKGf=9%R(nEmPwKN?`;C`avOzcwl*421XwOj{d=PJN z!yj9;Q+RgAY}MYxe+v@7b;G)C+F9M(t3!lcTUzR}plyVOXP@jY?Jh)KyQN)qgbf1MZpDI|D+j?-FT(=) zQ3$)TM>`!2anIdQS|Xg|?&IGHFS}3NrSGX+%0uja^ebnd)|*wz19H7Ck^7|l z+5uIWJST3|gDRKYFPAWRsku%LiyM&PwML#3;@tbHUc=WgKg8Yhfy!-hNPAw1RK#KR zZ)J>-aruDc(D-~2=EG)3j?huSZczfE-vao~Scn_GeLi(rTd#(s>ExKgSe&mlaF z#3(%`7~Wby+%3mdE`@RS3Dq=3aO6qV5sDz{@zPR@oeZ@;r5d8(5x2%^h3f`(Mzu`A z`^kqvaVz^oyAUmlTp$qwWoOmOK#aP*bxqXiV?p#U9Rj}`(Zl0gySIF*ov-*uSt|NW zWl)ypey%boOXJV045|-h-{C+$xlB9N_}eD$#OU`;u;G2pFi5zdUGB^8ieqqn|KSk% zgVq9BUudWK3a4%MDp_IVm)ca#UbuM|XC3nJOdZYoo52Ribm@X&?pNA$%{Kyp6Le}{ zd`MFfo4?i$*8C$7CGnwN1i5_R8*MVHvPGG^^Dywy{m?}*@j;2YO}bemJZt*N$Y>w{rI(_L{Mx@Wf3NcH2txQ6)Ll zn#0D(3OFBC_~Zu89!C0kR&Iq2=YuOc*y0ED;V7x`IcNnfoL8XMkHTgo&O|Fn7u?on zXpC^dPlxkHoQWzza)0mtv?Dc5gpf~1Q3x0Eg56LOqq9Kdb!{MA`bq223=t4MDXpOY z>}S-UDI3R0X$2upPey9Ckx-tWP}QNF_V^XODkE87XVDyZr6F0)U6ef(Mx*v=yhc%2 z3D(|2qg7x`C}t<&u75@0$M;d#Q3y*9zM%Q*0~BTmVcz{0G;zw~VV(jZ&42KM^z}bb z^$-aI<0^PtiBE`zX>JI`*sfxD#Y#8{CjO z^vZU={z#P9AN2&*)KtvnRBY+ri0xSc8!ND}8nr%B?7sR(8_Tk{!-e02>#)fLD*C=c zjqtFwvUn4T1E+|F^Fpz=eWD%8J`t%DpI1YPD{cckxr#mAz^A;M6*h9!pisS9_DnmB zId<^82hI@oDLZSPYZF;Z;zPb$>sxx^D~{_jSmF-Y`-dgm=;CH z!OC!?%ijSvkB7SaJS&9Vs16iAs%xsZiGI3Fc0?e`I;b_3qPEx{lfEUZ$Elgc<{u9G z19YR9ZYSmCEj6E{cs&pmqe%vNK|Wev(I+IjB77w?lqw1A3}4Ls)<(Tu}Zrr2X9wkhl5`z zs=Og&YhRGnGodVW)H_T!Q<>lam3Lo@ZW234NGKnv22dRYs4pqA>HJ}l zRkwiM6xi52vErj%zWimK3lNfL((U#wedBKOd@Fh99S|&Fb?7FtCcB}}Pih#*n=Ve> zNYjuCHiiou`_vpNuH~{hBm-q`j9JWs9pSnurri}x>=h=C3O5k-m|YR9W2)7LRdrU; zZ`O&>4PZ|N;DpdoT6CPL${yc_Uu_R%@Nxw+Nv1a{fI9Ah4OMmCnxeQL%u@@3p^>_N zY{VYuQ(afblu3%pw#Hat{km#hZ55lU>84eAo8XK66UU}CE%dCbpu9mS-w+v4ifNVU zYz5S30(DcMsE)i|LnoHjoPvS1bbR^;H0^IwTepN0G-dT? zg_UQ}#BKGe%B6V{aw|cTy6R$qCQHa&$_FAoZ=}f*GF%W@Uq{nR&ZQX>aUBg*E=>Z7 z8`4nWl0Pm8h*B7|0QlbPe%9+~`c#RSGjjKdai@_Ar}YbQZ#7oA)WKoCCYAC4Q zs0IgqtQH3aUKKU%s=9&E=T!rZyLkl2t~aj~bA_vg-_NM)C%%>_>Zx0+Zn6@7s#%K2+YUrly$UgXRRzkbqF{sdo6Nzm z_`G(kVvzD%sh@5xc{d~=mA0)RBvBVAS^Dd$HaFxQRaP9+3gNtDdQ@;Pdngnx!E(+! zDz$Z6{BTElnJxe-=j-ao`-4z*nXZAdS6FAcEKcdcNA#D=ki(|?kOqM{q?$)MA1&g{SCSzF9k>i!PZZ8$x_?n!F4o{ zw;2cQyrVQxxV8;z=IPILX+jp*61y_ANmlM|)#2u%07?kl<|Xdz;GLW-`F)pezn2Ip z(e34ggg!p!f55TzmNcmUzD@^!e6356lj$Oo+3=IuE!94#TkAzih!n2#%}}ZCAzi80 zcHbkq5(Vg%JRhma!kkjw6z&i2{}9E>=oo3AkPi*c3S<^*Om;W#z|^hxx*gEPlJ?9vDwc`&uWAk8IHjBCD>Rl0AvP`pgq*>+S30em z=8I_X0%9byALFAS$c0O#GW-p!;iX@pdV^0eW3Lk;un`6A1wh_8tTe5_tc73t2K0ff z3z}e-B=Ai{kd>9B9%cj`UV9#f|Ja*w2M1PKh^ox4Q><^*R_KAzEDk@HRa$Ywc zf_jHHgM|J#nMcjU258QHK{toBJx(FH9~u%5sM6;DlWsDQo-(XVYj?0`t!XtGcT2{$^VbmUBX^cBTlsvo%bY5o;^s!R8@d^s;cZHEqG&J2xr@xD_Eh{GVs*E4AyDh4Poq-VRlgIh zi8n8WJ4Z1=%`1MXSqGZ$spY~L-oZv~3kZ<@_q}cnW8F?kb8qW{16krJrT5$K@JBW; zSSje9ZleYXz7?A$nIG_uN}<^Ax(!4f>#KK5`agB6I7MpuhdMk+K_K;S5C7&}4N|n% z``07gEHAM9iEcWHsH;8oOt)F%=MhE@T+?HBrzG|d(_?=pD7Rz|(34w~SfwC6`9U?Y zx>i4p!>H%Euh$#kTy=dOa;W6GZKL|O1%r!jCdOrO9WpMqum^x^EK(*#KP4Hq~fV0=bkkT5l@Xcz&k_miNZO+ScL z7ts69uq7*k=Mi|En(4sPPvh@8561ko*t9}9E`NVynL>y5s(3hg`g5H6KBoNBzAK9Y zg3+!OqSUTzxeLSlzOX^tR#)h15--uB@NQ zYMv2WSF(T>DGwv`$)+x6xLdTwXjJIweg?+;9URVL&+s78hL*_qm!|9r!0|G03ITyO zw*+z`tgnXUHaSwC#Wo5l?QSW-$cWU3z?N$I(d-i;rR^=0(mqFNh~5mP)zLuN%ldIV z>Qo_**3wt0P$7x&-xZQXPxNa2qgsjFbv!KI3Q0}=LT&vVg-f-Pn*5nM`YDt&HhIZ3 zT>tiDrY(_nUD97-{12Qr`D>&_*Yv{~`+7KxsUDbBP~6R*ixO|>`}?u&GBfXIf2rOr zJ>yz{M^0%H{Gcz;aEebJ@C3+TD!Q%5=C3WGMp*QdzEJbEl-SW0Mks#%1Dk%)7vW8d zW6iaKiSre=wEtH<5QM0G_XI`FdhY{0&V4Wq-iN@BfAmJ_)bIKQoVB&jpXd#W@ZSvS z=tDhrHZo8`ARfRX#VeyEJ=Py2itK;=R8EZ!fWLaKU#)JOLs)#!UqJhIs7zhjWsPB> zFw9ROKlL-r@KR6`Wbl^`1sLA)vLs}Y!{oiBHLMW{^Um?GUbaNt+%BU*c8bf+g~}8i z=KU0AzyoO!N2%Omz=@cgGdLSz2$2HqhDn?y&2SiS%F1O9LpB5rFvLowVfMNjxL+N2 zQjpK*eDG-{!)z>xK9vn}N$^;rq3PZ`FOi3EmrTj=@v6d4%z_&h)->p)qt!%u{HQw( zl7<-iLkZyRm;|%s9?(uA`AX<1JSBbw2WZ<+t_;&_8>V3bRAcd|<^oTQmg!wzF--Ro z4PRAJPZRJ!2RG;q5LwrdXVjK>`_-Z^efrhR;RYQ<)-z1yM%L9c{OOA{eC0DiT=SYi z3#0lNf+4(tAsgXx-7jcp2nyob)V&#-8Mbjk?ZuvVM7>7M4V#cn6`L9xS?k-vuv6hu zrC znhzj)q0>FD;boK5@N(FM4_W<_@NSVg;V)`FnJMEkP}J&V5tv_Qu_vJh|JQvI^1*C{p&gwOA*joe;m$tPLFe zF@l}2tjKK9#*R%Nom1!;{V^Cq&TfHv!?%yxAf4}&+e*NDl^qBrr*01Bh zeubXMQ}FFdb3GRPF&I{vovmNmSHTX?YSOs$jFi-|g`WCc=JckKm6@HMlb$&`J~1ag zb#zLhr`Q>tiyiDUv0L&oRU7i&@-6BU$j4t zL|KG$vAO$U$7-{y@|yp$oXB(Z-hL=wZFa<*`7gx8OpM95|0T&Dkx}URV?We?+w6+a z9rzDN60=93a^wMsTw}HdC8l6nF)~3}>LC-O#-XJonIPvU%EZ{zQH7o*f_Qm!YFeRZ z(|;wDo;)fGeIcAH&TtTY340-iN$5!pE>P>gD2?RI(JAp<+MG*Y4E@+ttbVZvVeuMs z1WP#xJJy(8Z2UnuwFcY4@`Ld68gpf~^B@&T_0)+7KF-akbyOshGj`nQ_M+47EZJhG|JH1jonGh}D#86#W@~VIBR588 ztOUAs=J4k8|4U<>z^vo47ekPiirNoXk<_$zw-NDD<4?@)v`E zg+4KP1lEb4-setLtrGA7qSVmGj!5r1IvH(@Moj2FSb`W<{e9T89*dyLJ~+GHTqU;; zw`}rOmagr4#>RK-Q|Nh<+j@cDt0QKI^VP~l__)s4$4vN70cyWvd6O zZ2bVH7n>cGr2kOu-x&d?KY$Vhu#5DsH4<63IacioI`NEjYS$wUMGrrK#0^+zrVV&3 z8FYw2GTQvYXML4%S%~^L)Q4{%+p41IFM`g&0s${d@Js82p!jM|0jG z_;v$k2>uJeGqm*(m^NaDB>LCd4_T-G3(H-($OURGrR4kd?T?b%T%uNhcKv$y?Aktl zVEZneF|UVV*+wk*+Vrm#N;jGVSTiDQFZaS+bw2!G%Dvig*_(&q*+%Sq(}Z%+z}|f^ zw=&VQ-9XHtAlmfo+6zneKTY)~;MV^~#`UDbu;CqZO?I084L4#?`*!Hqw-%=>(Xkyb@Sr1HT%9@S-*CRouVuB5!1hh%N|pP5 zQXzbN7SM5Y&e%zXp7x)>%}vW@~QThX@W$%+6`hb#zYZ z*u>&qn+`uf2Xe>{UNP0Qrvz zrjE@i^rUz>oij3%5^;1a;2g?#uguYWj)A=WoJR@8CT3?BdcNi~`Sr%w)Wng6o*%qQ z?K9&>=cJDwhl&5`)#^Ag3v<(yJ42~=9hH^IQxCusp2Z=Q9pZEvn~9@vEzTwDJrk*8 zZ+cWJ++nu(ORXk2w`k;9r_^?JzRa^kB4 zF^849&+&ovn&*5+k-%z;a|YyQ1mI1qtJazYvE}_Bzp2FqB@3N8n6kh*nf31h8)k+! zg|cQQe_`(qn<(?5hB{;(ZgCgdNlg#87CG_4Ob@8Gz}iCg07@^&Qpxg`nzJICRo1D$ z)S1eT%VtZgc==zr4pDBW3em$aSrK{|o$nmPZp&c41*m{kAKqH#oXA3Y3fH4<;?@5T zpxtuk6V|vV^vP8HQq1ds6*}?aiLAj7R1~9oIw|pJw!%4qO_L#IXAE9QY?1SU0j6`A)1;)vjS^Fmnnkr}oSH)KjoKBI&#Wya zj<+t>u+zQZSgHwc7EiP;B`VD7NRxU_w&I}|%AzNrtnXAS?yex!XMael)OEV`3Q-rr z?QU3Yg99_IGiBA*JlUdmv6M)1Y?d{FUF;>t?>F3K z#S}E{t<#10$Jy2t_DG0ngUv^(2h&{ZSXQ;ST5q^=wL^AN&SY=M5?*^0$07Gak+cD_ z=UaEO%-&Reyke@9cYs3+pQl(%(0ZOV7=BE#WOG?q zhBH-4?`QdlvCgs5-efC(Fu}K<`^LhuUYMB=23qDC`^IXNS21z1aN*aGVN@@V53*#j z@v*`WRN(Q2^Y3EVz8!3t&rP6txAgfC%O8w=hKfAmuf|)Ju;WTvbhi^lq)K7Go?_8L zT%u(b*FZLf9ZJ5z5+PB1l4UvjAy$NrE{`he6am5>1L}3x< z@VrB5s%1JW-o^KZ?)s}wsUW&6AP#1XwB*V{rhzsiEKd%Ow$#(GF?|3-by*6^vfR=c zZ}!FLbno5}4+M*M!LjZv6^2f+Ofo(Y{3suO=c$&dMok>yqkZ^Ir&*>O!vvonM9Oxg zn$sD*5CB6O535ULhg7OP@9x#PKU7}B8DN({W>e_$^Wk+4RtG>BYnndkLCFqR~g zvB))+Vy^&V2jk(Uk}>pGFLhjJnM|%>DF5&Qeux{V2&6sQh8r!o)hyJ~q-vWixWz1I z)38Ovm(nWv))F8+-)g}QNY0Syge6e=dz%H%wPc0sJA4$7FiMwp$sW+2@1Z>w+*u~D zTY6`&niP<&!hNbOz+D=DY1#n`9-;9F@%Kj~Bn#e_lXEEb{Xmom%!tJ^|2Bt}TEn-R z-}umi8`=u8$x#_eHLBV%3qF96J;rn?zakb-PO7nROTV776skskI^%2Po3ob9B%{se z+n-y^P=4kL=XVZ!CBO zh-&C>7EF6kSt}VYTgIuZbDZ_`ieOQVynM})<<-ZcT1H@etmB4l<(6sO@{AHIy+4Je zHwA-lj2*vhii4c*EHgQRGw80v((SGQXj{Wt38vq&Ofwem^6pDd?L%E5sUovuGLS(+#Q#B5WEPC=g12=#3#}DHOV{vvl+GOpzgZo$7hyI@0Oe=Zf_ zuEwlGn0A0D-;$1ap+oknil223t0xQS)fKAXy_V@BE~)<3fvmSIPWT6Jb14>c1JL4F zAqh+oqY2eB6d2&$Kx=QdLNVKd^eA^~(S8twe!f2d!h&&1C3`~?b}Eny!PY_Ss%+jP z%&TtQ(V|<=WNC&s@p4w}O_9ao+IU_e8&yIR1gNHkdIoDR)wLaoEu9>svksu&>al>B~^wGaD3 zMznp6MoNkd)sNCJoZ|i|OUwQddaVS9bq3omTb%8+2)pNt&Nm1igR|BFdTLYnWb!u)u!e<**`D66a*LV3jvgi*Dv*(euhR5cg4^87y@u6YSs_prWZYMk5@ zzk?7H-Ly&5m?ljUTX;V~QAHZM(1p{Pvf)szw!qBUX2a@Rhgr+1}EuNKM_$vPCd@Z4TOCa!dSsZwvRb{!|`L6=as^zj-O zzNSUwvURS<#>@m7TQv&#Z?H@NhWzR-o$tb91dvY^E6ucQK& z4X!cFFJ1(>swX}nd7kH%Kq??D*!sZ<4RziWq8>pKh+S1H2`{Uat*99 zB3`3hm5DC&j8v&cc#(z@8WcnCX&BQL7Ao9ghu!>z8NRqm)* z)V!xssQDYZ{;n&AJ(d%vmw-xex^8m~uTmMyLB1n|+ErBwwO>x)+L7?Il_QwFk{}8K zza+xbpV1c6FWl~Wt4ge@)1=T7N0jmmVt`PhuYQo%J#dLzzQZ-26STPQT*vyJhK)*; zS6qCPh)qls3*Odaad6%JiY*it)wSlyYRb1oY!^YMO%`Gxm&~~Ul z$J5H2>PcA>Ybpy$5)}+3?c}`p!?mW^7a@mM%one@Ccv#xfiWS?n>26M!tG8?PH{I% zih`rV0$LT}7aQQ-v%ZyLW@h0#P?y{a{j&bt?Y`iY5%kj9?aMP}lLM zH2a2Y46dn@xGQcLcGEROR!)bm-??UbEtG%fy3C2PcTF}ZyXER9osO~o&yP8iCCs#) z;U7HrqokPEt&)aQXz*p9bM5E`e(j}xZTQ|03aQNwYG=jIA0UN0H;>tYBOP!{MKJr8vy0;cZkgmT~{ zu1&RJ-*)TYc!!?u*h_PFS~~U$IW{^K9q|H|smn;OtfFG%g~d|0eH{n=kZ2WXX zP4P=izIa;frgem7s({e*QU!vwDID(n4|^9hHBz&IAavUq5$(3%J|m@*cnkX%yfn&_ zpc~Fy+RiCUmwk_&#V@jT{?zne*7eC5sflCbvy(HkQsL+g^J`E%JJ`-bMnJV6aiWZP z+C!wYe)!Qk#T!3b?h^ag+c+ygAcd87r-}X7|8RbUY;S<`Yhr(hA|0H)Zp{Q!EIvQw za;)a~4msqs`Hg~NeM_iOVs37VX@q;lsi{$kO`AtGO-!T@Mzw>e3xRdu>k{)+GiGX6YjK#ryEmdD&ibma(T0M*0Zfdk>X{34S#nJ}ON!juQNr1^?znn_J4?Z^ljq zO;Z(HchHR04=I|ItbO175mCG!mrfiq zaZ9`WxcQKZ)O>8l-8q!;3J&_y=Ea(NQc1GasG;?}Y!FPJnDaOayJLCxgO)I{U*Xf7 z@Uudu^ay-jT^|~p!+=DN{8zM4xYigY_`ZR{{ed;cwu0{)C^EKd9~z4lLOEJg?Wxeo ziDBo>Q#6ZU*+^>)jZTW=xL|MrA>J-CXK3(J86qIzA-)4Z2=&q=J$u1ipt&lf)OVqj zcH~hS4qqQKC;53^^2nn+&T(F}KaSwW3YuC*aV&3}URx@;b=IS#Rz)|Om=-T!@dTcDNV zj4s20iNO1>nsYfyEz^**crF$Gso4%ku9>sB4BJSGbp2;*pCG*4D_tlEjL=9uf5&-x zz_>b|=$57+pGfipeU)F&dHo=Eo9&XEoyU(mTY5m_;oc*p7GAL~o)*7Bvv5j2u znN0`79$Rm*_k^hE^8l1owT*;oPpx;@DIa5|>b6V?jos70N40F%@jGR>U1E&-N?ZiQjIikEZV+jVE3Z-@tZ* zg=UJuj~{UHw66L!%G5x$v;Y@tCX4vNmb4?vHe4gEZQz=wq2obQOk#A4=w>aNG>S=W zk=VR>WBS${%#3p78DAYkO~`j{@H8VSFQ39w&IuCVjKR z_KhE#Iz}9wtgC9*NmWX0xQ;;SM)}GDAvC2?Av2HKlG!EM3@smCOfQo?MZtN@+=S|5;7Qvs=9W$HZ})LA6$DMEFd2Vn?Dq3O z@fJTVsq%7(>}!Pp_DVKQJ_^2{77nrF{mP}qgRIvyY(}=IyTH2%I5*OoCfyur{X9?> z1T$2W5mb}Txvh6KtVy=0v!=HkI#@W$YJx`T*7xbj>F5Kms!y_C}V1GTd zMM_d~lbF<|jheJbO^I&7mmb~uS17B%4?oza7;WRJz40L^bUf_6f-m2``q4hgSX1!% z=!1M3eU9F?Pct?Z{OUgZ-T$-CGIkXF8iJ2wdm3#13Gw{}zorkq@MrsUW2)fS^5M_^ z#hzyzC;0qhGNI$8use1uW9R^_K;F7*zo6k1?NXe&Z{JQ7Z@dt>32!}I`^}CYkV8ON z58PzLv^3CxM=l7bJ|`{M zf%6fh$d4?Y13MU`Xy%e&aERPccHJQkT#PA5k4dKJ*gn(jz_}5Rmle;Wy`ZUf8ASUy zGo6mxWPnsIggfr5=ITT!3G)Crt2%H|h~_RtI$UI~T0h+EiL36wkMSuU465lkMIg*a z6>plb2Zx60G5L$5}T zdB%5y(6`=G4^q<2VSr(c9W#vk1VU~BWIMKrqriAV@O@iAaes#$GGiPeFsUhe^`$__ zZ6WM)S0)T@;s}RnF^(+bEg=*QLSza%xKV5=)}RHBNJs!%u%-ycMA`5IQN_5)h*_sj z856g|?&gl+>;tS&#dv5^JlPQpAFi{8z=9Hch~}iM#6P!$N;s%x0%b?n(lH%ZGu$M- zTvIG6!8AbI*Bs-Sd4lK&>HV65!Cf{T_Z}aRw{omxuM13IV^JpLmweaI-ryklwH139LavY6+}PT9Id<29LUOx#g^!6!wYCHG)IE=8=>A+3lgO2Z*K@K49`te6X8k6^g^oDGRLo!` z*0O1`^8FAyDJxsa3)rT~(5`pI*luU%1w1g>r#-4wZOkA?dX+!aoHWLJtQB(dNKTF3 z4Jm#o+0nzU!H(J7J?i|ab?g};h68m3SU=QJ=*6^kDZRzsVOSkdRUH9T*?YrDXvTW9C&EGRCosKr~WkWjpXIr)YrY2%E+^z9Wjv-JRh0oG41F`ecVr!_H3^ zPEmKn)uuWg8?Q{qF-&ZBU7ao_v2>hMGR=`^G|r#_E*y)7`^k?%aMGuPlKD7L9GdP} z#p>jWnLUb?a@NB0Tt_nNo(p4cnOZ2m^TQ4ugv`KDjm;Ie+favkUp!gSLDhw5viD3! zFH=FTx8CBOe^IVFsIaxUqF&OdqNpo|LtyDF#|m~v!SF!@F^RJs*IWLg+QgHCyDEkC z>48dN8~TGNrJXz!#%Rp>cY0BC9mA@G=Xu>l(-A}|>XCVJJK~=KRP?bH;u`-g%x?XK z*w>Gohhgj~fHWu}jyg&Va-wOpY8`_yCXWZBFPpB|X3frWb8?OfxPK z>^?qlG&kP9|qPM&P?MoAxy6*G(oMJ&MafdEXp{)TA*Zn+%Cs>V->-l=EEPh+cCk| zK=Aq5`iPm*&E1ZlH4GIo_HL>1UI*UtLP}j>RNv>ot7sKirUUX=Iutrf0*?!cWBMAEve ztjw`eAbC{KH8m>Ik*^%MX@W@XJJY1?-^fT>V{E_V$oI+sWjbh(5TS$X?VJOpgq`>) zBJl-D?jPT(edn6&5#{ORw<1px`iDyu1n~wTz5AVG6H&M;oF*Ok-f@^HTm`4WBjoqL`6B=RLll#=>@UY-QlY&4@wcN)HCOksoD^j#{3%~pDNeoo+_8fw zW!Fj%(>xJch#BOKT7C##5fQGrrPh80~5Ov)#0m{eYXJ$>)vFlXwTxfLSAc+*2+7s%0*Gs|CFz0+O;)f36^4}h_ zbC#EL<85m{m}7M=R5*0e8HiIo6#YQfcbWp6<`MVbqg-(stcHJ@A(4k z`c{NB7BJt=v;u6ZvAsa}cB>T-2KaCr8j2Gz-(D7@u)&xt_`ba?@*9a>Hd_dNds!4l zi(Yn?5c>AAbRCNdsBSH1jeEVD4!6HPH+RkytcLYN8yrT3>uVdM?uHziYy37(| zIo$!^^^Bh{lkSjLP&`r=)3Gs%X_u756JN#W97|^5$c?9J6(mJ!FB_Zv9VSmoJ1bEOK}m7`F*jUwjLBp>ZDEJa9Y&VvGK znRJMQxd{PJBd41!kdlriYpz(*p*n>-p_|hPgF86;vJ%-) zEMLtD>+@kuM-0-JbH(}%nPi>b0#T4iTl&tC?&tYiR;TqGBI&S;KJ%IF z(uKq|yE+F~d1Ib;dW;j;jzlT5%P#XoJowU2QOBB49WeE=Y?P1!t?U%BQW13k-JL^N zzHEWt%tVM1QS6dCJGD^S17Ar=vKhLliI`(+m5T7RCr15>Y#~cnP&0>88#L?fjAc({ z3v^AhLMlCCam1)GU*v*c(fqfY*ZX3(y{eBhm-Q4lh~$?w6(Al@%H@f`IV?xU&~;4( zqn3H?e$KbqS{Xx^HWiE-mwEj$E~PStZek*aPF<)_whqA1-j>C57gI5Tk*@(a-gM?_ zLLhOwJtmOf#gv8EK9=IoBXKq;L%q@{bg*Oy=5feiXJ5Yo3&d#~ejS{!QT)rvN&;#= zP$5Z!OEaDd|9&zesLmc3>KyI&4%*=N$?&&w$Oe5xS+SwS%K(AHo#Qm;1%$q&j1aYK z+r~RrX&%W^pD6^WfkKE5-c4{$Wz`po669Z2#wjZ)|=( zOs|cS)bGtxgI5amdOqp{en9ZM`O<|S%#XsMB;K!w6sfU|DaB{C@S#@M6%uAfs|g+?49FQl18t$wE0zf?eFb1fvOqb{ zMt7Uz$xy9VE!`Qrl}}ZVuBE~HpUi3etw$AsXjo3*tj*7~BN|(N_h*-u(I5)ln_GTkPlcQho-nb6YQ9TLh}08Hp$Nns;pnbGJY3xqWtEo0bn zS;n8DNnJWwG#VxemV{3&YG~MZ3IHEez>O}J-&s(h@FmuU=G4Mo-p%qRd$o|>P(W)3 z&jWuB$qP~1*4;9ju^d^Ezm|Xzy)4hz+cF2ANubyK0u7aUtyp~gQ!2~&8wsf_*0Rb^ z8lU03>c`Sn(jg;!kma19o-D(d`+hDdww5*om$v-U4Z>)?a&@dT89)Bou8jk`bRF&^ zp+L;_vYl^fCXs+H@*tnCm7#(WnvQdNH0y+xVve-b?q~3L=M-{=Zv<%@*(PgZp`F{- z9!huk)sgNsvYiZ)*0r+bYUp}M>sh#Fp5NN`Ha=bDmo^5>MtVtG+Zqkf0ri48NUwOq zwp9ZqbMa2f+N!ulytc9uevmlY(gdOkY`ysJT{Y1_d$(u18qw+z`v>rSKqXyORWdn-q*l|LAH@n;!xWn4e$q+@Ms7^-yDvXfNJ#pVQ79@ zf^8wwtdcjB`9mM*;I@sD<|f(pV-mdnxsp(Ca|#b4);@p8TZ4LeNwz>~ubXF}tsB$% zdIS%uX9Q+=`rkIablYS55QEAq-8c{GCWJKvroLt(IWhG}{B#b`>p<;OptO?^sWzt?=6!4P4loj{fG1 zfbn^@c$U0MG(fr?VVYsP%I3-(elY^Nx8y9vg4$nx7dA9K^e6>iNSJI-DXl?X-TNxg>VU|tPZB?L6 zA#QSCU0F%%t+%~dN1=niwu0@$L*D`@T8nRMt1LoCJhDOl(P65~lp@LF7GsRwlI8sU zo~YZn(2juCg*H8md&{yweDX)mm#nb4*^#&TBfX<=vB<6_gX2dl5zyux+e9`}mU$Z=A5O8BZ^Do) zk!8Fg0szpM z8{1L9uYB7^l!P-gf4ztduplCR~rdzIn>o z2Rg5HuJRI%*EtIacR?H62S2QX3$!L@oXd%o*dDC~7dw{`75z;x*@1$XoeI=WpI@(P>%3Q_f*M0u*hTcZj#Ki;v;WF6o}8GW?k92pDc_jV4l+Shn;h(~%D+JED(B=_QJ(+H zbd^ti5jQTNY1?OV*eEn@v(Z@F?-W<;pZf}*eC{k_lQ%-UE@8u=ZH`qdlBEl4gEwoS z-r?}kFzP3K`t+a-*G!(xJfwdHPu}bkO=z8i7u(U@?(F_XQKhJ-_+*z8o69Cl{orrVA)6zUaKh-g!s#1|A8`sgbFC z*_p`B$Uy22hJS#7s#lyj>{prH`>=B)P_#Q=b;dLECgEMX50On%m(Jx*3v~I>nawZ0 zN!PA9@0wVnt$d>yf35hg^G^+@=+p%-W$L9h_nk+GwPCh>CS3c?8IRZ3E;Mq+KzSm5 zvI4Orc=S68-VlP4DY#q2P4YYX_aEYtxzeA`lN!7th-wA+#a=E9`^J?EZ~x_7jgu@g z7sWqLf&!XkiR;1BZ5H_Bp>sUp`6TPY-_CKtHQ%Lzu+ncQ!<>JdcZ@NDWy57{)Vn~t z(YGEsvyGhu-|oXd^BDI(2ME5yhrj2EbAr(=_)fvc6Dc>Wdg`2H9547TAN=fRh@UI? z{McAYchqyl7YTkPmA_)3Yn*Y5VDoEK3cQQPHNkjL@FN5tFW$MK5kvkd!LK6t8+L`K zvYq&br64@RxU&==_~YWv$JAp#*Hq&VLWSSM!XzjMKl{5T8UGY~e)~#E`s)DKcw@je z3MRjJrSLxt#H4M4&+lACy(_f~a^VMk5x@&a0xf^Pi0o>57giT!;~h1(G~MXJFFznf zcjnSVUHFv=MWt7mD@UbXvAC9dDgG&z0KivW28gQZ3WAn4*H~ltc5;h9OGFb?pjdeW zAfgIBON_C*a*VGEgw+R8+2LAbY$^D@RpEsMqMevPHv#jl8EOLcU6{aNfspG6zDt`1 zb;B`Y9>JIE2)Pzf9pAatt%PBoEQE4JA*BYDQE8#z%M}Hq*vMz$vf&8sIN_Cx0LXd; zv)3TPHPN_QDEQPM-g+qj^NibtP_9Rq%J0TQf+bfW@(Pcy17K-gv=~*z6$nitU1N-A z1x&6{FT!3%*nlEkWyqUi>2JIuu)b9c=d|d;%dREHpM_AaXG#>786OG0Z#}~v{4Jwy zhi^Tjz%;9gfe9CUQO`s{eukjv zEAbtoxkgetM|e?aflc*XZl>8Tx?ws;P%t~|yB2b5bdkVssbha+a&%HsRO6)R)Wp>2 zCef);4aR4s7m7T?PkE9o$*v zm}H!{lS-49vYZOwD6E521dhKkZIj@SVov6S@Uyf(Jve zXesV!hkAaDs!nRS*3nR-=`D+S&}A|Dm(TxJuVg%4?^sqL3-HM{{Ah&V21gFD`LHpp zv1_W|hMpR!o!i1R(zi`qevBRK3Wq_6NGf; zH5cxUJR3z?Qht2kYZ{1X?aDzdsi3v1xyGxurLC*Jm!P82zu_8>hUAqkRb@;bApWRIZJBxbUI?Qe-u{mkWQX z2PryyZXfHyvvx(+xv!j8tN~BaPuVN})9+pk3~=F5wyXh*2jWX%707>O6Ge2>Ysp|2 z-t~`VB0)=&a1imyu zg5KDb9EpSN>8@Ov;pW{Yex+>`?q%%uxTYAfkd<0nZe|?HrcLw?2cek zH>9ZW)&x6qT=~ql$EOFXkm}=cE)Q!d#B`2{QuP^4w=B-fj4uP{N!n+Tz{uEzZ9$*xrPjhqTy7*;U%r@A8GpDC{X>>pW7 z2c16Rr7RMEX@Fl2elcl(Xg%FEiFL*w9N=F*q(e?0#R#B)Ps?=;V;M4rt_dUNg)$>x zah@xYEfYXG^Za*uh#Scc3J9HkR)AnE&G7e3*F1I;J?3|X6>n&_mtxs^wzqa$3V3y= z#eTy%u0kqke#)YT4Z(rXYp!b|$^M7WD%D!peV%IyXXDMyG4NS5QWCh3s!^L zmSx;2ga>?tcdyx|8;=P7K_C9N*U|o`f`7(`|LM23nZ|2^|B2w!GuvY~aCeahg}Uhr zH*s%~Q*?dl_$?dW(n5-^`5gMehIhn}qD!wwZrkuFEmG8lfAEv7geYO<7u*5$>V5UA z4F>`&OS~Y3za)n$bW`g70~_9=QmDW`Y~@7J_<-BHXNe+n_&o2NK=P;O?>(}e@ltTB zT0|IBU2dPrH=mEBwwb5#>m0rzR;C3scm!n zuR@uB31&r0J5Cu;nJ(lNwX!=YQK~$SHuiAUg_Z5>cuO0R{HmXHyuE#sn#^Y%?Y9&P z-!FCX$ub>6NEzMitu#K%9ZkNrAh4KPh=d`0m6D+X{<0U=i!7yHa)O z(s!}^jTy2iy0`nYt~XIer4sq3T{I=SBmVLrx$rS->5_ejJ(rM_?Po*n zcoowpnOt^B@t`bH)J#6z0%xLqqu05>3!;TnXd5Tnm#}*KMRg9m;v;F9YR}`g>Gphe zH$E#wg0A3&rrGCkg3h_G{e|aKPt)vky`0_|ST_+901rk86Y7CDv2UdNuuWFh53-sB z;P$x3KFyoPd-xlFz80@@f@aQD;w=3DM%ib1#h(38^pvOFrR@2cj>F+%}qPr^`B(N8-oHMk2qupv$E3IUhwCNT0wl; zuO=TOrr>kWIDzmTnABX<18Wb z8LRN~z|{d|p>X|MR4xzzdC+1e}SS=wCADUDo-51$svYxVpzAvdrmM^yNWRqoMEq%HKY!?#S zEUVDhBvFOB5w&8L9>a27__uA5pQlVl($^(rBxd+!Ak49R`vUe@hVTt&CBrJjwH*7t zTF~wrXAIwl_5sv}kp=cQ{klr>O{QK10(vQiDd9cBc@Vn_oA}m3dm8TEauf7%7RBL` z71-q#2`&0Ai=y>gkv#*qOt=EjuT83sFV>U`zB205K5*N0*rfZcvJYf_?~6)7SNK%5 z+AwyteJM=4>}&@4y+qk#g_tM8Q1-TcJ{u%!((OIeR1BM-##(y6bP)W=xNhwAUz53n1ugnlGVk*wWj z-|A<;n*im_?M^>W*df@EhVPwFthVSi+px+u++p9t+8)9$i{a#({ASdtdv2SHpWWfv}P)lvdUVNhe{1CJoCETNL zMNk>M^`5;yd-<^Nh<^tWou{B~*=HYKuj65F_l7Tn86XKM6x*RF zDn?NWj0HtR0YwEX7K*5VfC37NUF?7bDHasr`MhWEE(iGiJ^AC6*=f5wTW-tju5_Nr z_^NJ_?(}C;*N_@h^9I>rb#esdY_zlFZnU%1RhMkE=Y8pglXvw-`2jApQ>F8bTyF4< zT>7^@5OjyP+=BrVF7w+&f3Z2?nV^@wsmttCv&p@&N_PF@-$+;)^u0Ir5&t;N_WEFK z?54opRE;*-lV%?h2CU4oiwoCn4m+hQ{ZLlsUfzt4+4afxf4g4zcEZ%40y{zbju_37 zl^uPQ{(eNl^tx)Hx8S;fnJ~vEr?w|-33}aII`+2M+L^E2#1HM3dIpV77*JPz?yct) zyPn$3?(UuPgXP$4&&O-EV==p7nUHY3dso60K~23mHrhGNkIS5Qq?^w#yJg2Pz?-_e zw!Hn`HnRfAC>rSKi3vB?{e*VB5MQ)h6KOxc_ zN7o+F$}vh~UH`*`+5=s4SZhX=^pSlqTzgn+qFWpch`wiy9Fx`_D&~G{A1a#T=h`33 zzMoup+?@Ss!dj-W_E6Uxag}{8EnWJV93n`X8Lv6$t*xo*^MIPn$mNzxxR$P_3n^lr zdfoeU@`J&3d+hLCOD=g{uJs1x?9k?d@imL(BFO%iJAZ!xu-wP4%UUQY>urc&P~0| z+qkJGL+14M$sOGJlOa>t{X1n+Wx#*;KwrNrdH(q^=33Rf-N`pcNt^jjC3;GAylhUc z?aA(Kw_GB;`(3#z8<1n3H%Hlf$u&{4b_TYkyrbcC)B-!o+l;=WZKr(tPp$+%xHox% z;}3ns>STHS7T+M2X_SksUj!w;W42K9#v397*6rQWfnm@4av`*rH;=b@Yp(;!bk@^< zeIQpl-QFy|c9y#5>vji{XVnZ?6(ccC<(t!bdftc0qk>-a)?kip zX~B==`t2v)NMHM3FzPoB%0=fh-aO{u)-E_-fBdmrz)at1AJY29SbMelw@>5(I(hxi zi^++Jx2gX4RNh>9UYfj5=pGXz7YR2s{VrLqI?dT-uX5&1IrDefbL6|S9HWbVOujM5 zj`p6yu~-WaCr@=O(OVBB%UjY`1e1a59=h~M@?8v=n_j=(88;{Ln_Xt{atqqLZ?kAa z>RoYdgY1`Y4%WXlZkVy*`9*OrID9dEn%7O+@b0~Fo&0%B%#@nAwddv0PwF_2?;W1& zKS~&_&uO_Oy7d0I>wU5J)WmpW=RHsx8~b3~K3|UO*2v>@gCB~!*&DGq_RUe++zIQk zEN*UO?7L>-SrP4tmpfE3I`?5o%CM7a=gWTiK$}P6Hm23z?LXq^TB9Orhq~3M=-s;B z^0?MP@w?3}0(-oJb;c**8S+{o>C^Jr^0+avxwU2Fag%PldCf@6pgz0pHJtkfzJeoe zj7XP#p}eXoWkuYx8Kt!aWz^-hLo(_r8Pbp37nfUC-RP@HZZY_3qM7X*eeXRMw;*V> zorN0?z8u&55S*?LJrysH#;=T9V8`0;Po-DPB431A7;@(>MxT2;E=2$PL~YxfB~qL8 z=c?MI^eDyy1Xkvl>_{q3R{YQu7q79ReCO?_5A0ZojMy*f}Ph|30o%BsiWS2BXATN=IiIWMGVvX{s?Qmp-F~wdqdB`$LrML#_Qmv zlHOwl+2JTmfXK&$TZ)BjLQ4saCNvkWg-2jHY=t-BJNO+zuMt!IjFP7BQ{?nw18o7IaERwJOs<&O?V5Az)^^OQfL5O zpesy*e7F@Bz|-&y?1uyJm*7#S31&VeG=>2%5Q;&;VyJ;luo=FAZy{o>5DD3k10!J+ z+zj*KSy%@j!bfn%jsHTEr-i0)8RWrCD2Myu0oVd>zz^^vM9F7OR5Wyg&Tti64L8f1 z*qek%e*)g_x@p7WoI#yKR>+Row+gHx(`wiY``~Z*2bw=Cw18o7In0JR@CYo2U9cNY z!YN2tCnQ35xCACaKHLe_>te*$2)+(KtTQWXP|H{CuR^zbmFbm!)^c&fH^DLTb#WC7 z>5u{KAsc!_9~cfJARn%QQYZrt%!5U64=jgAVI8c8E${~Hg?;N;XTKtN2#&#Ta1QD` zC&WN3q(cU@hivE#ePB3@fPAcKKFp?QQB!9B1X9))$V9=5<6uow2hS8xc9 z!EbO5`0BEXh8ReNG-wO*-DQtV9KpUY3PwW_Oo40RI#>>m!gIjKnAKbGHXH=Ly{vwM zpTQyDFqY3O3yHvomQ_2*f_~uXkK=(4E2~l{gIi$%JOq48Sv?2O!w%r<$?6N>Ysu;) zoPsdcs}1l9?1g>sHGBgn;S@y3 zmxvV~Lsm_IuOF)}z?Y8Ia2NpvP$+m*6~S3>FWd)f;c3_keBW3dgpc7D_!a8P$AeWc zBm>_xR_%c=7^?xm*NW9ua5cTf13#I0X{jb4#N=$me1=dJ}|7(ARPw6 zAQ%IDGFTM>9|=~ofUg3p1;A&3)l%TQziJh%hL?da{VLCP+yNiKLHGfFgg@X<2$ApH zs!&LPL}(5zAQ!s8Ko|sLU@R2D6qp6GVFBFs8tdOuf*MxAYIqqoz;@UHAHhNR0e*x( z;7EF4lZsS9K!9*JD*b;LE(~O5jVs$_0GfSCs*u^HqF9#0vK?K|Z^y zo(8_Pt6m4bo2z~WzL%@gHVb?zR}}!C$W`|NpT<=$03XCv2Y^rEs_%er;Hp!=hi_Hz z7J(1ks%C=6eAQNUVz{$VrP^<|kI={EOVljlgQVlRstZk^DTHqoBA`8F!x$I~*TMDh zD6D{OupN%VPZ0HHi5UH+&@h3Z_8~ECJsE z*w$_K0oe9!<^asxmzuZ5K55uY#x1Z1_QIF&75oav;4GYj=(mL!NQE?L3+><%=mEoF z1h}CH=EAjb7u@}}M_fVhF?b1Hh8^$@d;wp=aX0~?+l2a%3Tco79bfwwl;5Rr2b!0tJF%S#skRep5@ZI(r)SIY2;DX7p8{UQEZ~}gi zgX5`@t!}E36GQ!aw}^g0H9PGE^uSKDfXpS)%eLDKD0znzaY7I12?bCHx5FLqG&}?E z!v}B*euu<&ge2$%y`dNs)W8yW9X7%@@a;P+pc4d7LeNg3E;NKj&={IP2j~cwLO-|y z_yD=O23$}HRj?55gy-P}cpJ9Cr^40hGlIXuF{raka6lZyLvv^WU7;IX4#S}crofHh zff`t{;mc9Zf}qF`C&@t20pY1hoL`m6dkSKLqr&7Qz}r83(w9Po@-=Qo&_2aq? zZO1!@WqF>y++oh}2Mu-9QG=lbO5t9(558_Ad;>2txB)(c&!LX==~WJB0WD!D41<|a z4)-yki(#n@nsrFObFH&I9}VE!#=cKD_j$=V%CnjhYhV*>hP|*4zJ>3gzRZ9MgA_=G zY{-FuFbF2VRZs$@a5Kz@W$>_2rMiruMLaFlM&dTXd$0$7gX7R>xDW?jp&MKUSHtaa z2RsAM!Y0@Zdto1Z4d1};@CSs-1Sn5^YywS%D)qd`rIO9&b*)P-iy94>=Am5F5=Ozba2>3G$KY+)20y}Ks6RmngEr6>E`c79 z2Sed1xEd5p0}mg!Ro4PvvQ-O#FV?CDfiKglr{Gn14c>!2@HKn`C*c&-yGjUwL`Z@* z&=&eZe;5xFu44V0MsPaZ2DgKT`{7A=3O2!J*bDpMTlfx6!`~2bwGavEkO4W+0s29I z7%h0z7=lw^D$Ipz;ZCTAhv5-e2kT)gyb1f^0DKQWz@P9JgiRE}!GaWM582SygO|cc z7zJ)9g4r+!?tq2xFgyb5U_ESu?eGbF3O~Wma1QFo4n{SAhR_09PGbG*Nw60ThY{d{ z$xs26a4Rf;C9o8pfK@`3n&`6kV0`&eZHJHGAe@H3Athf(h2GG|gV%rys^Knp1zv^k z;CqO>Mu>+?p&#(wMpXtLm zHsnBm7$8(t2hVU7mvAhoiYA*+0O|F8fYoj8h8a> zg|FZcoP<*a)5TD!Sk;GANQ2Ih3q#;Cp-Sx(nSxTH%3vPc1W&*!cnMw>s#Hp`UEmX< zJ}uP8*E#2eTrH=`@+~r!M6bLlk}wp?U?wbqrSKZO4qw3`2%aj`gBDZm1+njgh+f`r zq7`{m7m~WdAQ%i|VI1%sIW+}l!E9IvcfupE9G-_4U_0!9PvJB88GeB?@GnHltg0xF zSfvI_tI|$wiE9UZLrwJpKA5I12R@OeCIKHsQzdW%+z5}u6R;C@!72D1l9k|uKF}AY z2p%<+U^UzYFT)1-3_gcC(*y^^LIcQvOvr{D=mULW1Y7~vfD2~9Y*+|)!s8x%0$zbv zVGrzu@8Em*3r<5UYhVLt3eBJ^bQ7x7A7yq^ZoglSM#d3;Vuo-M?k*7)!5gqu&?nb9 zXX$gxoYOqt5ce(AD-}YZCA5MOa0Pf|3~C$)dIa;Q+?16QgIbcaiXDwSMeS8z2^6X9l<536AfybJHa zaX0}9Pf`(17 z84kk{Xymz0jDsf76gomD=m-5_B#eRrD1-{Ag!ym_EQT6b36H}I@FKhgZ^M2#a2*GF z-xB-|PQodOxL$~a7SIxULN6EzqhJPMf3T5Ddd9VoXf#vWhtb_GJl^S-ly)o`3Y9HuR>zq{~PT3&kiwS0fl!vcm z_W*t2QYZvB+zHk2GHiga;TwpZCp3U=&>f0k3TU_=w!wB2C&z2P%ZXECrZ#M)_g(93 zp|9B<-Yf9a4stwrmh9(%kAbLYNQE@$0$pJUTn71Y4a|l)a4*~kYvF0w3U9&}@Fn~M zXCP79OeJ}+C-f4kl)U8L><1?jH3>?f6mA4l;BG>T;1O63&%!#`3|n9i?1eAkEBFW~)! z_`bSoUeCnqdI!b2J!(Gbx4>ekftBz$yZ|r4TktmQhXe2}dB#eRrD1-{Ag!ym_EQT6b36H}I@FHx3?Qjr2h9htk{(&6igI&;bU( zKo|?-U>Zz^`EUy?fu*n-*1+qq5%$9Y_z@1nKX3-3?iQl&X1i!YuqkwgTo?p{VIoX| zDwqX#!QHSL*1)Uq8tjFA@ICwhr{QmiStP_lrr=SH33h|-FdRleF(|kRZUzna!)jOq z8{ie#0q?*;_!xeK!|*5k1);J>R`rD{71!;4d+*Gfrd3OjcT2OW=-3oTZv8G2BQNKw zeK&KeM-3*|5EuvJVJZ~E9GDBY!yRxxJOFFpNq7Zbh0ow~I0OGe`n^I141_^Y49bHG z;ZAr4o`pTI7mmXTNVrc(gf7q(CcstTfqC!*tb+Go5BvtlA%3xt0Nocm2FU)BU_M*} zx4^Bi7M_NE@IL$lXCR|S$b^11b`zWKeXnU=MA=Q>aHn&Mr-q4Z6b+xD3X_ge7ba#RL`1g==9MJPc36 zGq4x-!5{D^)L$xuK@udxCC~$|hKW!DrEoLMhx-JNT1@b9cmiI5S78tAh40{d_yhig za4keY8l*!9=m-O05L^utp$z29$g(oQo$!bUm&1B^4)((VI08rE9Mq9bM>T>tXa%i> zDs^1s)Ncq;m%$7uf%{-FY=Bo_C+reD>I;Hj3RP;+3cD7^0}>Sk4WJ=(g3i#71>PUV zGdKaRhZ|ryJPL2ZTksEph(`I`1@6djCzu5JFduG#Rj?ZN!vP3-NT>_# zAPdI9c$g2j!1M3|d>ltLNY4-dd5*bIl^2t++BL_=5T1`}Zt z+yb}4YFGmwz<&4_&O%GiBVsEU38SC@3ZV*S!5y#=9)e}?3_J^4;0<^mK7jAx2RIFX zL(Fm^7Ft2;<@_A?BiJ9t!Z;`f1-HTiSP75ACfE!I;bS-sCm`lgAr>;BF?56OkOxDd z06c{_8|J_wxCd6khU)vf4uFV?xGsnFt{Abp#n7A4;x_< zd=1|~$m2pN%&9NTg*#wjeeK-nOl;PMw6<^w^ng4V3Rl6^kLxiToozhR7?=*%!S#^$ zgfJB3HLa2#6ifr&&#JD2g>WZ42oJ$iuogDLCfEn>!*}pK`~|0<@Q9JCgeb^>Oy~ri zp+5|OQ7{?`!3~vA1-HPhPyfM}&Bzsrq3JON5u0 zsy~3&mZ}ioMWreMnn80I3`1ZVOow~mUU&gsgahy){0@JB^C`iC*3bsJ3m$a|!OI{I zCcssoU>aNt*TF)#6CQ+z;3-%OufglE3wFb&@EIJ1pWtu!2f~YG;m9Kx01LJcets#Jq#?B)InQLoB-BG);u=iP}c_Kcs1{2Bg%Gtla3 zp)~~FV>6Fh2E3b5uBl8VPch7axxl+4)$PEGBISV(VKuCQx8Q9!4ky4N)2D)jDrLQ3 zPiiJnjo}VhC`_%Zz9QV@S)nO-2I3%?0VPlaOW;*_4GzKAP;Z?O0$I==M#3nV2RFfL zSOdFYHynfCpy7I<(Rx0oTI~Pz`qhCw8hUEMxFtcp9F8jj##ch4(!8 zIeY;>!!Hp3k|3|@lDeQ9Tm@IdJh%y-fK{*u_QFXx1RYlz>V-2tc1OSN9`kc7S2K2O+q^u3*+E=xB*te z<8S~zgx}#0aBdbX=n1`G66C{ea63E&YvFwlegJ>KpAfP|2!#Ylgyzr!a-jzDD z@TlbkAB7j-Mc4-0;UIhrN8l*@17{%SEg=?KL2Kv-{b3?Zg6rUVcnFrkCfMx3ui+c0 z`?e4a>5u^(p%V;%fiMv!K^4q`C9o8pgs0#=*aOGm1cYr9!Xb4V>t7ndZqOaZ!Z@ga zO1KN|h86G_Y=BqbAbboz!eRIa&Op?5AsSL44LUb(j77m_u9#sDfF*OG?yxz-vj= z7w|Lu0x|ChvCsiJ!dMswH-ZPAg0=7-?12;DIf?N*g#_pd-C!^bfpIV%rodE~1+#(I ze5l)CDQH*&Pr_^PI_!bH@Ev>)XLqvwog)}4ZJ-)JQ)mXc&;tHi%5vo+f_v`}nLs6mdjfd24;RKw7tldI;7!MOb!~G^SnGn3e;8xfN z@53SZ8h(T0Q0HC20lbMqHGmAre3zal*#vW79E^uDm3~lsceO)et78YdN(!gDEBcm{^sT5Uo>Ed{ z;!S^Zb){shj`HR3CKG9Tm#gURB_!tTC~sU#8kO zNook|S6VX5U0&%fuQ3s(FQb~{lB96&xCfR>8ZpvsQTUUzdZR0gr&rXN0X6@9iJnOs zy#ZBHfnKiYxQ;Ys|3e(4?*> z#W#hQmKM&fF;S)uk$On__*BOXDJhsP%up>c>d9dOhWRZ=?AJN~g#i>JG5 zOq}U$BVB78b-GoDkF2bkJj`7_g`z~6yZ>^VUy4RuT2(x~a71yLdwOw+lqJ&K(&huG z?RPrkTTQ)LVz`YWS1@H_d{a7VZkc2!%3Kas@=3lCl09?^ITx+alVsL|f>-OiS=G1@ zqB^XW@%fr+z?`!3;bqcP#G30F^7#-+50O=%sCY_^88YX)^4$XBM@)59xI5ICA#-x6 zR>=95f4vyvl6fP>oMy;--6So>+bjdFmXY;yO`l$4;?0g$oM-9@EvhjQX2+o#$PU9hHS#tW8QM^?%h|*c_wj@}b@KYC!~BagCxm&94XbuL zk2*pgkw(gk)epSqO!d$KepsC#)BQa!+w^^xQgn*FtiGd8AJZvz*pYwbbX{WV)QOef z+?7&Ve#`miFs~WO3o`E*$*XH#Fp?K+-Y$|?&%9bBFGR)2^FDbQ=0yZju02Bz^9lkf z=NZmmUGw$>jJ`KRA?E!6GWvXm>dWb@{0lR0 z1(4A%dR}e-NNvlBb(psSNNrmfs%zc@AhmtPP(AYo0I7|W_+fP%rq3+@2g$IsZJlZM zQsk*aS$sTlm=|lFHk0K<*_pvC(oS8IC z%Y<_+Sel0m!O~b<0?sQl*O2o1=(+oy-920zk=f>Qh|KQvM)rgz^p*MOZ%%TU{t!8h zkO@eTf5Yn3H)l6YL9Q7NGG{i!>cpD!8p*~<4au|QznL;~N;9lZhB=`jBZnD(5L=T$RJ$&fPjq?&Q*EKXQh9cG3t*BP5>*_4J1( z`$M<+L+kvZgZ_}?3SZea{?HhI=q7(?l|QuKAF6XDjbKLH=1N~^j6ZapKlG?Sw9Own z;SZ&c^p(BLAFA?)mit3H{Gk)RkVj>V@)f?qADZP4J>(C);SYW94~38Rm2K}2jrWHZ z_(N;`p?&^PTql-@zV%~gqGOkS_+w{g#4eUaUPq~Om)C(QLTJIHNqd7?GHWT4{h^@j`~BfslG|* z>JR1nL-+VYTm7M<{!pVd%6e%2J|;+LhCj5_AKKy%ediB_rTa$Q$sfx1hwk);UiOD} zwU-0x*rI}NU9(*U?t+dT3v;`N|>6uHd zMhyzeiz|x@Tym;%h}4kBb)!Sh%%E>R(7A`4?SsDmKu+6aOFyHnrlG$PHGPyG__ecn=m`cc8?7t8c4mj3Vj#hz)%VVh>3=Xl zpBPG3HsVup#WWMOo7I=WAND15-^H_(ivs0av8~4%Fr3- z!ZH^XsVZ@m&n=bF)Y&gZ=(XdYnatWzT~usxY3cN)6bqsl9ed1}+Fevc_nZ(fy$6HI zMqeM3t=UD{YMZIVHN)RlA(Wz%k15sk|0q>aHMv4ok}|n^QlCQf^QkQqdET;H@vSrA z%5ZYg2gu|KXjSj5PH|V}`zy^atCaKTNQ$(4BbHflq0wZjUai0Q-q|`mmH{3s zF(YZwt#EQdr(AdE4xPHW3v;@4)#>9BlSZnByym|M`H zuxn0M{`At)X;o$UGfE5dE2g^S1Urr*a)-=2^%s`Vj=K{Yc~k22tKkobz9{=}W)zp#j8GXA;zpJ!l>UDeGM7Oblb?HBCV%q_^XrVm z&ZMzT$;7QLdppUi!-WG+87ryLzbP30|JML7ipxh|J$ za;Gk?E`>Sz>qji7rzM$qZqsDS$nDUrqucGyc6IKW-Pz^pY}Z>}IwQZ>TvMx2ttr4m zo%XuZSq8i+)-~3K?pq&^ve1|^$owI`@SI<1`EO7MDA0Bpgk$+J~oY`^x z$nl-*o22bj4+aLW&{rIBwu&$VeTeC+Z$08{5@I6y>t~NR+cwIR`07xzMap()%IaT^ zI2$`I*Re;P$?~uDQD^H$m;197msHkfOATRA$(z`ZI^%p{DbOs_j;B<8DrcW&7n7)| zm$|Exb?H%Oygql-8Im%NY>h^^$}8N3eaoj*Wcf>|aXRxSXPX$4qpngixih9pa&gPa$te;=OuEsZGX4KMa_5GimnJJSm9H~FAlIO;Mb~ewToHE($ zdi--9P)~|3``KA9Wy*h6X4+s1m9?>Rgqd+%&=xX5AO9>3K3)Iwv(pNhPF2lx`=ibj z-CpX}vA;M&nwr=IX`HGV?vhF~&*fS9`6cezT-xnTnHKu%lg^Cr+DLuxFU~Z_5WW5v zXM6c~=oe>#tSo>2;=DYhiUOAQ{OU}#!);ArefO`<=s1&DKc9u*DxczQ@%6ttTR3i@ z%6R?Dug)+DOTEoaIN=7W3(qeqE-94#X^F2)k7Ld@j`=$Kq%%%mb6gHpOq!anuQ=&! zc7Dw3$7I&cdU=cf{Ft+K$Q@Lfp|3bDwkZ9I;ByPjypR#7VDwMoy|iQQ$E|DxnYut zh?Lc+wA}aWX>TWQ9(U%1JV16!w>u$CX~N#7>~X>woopha@?B+R)92>93Mz|BOT6t_ zaKf1#@(5*9^qv#WG&|hR9_<$=oG}R|Fmw->M&U(%H_jl19ytf6|gU$t$TQ zysTW-xBRK@>18qsvj=eLSeky_NoRy(4JG3BK07SMnwxOS8p=l4WveP&Q{4W-GGPy& zbSCOPr<|c7&ydZj=bdt<*kRL}&FkAm)HC|wQ_j(0FO#coMP;#0|J|7oB7qvY^^^F! zT&>=yFX7)7o&US6NN?)fes{Ks-A4Z4(yGeIrd76U>kns2gUK~&r>Us8WHwW?T_5}1 znG*Z1FEf!XB~~)0NALCKWbb0%>2u6N0|puPgp^whj7Wzh3dDvtROIsYtz5w~pDZ9%109;I2;BIe$5w zNd?p0+y?lWgr7_L{UzIP-e1n>2EURP6HE<(X$vGR`8U!!nzWWmg~@3uqi|QZ zHnlH4Jh(x;IzgWC=jYMC{N-#HbZWm&IqmFj{V6%B!zSl;Ds&f=7P188g%p%Jy=B$Ir$Sww`M0cEA^Ot4<;NvV zU(3Hp{rum~OB^x!SN=89t^aZMbR_7h{7crW{&9A8r0CE8k^M}%jy&VE9Hy2;-TRC) zEUB>>o2$d*^T%dq3HQaTX8NWx&fboedg~cy;}rGCUAPfAN3bu+H#1w?(=gV(}yIg)D%n0r}=WLp47j0Bqv^J9(ruUq4wrMns z!gAx#J;&TQr0kMNtBIq>l5EQShB#%blPJGXg+TS zc_L=3)zUG3$x*9GBQjM-&Ty4fxu)lryX9xPMz?avNG3|3Myq+uM5?Y!w7sjn*kk!;7@3;%HQW|BGBiznmuT9zdt01d!6bULu zE_a$KiLQI`l$5fh<_1hjeqAec0ukz(5L51l(mJyCr*tTqELScHCwJ~Vxns7guv1ok zQOT?vSH2wROqF}K)R1&>9`8|sX*l)*{q-Alt>jT2vNygc`(UYS6o=8ZhZ81e@T7v-&!UcT3|ii!^ZO`$xMls(fsFn zV2(5GNm-^p50TyZGN$O_g|EL3u@d^3#8CD!#n;+Dj%M!@%E5DitE|TTUmKA(w^~8X z4fMUCR-*(HzGw^5_k>z;9+MW4&u*l+(mliMbG_?Sp;R$7+x=gg^M7RzSPK57%f?w- zvwD(=I&U$jn%#qMWw6Z7AbBFFoIQ?BRNw;Cs|yJ$>iMEdUfR-(rw zM&{=il$KOVKbMNYnPx8B)u|V*iZUMoxz!6)pAb0N7p1nis0v?p53_kuepv?cgA+I> z%(gu_|FJ~{WLB>*HRrW?ZB2IKd2Q~wsLe0T9-5y&-Cg4S{gugZ{nwgyVHWBAQ@cmD zi>ob6*@bJKqm#ZO+=}aB66xqu`&)0u^`Cq2+B|w$xLg(4M$P}9J+@s&nXEFN689WB z6!G)+KgV-no`!)l2>96 zShA@1W!7g@r(IP3KeAPaveyc{01&vdy!bcxf8^GgkydiT!T(yAo%D!ED=yEZnUMuv zwfO&!>_2idvbY>`5#x*h9Aj4Pj5596ocdIxmEG`bN`%OHtGlGoZgHI(Wwnyy(`%xv zCgEmRa#-@X^@vz2Ez_G(9i>=kS-HEmoHV^Ud_cb&Wu*uGazOtQWm%!#;yNbUYMuTY zWuj#FA>HuuC%cQ}EW36YOUZH3R(8lqG9~FP(U#K=x6+HEtQ5T~+KOpn5+l7exQb+T z4Xi-Mf9ilf6KyrkJWVZ$LyJqMxeG6sGo`Ha%Ba%^bl(^&D@gv&jIrYVlX+K+ls$W4 z*>d-c(pm2O0_g!KS6$DVvKi?Y#>xog2)WW#zyXdN{WplU(&g+ZCsq!nd+4FDR%ih;) zQn-K1Y-u-=YG6etHzY%SGqw4yz^zE%+rY|f9ZzzjfRX=4PH6#mbyHJk6MwQwqGWVI zX_Z`kFtPp#vl?10LM)P#^$iUzXYGWwwkPcNhE{A+8X2OBipwix9W0(Kv&{7)nXmN? zt>z(_q$cU8MzY{d*t_798d))kCL(gW>%x-KB8ge&MXTo26S(LvNY?MiSeYF!h@?#H z$f3m*m1b=T+#KxHnhoH!cq_HJZv$vUkw|+e|Dshdxztj?RWMLH@{SxoKtO&i;7voB80hdPrUbpFDOh_|dJUCmU~7CbMDS&FH8 zqhw5x1a%3SL+tfdD)%0=$c8sB-b!=y(#zwmMESQU(Mr(o#aj&}d??;(oNVv>V+NVg z$S<+)z`mch608>K{irs|n|g7}X;*^PEPjxgP;VxC_T(i44<%Sl8=9F9^OcwB?5f{S zkkd;uZ?S_$mAl=63q}2SK;M&Sr8n^{i67Zs8`S3W?Ua=4gf36CS|+~e6b%@!LlJvYJS!2!0-^wn% zFv*H_Si0J2B{lc9m4A^(4J|F07SM(h7)hF5lq_w2EXfLYOwfNP$!Td{ra97N_Fo(5 ztFw}2t?H{sCR>?__ENF4_^%4MKGf}#EvM|9yq5`F)E`k<&PB<9OAv2MMagc`V$C=L zGbp!qIIWf;CfTX)by{%|fmatUcUlP{in8hUbkB2I5e~)ta#>@Y(~1u%37D-zPMNI| z{gcy5iyO;qMVL|gE*6Z{sj?zRlcL@YXX}vnkL$}Vt94YR)S^zBIEi{LRZiuXSysd7 z*~BMCm@Vn(e!bDM+6K>+IGxkVYNXFuR+LOfREjLy9y&M0%588XlT%Nw-INyCE55!V zMJ_?yq*tVvz4OKtD=X?2YNfx9*(d#(VrAIB3rF_rv{WnEKhP`HY7x88)M#JNF!@)s zlBugswZgm?v|@+3XAEd#Uw?&ma0lc`v$Gn-h+dPJJ6HA}TC z&FbVI)v`3Jg?(4YT#$TN?@6=TIF{?bDc3`%rCTW>k1-|9^oqt-oPHzSiqQG#R{daN z?dG^K-HMdFccxob(5esh6|Jo#@-<9ZMZqxBDEX7CifZ==?fcZxBbrZAKe?CDUOePbUv-8DJuzsBA)X{&FPCQt1s_0^57=FYcCZ6MQs zX;oq2+}d_g*R#Yk^v1?knDcrv)z2@Qo?liKcx^=1>#rJHEuA|rsKl31?WB@cqfC0J zDK9+<{7r6OyG|-_b;|CR)43=oXL8rcxvoOFt|TL(%fVjiWtn*=E-+r-lp(EkPfIIA z_i19)%kt-ML~(OcF3)qwc{ayI=Z{nUJWcmak#KGe>pR%8D6YHD@NIKW85 zWNnl7$S)08<#tJeTr=1AHnlQSJ|S1b+DY?gSD$>S_cXOyH8we7@=MF*hI_soN6O(u zzzILs*LCkyD_&O&Ne|56}br#H7^GrqMay`a=3&#@E)%yqz|C&v1d)e$ojdPQ?9F6fAv>~y`hxfPyn z5~A|uTBBUvDK0dLeyIOxE*tl+)Y5{D+tOhztms%1QBUr@6-<*! zmSZQg- ztd_F(GkI&L!n-luL=9#toEd>pZ2a~LXm7)}OFnyBm9;N2g~5PXvNtfbsJ5~ufl;+n zSnl?YWEu7O*XES-;;ZY=kjppTHAh;qT`McoQBMzVWhDjG`$#|B*h+KybEtYB$)wb) zsC3CQIKGBYbA;b0#E`qud2{Z~qhj=k z)>fN%lfy1Nd2XfKJ4Pv-(!?HCasN?=FNr#uruc@)7+xhe-1E<`DzRliq)I-&zVni( zFI~@QV?`#IY~h7fGs@&F(ryYljMR(T$j?%me!Y$CSkvt6J0*L3ni+Y8dwP+aFt~lI ztjtHEZr4`!#Z7hhwo;_2U1YFCMK_fq>bp4mI6yuL-d0X|T2f7dzM{SCSN67*1Jic; zo3>Vq=q&Qm8`*3>I$zAUS8qyEIvznM6D(sX7!nf))btWd{5{X>=<4h+_@?dAC6GV(g5!?LVidAh8l zm6%#EUG5+hN;e!ej70iBo64E`OSPxHl@>Le1iC{@sWAPNL^-a|JKI}1Q6ovAQ?yA5 z&6bqWx_P!7IgHhpWm{SC%<(ZbCjE6bd#2P^Y!=~skd0q$+4O_rs+p=LVqj@2rvoa}UwmhA0x z=MGkSR3%Ys?Wjw&tAmvhHH)ad0Z~@N{zI;m$MJ|id0za`%k$(xI^q+ZrdCsh)v(`S z$$vfZmjuS^?2cBws2hpT_r*)&T8#z{892N~%_CucKtg8J%|xxXqw@759pzTfEky11 zMV;+vB_$6SH)PbvQGG{^9$BLnkbEp4xoOnxL^ZO!t;Eud7&~gfmBU638B`;$O}nC# z)!T8GzPFRr&2f+3-N_o{*sdFOmLurJI=8bm#_^E8tFx8lSf*EXwmLW-)t_{>QXAAr zrLOAWveF9syuL<<=2|(9Rk~ZQTx@twkI$_=UAuDZ(DP3<*6Nwvtn_BSv$wTUmz==b zX9eX|VemkkD&g?43%HGVncNZ&Oj;BU?%i%i@I1LNha2J=QDq{bWY`0RrV&=bd?R{w=PzU=?Vv4NICkg?;bcQfu7*@u_SEt01s^Jf>AbnGDW(o$|D%Z}*X zk93djRz{c|t@eJTQ@dNKL3VVDgbyekOyTp2%>d}BKzVX&J>Ilga^vg%Os)yAt{Wr3P%1we2cR}q%uj=5bY%9`V{zY?{ULE`yM*+Jo>p9vNmO+X z%9ul@%e5nOosQqb7kXN)8rC)O{Fq3GT2_W0`d6tqA(Z%Vxe!|++h?gat)0&9W%YMN z=&D{;clnV0`d(H?N1Xnym(|IUq?3DF>2da^SwFuYKMDiQ*4j=F?JZYI(x@>kf0%2U zyDyzd8JRt)`nKM(OUcwv^|l5DHwxm9FoH-g^A#3Rg3AyDWluVSn zGT>yTmG0TcYLU{4aYTDlea);)gQn}_eXOLk^CKg?SxsZB(;w+y`p8w>d3~*5=~7`@ z+?T^NygFlYG;U;?U9O9l6v`o-x7ix^wOXfi44eR8x-zl$1WZ6~%)Jh8J!-O<8t(JOTGVvkoLP|WL!YnmA)-xv_#s+SpUjOV`fudbEy@QVsfaf zDC2Esv$8TTqxISTR?{Yv0_wZew{4mFYPT(#&D5v!2UsDQE{b?(jVrX?t;`e(mNd6s z(O0gYEFWOi&nyhc+qZVhGkNR#^S1XUsVQWS_04(ZDDQG&`!PjWitg%6mQ-TPk#2tm zr6}lK9fnkl;Y7~Nq(r-PpZ->IxGz@C(B%Uye>W#N?JPDYUIAN}^fMV~wT>yH&S3vZ znLaYmN=>XJGP<^ueF|5pQwLeihnU2W3s2+{b2}DwDCpXu$lcY|(OuNlo#i`Un@eS} zwUznfb@d?m&6}%V8YG7!H|S%7WW}1NGY892{mpvVU`e}0&l+sCbuN$^%u|EXMAg#m zPu4W)SALts>f?iDsqGtVg-Hj_PX}8)l8JSzhdXiz)Y4vEOvks|bo(JzR*ap@1BbG9 z{Iy?CA0mBi7E?cu9#X{gY+I<`A0j)KvMSzvu!LkDW<0+}lc!DeLNmhNCRq-#!Y`Ba zxrMszWpdd5upWPz9H%bUb1st&>H&Q}Ll5c=ms#yXS5oP}xjHq^YEe&qgw-mYm?sUe zMi0reave|Ud3n+f&*-P~tj>+rk@?jw_7tpV;5i+8x%>=A47I|NULfMj^HPafYqEq( zbCnd#kZUh5>0v`HXYg7{)1||##1s>|fvj0wYv;W>sGz*Yt?$XR5|Rq0%1OZMnd8ZxQ*nH&QM;xQ9t+tnEY|tBrhc znAO7CNhHrI(&)pb|BroCvqPfI)Tb8EXuHXE>BYI2z>JXhNLBjI%dO0M(p7ZtL4Eb* zR;!@*59-@4w^~N;C;5Q4a1Xuda;sgCtP($8EzD)kB?}+*Spq@TL4(fhn;G6%EY=wCb zXpS7zyGK|l4y_N5u+rK-NTJtyQm4w7y`HN&KD!{dOKzu5IUPDrcDu5R3bQymtWm!l z)E%y{ng<;_s3%+@*K&>@)HhvWwG29WP_Mm0ZaV&cP=Ch%KM(4NE9KncG&Rea7d02^ z?pMm8;XeoU_$#G-&K}gaTxqq7c6=-wZcwSYF85>MoaFMInbV!ugBUj4Q zhU$=!R{!X5Ni^?nl{zJ9+(=1^(N!bm9l zB?m;7sk-)hq%IpJ#~&HQMvRfetJ3l;lc+NE-Z30lkFr8yO>({bDdnZ6FK-Y1(I_h| zz8Qrgy@l*V>HirvTJB>s(^;dfG;?>!+gT;to6p>|Z>_hEmfJGkuw+fpkBqkJo4cnb zKRs=HCFEDMMrBc=aa0!bew7?}%e?o{zm1mNN)A)u%PYUGH7du{-p3A;n$V$ZXIIw_ z9bB#sxs!_~7rL@)dl{PRW4@X2_Akt(P^#`V%1Wy5i_*)+$Sm8(X}*TCuWNOup_<6m zgXQC8KElSDI~0jyWyjh}_ZcgV(M!9>%7M6DHtf=>BJb$crHsd^hmW`7edD=QzdBZa z8nR_AtTtKgb0=jY?5qiaQNab=@i(oJG)~SUhfrmGGY%5e5T?qhuNh~B$kPK;BunC5 zToN&LdoQq=2)k~*ew&dN;4C0&=<5$(|L zjkns#?XrKyTj`Ce*@jkllg!nhyL7t=vj3l`hflCFS(7*aD$LZ!>x zr?(U07*dra1iLEa-9S=XiO!rPKNYc)t>6YVYPOx`uZ}d!W$L?@q;R==?<$dVKfB*> ziO#*+Y7%pUUCKW$Q={iZb1*4t}TQ zpkVJLt7+1cr7I? z=#(w>7vJ4Nj<71!p{-(F)ijooDm%L@fu-iPhR(VUpq)Qtz7-S@&vF5);gzI$-LP@Qj?=`V#G7b(jHZ=ANJ1JljA*mNhhwP+)O@u1h=42cB)+A1G&6we;otSug zSp7g^U3WQ+CUYknP)f`Z;({g4w_s$~kYEPY&!#T67jFTx3ZxZCLme}vWWs$ZQYzjI zsuLzjCOk07465Hvl1ykoQi2&&f0=Qy+4<6#U)kPJ!8FGLFx%tfkYf;0%dZNwpQ1xTjo@Q|8NRVn-{hHlr+#i!-LQ zFtIAFHs1`_oWOj6&Ct?LQ<(v|i%b4j?)o!Knrf=QEV8V48dc8yRaMFkUp9`xkb1)v83kP|t%s`>^ae%eHK)5_J}R8`VQ z$u!fH8^_K6nWRK?OLx^RyTM_EN_FwPgl=Ya%2HBg9W~3qBSpd1swwNMXuUJYhG$Mli%wvCYqFyBw{s40rQ1t!`t zV}=7d0^SFEtHxSl0D8Tl{Ji&iwDKCf;e52}rCZh#sOj}a@rP9NxckLmfpFsuQV}Bv-?3K5i;*CW>4D z#O6)Af)Rk+(Mw$b4BI*YFedZrWLFKt7Ed*jwJm-M)o3P$0~)u`bM{ew(KLAc&=+h= z<8M%gw4d&3fa#O_)!P*?>%M)163%APSIMmq7!>u;xkN4bPdDI7daj{{V~(XpT7}Z3 z{Y|bOuvfc!h^3rbGaU0=;= z9q%^{2Z*J7;xwEymhrnNS;6;EvWlOfg!7n6B=_^dNMau%K&@t!AXZ69dJgW#OT_^0 z=liF_P;p|K(xkawtUkhbR4UPE>H3zLA)DY=4}Ua&YZ|Y8d0gwEsuYngEIrs0^%8ZH zp_&dAb0s>n^R?4qsM>6(l9Oe|H92e>|7to6U{CY78A$%kM^Lhx-#i0@-NT=vWFJ3@ zB=!KoiJ%edF7r~_teFW#p>l@Oq^Wos{}L~(QU*uALbY4qL{ANh%B3g8Upa5ay3jqKOE)XSHqp;tD`((meMEgX8{^7 zy-R0Kb2U3X&|d^T|OQ2#l~r_NTA;>0&Z>J;3fxdRK6 zH&36Zw2v1b)F#IOpoIp&P=tU8vvCb>C}{?tCRoCSOBlLuF-J+XM^fw7T5IQbRTL)( z2&tCRR-h00B2|0htldd>;%n!@nDFo%IGaZCC+9#mMG^3>0t(+XM`;}|3ZflFX+?+( zl9gUsoL!Wbkq%RexCWZd+s;+mH=6xEjh@BprDT}ENBdfe zRJ&7SyIW%qmEzngN$2hw(OH>LM?uaA@OZfo07S+{jU0oB*sWk*dmip-0 z&{lM9isfTuN6(`c)zu<%*Rrril=|q}&^8j{V&bfs6c63BqcIvC737ZF4u) z38#p9mY!;x(a>==!Xtxu}b5f>VwRRr<%#ByPhFW@JZC^7MR ziMo=&wwg%4gwWen$OkP{y0)Tk>bo$Ml@|jsObfGojv#hZa!pFIof#y+`O1-cq1T!*^8_ zC-4JzD6w{DD_PpCYPO@Ym_pcyGs;c`l8N3xP+AEn&adhQ{ycEE849RYI5Z=%{{aJx zyi@xp1#+UT{Dh}U7<6a(p&9j5HVyA~MQ;o5KyTYzy*aF2j6BW?jF|~5C zxGfNr5oecqb)T`lvrJ;(%mPV3C@G%=cLXN}eAHqkBKn}Qy{w@g)JEXU%Jz<_(n5oo z7IPr;>Z?Ww&N3YX@naXF3NWauL_l5_26mZO-!wvSmJx)ccH$cizpA*r+|`sXTLR?Y zH8zwr)OR)Homq*zflPpWLiC5mrW&DqD4RyQviVCD*5L@ukhpxMMHX*_5K8PrKJE_1 z7HP=V!fQu6Z{%p}uUHQDJikJ(FnESD&^y9@e*aP&|S4A+6hRM*+mP!wicdOd-*2R?eGQFZ6WIFk7U2# z=kJ1rp?|Fs9_cFEfwE|^bH7bZnu#Vd&)Y87>dPbU+XNuCB|d6L6NG}Ryi18`x`kRM z3M8V8Cn9_Yc%^Nz3o_KNRcf&TvQ_}dNu4%Qy*Ana@j>rKluP)EDK?7ufU8(xWh>y7 z%M{k`51KdSS2V2>AQ1bG$lY3 z%7sD95lv-)qc~c`;(kW%0-?tpkU=Q=d=*BjLNT$sdWZXf3E7xKVd5@1> z0f(A|yOrkcL?y7o#ENP7^&G*+<5nuRP9m#D9tVilItaZMoU#|M#N%K?9SV6RjdNh+ zuzM7njMy1P?V}9s#nDTY#`9$>VN`V%sE_<8_ZndBzzhEsE8ywZXN3|G*N%WV$AONt z^GZ8DW`&a4L41xxvGddd6qc^QbjR?mE8qwlL+v|@?&9==hA0zpx^$-%ARP|_O5#0u zX~n38L@)*%3g2ETpji?p3g;|Eh^(5(@4g3i)q2f`F4NF_1KBD+kh41V&Ed zomRm=H=B=M1#4>_pT7#`CphM9T%{z3<@2{zDYfU;~_4I%(RBxvNUWFL>)8)FJ%#)k;G9p=ct0(A)4~%o>QS z?Vs5q+7F|z^dsMfuV15C%n14*!;8y~)FCJ-6>-Mxt~lePs2cqsxS>6ucM2QBE7mAU z!lhmP^#-W1>Q{O|TfSipUW~$N?eH4JP8h!bKowsFYsfp;rFY9D)ow< zUQMuM^z>9~7d6y}>K~LASA8yll5y4DKp7yphXyx}{`I`Y0AHMTl)SQ0Xp4d;YhhP-Lym0$kIP5K_dNOo8 zvFUpcDSg{`j2~a4uAr(ie!K?qRw|i{|7zRQYvS3^2pxEBj=zf>c*=@*0d5h?-DAvi z0wQC~TQP-uH@pla@wIh}ey&BIzn|Lg+vRbj570N+zKa_w2L5t|rGJQ8obe0IIWW)B z=i&YUxwe*I$$<6Nk*NmEoUnWZvR_A_WFUJpC@H*9yFv3PMEr-x-$)3`@c3>Z4bvv$=C?5XfPn~{AH9j1Yk~7?!^KVjPg1_?QKevl z8x4>*jo2Vy*UT>VtA5w_MUzWYI? zd+hV{K}Oe4RrgXxJi4ypXCG8D+P^>rZ5K*r5?`x$;X_Jq`vLm!^((oAIih~#fSI_^E~>_rwBBZN8XAOMpaCfT z1bRvsPEHG^1Jdc^{KR^=TpV7H_!=@ZwcB^j+U`x&pJ^0&+szx$cEtuIj@lxV3S5qC zP?kpsGI;$spYphp-1A*0JjC-5=$o)ndp1L%0D1g4-}^WWC!e}n7za$fL~T^MW}YD= zTB&GOe_YGZu;njC?D3-}a=4VDrk8%9Kk4Nj24eBUh&%owN~XH~fLk80DhP7$p`DnWWZ3oX{qxjmFD_ zH_-)p`YF_&ZrOsK%D2d#kV$G|>Rl1Ez zb)hv}Jw+O_Sc0C;Vzm$c#37H0Nh!&6eGxz9CT4f|)C(>ct>*9>x8gydwT56os-X*u zBqG?!BSwwFPkY{q-?miLUPvfgNLdCV&f&iTyRcl|_FC2@My!34!T3R1qa+!^uil1N zeZ%<5ZAxLRsMBaznX`tvp#ohV=HF~XlsJpj5$6r3=t$hIq;%8TSLyAG9O@6?YK+`C zpR{t*w+o_ucDph@P#O_ap-Zfq9auSahg>;i+-YRT4(Gxx*rC`)#bRb=x#nLCaGonK z{h_?I_#ZKD?|H*z!TuL*LH&X#_iNukFrS}CF}WIpbb0m zR3(QW+NpFO?gxW<4#XtQdS5C$|l+Bf!)z(1a@biQTm5CKh1Xm zA(9#r1Ii|8qRHp{oc_1Kpy@8LV|Ux7*nJCRqeSG7>;f4q-6hEonXX+0D>NQZQsU$V z$VMX<;5T`P@o#o1qp&D>bxOC9CMiOZAbm>_-$G;yAZnZ+HO)!ggaVJ;jeUI>&)BUL z<}5aTs`s+O?xo0elZiiyOXA zVIA9H9MedBHK}v>ROp+oOf2~HKD_@0DyQ}-gL=7Zflf6KM_IwLBJLmD4 zgOVmrAC$8FC4YQS{*p4%*J{j3q;x8LxNFwJJdn?cUzrZ>G}iBBF^n2zvL)jau@V#|mGc?76o?0yUM|JYk{ zD?w&x10N_yzO8ibX;p<>2TCu-8M*Ki-T}kB^LCI7)9)QjXM#tD!6%Y>H@@Rlllt%- zWh*qPMgLI>ds=rkv8y({822tlW16tq9Ogg&M~Un0zPsvzQ6&vP`h#m*8dQJ>-i1EZ z8kp8cpPKuw(%)|f#$zfv82%nQh_7b{sqZPJ2$ZwzJ!MRwry)zXTi(a|9XX+&hA5lV z-t&3Pq)pxVzSuE0y{~i*5reyr0E5Rr*D;`Mw00h|YN6#vggK`cNk~Qk+XrB%@DIRH zP!Nzw^1ZK`2441oR2ldOVgh!5pmZK)r9LZdS=0~jgvOITl+Z8x(4VD%e;Bf*VCzSi z`RtGMnWt=0wCA-qQVn1Hkr?`uA1U20ao4>}gEeKW>ZNI3Z#jxJ$vY~AoXC_@1`C8t zlAFe9LTK+%fzYQ%LpBcla12vYeN3Mc%GPU24j&U3d~;0c+}Enz)_)ELAIIur#Iuh3 zP8+pMD(VcAE2vRXLgTi4gl6KJhB{!#+igVZ88D zrSKXn<9&$(i+1lJWc{~vfVmtdN;0ZixzZOoLLe7>7J$UJeHOUH|CTzauf#w6nUMH> zPJ}G+N1rrFe9G2K;&(eKNPPIokR^Wl=fHr(uT+aD>rLV}|6EA?UPwZc_QmvwF3Y{c0b)z2$*{jhw?+ayU zLz-;wIt^UJz93AtBHQ7#zFd?|QtGiyOg=59YVm2Md!TD)+8N@%#QZn^Qm!2`el~;a zz7*Zod>Qg)u>32`L-berz$u#qQxsidS!IW5J5s+A7%crNq|M;VujFPB^RE3|nAjf|tH6vww>wlFN%qLGC`ENr`RLQTh^VO7MdJg>>(DbzXP3fcG zzCWwozITzg@5qYV_g-L}9A5I9QrduX*6#l#+5`U&V%6t#E&4xY=oMDo*{U9!jxDB) zb@MX`^`ze=7ME%1!r#TU!Is~ZIQJWn4}QnG`8+SxyJKkVX@7#%YW~n!O=P!IR$Mhx zws#^XURr@*2d`~>X?2nF>crFaLhC=3#etePjI#lxu00E+e*9C%LSz%pBHo(SxRG;K zsJd4p39-xm=g_4~zox7={W|WP=(GSyNIKeU=fJ0AMk0Pe#@)^0FWFQ4UrHLp#n`{B z3QJUo3d_rY=;cB?@o)SJ$uM60cc==>r+@oXSQ5`GL+z%!FXJ)`N1=u1m68VJ`iy@h zzZL)EkLw@*$0u%ZH(1@AmH5Vf^-?y{x3SE43A!eX^=J&AL!>Oci;#I&g)xgiR0qEc z@5dkNtuWRwH~E>3n7AP>X~bwtTiA$sqo|XOSOq9*Y-3h(P&Hv5ZzS|f`>=54)%8*yL(hgYTzrSK;I6}thcj^y%Ef|CV~ZWcb^dDwLCT|;j^5Sjtdo&xDEWB-Mo64Uo5HCH13GsEKd(OKjcts40^Xuc%0wL*j zZ#BL%h9&j2UfKIRMHw|V-a3}`A}T@}qSwxI2<&Y(3HE6l8|W8*iq7C%j70q8X8qM=euE-ALTcmi81Ck2 z5I^H_y*$x6>?}658K_VAllWP4K8i6$D?5eBPLSFPV8;*MFY6~}U15~icwajkWcE;T zy*df<$-`@QaAziea0ZJDjJ6|B>Z^f~_v<7_j?`ArJCu?C3<&(=PR#O(2gQ9MM0&&v zY)8hkxBwP^S-iv!sV#g2u*=~e1CZNG4~B5Qa>b!z(zCEc`O;%VEBVmlGGS^$PFR{Q z7l6hkuoO*u2+_9ieIkpEX$hc0;u(n@sy2P>qj?Yr51b|g>1WuS4~cH_@PbPWf#`Bw zBIfk=M5bt&p_s`ti7X)`yTqW*m{gb~syeg8Mwl-l0npj@&a4yQzulQ7gg7DFl2|Ms zl*BYE6J=vG2O77d|B@uJ$vlN5q)|2PB1e_oMUIL@f=&f(B^7j#RM1vZ0U7FZ@blOq z_WPaIFH&2w=A)Ab4%4pOJuWZdMk`v~6~baZX~DXm@cOQv^)G#menX3kB^iyXp6c>( zuE#?_qYaLaPe#u!N(C+`vGK=}*~Qv}tslBz4I8B}da%_og{7FKSG-_2`W>hsrPtyV zArJbDX3<20#IrObAEyW!JckZ7-fTd#(A}w0njp3Dqp1u>Amf41NSZJetm(!E;+}0# zH#VX{FF*En$He~94a^~Kk}2B~@HKJv;Q?2-mtp|GBEEJ$s9cu&?MX9HNtdCBinWiw66 zQVkGN8-KqisA)0(t0$}Qq&%#wAuptBK!GIJLRut<$vD^Acl#tpA`U53#b1>cTHFi33$^e{*a<_tX$@IM&SN_`1L z%!+--43^(F_@!T*AyM0%!IDWp5|NUCJe$Ef`4$c)yar@i@j{7>FUe%XdIlmU_&=E} zhWa0wh2|Mq5*cKY-MkQ83xw*+vRJ1$%K;UaO8R#9au%Bqf^XpXY)ld~8KkxZC>V16 zyuFJ#n9YV^Gi#N@Qq1oLg<$jfZqBzIYCa$~{BG4TS5m;BT-Md+M#UHAik<3kE*s%V zz9r|e&hl`yeHM$&AUY4w*?vu)MCIi?mJrxk!^H8O`bscJZAs3vhD&xBH{cPC@WO6M zUv_Q4?lk>B*98RVFX=+o)$Vnd7k5vk7qWqA?k>9)qE%gB#m#BYd~6jzUC1KL7r0G; zbws|+duD^mY`;TbeEE0m`S*fpNWacn=Qdtn0xrMByZ+UKFp{*Jqq_zaweyywNA}Fk8On+7! zF#pUn^3SgR{)Er({e|$!AHYV0bbdQ908<3AKutQ z+a*B?{1L;f0v{!aZ!?Td$o0FM)<#kU?h+BlQ&;9;E2|uVO|@`1i)iO%;pLHe3{|Tg z&RXh<@i2`qdq}>FmVDVm@+C!e@hPcI3iG+)*3AGVHa=(s_#=l;9l;WY_@q#uJw+Ks z>$@XZ8fnx`MuIP_YjoaNbMQ!3ZZwj-Hd65HnUPlUQWUCqxpq_oiI@GOBz+>ag_DC> z4v!k`(c^)*6Xi(AiF)VffSuHfrf*?%@#be|U?is@dz}#sy@(_-vd+1F3DCXMNGiiasga$V*s? z353#DLv>r1$nO6aYY~9P^XtDPhDn#QA;Ai{wU-7dq*p`-c9)hsqL zhDIc^t&ru#6NLIcYXa~|b}q+tVWMJ*uaoF=~5&+ zxwMESx}T43FA}|MKoUwXYl=lDNNh1$96jUW3cK3%#iFYP#jH1E;`U;e<2lgI*!xrAsFVbXr|ISt5?q#=oA-y7}$xH)C)8$^+_cak=bmce!WB zqE@P0jTAM|)i61z+@{KIo(7npRG(&3tgDebr5-+49WOR4!~wtvV7qKJRpN{k?*pfL z_E}mnRnE^-Qv-tiy9PV?1~$-qCx0P%S@~2l{5%@ib%Qveh3HY#twIj|s)`^N%*&nC z?-eW_f+S{|ha;-+WC-w5W8O50CsN(F=+$ZZejV4=9CwmzOSVeZqmR2@Vo?}t8{?;l zoq_V?ec7@~77_2~9L05~khdy9uO_Dul-LwDKg^H|g)~GLwW=zsD0s9=c&B|_)j&j5 zI8)+^)D}KcD9U%u^hH#k&15}7*@^k!YV?RrZ)Ua2?}^MxJF10U<(=w~y}9VtkPn`v zdvj4XMssL$+w_;t5}W>JB>mi3rQRAGOb27=f-P~j-mA!too&5uYX<7aMH`Exm?2Vy zr<(mK8|Wh>lRMNGv;AHiCeH~`Ra-wtF5P=`SfXF?pnFL5nhP2(G`eu2#KvdMWxc?} z>*uo6kjN=wp2R6FhT2ndi;OxyqNnS6B8N9w zpiftq26Z;9ycN{3bAfJvrR)H@EDy~zo^-2Rn19{MF7|uIc$B6?d)LJG-x`pz+wwNq z5mMWLP9EJE0@+jIZ^vwGy-lADk^SU07HM;NJeYU}J}7H$XV?0Dy5+i;Cf|@XcLe8U zbL4ibcG6@aOSr_R-WbT}PvBmJ-@Z^EJ!NCa3rBdZ8^tAdU;3Dvg^!xb>CcJ8wa5^Y zaf_h&yQZ|>IPz(Wgm@!gA9NodXsSKZ<7Zsoo^#NEm#cd!w|>u-p%Xw$V#@r!rm z6_Z>)C$sKO;9q;Ev^yb_Tx@Bgx+q4wx=fd{!6tXobSWD;V*%Ev`J5uOU9bNITY zq1n0kUs|t7ZAmbEdx~>qqW#IWtdn*WJHHhC_E;@T@noy|81-m4f7P-iU%|6S+!f?0 zdL0^?jZi4D@o(;8i6OY94q9e~TD6RIZ9tdjlglK%AjK`k@_?+h*DaTAk=ppi<*a9e zcsxhnEujv+J4mVafCd1mjel`Bs~P5gG7`4?NQ7Rg!cToxI^T7qdI+ob`e}VXg{a-U zf_eDeozGUVu0&k;YU2s_u!usd{1G~e)0ZEbe74DTB3sHITnKB2s;w(nY(L6cpUBo< zrtG49p-7YJIyKcowmQrIV2| zV2%1*@_srQ)<~iAIaIm#+6|J;j-Nl1>pTS2^`QzlxM=;jy&1*77Mg#^ZZX z=F;tGXqFo&vGG4wha@*HU1NoM>zW3Y8$Yd)T#6L0EqOq4;|4CQtf$eX zDD{3}EgE{i^@z0D?>W$qQF+h(9!zV(V<$k4>hyq|9;CMLZX}ub)CYp(o-ZEo%{`e9 z2FX2((a_92yB}ov`95`ct86yP5vbz-SqnYgV?226;}u;o8D8}CP&(dv* zsthqQRMC7E-l}yC#8AJllQWb2s6ch_qrzBkeUW*u{95;DaI8jG#0u@I zg4?Yp5`#bQEsq7sa_^&|ndKU<50T~AMjtFkANl_EtVIKAy&X2lr5Lz@`T0pp6JxE= znjwXs!-n9!fD0ZElDiH(j-EF^E>F71+~?tpSO1Oc$BlrtZKEeXdv&8!X;CH7$AhwN zPdJZXKhrvuJRw|pWwCf!J{LCb{-V^?mKZO&(eC$4!D!qn-?o75Snk zeeZfl@I5GX!#yVns-UQ1QbB** zCAW(@E9ZsksJj3VrCV#~i$ZbK1@qPJ24A>*3q*G8ZtE>SdEZRhE$%Mw+%3dO-EQlk zUi7=6`xYnNpVbG|#e)u0|HICXXR+8Y&>*#Wy@+l597`B3+!bJm8Yc}=&7^r~oHRty zg{)5(9+M(?<8y3Cyj8ij=w1B8bMn>xb$ght1uoOn1N8Hu1{J*T9+pHF0#pc24|oO* z&8qmRJ;J}n{=9X$UJY@%?gm87wYotsO#j*of-KytA9_W$VsG$)NVe^jypPnz|JVzp z5A%e5tV6`vy>jyN_sL1WejhFbn(yQD_toQ0^%i45wI2W>0O!ODUyv9fwe^AXE=ifv_4~bVM?3cWP)Rw6^Em*18Y8`P69hCafewJi&y?iuX-qKG+cRaxI z;qWl-080qWy!y}q->UL=_#Tw1JpDyX;Di^gk6ch3O0!Yu z*BzNaPO1MKlmv&=#xHp(pi`=8wV!+`IIVci%K`x;Ha_g-;O(mCU-qOEryr8rFTUFN zj6-I->T`$09(?qWH}ChPSJ<33>1nx{Wo5;V+|rC(hodyRE~~=+Mw2$_*+oT}8IF>o z+_b)#r6sv_7oB6_jq5%+#?HpH$t=z;OE1nz&(6xu$;xu{hE(6211N!|2+*y~|+gTw5@8@0|r zC#9unj_ka&Y=R9R%a?!kz}C}ySO55Y?U$=| zoq1qULhs7C316GCn@fet(<3 zB}K(qIi=YdS$#`O();GsHR)?_6c)L<;!cY9eZd8FO)s<;x1a$}8ElWE8CW#fp4qN$ z$5r-G9iq~Ui*p*n2QpVEk*U1DDuUE8LtI3uSlCnqB< zvn02;s3=!dW_NXn-8k($3rnc3ZCO0kQB^f@)=WnceiM5+ez`3_68p!09Qg0iNqoyv QyS=5cr0#>I_M))=2ao+t6#xJL diff --git a/includes/_dict.vp b/includes/_dict.vp index aba807b..b8002e2 100644 --- a/includes/_dict.vp +++ b/includes/_dict.vp @@ -61,7 +61,7 @@ class dict: """Find index of target key; returns __count__ if not found""" for i in range(self.__count__): key_ptr: str | t.CPtr = t.CPtr(t.CUInt64T(self.__keys__) + i * 8) - if key_ptr[0] == key: return i + if string.strcmp(key_ptr[0], key) == 0: return i return self.__count__ def __getitem__(self, key: str) -> t.CPtr: diff --git a/includes/hashtable.vp b/includes/hashtable.vp index 986442c..22086a5 100644 --- a/includes/hashtable.vp +++ b/includes/hashtable.vp @@ -111,7 +111,7 @@ class HashTable: else: if sh == h: sk: str = self._slot_key(idx) - if sk == key: + if string.strcmp(sk, key) == 0: return idx idx = (idx + 1) & mask i += 1 diff --git a/includes/json/__init__.vp b/includes/json/__init__.vp index cc87fd6..b937cea 100644 --- a/includes/json/__init__.vp +++ b/includes/json/__init__.vp @@ -86,7 +86,7 @@ class JsonValue: cur: JsonValue | t.CPtr = self.child while cur != None: if cur.key != None: - if cur.key == key: + if string.strcmp(cur.key, key) == 0: return cur cur = cur.next return None @@ -98,7 +98,7 @@ class JsonValue: cur: JsonValue | t.CPtr = self.child while cur != None: if cur.key != None: - if cur.key == key: + if string.strcmp(cur.key, key) == 0: cur.vtype = val.vtype cur.bool_val = val.bool_val cur.int_val = val.int_val @@ -212,7 +212,7 @@ def object_set(pool: memhub.MemManager | t.CPtr, obj: JsonValue | t.CPtr, key: t cur: JsonValue | t.CPtr = obj.child while cur != None: if cur.key != None: - if cur.key == key: + if string.strcmp(cur.key, key) == 0: cur.vtype = val.vtype cur.bool_val = val.bool_val cur.int_val = val.int_val diff --git a/includes/llvmlite/README.md b/includes/llvmlite/README.md index 6c0a380..9d2e534 100644 --- a/includes/llvmlite/README.md +++ b/includes/llvmlite/README.md @@ -25,7 +25,7 @@ LLVM 类型变体少、无通用字段、字段都是指针/小整数、操作 ### 2.4 对象分配用普通类 + `mpool` -像 `mbuddy` 一样用普通类(无 `__new__`),由调用方注入 `mpool.MPool` 做批量分配。库内部不持有全局 `mbuddy`,遵循项目约定(`_mbuddy` 指针由 `os.py` 或调用方设置)。 +像 `mbuddy` 一样用普通类(无 `__new__`),由调用方注入 `mpool.MPool` 做批量分配。库内部不持有全局 `mbuddy`,遵循项目约定(`_mbuddy` 指针由 `os.vp` 或调用方设置)。 --- @@ -68,22 +68,22 @@ AST 采用"胖节点"设计(所有节点共用一个 `AST` struct,用 `vtype ``` includes/llvmlite/ -├── __init__.py # 公共导出 + 便捷工厂函数 -├── __types.py # LLVMType (REnum) + 类型构造/打印 -├── __values.py # Value/Constant/SSA 值表示 -├── __module.py # Module 容器(函数列表 + 目标三元组 + 输出 .ll) -├── __function.py # Function + BasicBlock + 参数管理 -├── __builder.py # IRBuilder(指令发射 + SSA 命名 + 块跳转) +├── __init__.vp # 公共导出 + 便捷工厂函数 +├── __types.vp # LLVMType (REnum) + 类型构造/打印 +├── __values.vp # Value/Constant/SSA 值表示 +├── __module.vp # Module 容器(函数列表 + 目标三元组 + 输出 .ll) +├── __function.vp # Function + BasicBlock + 参数管理 +├── __builder.vp # IRBuilder(指令发射 + SSA 命名 + 块跳转) └── README.md # 本文件 ``` ### 职责划分 -- `__types.py`:`LLVMType` REnum 定义 + `TypePrint(buf, ty)` 将类型序列化为 IR 文本(如 `i32`/`i32*`/`{i32, i8*}`) -- `__values.py`:`Value` 表示一个 SSA 值(`%0`/`%result`/常量),含类型指针 + 名字 + 是否常量 -- `__module.py`:`Module` 持有函数链表 + 目标三元组 + 数据布局,`ModulePrint` 输出完整 `.ll` -- `__function.py`:`Function` 持有基本块链表 + 参数 + 返回类型;`BasicBlock` 持有指令文本缓冲 -- `__builder.py`:`IRBuilder` 游标式 API,`build_add`/`build_load`/`build_br`/... 发射指令到当前块 +- `__types.vp`:`LLVMType` REnum 定义 + `TypePrint(buf, ty)` 将类型序列化为 IR 文本(如 `i32`/`i32*`/`{i32, i8*}`) +- `__values.vp`:`Value` 表示一个 SSA 值(`%0`/`%result`/常量),含类型指针 + 名字 + 是否常量 +- `__module.vp`:`Module` 持有函数链表 + 目标三元组 + 数据布局,`ModulePrint` 输出完整 `.ll` +- `__function.vp`:`Function` 持有基本块链表 + 参数 + 返回类型;`BasicBlock` 持有指令文本缓冲 +- `__builder.vp`:`IRBuilder` 游标式 API,`build_add`/`build_load`/`build_br`/... 发射指令到当前块 --- @@ -120,7 +120,7 @@ class LLVMType(t.REnum): # (REnum 允许空变体,仅靠 __tag 区分) ``` -### 类型工厂(`__init__.py` 导出) +### 类型工厂(`__init__.vp` 导出) ```python def Int1() -> LLVMType | t.CPtr: ... # i1 @@ -295,7 +295,7 @@ def ModulePrint(mod: Module | t.CPtr, out_path: t.CChar | t.CPtr): ## 12. 与现有架构的对接点 - **`lib/core/Codegen/LLVMCG.py`**:当前用 Python `llvmlite` 生成 IR,自举时改用本库 -- **`includes/viperlib.py`**:提供 `snprintf` / `sprintf` -- **`includes/mpool.py`**:提供 `MPool` 内存池 -- **`includes/string.py`**:提供 `strcpy`/`strlen`/`memcpy` +- **`includes/viperlib.vp`**:提供 `snprintf` / `sprintf` +- **`includes/mpool.vp`**:提供 `MPool` 内存池 +- **`includes/string.vp`**:提供 `strcpy`/`strlen`/`memcpy` - **`includes/ast/`**:参考其"胖节点 + mpool + CEnum 常量"的组织方式(但类型系统用 REnum 而非胖节点) diff --git a/includes/string.vp b/includes/string.vp index b625632..d938d86 100644 --- a/includes/string.vp +++ b/includes/string.vp @@ -63,7 +63,7 @@ def strcmp(str1: str, str2: str) -> t.CInt: return str1[0] - str2[0] def samestr(str1: str, str2: str) -> bool: - return str1 == str2 + return strcmp(str1, str2) == 0 # String compare function with limited length diff --git a/includes/vqt6 copy/README.md b/includes/vqt6 copy/README.md index 614995b..eba4e88 100644 --- a/includes/vqt6 copy/README.md +++ b/includes/vqt6 copy/README.md @@ -10,7 +10,7 @@ ``` +--------------------+ +-----------------------+ +------------+ | Viper 用户代码 | FFI | vqt6 桥接层 (libvqt6) | C++ | Qt6 C++ | -| (app.py) | <----> | - t.State 声明 | <-----> | QtCore | +| (app.vp) | <----> | - t.State 声明 | <-----> | QtCore | | | | - C 桥接函数 | | QtGui | | vqt6.QApplication | | (extern "C") | | QtWidgets | | vqt6.QLabel | | - 静态库 / 动态库 | | QtNetwork | @@ -36,12 +36,12 @@ vqt6 同一套 C 桥接源代码,可同时编译为两种产物。Viper 项目 ``` includes/vqt6/ ├── README.md # 本文件 -├── __init__.py # 公共 Pythonic API(用户使用) -├── _types.py # 公共类型(不透明指针 typedef) -├── _qtcore.py # QtCore 的 t.State FFI 声明 -├── _qtwidgets.py # QtWidgets 的 t.State FFI 声明 -├── _qtgui.py # QtGui 的 t.State FFI 声明 -├── _qtnetwork.py # QtNetwork 的 t.State FFI 声明 +├── __init__.vp # 公共 Pythonic API(用户使用) +├── _types.vp # 公共类型(不透明指针 typedef) +├── _qtcore.vp # QtCore 的 t.State FFI 声明 +├── _qtwidgets.vp # QtWidgets 的 t.State FFI 声明 +├── _qtgui.vp # QtGui 的 t.State FFI 声明 +├── _qtnetwork.vp # QtNetwork 的 t.State FFI 声明 ├── _bridge.h # C 桥接层头文件 ├── _bridge.cpp # C 桥接层实现(extern "C" 包装 Qt6 C++ API) └── CMakeLists.txt # 构建脚本(生成 libvqt6_bridge.a) @@ -50,7 +50,7 @@ includes/vqt6/ ## 使用示例 ```python -# App/main.py +# App/main.vp import t import c import vqt6 diff --git a/includes/vqt6/README.md b/includes/vqt6/README.md index 614995b..eba4e88 100644 --- a/includes/vqt6/README.md +++ b/includes/vqt6/README.md @@ -10,7 +10,7 @@ ``` +--------------------+ +-----------------------+ +------------+ | Viper 用户代码 | FFI | vqt6 桥接层 (libvqt6) | C++ | Qt6 C++ | -| (app.py) | <----> | - t.State 声明 | <-----> | QtCore | +| (app.vp) | <----> | - t.State 声明 | <-----> | QtCore | | | | - C 桥接函数 | | QtGui | | vqt6.QApplication | | (extern "C") | | QtWidgets | | vqt6.QLabel | | - 静态库 / 动态库 | | QtNetwork | @@ -36,12 +36,12 @@ vqt6 同一套 C 桥接源代码,可同时编译为两种产物。Viper 项目 ``` includes/vqt6/ ├── README.md # 本文件 -├── __init__.py # 公共 Pythonic API(用户使用) -├── _types.py # 公共类型(不透明指针 typedef) -├── _qtcore.py # QtCore 的 t.State FFI 声明 -├── _qtwidgets.py # QtWidgets 的 t.State FFI 声明 -├── _qtgui.py # QtGui 的 t.State FFI 声明 -├── _qtnetwork.py # QtNetwork 的 t.State FFI 声明 +├── __init__.vp # 公共 Pythonic API(用户使用) +├── _types.vp # 公共类型(不透明指针 typedef) +├── _qtcore.vp # QtCore 的 t.State FFI 声明 +├── _qtwidgets.vp # QtWidgets 的 t.State FFI 声明 +├── _qtgui.vp # QtGui 的 t.State FFI 声明 +├── _qtnetwork.vp # QtNetwork 的 t.State FFI 声明 ├── _bridge.h # C 桥接层头文件 ├── _bridge.cpp # C 桥接层实现(extern "C" 包装 Qt6 C++ API) └── CMakeLists.txt # 构建脚本(生成 libvqt6_bridge.a) @@ -50,7 +50,7 @@ includes/vqt6/ ## 使用示例 ```python -# App/main.py +# App/main.vp import t import c import vqt6 diff --git a/lib/core/Handles/HandlesExprOps.py b/lib/core/Handles/HandlesExprOps.py index 3c11b00..5002b0b 100644 --- a/lib/core/Handles/HandlesExprOps.py +++ b/lib/core/Handles/HandlesExprOps.py @@ -385,7 +385,7 @@ class ExprOpsHandle(BaseHandle): if isinstance(RightVal, ir.Constant) and RightVal.constant == 0: RightVal = ir.Constant(LeftVal.type, None) else: - # 不将整数转为指针(避免 strcmp 解引用无效地址),改为将指针转为整数走正常 == + # 指针 vs 非零整数: 将指针转为整数走正常 ==(地址值比较) LeftVal = Gen.builder.ptrtoint(LeftVal, RightVal.type, name="ptr2int_cmp") elif isinstance(RightVal.type, ir.PointerType) and isinstance(LeftVal.type, ir.IntType): if isinstance(RightVal.type.pointee, ir.IntType) and RightVal.type.pointee.width == 8 and isinstance(LeftVal.type, ir.IntType) and LeftVal.type.width == 8: @@ -394,7 +394,7 @@ class ExprOpsHandle(BaseHandle): if isinstance(LeftVal, ir.Constant) and LeftVal.constant == 0: LeftVal = ir.Constant(RightVal.type, None) else: - # 不将整数转为指针(避免 strcmp 解引用无效地址),改为将指针转为整数走正常 == + # 非零整数 vs 指针: 将指针转为整数走正常 ==(地址值比较) RightVal = Gen.builder.ptrtoint(RightVal, LeftVal.type, name="ptr2int_cmp") # is / is not: 地址比较(指针)或值比较(int) if ComparatorSymbol in ('is', 'is not'): @@ -408,20 +408,8 @@ class ExprOpsHandle(BaseHandle): if ComparatorSymbol == 'is not': val_cmp = Gen.builder.not_(val_cmp, name="is_not_result") return val_cmp - # str/bytes == str/bytes: 值比较(调用 strcmp),None 比较用地址 - if ComparatorSymbol in ('==', '!='): - if (isinstance(LeftVal.type, ir.PointerType) and isinstance(LeftVal.type.pointee, ir.IntType) and LeftVal.type.pointee.width == 8 - and isinstance(RightVal.type, ir.PointerType) and isinstance(RightVal.type.pointee, ir.IntType) and RightVal.type.pointee.width == 8): - left_is_null: bool = isinstance(LeftVal, ir.Constant) and LeftVal.constant is None - right_is_null: bool = isinstance(RightVal, ir.Constant) and RightVal.constant is None - if not (left_is_null or right_is_null): - strcmp_func = Gen.get_or_declare_c_func('strcmp', ir.FunctionType(ir.IntType(32), [ir.IntType(8).as_pointer(), ir.IntType(8).as_pointer()])) - cmp_result = Gen.builder.call(strcmp_func, [LeftVal, RightVal], name="str_eq_cmp") - zero = ir.Constant(ir.IntType(32), 0) - eq_result = Gen.builder.icmp_signed('==', cmp_result, zero, name="str_eq") - if ComparatorSymbol == '!=': - eq_result = Gen.builder.not_(eq_result, name="str_neq") - return eq_result + # == / !=: 指针间做地址比较(C-Like 语义,不隐式调用 strcmp) + # 如需字符串内容比较,应显式调用 string.strcmp() if isinstance(LeftVal.type, ir.PointerType) and isinstance(RightVal.type, ir.PointerType): result = Gen.builder.icmp_unsigned(ComparatorSymbol, LeftVal, RightVal, name="cmpresult") elif isinstance(LeftVal.type, (ir.FloatType, ir.DoubleType)) or isinstance(RightVal.type, (ir.FloatType, ir.DoubleType)): diff --git a/output/0aee670b21336458.deps.json b/output/0aee670b21336458.deps.json deleted file mode 100644 index a3b21b6..0000000 --- a/output/0aee670b21336458.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/2fc26eea087ef83c.deps.json b/output/2fc26eea087ef83c.deps.json deleted file mode 100644 index 31f67a9..0000000 --- a/output/2fc26eea087ef83c.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/31e49accebfc8aac.deps.json b/output/31e49accebfc8aac.deps.json deleted file mode 100644 index 8f7075c..0000000 --- a/output/31e49accebfc8aac.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/365bda2247672994.deps.json b/output/365bda2247672994.deps.json deleted file mode 100644 index 52923e5..0000000 --- a/output/365bda2247672994.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/456f759a4386bff4.deps.json b/output/456f759a4386bff4.deps.json deleted file mode 100644 index b45d814..0000000 --- a/output/456f759a4386bff4.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/48fa8cc758d3826b.deps.json b/output/48fa8cc758d3826b.deps.json deleted file mode 100644 index 9e75409..0000000 --- a/output/48fa8cc758d3826b.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/4c1a951897705690.deps.json b/output/4c1a951897705690.deps.json deleted file mode 100644 index 5dbc816..0000000 --- a/output/4c1a951897705690.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/50a9a323abc4f8b6.deps.json b/output/50a9a323abc4f8b6.deps.json deleted file mode 100644 index df19570..0000000 --- a/output/50a9a323abc4f8b6.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/51f0144d6e8188d9.deps.json b/output/51f0144d6e8188d9.deps.json deleted file mode 100644 index 5d03332..0000000 --- a/output/51f0144d6e8188d9.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/66de93aaeebc0601.deps.json b/output/66de93aaeebc0601.deps.json deleted file mode 100644 index 86d103a..0000000 --- a/output/66de93aaeebc0601.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/769a4c9b8dda31e0.deps.json b/output/769a4c9b8dda31e0.deps.json deleted file mode 100644 index e542402..0000000 --- a/output/769a4c9b8dda31e0.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/7eebc4cb93b5411e.deps.json b/output/7eebc4cb93b5411e.deps.json deleted file mode 100644 index 1819cf6..0000000 --- a/output/7eebc4cb93b5411e.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/81eb28ba912467a6.deps.json b/output/81eb28ba912467a6.deps.json deleted file mode 100644 index 13d35dd..0000000 --- a/output/81eb28ba912467a6.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/83ba314b4637eec9.deps.json b/output/83ba314b4637eec9.deps.json deleted file mode 100644 index 971bc45..0000000 --- a/output/83ba314b4637eec9.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/888ea5bd6ab516ae.deps.json b/output/888ea5bd6ab516ae.deps.json deleted file mode 100644 index 38cbd64..0000000 --- a/output/888ea5bd6ab516ae.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/8f12094c840be06a.deps.json b/output/8f12094c840be06a.deps.json deleted file mode 100644 index cca78f0..0000000 --- a/output/8f12094c840be06a.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/91deafbda43b7059.deps.json b/output/91deafbda43b7059.deps.json deleted file mode 100644 index e06f2ad..0000000 --- a/output/91deafbda43b7059.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/991fcea935d9abd6.deps.json b/output/991fcea935d9abd6.deps.json deleted file mode 100644 index 7b43fc9..0000000 --- a/output/991fcea935d9abd6.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/9b6b85241ca93967.deps.json b/output/9b6b85241ca93967.deps.json deleted file mode 100644 index bd4ee79..0000000 --- a/output/9b6b85241ca93967.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/a46e7c3dca673846.deps.json b/output/a46e7c3dca673846.deps.json deleted file mode 100644 index c48614b..0000000 --- a/output/a46e7c3dca673846.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/af9484a65085bf4b.deps.json b/output/af9484a65085bf4b.deps.json deleted file mode 100644 index 7b2bbb6..0000000 --- a/output/af9484a65085bf4b.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/b364fabc3464f01d.deps.json b/output/b364fabc3464f01d.deps.json deleted file mode 100644 index 1750ef8..0000000 --- a/output/b364fabc3464f01d.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/b9a78482fe087bf5.deps.json b/output/b9a78482fe087bf5.deps.json deleted file mode 100644 index b63464c..0000000 --- a/output/b9a78482fe087bf5.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/be8c2d7b882881c8.deps.json b/output/be8c2d7b882881c8.deps.json deleted file mode 100644 index 6722538..0000000 --- a/output/be8c2d7b882881c8.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/c2f9cecc28b371d3.deps.json b/output/c2f9cecc28b371d3.deps.json deleted file mode 100644 index 0ac07ad..0000000 --- a/output/c2f9cecc28b371d3.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/cc996d05f2d77de1.deps.json b/output/cc996d05f2d77de1.deps.json deleted file mode 100644 index 7291406..0000000 --- a/output/cc996d05f2d77de1.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/ce731971ddc0446d.deps.json b/output/ce731971ddc0446d.deps.json deleted file mode 100644 index 085e522..0000000 --- a/output/ce731971ddc0446d.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/d1a9872c0f1dcc87.deps.json b/output/d1a9872c0f1dcc87.deps.json deleted file mode 100644 index 4fccb3f..0000000 --- a/output/d1a9872c0f1dcc87.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/d9322f0db660edd8.deps.json b/output/d9322f0db660edd8.deps.json deleted file mode 100644 index 98b0b32..0000000 --- a/output/d9322f0db660edd8.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/da9ba7d2c32b72ad.deps.json b/output/da9ba7d2c32b72ad.deps.json deleted file mode 100644 index 13f19c2..0000000 --- a/output/da9ba7d2c32b72ad.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/ef39899ab2293109.deps.json b/output/ef39899ab2293109.deps.json deleted file mode 100644 index 1b82ebe..0000000 --- a/output/ef39899ab2293109.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/f05b14a2ad5767a7.deps.json b/output/f05b14a2ad5767a7.deps.json deleted file mode 100644 index 44a4cb5..0000000 --- a/output/f05b14a2ad5767a7.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f", "lib.core.Handles.HandlesAnnAssign": "fa1da4500865813e", "HandlesAnnAssign": "fa1da4500865813e"} \ No newline at end of file diff --git a/output/fa1da4500865813e.deps.json b/output/fa1da4500865813e.deps.json deleted file mode 100644 index b3ef064..0000000 --- a/output/fa1da4500865813e.deps.json +++ /dev/null @@ -1 +0,0 @@ -{"w32.fileio": "0035c95a18d4f8e8", "fileio": "0035c95a18d4f8e8", "w32.win32process": "067c78e9f121dce3", "win32process": "067c78e9f121dce3", "w32.win32sync": "06f53cc594b4ac6c", "win32sync": "06f53cc594b4ac6c", "lib.core.Handles.HandlesExpr": "0aee670b21336458", "HandlesExpr": "0aee670b21336458", "ast.lexer": "0c212981c180e7fb", "lexer": "0c212981c180e7fb", "hashlib.__sha1": "0df65b8ed15664b0", "__sha1": "0df65b8ed15664b0", "llvmlite.__types": "15f1ded02f3aa5bc", "__types": "15f1ded02f3aa5bc", "hashlib.__md5": "19f8024d10c828e8", "__md5": "19f8024d10c828e8", "ast.parser": "1c6a2fbc52efb1eb", "parser": "1c6a2fbc52efb1eb", "json.__writer": "20cd49775c100a38", "__writer": "20cd49775c100a38", "llvmlite.__module": "21a7fcfc665f75ef", "__module": "21a7fcfc665f75ef", "json.__parser": "240a9a4157959a9f", "__parser": "240a9a4157959a9f", "atom": "271ea3decb810db2", "linkedlist": "2d39c6c7d3557b3e", "subprocess": "2da636c61863c815", "lib.core.Handles.HandlesAssign": "2fc26eea087ef83c", "HandlesAssign": "2fc26eea087ef83c", "lib.core.Handles.HandlesAugAssign": "31e49accebfc8aac", "HandlesAugAssign": "31e49accebfc8aac", "ast.__init__": "34548789d646f432", "__init__": "96837bcc64032444", "ast": "34548789d646f432", "lib.Projectrans.Config": "365bda2247672994", "Config": "365bda2247672994", "ast.astaux": "4337fb260448bbe2", "astaux": "4337fb260448bbe2", "lib.core.Handles.HandlesType": "456f759a4386bff4", "HandlesType": "456f759a4386bff4", "ast.exprs": "47767b5026a8ee15", "exprs": "47767b5026a8ee15", "lib.core.Handles.HandlesFor": "48fa8cc758d3826b", "HandlesFor": "48fa8cc758d3826b", "lib.core.Handles.HandlesExprCall": "4c1a951897705690", "HandlesExprCall": "4c1a951897705690", "ast.match": "4dd6b3f1427d1cc5", "match": "4dd6b3f1427d1cc5", "lib.core.Handles.HandlesVar": "50a9a323abc4f8b6", "HandlesVar": "50a9a323abc4f8b6", "lib.core.Handles.HandlesWhile": "51f0144d6e8188d9", "HandlesWhile": "51f0144d6e8188d9", "json.__init__": "57288496f7c2d1ad", "json": "57288496f7c2d1ad", "ast.base": "5dab8cb390496d22", "base": "5dab8cb390496d22", "posix": "6503c97dde0c79c4", "ast.stmts": "657e182b27c2a022", "stmts": "657e182b27c2a022", "_list": "668790e6c9efdbae", "lib.core.Handles.HandlesIf": "66de93aaeebc0601", "HandlesIf": "66de93aaeebc0601", "llvmlite.__verify": "6b3bc463fd044545", "__verify": "6b3bc463fd044545", "stdio": "6f62fe05c5ea1ceb", "hashlib.__sha512": "6ff26590374ae6fc", "__sha512": "6ff26590374ae6fc", "stdarg": "71e0a3ffcb3ebfad", "lib.core.IncludesScanner": "769a4c9b8dda31e0", "IncludesScanner": "769a4c9b8dda31e0", "w32.win32base": "7e529fe7a078cfef", "win32base": "7e529fe7a078cfef", "lib.core.StubMerger": "7eebc4cb93b5411e", "StubMerger": "7eebc4cb93b5411e", "lib.core.Handles.HandlesBody": "81eb28ba912467a6", "HandlesBody": "81eb28ba912467a6", "lib.core.Handles.HandlesBase": "83ba314b4637eec9", "HandlesBase": "83ba314b4637eec9", "lib.Projectrans.Utils": "888ea5bd6ab516ae", "Utils": "888ea5bd6ab516ae", "llvmlite.__function": "89b3965176cd2407", "__function": "89b3965176cd2407", "lib.__init__": "8f12094c840be06a", "lib": "8f12094c840be06a", "stdlib": "90c53dd6db8d41cf", "lib.core.VLogger": "91deafbda43b7059", "VLogger": "91deafbda43b7059", "platmacro": "93c1d18e35d188d6", "llvmlite.__builder": "946e087da91aaada", "__builder": "946e087da91aaada", "llvmlite.__init__": "95394ca8da0f655a", "llvmlite": "95394ca8da0f655a", "hashlib.__init__": "96837bcc64032444", "hashlib": "96837bcc64032444", "lib.core.Handles.HandlesStruct": "991fcea935d9abd6", "HandlesStruct": "991fcea935d9abd6", "lib.core.Handles.HandlesImports": "9b6b85241ca93967", "HandlesImports": "9b6b85241ca93967", "lib.core.Phase1": "a46e7c3dca673846", "Phase1": "a46e7c3dca673846", "argparse": "aba439b7882ad9d6", "lib.core.Handles.HandlesNonlocal": "af9484a65085bf4b", "HandlesNonlocal": "af9484a65085bf4b", "lib.core.BuildPipeline": "b364fabc3464f01d", "BuildPipeline": "b364fabc3464f01d", "ast.tokens": "b547ac4f380bddb6", "tokens": "b547ac4f380bddb6", "sys": "b5a965302cded36b", "hashtable": "b8c66c8ff44eb874", "lib.StubGen.Converter": "b9a78482fe087bf5", "Converter": "b9a78482fe087bf5", "string": "ba12ed409d78139e", "w32.win32console": "bbdf3bbd4c3bc28c", "win32console": "bbdf3bbd4c3bc28c", "lib.core.Handles.HandlesExprOps": "be8c2d7b882881c8", "HandlesExprOps": "be8c2d7b882881c8", "main": "c2f9cecc28b371d3", "viperlib": "c3b259b4059f8668", "hashlib.__sha256": "c9d54a4158f7f5a8", "__sha256": "c9d54a4158f7f5a8", "viperio": "c9f4be41ca1cc2b4", "lib.core.Phase2": "cc996d05f2d77de1", "Phase2": "cc996d05f2d77de1", "lib.core.Handles.HandlesMain": "ce731971ddc0446d", "HandlesMain": "ce731971ddc0446d", "memhub": "d089e25a15c6f6e0", "lib.core.Handles.HandlesFunctions": "d1a9872c0f1dcc87", "HandlesFunctions": "d1a9872c0f1dcc87", "lib.core.Handles.HandlesReturn": "d9322f0db660edd8", "HandlesReturn": "d9322f0db660edd8", "lib.core.Handles.HandlesTranslator": "da9ba7d2c32b72ad", "HandlesTranslator": "da9ba7d2c32b72ad", "lib.core.Handles.HandlesClassDef": "ef39899ab2293109", "HandlesClassDef": "ef39899ab2293109", "lib.core.Handles.HandlesEnum": "f05b14a2ad5767a7", "HandlesEnum": "f05b14a2ad5767a7", "stdint": "f5522571bcce7bcb", "w32.win32file": "f6b51804a0ba8ff0", "win32file": "f6b51804a0ba8ff0", "llvmlite.__values": "f9e36e2cd6fa659f", "__values": "f9e36e2cd6fa659f"} \ No newline at end of file diff --git a/wiki/01-overview.md b/wiki/01-overview.md index efec04b..3c00f42 100644 --- a/wiki/01-overview.md +++ b/wiki/01-overview.md @@ -12,7 +12,7 @@ 1. **Python 语法,LLVM 语义**:源文件是完全合法的 `Python` 语法,但通过 `t` 模块的类型注解系统赋予完全不同的语义 —— `t.CInt` 不是 `Python` 的 `int`,而是 `LLVM` 的 `i32` 2. **类型注解即编译指令**:Viper 的类型注解不是可选的提示,而是编译器生成 `LLVM IR` 的决定性依据。`x: t.CInt` 生成 `i32`,`x: t.CInt | t.CPtr` 生成 `i32*`,但无注解时会自动推导,详见下文。 -3. **两阶段编译**:先从源文件提取声明接口(`.pyi` + `.stub.ll`),再使用声明接口翻译源文件为含代码的 `.ll`。这是 `Viper` 区别于简单"`Python` 转 `C`"工具的关键架构 +3. **两阶段编译**:先从源文件提取声明接口(`.vpi` + `.stub.ll`),再使用声明接口翻译源文件为含代码的 `.ll`。这是 `Viper` 区别于简单"`Python` 转 `C`"工具的关键架构 4. **`SHA1` 命名空间**:每个源文件按内容 `SHA1` 哈希命名,非导出函数和结构体自动加上 `SHA1` 前缀,从根本上消除跨模块的符号冲突 5. **万物皆数据**:为便于底层开发,实际上所有的变量和类型一般并不适用于鸭子类型,但在语义层面我们会尽可能贴近鸭子类型。 @@ -37,7 +37,7 @@ Viper 编译后的代码在底层等价于 `C` 编译后的机器码(都经过 - **声明式内联汇编**:`c.Asm(f"mov {c.AsmOut(x, t.ASM_DESCR.OUTPUT_REG)}, rdi")` 比裸 `__asm__` 更安全,也更具可读性。 - **结构化预处理**:`c.CIfdef`/`c.CEndif()` 替代 `#ifdef`/`#endif`。 - **面向对象**:`@t.Object` + `@t.CVTable` 提供 `vtable` 支持的多态 `OOP`;`@t.NoVTable` 提供 C++ 风格的非多态继承(零 vtable 开销);PEP 695 泛型 + 递归泛型继承实现强类型自引用结构 -- **存根驱动的模块系统**:`.pyi` 存根文件实现跨模块类型解析,无需头文件 +- **存根驱动的模块系统**:`.vpi` 存根文件实现跨模块类型解析,无需头文件 - **更多内容**:额外更多的不依赖操作系统的函数和语法 ## 两阶段编译流程 @@ -45,12 +45,12 @@ Viper 编译后的代码在底层等价于 `C` 编译后的机器码(都经过 Viper 的编译由 `Projectrans.py` 驱动,分为两个阶段。这是 Viper 编译模型的核心,理解两阶段编译是理解 `t.CDefine`、`t.CExport`、`t.CInline` 等关键概念的前提。 ``` -源文件 (.py) ────────────────────────────────────────────────────── +源文件 (.vp) ────────────────────────────────────────────────────── │ │ │ ┌─────────────── 阶段一:声明提取 ───────────────┐ │ │ │ │ │ │ │ 1. 计算源文件 SHA1 │ │ - │ │ 2. 生成 .pyi(签名存根) │ │ + │ │ 2. 生成 .vpi(签名存根) │ │ │ │ 3. 构建结构体注册表 │ │ │ │ 4. 生成 .stub.ll(LLVM IR 声明) │ │ │ │ │ │ @@ -58,7 +58,7 @@ Viper 的编译由 `Projectrans.py` 驱动,分为两个阶段。这是 Viper │ │ │ ┌─────────────── 阶段二:代码翻译 ───────────────┐ │ │ │ │ │ - │ │ 1. 加载所有 .pyi 和 .stub.ll │ │ + │ │ 1. 加载所有 .vpi 和 .stub.ll │ │ │ │ 2. 构建共享符号表 │ │ │ │ 3. 收集内联函数符号 │ │ │ │ 4. 翻译源文件 → .ll(含代码) │ │ @@ -76,15 +76,15 @@ Viper 的编译由 `Projectrans.py` 驱动,分为两个阶段。这是 Viper #### 步骤 1:可达文件发现与拓扑排序 -从入口文件(`main.py` 或 `project.json` 指定)出发,通过 `import` 语句递归遍历,找出所有可达的 `.py` 源文件。然后对文件进行拓扑排序,确保被依赖的模块先被处理。 +从入口文件(`main.vp` 或 `project.json` 指定)出发,通过 `import` 语句递归遍历,找出所有可达的 `.vp` 源文件。然后对文件进行拓扑排序,确保被依赖的模块先被处理。 ``` -main.py → import serial → import drivers.serial.uart.serial → ... +main.vp → import serial → import drivers.serial.uart.serial → ... ``` -#### 步骤 2:生成 `.pyi` 签名存根 +#### 步骤 2:生成 `.vpi` 签名存根 -对每个源文件,计算其内容的 SHA1 哈希(16位),然后调用 `PythonToStubConverter` 生成签名存根文件 `.pyi`。 +对每个源文件,计算其内容的 SHA1 哈希(16位),然后调用 `PythonToStubConverter` 生成签名存根文件 `.vpi`。 **SHA1 计算方式**: ```python @@ -108,7 +108,7 @@ sha1 = hashlib.sha1(content.encode('utf-8')).hexdigest()[:16] #### 步骤 3:构建结构体注册表 -扫描所有已生成的 `.pyi` 文件,提取: +扫描所有已生成的 `.vpi` 文件,提取: - **结构体名称集合**:所有非枚举、非异常的 `class` 定义 - **枚举名称集合**:继承 `t.CEnum` 的类 - **异常名称集合**:继承 `Exception` 的类 @@ -118,7 +118,7 @@ sha1 = hashlib.sha1(content.encode('utf-8')).hexdigest()[:16] #### 步骤 4:生成 `.stub.ll` LLVM IR 声明 -对每个 `.pyi` 文件,由 `DeclarationGenerator` 生成对应的 LLVM IR 声明文件 `.stub.ll`。 +对每个 `.vpi` 文件,由 `DeclarationGenerator` 生成对应的 LLVM IR 声明文件 `.stub.ll`。 **声明生成规则**: @@ -132,7 +132,7 @@ sha1 = hashlib.sha1(content.encode('utf-8')).hexdigest()[:16] | `t.CTypedef` 别名 | **不生成声明**(类型别名,在类型解析时展开) | | 枚举 | 为每个枚举成员生成 `@__config_EnumName_member = external global i32` | -**增量编译**:如果 `.pyi` 或 `.stub.ll` 已存在,则跳过生成(缓存命中)。只有源文件内容变化导致 SHA1 变化时才重新生成。 +**增量编译**:如果 `.vpi` 或 `.stub.ll` 已存在,则跳过生成(缓存命中)。只有源文件内容变化导致 SHA1 变化时才重新生成。 ### 阶段二:代码翻译(Phase2Translator) @@ -140,14 +140,14 @@ sha1 = hashlib.sha1(content.encode('utf-8')).hexdigest()[:16] #### 步骤 1:加载声明接口 -加载 `temp/` 目录中所有的 `.pyi` 和 `.stub.ll` 文件,构建: -- `sig_files`:SHA1 → `.pyi` 文件路径映射 +加载 `temp/` 目录中所有的 `.vpi` 和 `.stub.ll` 文件,构建: +- `sig_files`:SHA1 → `.vpi` 文件路径映射 - `stub_files`:SHA1 → `.stub.ll` 文件路径映射 - `sha1_map`:SHA1 → 源文件相对路径映射 #### 步骤 2:构建共享符号表 -一次性构建所有文件共享的符号表数据,避免每个文件重复加载。将所有 `.pyi` 存根和 `.stub.ll` 声明中的类型信息注册到统一的 `SymbolTable` 中。 +一次性构建所有文件共享的符号表数据,避免每个文件重复加载。将所有 `.vpi` 存根和 `.stub.ll` 声明中的类型信息注册到统一的 `SymbolTable` 中。 #### 步骤 3:收集内联函数符号 @@ -179,20 +179,20 @@ SHA1 命名空间是 Viper 解决跨模块符号冲突的核心机制。 Viper 使用源文件内容的 SHA1 哈希作为命名空间前缀: ``` -源文件 A.py(SHA1 = a1b2c3d4e5f6g7h8)中定义: +源文件 A.vp(SHA1 = a1b2c3d4e5f6g7h8)中定义: class Point: x: t.CInt; y: t.CInt def draw(p: Point) -> t.CVoid: ... -源文件 B.py(SHA1 = i9j0k1l2m3n4o5p6)中也定义: +源文件 B.vp(SHA1 = i9j0k1l2m3n4o5p6)中也定义: class Point: x: t.CFloat; y: t.CFloat # 不同的结构体! def draw(p: Point) -> t.CVoid: ... 编译后: - A.py 的结构体 → %"a1b2c3d4e5f6g7h8.Point" = type { i32, i32 } - A.py 的函数 → declare void @"a1b2c3d4e5f6g7h8.draw"(%"a1b2c3d4e5f6g7h8.Point"*) + A.vp 的结构体 → %"a1b2c3d4e5f6g7h8.Point" = type { i32, i32 } + A.vp 的函数 → declare void @"a1b2c3d4e5f6g7h8.draw"(%"a1b2c3d4e5f6g7h8.Point"*) - B.py 的结构体 → %"i9j0k1l2m3n4o5p6.Point" = type { float, float } - B.py 的函数 → declare void @"i9j0k1l2m3n4o5p6.draw"(%"i9j0k1l2m3n4o5p6.Point"*) + B.vp 的结构体 → %"i9j0k1l2m3n4o5p6.Point" = type { float, float } + B.vp 的函数 → declare void @"i9j0k1l2m3n4o5p6.draw"(%"i9j0k1l2m3n4o5p6.Point"*) ``` **没有符号冲突**——即使两个模块定义了同名类型和函数,它们的 LLVM IR 符号也是不同的。即便有两个内容完全相同的文件也不会冲突,他们会被识别为同一个文件,然后进行单次编译。 @@ -202,7 +202,7 @@ Viper 使用源文件内容的 SHA1 哈希作为命名空间前缀: 标记为 `t.CExport` 的函数**不加 SHA1 前缀**,保持原始函数名。这是模块向外部暴露 API/ABI 的机制: ```python -# main.py — 入口函数,必须全局可见 +# main.vp — 入口函数,必须全局可见 def main() -> t.CInt | t.CExport: return 0 @@ -210,7 +210,7 @@ def main() -> t.CInt | t.CExport: ``` ```python -# serial.py — 驱动接口,对外暴露 +# serial.vp — 驱动接口,对外暴露 def init() -> t.CVoid | t.CExport: serial_puts("init\n") @@ -220,7 +220,7 @@ def init() -> t.CVoid | t.CExport: ### SHA1 与增量编译 SHA1 同时服务于增量编译: -- 源文件内容不变 → SHA1 不变 → `.pyi` 和 `.stub.ll` 缓存命中,跳过阶段一 +- 源文件内容不变 → SHA1 不变 → `.vpi` 和 `.stub.ll` 缓存命中,跳过阶段一 - 源文件内容变化 → SHA1 变化 → 重新生成声明接口 - `temp/_sha1_map.txt` 记录 SHA1 → 源文件路径的映射,供阶段二加载 @@ -305,7 +305,7 @@ def _helper() -> t.CInt: ### `t.CExport` 在存根中的表现 -在 `.pyi` 存根文件中,`t.CExport` 函数与普通函数一样只保留签名(添加 `c.State`,表示单纯声明),但 `t.CExport` 标记被保留在返回类型注解中。阶段一的 `DeclarationGenerator` 检查 `t.CExport` 标记来决定是否添加 SHA1 前缀。 +在 `.vpi` 存根文件中,`t.CExport` 函数与普通函数一样只保留签名(添加 `c.State`,表示单纯声明),但 `t.CExport` 标记被保留在返回类型注解中。阶段一的 `DeclarationGenerator` 检查 `t.CExport` 标记来决定是否添加 SHA1 前缀。 ## `t.CInline` 深度解析 @@ -351,7 +351,7 @@ def main() -> t.CInt | t.CExport: 编译流程: -1. **阶段一**:计算 `main.py` 的 SHA1,生成 `.pyi` 存根(`def main() -> t.CInt | t.CExport | c.State: pass`),生成 `.stub.ll` 声明(`declare i32 @main()`,因为是 CExport 不加前缀) -2. **阶段二**:翻译 `main.py` 为 `.ll`,嵌入 `print` 对应的 `puts`/`printf` 声明,生成 `define i32 @main()` 函数体 +1. **阶段一**:计算 `main.vp` 的 SHA1,生成 `.vpi` 存根(`def main() -> t.CInt | t.CExport | c.State: pass`),生成 `.stub.ll` 声明(`declare i32 @main()`,因为是 CExport 不加前缀) +2. **阶段二**:翻译 `main.vp` 为 `.ll`,嵌入 `print` 对应的 `puts`/`printf` 声明,生成 `define i32 @main()` 函数体 3. **编译**:`llc` 将 `.ll` 编译为 `.o` 4. **链接**:`ld.lld` 链接为可执行文件 diff --git a/wiki/05-classes.md b/wiki/05-classes.md index 231beab..9217369 100644 --- a/wiki/05-classes.md +++ b/wiki/05-classes.md @@ -200,7 +200,7 @@ match ty: string.strcpy(buf, "void") ``` -详见 [includes/llvmlite/__types.py](../includes/llvmlite/__types.py) 的 `LLVMType` 实现。 +详见 [includes/llvmlite/__types.vp](../includes/llvmlite/__types.vp) 的 `LLVMType` 实现。 ## Typedef @@ -258,7 +258,7 @@ node: GNode | t.CPtr = GNode() lst.append(node) # 类型安全:append 只接受 GNode ``` -详见 [includes/linkedlist.py](../includes/linkedlist.py) 和 [includes/vector.py](../includes/vector.py)。 +详见 [includes/linkedlist.vp](../includes/linkedlist.vp) 和 [includes/vector.vp](../includes/vector.vp)。 ## 位域 diff --git a/wiki/10-imports.md b/wiki/10-imports.md index 0324803..8aed548 100644 --- a/wiki/10-imports.md +++ b/wiki/10-imports.md @@ -152,7 +152,7 @@ func: Function | t.CPtr = mod_core.CreateFunction(mod, "main", ret_ty) ### `linkedlist` 模块(NoVTable + PEP 695 泛型示范) -[includes/linkedlist](../includes/linkedlist.py) 提供链表实现,是 `@t.NoVTable` 非多态继承和 PEP 695 递归泛型继承的典范用例: +[includes/linkedlist](../includes/linkedlist.vp) 提供链表实现,是 `@t.NoVTable` 非多态继承和 PEP 695 递归泛型继承的典范用例: ```python from linkedlist import LinkedNode, GSList @@ -193,14 +193,14 @@ handle: HANDLE = CreateFileA("test.txt", GENERIC_READ, FILE_SHARE_READ, Viper 的 `import` 是编译时操作,不涉及运行时模块加载。完整的模块解析流程与两阶段编译紧密耦合: 1. **阶段一**:从入口文件出发,通过 `import` 语句递归发现所有可达的源文件 -2. **阶段一**:对每个源文件生成 `.pyi` 签名存根和 `.stub.ll` LLVM IR 声明 -3. **阶段二**:加载所有 `.pyi` 和 `.stub.ll`,构建共享符号表 +2. **阶段一**:对每个源文件生成 `.vpi` 签名存根和 `.stub.ll` LLVM IR 声明 +3. **阶段二**:加载所有 `.vpi` 和 `.stub.ll`,构建共享符号表 4. **阶段二**:翻译源文件时,通过符号表解析跨模块的类型和函数引用 5. **阶段二**:将被引用模块的 `.stub.ll` 声明嵌入到生成的 `.ll` 文件头部 -### 类型存根文件(.pyi) +### 类型存根文件(.vpi) -`.pyi` 文件是模块的声明接口,由 `PythonToStubConverter` 在阶段一生成。存根文件的内容规则: +`.vpi` 文件是模块的声明接口,由 `PythonToStubConverter` 在阶段一生成。存根文件的内容规则: | 元素 | 存根表示 | |------|---------| @@ -228,7 +228,7 @@ Viper 的 `import` 是编译时操作,不涉及运行时模块加载。完整 ### 跨模块类型引用 ```python -# 在 fat32_types.py 中定义 +# 在 fat32_types.vp 中定义 class fat32_fileinfo: fname: list[t.CChar, 13] attr: t.CUInt8T diff --git a/wiki/12-project.md b/wiki/12-project.md index f289240..854f007 100644 --- a/wiki/12-project.md +++ b/wiki/12-project.md @@ -47,7 +47,7 @@ Viper 项目使用 `project.json` 配置文件管理编译和链接参数。 | `name` | string | 项目名称 | | `version` | string | 项目版本 | | `source_dir` | string | 源代码目录(相对于 project.json 所在目录) | -| `temp_dir` | string | 临时文件目录(存放 .pyi 存根等) | +| `temp_dir` | string | 临时文件目录(存放 .vpi 存根等) | | `output_dir` | string | 输出文件目录 | ### 编译器配置 @@ -122,12 +122,12 @@ VKernel/ ├── project.json # 项目配置 ├── linker.ld # 链接脚本 ├── Kernel/ # 源代码目录 -│ ├── main.py # 内核入口 -│ ├── bootinfo.py +│ ├── main.vp # 内核入口 +│ ├── bootinfo.vp │ ├── intr/ -│ │ ├── gdt.py -│ │ ├── idt.py -│ │ └── syscall.py +│ │ ├── gdt.vp +│ │ ├── idt.vp +│ │ └── syscall.vp │ ├── drivers/ │ │ ├── serial/ │ │ ├── video/ @@ -135,7 +135,7 @@ VKernel/ │ │ └── ... │ └── ... ├── temp/ # 临时文件(自动生成) -│ ├── .pyi # 签名存根(阶段一生成) +│ ├── .vpi # 签名存根(阶段一生成) │ ├── .stub.ll # LLVM IR 声明(阶段一生成) │ └── _sha1_map.txt # SHA1→源文件路径映射 └── output/ # 输出文件(自动生成) @@ -150,7 +150,7 @@ VKernel/ HelloWorld/ ├── project.json # 项目配置 ├── linker.ld # 链接脚本 -├── main.py # 应用入口 +├── main.vp # 应用入口 ├── temp/ # 临时文件 └── output/ # 输出文件 └── helloworld.elf # ELF 可执行文件 @@ -162,7 +162,7 @@ HelloWorld/ SerialLogger/ ├── project.json # 项目配置 ├── linker.ld # 链接脚本 -├── serial_logger.py # 库源码 +├── serial_logger.vp # 库源码 ├── temp/ # 临时文件 └── output/ # 输出文件 ``` @@ -233,14 +233,14 @@ TransPyC 支持基于 SHA1 的增量编译,与两阶段编译模型紧密耦 ### 阶段一增量 - 每个源文件按内容计算 SHA1 哈希(16位) -- 如果 `.pyi` 和 `.stub.ll` 已存在,则跳过生成(缓存命中) +- 如果 `.vpi` 和 `.stub.ll` 已存在,则跳过生成(缓存命中) - 只有源文件内容变化导致 SHA1 变化时才重新生成声明接口 - `temp/_sha1_map.txt` 记录 SHA1 → 源文件路径的映射,格式为 `:` ### 阶段二增量 - 阶段二加载 `temp/_sha1_map.txt` 重建 SHA1 映射 -- 过滤掉不在当前 SHA1 映射中的旧 `.pyi` 和 `.stub.ll` 文件 +- 过滤掉不在当前 SHA1 映射中的旧 `.vpi` 和 `.stub.ll` 文件 - 共享符号表一次性构建,避免每个文件重复加载 ### SHA1 命名空间与增量编译的协同 diff --git a/wiki/13-bootstrapping.md b/wiki/13-bootstrapping.md index acddd9d..e5cfe83 100644 --- a/wiki/13-bootstrapping.md +++ b/wiki/13-bootstrapping.md @@ -57,19 +57,19 @@ | 模块 | LOC | 说明 | |------|-----|------| -| `includes/numpy/__init__.py` | 1,016 | ndarray n 维数组 | +| `includes/numpy/__init__.vp` | 1,016 | ndarray n 维数组 | | `includes/zlib/` | ~1,900 | 完整 deflate/inflate/huffman/checksum | | `includes/ast/` | 4,176 | **自研 Python 解析器(自举组件)** | | `includes/llvmlite/` | ~1,500 | **自研 LLVM IR 生成库(自举组件)** | -| `includes/linkedlist.py` | ~400 | 泛型链表(@t.NoVTable + PEP 695) | -| `includes/vipermath.py` | 450 | 数学库 | +| `includes/linkedlist.vp` | ~400 | 泛型链表(@t.NoVTable + PEP 695) | +| `includes/vipermath.vp` | 450 | 数学库 | | ...(30+ 文件) | ... | mpool/mbuddy/string/stdio/json/w32 等 | | **includes 总计** | **~12,000** | | ### 2.4 全项目总计 ``` -全项目 .py 总计:~48,000 LOC +全项目总计:~48,000 LOC ``` **自举相关核心数字:** @@ -87,10 +87,10 @@ | 文件 | LOC | 功能 | |------|-----|------| -| `__tokens.py` | ~600 | TokenType/Keyword/TokOp 枚举 + 查找表 | -| `__nodes.py` | ~1,400 | AST 胖节点 + ASTVType/ASTCtx/OpKind CEnum | -| `__lexer.py` | ~800 | 词法分析器 | -| `__parser.py` | 4,176(含表格) | 递归下降语法分析器 | +| `__tokens.vp` | ~600 | TokenType/Keyword/TokOp 枚举 + 查找表 | +| `__nodes.vp` | ~1,400 | AST 胖节点 + ASTVType/ASTCtx/OpKind CEnum | +| `__lexer.vp` | ~800 | 词法分析器 | +| `__parser.vp` | 4,176(含表格) | 递归下降语法分析器 | **覆盖语法**:装饰器、async/await、match(含复杂模式 `[x,*rest]`/`{'type':t,**rest}`/`Point(x,y)`/`0|1|2`)、try/except/finally/raise from、with、lambda、列表/集合/字典/生成器推导式、f-string(含 `!r`/`!s` 转换和 `:>{width}` 格式说明)、链式比较、walrus、yield from、global/nonlocal、切片、嵌套三元。 @@ -105,11 +105,11 @@ | 文件 | 功能 | |------|------| -| `__types.py` | `LLVMType` REnum + 类型构造/打印 | -| `__values.py` | Value/Constant/SSA 值表示 | -| `__function.py` | Function + BasicBlock + 参数管理 | -| `__module.py` | Module 容器 + 目标三元组 + 输出 .ll | -| `__builder.py` | IRBuilder(指令发射 + SSA 命名) | +| `__types.vp` | `LLVMType` REnum + 类型构造/打印 | +| `__values.vp` | Value/Constant/SSA 值表示 | +| `__function.vp` | Function + BasicBlock + 参数管理 | +| `__module.vp` | Module 容器 + 目标三元组 + 输出 .ll | +| `__builder.vp` | IRBuilder(指令发射 + SSA 命名) | **设计要点**: - `LLVMType` 用 `t.REnum`(tagged union)—— 少变体、无通用字段、match 分派的理想场景 @@ -117,7 +117,7 @@ - IR 文本生成用 `viperlib.snprintf` 格式化,避免手写逐字符拼接 - 对象分配用普通类 + `mpool`,不持有全局 `mbuddy` -**验证**:[TransPyV/App/main.py](../TransPyV/App/main.py) 10 个测试覆盖类型打印、值打印、build_add、if-else、模块打印、lli 实际执行。TransPyV 程序运行时自己生成合法 IR,被 `lli` 成功执行。 +**验证**:[TransPyV/App/main.vp](../TransPyV/App/main.vp) 10 个测试覆盖类型打印、值打印、build_add、if-else、模块打印、lli 实际执行。TransPyV 程序运行时自己生成合法 IR,被 `lli` 成功执行。 ### 3.3 ✅ 基础设施库 @@ -125,9 +125,9 @@ | 库 | 自举中的作用 | |----|-------------| -| `linkedlist.py` | AST 节点树、符号表链、IR 指令链的容器(`@t.NoVTable` + PEP 695 递归泛型继承) | -| `mpool.py` / `mbuddy.py` | 编译器内存管理(替代 Python GC) | -| `string.py` / `viperlib.py` | 字符串处理 + snprintf(替代 Python 字符串方法) | +| `linkedlist.vp` | AST 节点树、符号表链、IR 指令链的容器(`@t.NoVTable` + PEP 695 递归泛型继承) | +| `mpool.vp` / `mbuddy.vp` | 编译器内存管理(替代 Python GC) | +| `string.vp` / `viperlib.vp` | 字符串处理 + snprintf(替代 Python 字符串方法) | | `w32/` | FFI 声明,自举后编译器调用 llc/clang/linker 的基础 | | `json/` | 符号表序列化(替代 pickle) | @@ -164,7 +164,7 @@ | `copy.deepcopy` / `pickle` | ~10 | ✅ 是 | 已解决(`__getstate__/__setstate__`) | | `hasattr` 防御性检查 | ~1500 | ⚠️ 多数可消除 | 显式字段声明 + None 检查 | -**真实反射障碍约 200-500 处**,集中体现在 `CTypeInfo` 门面模式(FIELD_ROUTES 动态路由到 `_ts`/`_sm`)。重构方案:用 REnum + match 替换 `__getattr__` 路由,已在 `includes/llvmlite/__types.py` 验证此范式可行。 +**真实反射障碍约 200-500 处**,集中体现在 `CTypeInfo` 门面模式(FIELD_ROUTES 动态路由到 `_ts`/`_sm`)。重构方案:用 REnum + match 替换 `__getattr__` 路由,已在 `includes/llvmlite/__types.vp` 验证此范式可行。 ### 4.4 Python 标准库依赖(原:严重)→ ⚠️ 部分已解决 @@ -204,9 +204,9 @@ 以下能力已在 includes/ 库中验证,证明 TransPyC 能承载编译器复杂度: -- **复杂泛型容器**:`linkedlist.py` 的递归泛型继承 `class GNode(GSListNode[GNode])`(C/C++/Rust 均无法如此简洁表达) +- **复杂泛型容器**:`linkedlist.vp` 的递归泛型继承 `class GNode(GSListNode[GNode])`(C/C++/Rust 均无法如此简洁表达) - **复杂算法**:`zlib/` 的完整 deflate/inflate/huffman(~1,900 LOC 生产级压缩) -- **n 维数组**:`numpy/__init__.py` 的 ndarray + 运算符重载 + `__new__` 堆分配 +- **n 维数组**:`numpy/__init__.vp` 的 ndarray + 运算符重载 + `__new__` 堆分配 - **平台 FFI**:`w32/` 的 Win32 API 绑定(file/memory/process/sync/console) - **LLVM IR 生成**:`llvmlite/` 的 REnum 类型系统 + IRBuilder + ModulePrint diff --git a/wiki/all.md b/wiki/all.md deleted file mode 100644 index 4b80528..0000000 --- a/wiki/all.md +++ /dev/null @@ -1,3555 +0,0 @@ -# 01 - 语言概述与编译流程 - -## 语言定位 - -`Viper` 是一种 **系统级编程语言**,其语法基于 `Python`,但编译目标为 `LLVM IR`,最终生成原生机器码。`Viper` 不是 `Python` 的超集或子集,也不是"`C` 的语法糖"——它是一门拥有独立类型系统、独立编译模型、独立模块体系的语言。`Viper` 选择 `Python` 语法作为表达形式,是因为 `Python` 的 `AST` 可被标准库直接解析,从而将编译器的精力集中在语义翻译而非词法/语法分析上。同时也是因为 `Python` 是人类公认的可读性最高的语言。 - -而实际上,下文中所有提到的 `C` 语言都是为了便于使用 `C` 的底层开发者理解。由于历史原因,在旧版本中我们使用 `C` 来作为中间语言,如同旧版本的 `C++` 一样,但现在 `target="c"` 的路径已经完全删除,`C` 路径永久不再受维护。 - -### 核心设计决策 - -1. **Python 语法,LLVM 语义**:源文件是完全合法的 `Python` 语法,但通过 `t` 模块的类型注解系统赋予完全不同的语义 —— `t.CInt` 不是 `Python` 的 `int`,而是 `LLVM` 的 `i32` -2. **类型注解即编译指令**:Viper 的类型注解不是可选的提示,而是编译器生成 `LLVM IR` 的决定性依据。`x: t.CInt` 生成 `i32`,`x: t.CInt | t.CPtr` 生成 `i32*`,但无注解时会自动推导,详见下文。 -3. **两阶段编译**:先从源文件提取声明接口(`.pyi` + `.stub.ll`),再使用声明接口翻译源文件为含代码的 `.ll`。这是 `Viper` 区别于简单"`Python` 转 `C`"工具的关键架构 -4. **`SHA1` 命名空间**:每个源文件按内容 `SHA1` 哈希命名,非导出函数和结构体自动加上 `SHA1` 前缀,从根本上消除跨模块的符号冲突 -5. **万物皆数据**:为便于底层开发,实际上所有的变量和类型一般并不适用于鸭子类型,但在语义层面我们会尽可能贴近鸭子类型。 - -### 与 `Python` 的关系 - -| 特性 | `Python` | `Viper` | -|------|--------|-------| -| 类型系统 | 动态类型 | 静态类型(通过 `t` 模块注解,编译时确定) | -| 内存管理 | `GC` 自动回收 | 手动管理,无 `GC`,无运行时 | -| 运行时 | 解释执行 + 字节码 | 编译为原生机器码(通过 `LLVM`) | -| 对象模型 | 万物皆对象 | 仅 `@t.Object` 类有对象语义,`@t.CVTable` 为多态,普通 `class` 仅为结构体布局 | -| 标准库 | `Python` 标准库 | `Viper` 标准库(`includes/`)+ `ViperOS SDK` | -| 空值 | `None` | `None`(编译为 `NULL`/零值) | -| 模块系统 | 运行时 `import` | 编译时解析,插入 `.stub.ll`,`SHA1` 命名空间隔离 | - -### 与 C 的关系 - -Viper 编译后的代码在底层等价于 `C` 编译后的机器码(都经过 LLVM),但 Viper 在语言层面提供了 C 所没有的能力: - -- **SHA1 命名空间**:自动消除符号冲突,无需手动管理 `static`/命名前缀 -- **类型组合语法**:`t.CConst | t.CInt | t.CPtr` 比 `const int*` 更具组合性 -- **声明式内联汇编**:`c.Asm(f"mov {c.AsmOut(x, t.ASM_DESCR.OUTPUT_REG)}, rdi")` 比裸 `__asm__` 更安全,也更具可读性。 -- **结构化预处理**:`c.CIfdef`/`c.CEndif()` 替代 `#ifdef`/`#endif`。 -- **面向对象**:`@t.Object` + `@t.CVTable` 提供 `vtable` 支持的 `OOP` -- **存根驱动的模块系统**:`.pyi` 存根文件实现跨模块类型解析,无需头文件 -- **更多内容**:额外更多的不依赖操作系统的函数和语法 - -## 两阶段编译流程 - -Viper 的编译由 `Projectrans.py` 驱动,分为两个阶段。这是 Viper 编译模型的核心,理解两阶段编译是理解 `t.CDefine`、`t.CExport`、`t.CInline` 等关键概念的前提。 - -``` -源文件 (.py) ────────────────────────────────────────────────────── - │ │ - │ ┌─────────────── 阶段一:声明提取 ───────────────┐ │ - │ │ │ │ - │ │ 1. 计算源文件 SHA1 │ │ - │ │ 2. 生成 .pyi(签名存根) │ │ - │ │ 3. 构建结构体注册表 │ │ - │ │ 4. 生成 .stub.ll(LLVM IR 声明) │ │ - │ │ │ │ - │ └────────────────────────────────────────────────┘ │ - │ │ - │ ┌─────────────── 阶段二:代码翻译 ───────────────┐ │ - │ │ │ │ - │ │ 1. 加载所有 .pyi 和 .stub.ll │ │ - │ │ 2. 构建共享符号表 │ │ - │ │ 3. 收集内联函数符号 │ │ - │ │ 4. 翻译源文件 → .ll(含代码) │ │ - │ │ 5. llc 编译 → .o(目标文件) │ │ - │ │ 6. ld.lld 链接 → 可执行文件 │ │ - │ │ │ │ - │ └────────────────────────────────────────────────┘ │ - │ │ - └──────────────────────────────────────────────────────────────┘ -``` - -### 阶段一:声明提取(Phase1Generator) - -阶段一的目标是从每个源文件提取**声明接口**,使其他模块在阶段二翻译时能够正确解析跨模块引用。 - -#### 步骤 1:可达文件发现与拓扑排序 - -从入口文件(`main.py` 或 `project.json` 指定)出发,通过 `import` 语句递归遍历,找出所有可达的 `.py` 源文件。然后对文件进行拓扑排序,确保被依赖的模块先被处理。 - -``` -main.py → import serial → import drivers.serial.uart.serial → ... -``` - -#### 步骤 2:生成 `.pyi` 签名存根 - -对每个源文件,计算其内容的 SHA1 哈希(16位),然后调用 `PythonToStubConverter` 生成签名存根文件 `.pyi`。 - -**SHA1 计算方式**: -```python -sha1 = hashlib.sha1(content.encode('utf-8')).hexdigest()[:16] -``` - -**存根文件的内容规则**: - -| 源文件元素 | 存根文件中的表示 | -|-----------|----------------| -| `t.CDefine` 常量 | 保留原样(含赋值):`MAX_SIZE: t.CDefine = 1024` | -| `t.CDefine` 函数(返回 `t.CDefine` 的函数) | 保留完整函数体(宏展开需要) | -| 普通函数 | 仅保留签名,添加 `| c.State`:`def foo(x: t.CInt) -> t.CVoid | c.State: pass` | -| 类定义 | 保留成员类型注解和方法签名 | -| 全局变量 | 添加 `t.CExtern`:`x: t.CExtern | t.CInt` | -| `c.CIfdef`/`c.CEndif()` 等预处理指令 | 保留原样 | -| `import` 语句 | 保留原样 | - -**关键设计**:`t.CDefine` 常量和 `t.CDefine` 函数在存根中**保留完整定义**(包括赋值和函数体),因为它们是编译时常量/宏,其他模块引用时需要完整展开。普通函数只保留签名并标记 `c.State`(仅声明),因为函数体在阶段二生成。 - - -#### 步骤 3:构建结构体注册表 - -扫描所有已生成的 `.pyi` 文件,提取: -- **结构体名称集合**:所有非枚举、非异常的 `class` 定义 -- **枚举名称集合**:继承 `t.CEnum` 的类 -- **异常名称集合**:继承 `Exception` 的类 -- **结构体→SHA1 映射**:记录每个结构体定义在哪个模块中 - -这个注册表用于阶段一的声明生成和阶段二的类型解析,确保跨模块的结构体引用使用正确的 SHA1 命名空间。 - -#### 步骤 4:生成 `.stub.ll` LLVM IR 声明 - -对每个 `.pyi` 文件,由 `DeclarationGenerator` 生成对应的 LLVM IR 声明文件 `.stub.ll`。 - -**声明生成规则**: - -| 元素 | 生成的 LLVM IR | -|------|---------------| -| 普通函数 | `declare void @".foo"(i32)` — 非 CExport 函数加 SHA1 前缀 | -| CExport 函数 | `declare i32 @main()` — CExport 函数不加前缀,全局可见 | -| 结构体 | `%".ClassName" = type { i32, i32* }` — 类型名加 SHA1 前缀 | -| 全局变量 | `@varname = external global i32` | -| `t.CDefine` 常量 | **不生成声明**(编译时常量,直接内联展开) | -| `t.CTypedef` 别名 | **不生成声明**(类型别名,在类型解析时展开) | -| 枚举 | 为每个枚举成员生成 `@__config_EnumName_member = external global i32` | - -**增量编译**:如果 `.pyi` 或 `.stub.ll` 已存在,则跳过生成(缓存命中)。只有源文件内容变化导致 SHA1 变化时才重新生成。 - -### 阶段二:代码翻译(Phase2Translator) - -阶段二使用阶段一生成的声明接口,将源文件翻译为包含完整代码的 LLVM IR。 - -#### 步骤 1:加载声明接口 - -加载 `temp/` 目录中所有的 `.pyi` 和 `.stub.ll` 文件,构建: -- `sig_files`:SHA1 → `.pyi` 文件路径映射 -- `stub_files`:SHA1 → `.stub.ll` 文件路径映射 -- `sha1_map`:SHA1 → 源文件相对路径映射 - -#### 步骤 2:构建共享符号表 - -一次性构建所有文件共享的符号表数据,避免每个文件重复加载。将所有 `.pyi` 存根和 `.stub.ll` 声明中的类型信息注册到统一的 `SymbolTable` 中。 - -#### 步骤 3:收集内联函数符号 - -扫描 `includes/` 目录中被引用的模块,收集标记为 `t.CInline` 的函数。内联函数的完整 AST body 被保存,在翻译调用点时直接展开。值得注意的是,和 C 语言不同,`t.CInline` 不是优化建议,而是强制性的。 - -#### 步骤 4:翻译源文件 - -对每个源文件,使用 `TransPyC` 翻译器将 Python AST 翻译为 LLVM IR: -1. 将对应模块的 `.stub.ll` 声明嵌入到生成的 `.ll` 文件头部 -2. 所有被引用模块的 `.stub.ll` 声明也被嵌入 -3. 翻译 AST 节点为 LLVM IR 指令 -4. 输出 `.ll` 文件 - -#### 步骤 5:编译与链接 - -- `llc`:将每个 `.ll` 编译为 `.o` 目标文件 -- `ld.lld`:将所有 `.o` 链接为最终可执行文件 - -## SHA1 命名空间机制 - -SHA1 命名空间是 Viper 解决跨模块符号冲突的核心机制。 - -### 问题 - -在 C 语言中,多个模块可能定义同名函数或结构体,导致链接时符号冲突。C 的解决方案是 `static`(限制可见性)和命名前缀(手动避免冲突)。 - -### Viper 的解决方案 - -Viper 使用源文件内容的 SHA1 哈希作为命名空间前缀: - -``` -源文件 A.py(SHA1 = a1b2c3d4e5f6g7h8)中定义: - class Point: x: t.CInt; y: t.CInt - def draw(p: Point) -> t.CVoid: ... - -源文件 B.py(SHA1 = i9j0k1l2m3n4o5p6)中也定义: - class Point: x: t.CFloat; y: t.CFloat # 不同的结构体! - def draw(p: Point) -> t.CVoid: ... - -编译后: - A.py 的结构体 → %"a1b2c3d4e5f6g7h8.Point" = type { i32, i32 } - A.py 的函数 → declare void @"a1b2c3d4e5f6g7h8.draw"(%"a1b2c3d4e5f6g7h8.Point"*) - - B.py 的结构体 → %"i9j0k1l2m3n4o5p6.Point" = type { float, float } - B.py 的函数 → declare void @"i9j0k1l2m3n4o5p6.draw"(%"i9j0k1l2m3n4o5p6.Point"*) -``` - -**没有符号冲突**——即使两个模块定义了同名类型和函数,它们的 LLVM IR 符号也是不同的。即便有两个内容完全相同的文件也不会冲突,他们会被识别为同一个文件,然后进行单次编译。 - -### SHA1 前缀的豁免:`t.CExport` - -标记为 `t.CExport` 的函数**不加 SHA1 前缀**,保持原始函数名。这是模块向外部暴露 API/ABI 的机制: - -```python -# main.py — 入口函数,必须全局可见 -def main() -> t.CInt | t.CExport: - return 0 - -# 编译后:define i32 @main() — 无 SHA1 前缀 -``` - -```python -# serial.py — 驱动接口,对外暴露 -def init() -> t.CVoid | t.CExport: - serial_puts("init\n") - -# 编译后:define void @init() — 无 SHA1 前缀,其他模块可直接调用 -``` - -### SHA1 与增量编译 - -SHA1 同时服务于增量编译: -- 源文件内容不变 → SHA1 不变 → `.pyi` 和 `.stub.ll` 缓存命中,跳过阶段一 -- 源文件内容变化 → SHA1 变化 → 重新生成声明接口 -- `temp/_sha1_map.txt` 记录 SHA1 → 源文件路径的映射,供阶段二加载 - -理论上,如果一个未经变动的模块的依赖路径上存在变动的模块,暂时的方法是将其简单做 SHA1 替换,暨将旧 SHA1 替换为新 SHA1,但不适用于签名改变的情况,不过签名改变这个未经变动的模块必然也需要改变,但是由于宏展开的存在,不能完全保证不会发生错误情况。且依赖路径的 SHA1 替换成功性未经完整测试,可能出现未定义行为。 - -## `t.CDefine` 深度解析 - -`t.CDefine` 是 Viper 中最特殊的类型——它不是数据类型,而是**编译时元指令**,控制编译器的代码生成行为。 - -### `t.CDefine` 常量 - -```python -MAX_SIZE: t.CDefine = 1024 -PAGE_SIZE: t.CDefine = 4096 -FA_READ: t.CDefine = 0x01 -CPU_FEATURE_FPU: t.CDefine = (1 << 0) -``` - -**编译行为**: -1. **阶段一**:存根生成器保留 `t.CDefine` 常量的完整定义(包括赋值值),因为其他模块可能引用此常量 -2. **阶段一**:`.stub.ll` 声明生成器**跳过** `t.CDefine` 常量,不生成 `external global` 声明 -3. **阶段二**:翻译器遇到 `t.CDefine` 常量的引用时,直接内联其值,不生成任何加载指令 - -这意味着 `t.CDefine` 常量在 LLVM IR 层面**不存在**——它们在编译时被完全展开,等价于 C 的 `#define` 宏。 - -### `t.CDefine` 函数 - -当函数的返回类型注解包含 `t.CDefine` 时,该函数被编译器视为**宏函数**: - -```python -def MAKE_FLAG(bit) -> t.CDefine: - return (1 << bit) - -def GET_PAGE_ORDER(size) -> t.CDefine: - return size // PAGE_SIZE -``` - -**编译行为**: -1. **阶段一**:存根生成器保留 `t.CDefine` 函数的**完整函数体**(不像普通函数那样只保留签名) -2. **阶段二**:翻译器遇到 `t.CDefine` 函数的调用时,将调用内联展开为函数体的计算结果 - -`t.CDefine` 函数在 LLVM IR 中**不生成函数定义**——它们是纯粹的编译时宏。 - -### `t.CDefine` 与类型组合 - -`t.CDefine` 可以与具体类型组合使用,为常量指定底层类型: - -```python -CODE_SEG: t.CDefine | t.CUInt16T = 0x08 -DATA_SEG: t.CDefine | t.CUInt16T = 0x10 -``` - -这表示常量在类型检查时被视为 `t.CUInt16T`(`uint16_t`),但在代码生成时仍然内联展开。 - -## `t.CExport` 深度解析 - -`t.CExport` 控制函数的符号可见性,是 SHA1 命名空间的豁免机制。 - -### 语义 - -| 修饰 | LLVM IR 函数名 | 链接可见性 | 用途 | -|------|---------------|-----------|------| -| 无修饰 | `@.funcname` | 模块内部 | 模块私有函数 | -| `t.CExport` | `@funcname` | 全局可见 | 对外暴露的 API | -| `t.CExtern` | `@funcname`(仅声明) | 外部定义 | 引用外部函数 | - -### 使用场景 - -```python -# 入口函数 — 必须全局可见,链接器需要找到它 -def _start() -> t.CInt | t.CExport: - return kernel_main() - -# 驱动接口 — 其他模块/应用需要调用 -def init() -> t.CVoid | t.CExport: - uart_init() - -# 内部辅助函数 — 不需要全局可见,自动加 SHA1 前缀 -def _helper() -> t.CInt: - return 42 -``` - -### `t.CExport` 在存根中的表现 - -在 `.pyi` 存根文件中,`t.CExport` 函数与普通函数一样只保留签名(添加 `c.State`,表示单纯声明),但 `t.CExport` 标记被保留在返回类型注解中。阶段一的 `DeclarationGenerator` 检查 `t.CExport` 标记来决定是否添加 SHA1 前缀。 - -## `t.CInline` 深度解析 - -`t.CInline` 标记函数为内联函数,编译器在调用点直接展开函数体。 - -### 语义 - -```python -def fast_add(a: t.CInt, b: t.CInt) -> t.CInt | t.CInline: - return a + b -``` - -**编译行为**: -1. **阶段二预收集**:`_collect_inline_symbols` 扫描 `includes/` 目录中被引用的模块,收集所有 `t.CInline` 函数的 AST body -2. **翻译时展开**:遇到内联函数调用时,将函数体的 AST 直接嵌入调用点,替换参数为实际值 -3. **不生成独立函数**:内联函数不生成 LLVM IR 函数定义(除非也被非内联调用) - -### `t.CInline` 与 `t.CDefine` 函数的区别 - -| 特性 | `t.CInline` | `t.CDefine` 函数 | -|------|------------|-----------------| -| 展开时机 | 阶段二翻译时 | 阶段二翻译时 | -| 类型检查 | 完整的参数和返回类型检查 | 返回类型为宏,类型检查较弱 | -| 存根表示 | 签名 + `c.State` | 完整函数体 | -| LLVM IR | 可能生成函数定义(如果有非内联调用) | 不生成函数定义 | -| 适用场景 | 性能关键的短函数 | 编译时常量和宏计算 | - -## 目标平台 - -默认目标三元组:`x86_64-none-elf` - -数据布局:`e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128` - -## Hello World 示例 - -```python -import t, c - -def main() -> t.CInt | t.CExport: - print("Hello, ViperOS!\n") - return 0 -``` - -编译流程: - -1. **阶段一**:计算 `main.py` 的 SHA1,生成 `.pyi` 存根(`def main() -> t.CInt | t.CExport | c.State: pass`),生成 `.stub.ll` 声明(`declare i32 @main()`,因为是 CExport 不加前缀) -2. **阶段二**:翻译 `main.py` 为 `.ll`,嵌入 `print` 对应的 `puts`/`printf` 声明,生成 `define i32 @main()` 函数体 -3. **编译**:`llc` 将 `.ll` 编译为 `.o` -4. **链接**:`ld.lld` 链接为可执行文件 - - -# 02 - 类型系统 - -Viper 的类型系统通过 `t` 模块提供,所有类型注解继承 `t.CType` 。大都以 `t.C{TypeName:PascalCase}`为类型,类型注解是 Viper 的核心机制,决定了变量的内存布局、大小和对齐方式。 - -## 基本类型 - -### 整数类型 - -| Viper 类型 | C 等价 | 大小(位) | 有符号 | -|------------|--------|-----------|--------| -| `t.CChar` | `char` | 8 | 是 | -| `t.CShort` | `short` | 16 | 是 | -| `t.CInt` | `int` | 32 | 是 | -| `t.CLong` | `long` | 64 | 是 | -| `t.CUnsignedChar` | `unsigned char` | 8 | 否 | -| `t.CUnsignedShort` | `unsigned short` | 16 | 否 | -| `t.CUnsigned` / `t.CUnsignedInt` | `unsigned int` | 32 | 否 | -| `t.CUnsignedLong` | `unsigned long` | 64 | 否 | -| `t.CSignedChar` | `signed char` | 8 | 是 | - -值得注意的是,t.CUnsigned 一般不单独使用,而是配合其它有符号类型,替换表示无符号,比如 `t.CUnsigned | t.CInt`,由于为了便于使用一些常用类型,则将其组合为常用的 `t.CUnginedInt` 等。 - -### 固定宽度整数类型 - -| Viper 类型 | C 等价 | 大小(位) | 有符号 | -|------------|--------|-----------|--------| -| `t.CInt8T` | `int8_t` | 8 | 是 | -| `t.CInt16T` | `int16_t` | 16 | 是 | -| `t.CInt32T` | `int32_t` | 32 | 是 | -| `t.CInt64T` | `int64_t` | 64 | 是 | -| `t.CUInt8T` | `uint8_t` | 8 | 否 | -| `t.CUInt16T` | `uint16_t` | 16 | 否 | -| `t.CUInt32T` | `uint32_t` | 32 | 否 | -| `t.CUInt64T` | `uint64_t` | 64 | 否 | - -### 最小宽度整数类型 - -| Viper 类型 | C 等价 | 大小(位) | 有符号 | -|------------|--------|-----------|--------| -| `t.CIntLeast8T` | `int_least8_t` | ≥8 | 是 | -| `t.CIntLeast16T` | `int_least16_t` | ≥16 | 是 | -| `t.CIntLeast32T` | `int_least32_t` | ≥32 | 是 | -| `t.CIntLeast64T` | `int_least64_t` | ≥64 | 是 | -| `t.CUIntLeast8T` | `uint_least8_t` | ≥8 | 否 | -| `t.CUIntLeast16T` | `uint_least16_t` | ≥16 | 否 | -| `t.CUIntLeast32T` | `uint_least32_t` | ≥32 | 否 | -| `t.CUIntLeast64T` | `uint_least64_t` | ≥64 | 否 | - -### 最快最小宽度整数类型 - -| Viper 类型 | C 等价 | 大小(位) | 有符号 | -|------------|--------|-----------|--------| -| `t.CIntFast8T` | `int_fast8_t` | ≥8 | 是 | -| `t.CIntFast16T` | `int_fast16_t` | ≥16 | 是 | -| `t.CIntFast32T` | `int_fast32_t` | ≥32 | 是 | -| `t.CIntFast64T` | `int_fast64_t` | ≥64 | 是 | -| `t.CUIntFast8T` | `uint_fast8_t` | ≥8 | 否 | -| `t.CUIntFast16T` | `uint_fast16_t` | ≥16 | 否 | -| `t.CUIntFast32T` | `uint_fast32_t` | ≥32 | 否 | -| `t.CUIntFast64T` | `uint_fast64_t` | ≥64 | 否 | - -### 最大宽度整数类型 - -| Viper 类型 | C 等价 | 大小(位) | 有符号 | -|------------|--------|-----------|--------| -| `t.CIntMaxT` | `intmax_t` | ≥64 | 是 | -| `t.CUIntMaxT` | `uintmax_t` | ≥64 | 否 | - -### stdint 短名别名 - -通过 `import stdint` 引入,这些短名是上述类型的 `t.CTypedef` 别名,便于在系统编程场景中快速使用。允许直接使用 `from stdint import *` 来直接使用。 - -#### 基本类型短名 - -| 短名 | 等价展开 | 说明 | -|------|---------|------| -| `stdint.INT` | `t.CInt` | - | -| `stdint.UINT` | `t.CUnsignedInt` | - | -| `stdint.BOOL` | `t.CInt` | 1 为真,0 为假 | -| `stdint.SHORT` | `t.CShort` | - | -| `stdint.USHORT` | `t.CUnsignedShort` | - | -| `stdint.LONG` | `t.CLong` | - | -| `stdint.ULONG` | `t.CUnsignedLong` | - | -| `stdint.LONGLONG` | `t.CLong \| t.CLong` | - | -| `stdint.ULONGLONG` | `t.CUnsignedLong \| t.CLong` | - | -| `stdint.FLOAT` | `t.CFloat` | - | -| `stdint.DOUBLE` | `t.CDouble` | - | - -#### 固定宽度短名 - -| 短名 | 等价展开 | -|------|---------| -| `stdint.INT8` | `t.CInt8T` | -| `stdint.INT16` | `t.CInt16T` | -| `stdint.INT32` | `t.CInt32T` | -| `stdint.INT64` | `t.CInt64T` | -| `stdint.UINT8` | `t.CUInt8T` | -| `stdint.UINT16` | `t.CUInt16T` | -| `stdint.UINT32` | `t.CUInt32T` | -| `stdint.UINT64` | `t.CUInt64T` | - -#### 字节与字短名 - -| 短名 | 等价展开 | 说明 | -|------|---------|------| -| `stdint.BYTE` | `t.CUnsignedChar` | 8 位无符号 | -| `stdint.WORD` | `t.CUInt16T` | 16 位无符号 | -| `stdint.DWORD` | `t.CUInt32T` | 32 位无符号 | -| `stdint.QWORD` | `t.CUInt64T` | 64 位无符号 | - -#### 字符类型短名 - -| 短名 | 等价展开 | 说明 | -|------|---------|------| -| `stdint.TCHAR` | `t.CChar` | - | -| `stdint.CHARLIST` | `str \| t.CPtr` / `list[str, None]` | - | -| `stdint.WCHAR` | `stdint.WORD` | UTF-16 代码单元 | -| `stdint.CHAR8` | `t.CChar8T` | - | -| `stdint.CHAR16` | `t.CChar16T` | - | -| `stdint.CHAR32` | `t.CChar32T` | - | - -#### 指针短名 - -| 短名 | 等价展开 | -|------|---------| -| `stdint.INTPTR` | `t.CInt \| t.CPtr` | -| `stdint.UINTPTR` | `t.CUnsignedInt \| t.CPtr` | -| `stdint.BYTEPTR` | `stdint.BYTE \| t.CPtr` | -| `stdint.SHORTPTR` | `t.CShort \| t.CPtr` | -| `stdint.USHORTPTR` | `t.CUnsignedShort \| t.CPtr` | -| `stdint.WCHARPTR` | `stdint.WORD \| t.CPtr` | -| `stdint.VOIDPTR` | `t.CVoid \| t.CPtr` | -| `stdint.INT8PTR` | `t.CInt8T \| t.CPtr` | -| `stdint.INT16PTR` | `t.CInt16T \| t.CPtr` | -| `stdint.INT32PTR` | `t.CInt32T \| t.CPtr` | -| `stdint.INT64PTR` | `t.CInt64T \| t.CPtr` | -| `stdint.UINT8PTR` | `t.CUInt8T \| t.CPtr` | -| `stdint.UINT16PTR` | `t.CUInt16T \| t.CPtr` | -| `stdint.UINT32PTR` | `t.CUInt32T \| t.CPtr` | -| `stdint.UINT64PTR` | `t.CUInt64T \| t.CPtr` | -| `stdint.CHAR8PTR` | `t.CChar8T \| t.CPtr` | -| `stdint.CHAR16PTR` | `t.CChar16T \| t.CPtr` | -| `stdint.CHAR32PTR` | `t.CChar32T \| t.CPtr` | - -#### 平台特定短名 - -| 短名 | 等价展开 | 说明 | -|------|---------|------| -| `stdint.FSIZE_t` | `stdint.DWORD` | 文件大小 | -| `stdint.LBA_t` | `stdint.DWORD` | 逻辑块地址 | - -### 平台相关类型 - -| Viper 类型 | C 等价 | 大小(位) | 有符号 | -|------------|--------|-----------|--------| -| `t.CSizeT` | `size_t` | 64 | 否 | -| `t.CIntPtrT` | `intptr_t` | 64 | 是 | -| `t.CUIntPtrT` | `uintptr_t` | 64 | 否 | -| `t.CPtrDiffT` | `ptrdiff_t` | 64 | 是 | - -### stdint 短名别名 - -Viper 在 `stdint` 模块中提供了更简短的类型别名,通过 `t.CTypedef` 映射到对应的完整类型。使用时需 `import stdint`。 - -#### 固定宽度整数短名 - -| 短名 | 等价 Viper 类型 | C 等价 | -|------|----------------|--------| -| `INT8` | `t.CInt8T` | `int8_t` | -| `INT16` | `t.CInt16T` | `int16_t` | -| `INT32` | `t.CInt32T` | `int32_t` | -| `INT64` | `t.CInt64T` | `int64_t` | -| `UINT8` | `t.CUInt8T` | `uint8_t` | -| `UINT16` | `t.CUInt16T` | `uint16_t` | -| `UINT32` | `t.CUInt32T` | `uint32_t` | -| `UINT64` | `t.CUInt64T` | `uint64_t` | - -#### 固定宽度指针短名 - -| 短名 | 等价 Viper 类型 | C 等价 | -|------|----------------|--------| -| `INT8PTR` | `t.CInt8T \| t.CPtr` | `int8_t*` | -| `INT16PTR` | `t.CInt16T \| t.CPtr` | `int16_t*` | -| `INT32PTR` | `t.CInt32T \| t.CPtr` | `int32_t*` | -| `INT64PTR` | `t.CInt64T \| t.CPtr` | `int64_t*` | -| `UINT8PTR` | `t.CUInt8T \| t.CPtr` | `uint8_t*` | -| `UINT16PTR` | `t.CUInt16T \| t.CPtr` | `uint16_t*` | -| `UINT32PTR` | `t.CUInt32T \| t.CPtr` | `uint32_t*` | -| `UINT64PTR` | `t.CUInt64T \| t.CPtr` | `uint64_t*` | - -#### 字符类型短名 - -| 短名 | 等价 Viper 类型 | C 等价 | -|------|----------------|--------| -| `CHAR8` | `t.CChar8T` | `char8_t` | -| `CHAR16` | `t.CChar16T` | `char16_t` | -| `CHAR32` | `t.CChar32T` | `char32_t` | -| `CHAR8PTR` | `t.CChar8T \| t.CPtr` | `char8_t*` | -| `CHAR16PTR` | `t.CChar16T \| t.CPtr` | `char16_t*` | -| `CHAR32PTR` | `t.CChar32T \| t.CPtr` | `char32_t*` | - -#### 基本类型短名 - -| 短名 | 等价 Viper 类型 | C 等价 | -|------|----------------|--------| -| `INT` | `t.CInt` | `int` | -| `UINT` | `t.CUnsignedInt` | `unsigned int` | -| `BOOL` | `t.CInt` | `int`(0/1) | -| `SHORT` | `t.CShort` | `short` | -| `USHORT` | `t.CUnsignedShort` | `unsigned short` | -| `LONG` | `t.CLong` | `long` | -| `ULONG` | `t.CUnsignedLong` | `unsigned long` | -| `LONGLONG` | `t.CLong \| t.CLong` | `long long` | -| `ULONGLONG` | `t.CUnsignedLong \| t.CLong` | `unsigned long long` | -| `FLOAT` | `t.CFloat` | `float` | -| `DOUBLE` | `t.CDouble` | `double` | - -#### 平台 / Windows 风格短名 - -| 短名 | 等价 Viper 类型 | C 等价 | -|------|----------------|--------| -| `BYTE` | `t.CUnsignedChar` | `unsigned char`(8位) | -| `BYTEPTR` | `BYTE \| t.CPtr` | `unsigned char*` | -| `WORD` | `t.CUInt16T` | `uint16_t`(16位) | -| `DWORD` | `t.CUInt32T` | `uint32_t`(32位) | -| `QWORD` | `t.CUInt64T` | `uint64_t`(64位) | -| `INTPTR` | `t.CInt \| t.CPtr` | `int*` | -| `UINTPTR` | `t.CUnsignedInt \| t.CPtr` | `unsigned int*` | -| `SHORTPTR` | `t.CShort \| t.CPtr` | `short*` | -| `USHORTPTR` | `t.CUnsignedShort \| t.CPtr` | `unsigned short*` | -| `VOIDPTR` | `t.CVoid \| t.CPtr` | `void*` | -| `TCHAR` | `t.CChar` | `char` | -| `WCHAR` | `WORD` | `uint16_t`(UTF-16) | -| `WCHARPTR` | `WORD \| t.CPtr` | `uint16_t*`(UTF-16) | -| `CHARLIST` | `str \| t.CPtr` | `char*` | -| `FSIZE_t` | `DWORD` | `uint32_t` | -| `LBA_t` | `DWORD` | `uint32_t` | - -### 浮点类型 - -| Viper 类型 | C 等价 | 大小(位) | -|------------|--------|-----------| -| `t.CFloat` | `float` | 32 | -| `t.CDouble` | `double` | 64 | - -### 其他基本类型 - -| Viper 类型 | C 等价 | 说明 | -|------------|--------|------| -| `t.CVoid` | `void` | 空类型 | -| `t.CBool` | `bool` | 布尔类型(8位) | -| `t.CWCharT` | `wchar_t` | 宽字符(32位) | -| `t.CChar8T` | `char8_t` | UTF-8 字符(8位,无符号) | -| `t.CChar16T` | `char16_t` | UTF-16 字符(16位,无符号) | -| `t.CChar32T` | `char32_t` | UTF-32 字符(32位,无符号) | - -### Python 便捷映射类型 -| Python 类型| Viper 类型 | Viper 值 | -|--------|--------|------| -|`int`|`t.CInt`|-| -|`float`|`t.CFloat`|-| -|`str`|`t.CChar \| t.CPtr`|-| -|`bool`|`t.CBool`|-| -|`True`|`t.CBool`|`1`| -|`False`|`t.CBool`|`0`| -|`None`|`NULL`|`t.CIntPtr(0)`| - -对于 t.py 和 c.py 的引用,必须使用 import,不能使用 from ... import ...,也不能使用 as,因为这两者都是直接以字符串识别的。 - -## 类型组合 - -Viper 使用 Python 的 `|` 来组合类型修饰符(TypeUnion),其仅在左值注解中有效,其它位置均为位或语义(至少重载前是这样的),这是 Viper 最重要的语法特性之一。 - -### 指针类型 - -使用 `t.CPtr` 表示指针,通过 `|` 与基本类型组合: - -```python -x: t.CInt | t.CPtr # int* — 指向 int 的指针 -p: t.CVoid | t.CPtr # void* — 通用指针 -s: t.CChar | t.CPtr # char* — 字符串指针 -pp: t.CInt | t.CPtr | t.CPtr # int** — 指向指针的指针 -``` - -等价 C 代码: -```c -int* x; -void* p; -char* s; -int** pp; -``` - -同时,指针也可以用 `Ptr[T]` 的方法表示,但在 Viper 中不太推荐,虽然说这样做一直是类似工程的常见用法,但是如果此处 `T` 是一个多态,同时我们想要复用 Python 的高亮插件,插件无法识别 `Ptr[T]` 的属性取值,但是对于 `T | Ptr` 可以。 - -```python -x: t.CPtr[t.CInt] -p: t.CPtr[t.CVoid] -s: t.CPtr[t.CChar] -pp: t.CPtr[t.CPtr[t.CInt]] -pp2: t.CInt | t.CPtr[t.CPtr] # 同时也可以这么表示 -``` - -等价 C 代码: - -```c -int* x; -void* p; -char* s: -int** pp; -int** pp2; -``` - -### 类型限定符组合 - -```python -x: t.CConst | t.CInt # const int -p: t.CConst | t.CChar | t.CPtr # const char* -``` - -### 存储类组合 - -```python -x: t.CStatic | t.CInt # static int -f: t.CExtern | t.CInt # extern int(声明其存在于外部) -``` - -### 函数返回类型组合 - -```python -def foo() -> t.CInt | t.CExport: # 导出函数,返回 int - return 0 - -def bar() -> t.CVoid | t.CExtern: # 外部函数声明 - pass -``` - -## 数组类型 - -使用 Python 的 `list[ElementType, Size]` 语法表示固定大小数组(通常的,这用于栈上和 BSS 段上): - -```python -buf: list[t.CChar, 64] # char buf[64] -ids: list[t.CInt, 10] # int ids[10] -matrix: list[t.CFloat, 16] # float matrix[16] -entries: list[idt_entry, 256] # struct idt_entry entries[256] -s: list[t.CChar, None] # 自推长度 char s[]; -``` - -等价 C 代码: -```c -char buf[64]; -int ids[10]; -float matrix[16]; -struct idt_entry entries[256]; -``` - -### 数组指针和函数指针 - -```python -lp: list[t.CInt, 12] | t.CPtr -vp: t.Callable[[t.CInt, t.CInt], t.CInt] = x # 其中 t.Callable = typing.Callable,可以直接使用。 -``` - -## 结构体类型 - -使用 `class` 定义结构体,成员通过类型注解声明: - -```python -class point: - x: t.CInt - y: t.CInt -``` - -等价 C 代码: -```c -struct point { - int x; - int y; -}; -``` - -### 带指针成员的结构体 - -```python -class node: - value: t.CInt - next: node | t.CPtr # struct node* next -``` - -### 匿名结构体成员(❌) - -> WARNING: **警告:** 由于 Viper 在声明结构体,枚举等处不需要关键字,因此 `t.Anonymouse` 是不需要使用的。此关键字不再维护,强行使用可能导致未定义行为。 - -继承 `t.Anonymous` 的类作为匿名成员嵌入: - -```python -class header(t.Anonymous): - magic: t.CUInt32T - version: t.CUInt32T - -class packet: - header # 匿名嵌入,可直接访问 packet.magic - length: t.CUInt32T -``` - -### 字节序标记 - -> WARNING: **警告:** 此关键字是实验性的。未经充分测试,不当使用可能导致未定义行为。 - -使用 `t.BigEndian` 或 `t.LittleEndian` 标记成员的字节序: - -```python -class network_packet: - length: t.CUInt16T | t.BigEndian # 大端序存储 - type: t.CUInt8T # 默认小端序 -``` - -## 联合体类型 - -继承 `t.CUnion` 定义联合体: - -```python -class value(t.CUnion): - ival: t.CInt - fval: t.CFloat - pval: t.CVoid | t.CPtr -``` - -等价 C 代码: -```c -union value { - int ival; - float fval; - void* pval; -}; -``` - -## 枚举类型 - -继承 `t.CEnum` 定义枚举: - -```python -class color(t.CEnum): - RED: t.CEnum = 0 - GREEN: t.CEnum = 1 - BLUE: t.CEnum = 2 -``` - -等价 C 代码: -```c -enum color { - RED = 0, - GREEN = 1, - BLUE = 2 -}; -``` - -枚举成员可直接使用名称: - -```python -c: t.CInt = color.RED -``` - -## Typedef - -使用 `t.CTypedef` 创建类型别名: - -```python -irq_handler_t: t.CTypedef | t.Callable[[], t.CInt] # typedef int (*irq_handler_t)(); -``` - -或通过注解赋值: - -```python -MyStruct: t.CTypedef = original_struct # typedef struct original_struct MyStruct; -``` - -更推荐通过后者的形式,前者编译器不一定能够识别到注解是对 t.CTypedef 的,还是后面的注解的,而且容易触发未定义行为。 - -## 强制类型转换 -在 Viper 中的强制类型转换有些不同,强制类型转换有两种方案,都是基于 `t.CType` 的用法,符合 Python 本意。 -对于原先就继承自 `t.CType` 的类型来说,可以直接使用 call 的方法进行类型转换,比如 -```python -x: t.CChar | t.CPtr = "Hello" -t.CVoid(x, t.CPtr) -``` -其中用法为 `t.CType(x, ...)`,此处...可以是其它的 `t.CType` 或将要提到的 `Typedef`,将其视为组合类型对 `x` 进行强制转换。 - -额外补充一句,对于比较,四则运算,可以不使用强制类型转换,而是依靠隐式类型转换,但如果是严谨数学计算,推荐还是强制类型转换避免判断出错。 - -此外,若将一个不同类型的右值赋值到左值,则会隐式将右值转换为左值的类型。 - -如果你不喜欢 `t.CVoid(x, t.CPtr)` 的方法,认为这将 `void` 和 `ptr` 分开,不便于理解,那么还有一个方法,即将二者打包为一个 Typedef,即: -```python -VOIDPTR: t.CTypedef = t.CVoid | t.CPtr -``` -则如果你想,你可以直接通过 call 的方式进行强转,比如: -```python -y: VOIDPTR = VOIDPTR(x) -``` - -## 宏定义常量 - -使用 `t.CDefine` 定义编译时常量。`t.CDefine` 不是数据类型,而是编译时元指令——标记为 `t.CDefine` 的常量在 LLVM IR 中不生成任何全局变量,而是在引用处直接内联展开。详见 [01-overview.md 中 t.CDefine 深度解析](01-overview.md#tcdefine-深度解析)。 - -```python -MAX_SIZE: t.CDefine = 1024 -PAGE_SIZE: t.CDefine = 4096 -FA_READ: t.CDefine = 0x01 -``` - -语义上等价于 C 的 `#define`: -```c -#define MAX_SIZE 1024 -#define PAGE_SIZE 4096 -#define FA_READ 0x01 -``` - -宏定义支持表达式: - -```python -CPU_FEATURE_FPU: t.CDefine = (1 << 0) -CPU_FEATURE_APIC: t.CDefine = (1 << 6) -``` - -宏定义也可与类型组合使用: - -```python -CODE_SEG: t.CDefine | t.CUInt16T = 0x08 -``` - -## 位域 - -使用 `t.Bit(n)` 定义位域成员: - -```python -class flags: - a: t.CUInt32T | t.Bit[1] # 此处,如果存入 2,二进制是 10,会被截断为 0 - b: t.CUInt32T | t.Bit[3] - c: t.CUInt32T | t.Bit[4] -``` - -## LLVM IR 类型简写 - -Viper 提供了 LLVM IR 级别的类型简写: - -```python -i1 # 1位整数 -i8 # 8位有符号整数 -i16 # 16位有符号整数 -i32 # 32位有符号整数 -i64 # 64位有符号整数 -u1 # 1位无符号整数 -u8 # 8位无符号整数 -u16 # 16位无符号整数 -u32 # 32位无符号整数 -u64 # 64位无符号整数 -``` - -仍然通过 `t.x` 的方式调用,比如 `t.i1` 等。 - -## `__attribute__` 属性 - -通过 `t.attr` 命名空间访问 GCC `__attribute__` 属性: - -```python -t.attr.packed() # __attribute__((packed)) -t.attr.aligned(16) # __attribute__((aligned(16))) -t.attr.section(".text.startup") # __attribute__((section(".text.startup"))) -t.attr.always_inline() # __attribute__((always_inline)) -t.attr.noinline() # __attribute__((noinline)) -t.attr.noreturn() # __attribute__((noreturn)) -t.attr.weak() # __attribute__((weak)) -t.attr.unused() # __attribute__((unused)) -t.attr.constructor() # __attribute__((constructor)) -t.attr.destructor() # __attribute__((destructor)) -t.attr.deprecated("use X") # __attribute__((deprecated("use X"))) -``` - -### LLVM 函数属性 - -通过 `t.attr.llvm` 命名空间指定 LLVM 函数属性: - -```python -t.attr.llvm.nobuiltin -t.attr.llvm.nounwind -t.attr.llvm.noredzone -t.attr.llvm.willreturn -t.attr.llvm.mustprogress -t.attr.llvm.optnone -t.attr.llvm.noinline -t.attr.llvm.alwaysinline -t.attr.llvm.readnone -t.attr.llvm.readonly -t.attr.llvm.writeonly -t.attr.llvm.inaccessiblememonly -t.attr.llvm.inaccessiblemem_or_argmemonly -``` - -在函数返回类型注解中使用: - -```python -def foo() -> t.CInt | t.attr.llvm.nobuiltin | t.attr.llvm.nounwind: - return 0 -``` - - -# 03 - 变量声明与赋值 - -Viper 的变量声明使用 Python 的类型注解语法,通过 `t` 模块指定 C 级别的类型信息。 - -## 带注解的变量声明 - -使用 `变量名: 类型` 语法声明变量: - -```python -x: t.CInt = 0 # int x = 0; -y: t.CUInt32T = 42 # uint32_t y = 42; -name: list[t.CChar, 64] # char name[64]; -ptr: t.CVoid | t.CPtr # void* ptr; -msg: t.CConst | str = "Hello" # const char* msg = "Hello"; -``` - -### 无初始值的声明 - -未赋值的变量声明会生成零初始化的变量,此处是未定义行为,即在不同环境位置可能会覆盖0,也可能不会,最好预先复制或用 memset 清除: - -```python -count: t.CInt # int count = 0; -buffer: list[t.CChar, 256] # char buffer[256] = {0}; -``` - -### 延迟赋值 - -变量可以先声明后赋值: - -```python -x: t.CInt -x = 10 -``` - -### 指针变量 - -```python -p: t.CInt | t.CPtr # int* p; -fb: t.CVoid | t.CPtr # void* fb; -str_ptr: t.CConst | t.CChar | t.CPtr # const char* str_ptr; -``` - -### 指针变量的特殊初始化 - -使用 `t.CVoid(0, t.CPtr)` 初始化指针为 NULL: - -```python -p: t.CVoid | t.CPtr = t.CVoid(0, t.CPtr) # void* p = NULL; -``` - -或使用 `None`: - -```python -p: t.CVoid | t.CPtr = None # void* p = NULL; -``` - -## 普通赋值 - -```python -x: t.CInt = 0 -x = 42 # x = 42; -``` - -## 增强赋值 - -支持所有 Python 增强赋值运算符: - -```python -x: t.CInt = 0 -x += 1 # x += 1; -x -= 1 # x -= 1; -x *= 2 # x *= 2; -x //= 3 # x /= 3; (整数除法) -x %= 5 # x %= 5; -x <<= 1 # x <<= 1; -x >>= 1 # x >>= 1; -x |= 0xFF # x |= 0xFF; -x &= 0x0F # x &= 0x0F; -x ^= 0xAA # x ^= 0xAA; -``` - -## 全局变量 - -模块顶层声明的变量即为全局变量: - -```python -kbd_tid: t.CInt = -1 # 全局 int kbd_tid = -1; -BootInfo: bootinfo | t.CPtr # 全局 struct bootinfo* BootInfo; -``` - -### 静态全局变量 - -```python -x: t.CStatic | t.CInt = 0 # static int x = 0; -``` - -### 外部声明 - -```python -x: t.CExtern | t.CInt # extern int x; -``` - -## 常量定义 - -使用 `t.CDefine` 定义编译时常量。`t.CDefine` 不是数据类型,而是编译时元指令——常量在 LLVM IR 中不生成全局变量,而是在引用处直接内联展开。详见 [01-overview.md 中 t.CDefine 深度解析](01-overview.md#tcdefine-深度解析)。 - -```python -MAX_SIZE: t.CDefine = 1024 -PAGE_SIZE: t.CDefine = 4096 -FA_READ: t.CDefine = 0x01 -FA_WRITE: t.CDefine = 0x02 -``` - -## 字符串常量 - -Viper 中的字符串字面量编译为 C 的字符串常量(`const char*`): - -```python -msg: t.CConst | str = "Hello, World!" -serial.puts(msg) -``` - -也可以直接传递字符串字面量: - -```python -serial.puts("Hello, World!") -``` - -## 类型转换 - -使用类型构造函数进行显式类型转换: - -```python -x: t.CInt = 42 -y: t.CUInt32T = t.CUInt32T(x) # (uint32_t)x -f: t.CFloat = float(x) # (float)x -i: t.CInt = int(f) # (int)f -``` - -### 指针类型转换 - -```python -ptr: t.CVoid | t.CPtr = some_ptr -int_val: t.CUInt64T = t.CUInt64T(ptr) # (uint64_t)ptr — 指针转整数 -``` - -## 结构体实例化 - -> 此处不理解参见 ([05-classes.md 中 结构体实例化与初始化](05-classes.md#结构体实例化与初始化)) - -直接使用类名作为构造函数: - -```python -info: fat32_types.fat32_fileinfo -dp: fat32_types.fat32_dirobj -``` - -带初始化的实例化: - -```python -obj: MyClass = MyClass(arg1, arg2) -``` - -使用 `c.Addr` 获取实例指针: - -```python -obj_ptr: MyClass | t.CPtr = c.Addr(MyClass(arg1, arg2)) -``` - -## delete 语句 - -`del` 语句可用于调用对象的 `__del__` 或 `__delete__` 方法: - -```python -del obj # 调用 obj.__del__() 或 obj.__delete__() -del arr[idx] # 调用 arr.__delitem__(idx) -``` - - -# 04 - 函数定义与调用 - -Viper 的函数定义使用 Python 的 `def` 语法,通过类型注解指定参数类型和返回类型。 - -## 基本函数定义 - -```python -def add(a: t.CInt, b: t.CInt) -> t.CInt: - return a + b -``` - -等价 C 代码: -```c -int add(int a, int b) { - return a + b; -} -``` - -## 无返回值函数 - -```python -def print_msg(msg: t.CConst | t.CChar | t.CPtr) -> t.CVoid: - serial.puts(msg) -``` - -等价 C 代码: -```c -void print_msg(const char* msg) { - serial_puts(msg); -} -``` - -## 函数修饰符 - -通过返回类型的 `|` 组合添加函数修饰符: - -### 导出函数 - -` t.CExport` 控制函数的符号可见性——标记为 `t.CExport` 的函数不加 SHA1 前缀,全局可见。详见 [01-overview.md 中 t.CExport 深度解析](01-overview.md#tcexport-深度解析)。 - -```python -def _start() -> t.CInt | t.CExport: - return 0 -``` - -### 外部函数声明 - -使用 `c.State` 表示仅声明不定义: - -```python -def isr0() -> t.CExtern | t.CVoid | c.State: pass -def isr1() -> t.CExtern | t.CVoid | c.State: pass -``` - -等价 C 代码: -```c -extern void isr0(); -extern void isr1(); -``` - -### 内联函数 - -`t.CInline` 标记函数为内联函数,编译器在调用点直接展开函数体。详见 [01-overview.md 中 t.CInline 深度解析](01-overview.md#tcinline-深度解析)。 - -```python -def fast_add(a: t.CInt, b: t.CInt) -> t.CInt | t.CInline: - return a + b -``` - -### 宏函数 - -当函数返回类型注解包含 `t.CDefine` 时,该函数被视为宏函数,不生成 LLVM IR 函数定义,在调用处内联展开。详见 [01-overview.md 中 t.CDefine 函数](01-overview.md#tcdefine-函数)。 - -```python -def MAKE_FLAG(bit) -> t.CDefine: - return (1 << bit) -``` - -### 静态函数 - -```python -def helper() -> t.CVoid | t.CStatic: - pass -``` - -## 函数属性装饰器 - -使用 `@c.Attribute` 添加 GCC `__attribute__` 属性: - -```python -@c.Attribute(t.attr.section(".text.startup"), t.attr.aligned(16)) -def _start() -> t.CInt: - return 0 -``` - -等价 C 代码: -```c -__attribute__((section(".text.startup"), aligned(16))) -int _start() { - return 0; -} -``` - -### 常用属性组合 - -```python -@c.Attribute(t.attr.always_inline()) -def hot_path() -> t.CInt: - return 0 - -@c.Attribute(t.attr.noreturn()) -def panic(msg: t.CConst | t.CChar | t.CPtr) -> t.CVoid: - serial.puts(msg) - while True: pass - -@c.Attribute(t.attr.packed) -``` - -## LLVM 函数属性 - -在返回类型注解中通过 `t.attr.llvm` 指定 LLVM 属性: - -```python -def foo() -> t.CInt | t.attr.llvm.nobuiltin | t.attr.llvm.nounwind: - return 0 -``` - -## 多返回值(CReturn) - -使用 `@c.CReturn` 装饰器实现多返回值,通过指针参数实现: - -```python -@c.CReturn(t.CInt, t.CInt) -def divmod(a: t.CInt, b: t.CInt) -> t.CVoid: - q: t.CInt = a // b - r: t.CInt = a % b - return q, r -``` - -规则: -1. `CReturn` 中的类型数量决定返回值个数 -2. 自动为每个返回类型添加指针参数(`t.CInt` → `t.CInt | t.CPtr`) -3. 参数名自动生成为 `__ReturnValue0__`、`__ReturnValue1__` 等 -4. 调用处自动传参 `&xxx` -5. 必须使用左右值赋值,返回值不能直接传入函数。 - -## 指针参数 - -```python -def read_data(buf: t.CChar | t.CPtr, size: t.CSizeT) -> t.CInt: - pass -``` - -等价 C 代码: -```c -int read_data(char* buf, size_t size); -``` - -### 输出参数模式 - -使用 `c.Addr` 传递变量地址作为输出参数: - -```python -res: t.CInt = fat32.opendir("/", c.Addr(dp)) -``` - -等价 C 代码: -```c -int res = fat32_opendir("/", &dp); -``` - -后续会使用隐式左值获取来减少 `c.Addr` 的直接使用。 - -## 函数指针类型 - -使用 `t.Callable` 定义函数指针类型: - -```python -irq_handler_t: t.CTypedef | t.Callable[[], t.CInt] -``` - -等价 C 代码: -```c -typedef int (*irq_handler_t)(); -``` - -带参数的函数指针: - -```python -callback_t: t.Callable[[t.CInt, t.CInt], t.CVoid] -``` - -## 默认参数 - -Viper 支持函数默认参数值: - -```python -def create_window(x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt, title: t.CConst | str = "Window") -> t.CInt: - pass -``` - -## return 语句 - -```python -return 0 # return 0; -return # return; (void 函数) -return a, b # 多返回值(需配合 @c.CReturn) -``` - -## 全局变量声明 - -函数外的变量声明为全局变量,函数内通过 `global` 关键字访问: - -```python -BootInfo: bootinfo | t.CPtr - -def init() -> t.CVoid: - global BootInfo - BootInfo = saved_rdi -``` - -支持 func-in-func 嵌套函数。 - -## Call Func 函数调用 - -函数调用最好通过顺序调用来实现 - -```python -def add(x: int, y: int, z: int): - return (x + y) * z - -def main() -> int | t.CExport: - print(add(1, 2, 3)) # (1 + 2) * 3 = 9 -``` - -这也是 C 中的标准实现方法,但实际上,你也可以乱序传参。 - -```python -# 仍然用刚才的 add 举例 -def main() -> int | t.CExport: - print(add(z=3, x=1, y=2)) # (1 + 2) * 3 = 9 -``` - -乱序传参或带参传参对于结构体的初始化同样有效。同时,你也能够给函数指定默认值。 - -```python -def add(x: int, y: int, z: int = 1): - return (x + y) * z - -def main() -> int | t.CExport: - print(add(1, 2)) # (1 + 2) * 1 = 3 -``` - -在结构体中也可以指定默认值。 - - -# 05 - 类与数据布局 - -Viper 中的 `class` 有两种用途:定义**数据布局**(结构体/联合体/枚举,本章内容),以及定义**面向对象的对象类型**(见 [06-oop.md](06-oop.md))。 - -## 结构体定义 - -普通 `class` 定义编译为 LLVM 结构体类型: - -```python -class point: - x: t.CInt - y: t.CInt -``` - -在 C 中: -```c -struct point { - int x; - int y; -}; -``` - -在 LLVM IR 中: -```llvm -%".point" = type { i32, i32 } -``` - -### 带属性的结构体 - -```python -@c.Attribute(t.attr.packed) -class idt_entry: - base_low: t.CUInt16T - selector: t.CUInt16T - ist_attr: t.CUInt8T - type_attr: t.CUInt8T - base_middle: t.CUInt16T - base_high: t.CUInt32T - reserved1: t.CUInt32T -``` - -### 结构体数组 - -```python -idt: list[idt_entry, 256] = [] -``` - -### 结构体指针成员 - -```python -class node: - value: t.CInt - next: node | t.CPtr # 指向自身的指针(有向图链表) -``` - -### 结构体实例化与初始化 - -```python -entry: idt_entry = idt_entry() -``` - -或带构造函数: - -```python -mousepoint = Point(x=1, y=2) -``` - -乱序传参或带参传参对于结构体的初始化同样有效: - -```python -entry: idt_entry = idt_entry(selector=0x08, base_low=0x0000) -``` - -也可以给结构体成员指定默认值: - -```python -class config: - width: t.CInt = 640 - height: t.CInt = 480 - depth: t.CInt = 32 -``` - -使用 `c.Addr` 获取实例指针: - -```python -obj_ptr: MyClass | t.CPtr = c.Addr(MyClass(arg1, arg2)) -``` - -### 匿名结构体成员(❌) - -> WARNING: **警告:** 由于 Viper 在声明结构体,枚举等处不需要关键字,因此 `t.Anonymouse` 是不需要使用的。此关键字不再维护,强行使用可能导致未定义行为。 - -继承 `t.Anonymous` 的类作为匿名成员嵌入: - -```python -class header(t.Anonymous): - magic: t.CUInt32T - version: t.CUInt32T - -class packet: - header # 匿名嵌入,可直接访问 packet.magic - length: t.CUInt32T -``` - -### 字节序标记 - -> WARNING: **警告:** 此关键字是实验性的。未经充分测试,不当使用可能导致未定义行为。 - -使用 `t.BigEndian` 或 `t.LittleEndian` 标记成员的字节序: - -```python -class network_packet: - length: t.CUInt16T | t.BigEndian # 大端序存储 - type: t.CUInt8T # 默认小端序 -``` - -## 联合体 - -继承 `t.CUnion` 定义联合体: - -```python -class value(t.CUnion): - ival: t.CInt - fval: t.CFloat - pval: t.CVoid | t.CPtr -``` - -等价 C 代码: -```c -union value { - int ival; - float fval; - void* pval; -}; -``` - -## 枚举 - -继承 `t.CEnum` 定义枚举: - -```python -class color(t.CEnum): - RED: t.CEnum = 0 - GREEN: t.CEnum = 1 - BLUE: t.CEnum = 2 -``` - -等价 C 代码: -```c -enum color { - RED = 0, - GREEN = 1, - BLUE = 2 -}; -``` - -枚举成员可直接使用名称: - -```python -c: t.CInt = color.RED -``` - -## Typedef - -使用 `t.CTypedef` 创建类型别名: - -```python -irq_handler_t: t.CTypedef | t.Callable[[], t.CInt] # typedef int (*irq_handler_t)(); -``` - -或通过注解赋值: - -```python -MyStruct: t.CTypedef = original_struct # typedef struct original_struct MyStruct; -``` - -更推荐通过后者的形式,前者编译器不一定能够识别到注解是对 `t.CTypedef` 的,还是后面的注解的,而且容易触发未定义行为。 - -## 位域 - -使用 `t.Bit(n)` 定义位域成员: - -```python -class flags: - a: t.CUInt32T | t.Bit[1] - b: t.CUInt32T | t.Bit[3] - c: t.CUInt32T | t.Bit[4] -``` - -注意:如果存入超出位域宽度的值,会被截断。例如 `a` 为 1 位,存入 2(二进制 `10`)会被截断为 0。 - - -# 06 - 面向对象与运算符重载 - -Viper 中的 `class` 有两种语义:**数据布局**(结构体/联合体/枚举,见 [05-classes.md](05-classes.md))和**面向对象**。面向对象特性通过 `@t.Object` 装饰器启用,多态通过 `@t.CVTable` 装饰器启用。 - -## `@t.Object` 面向对象 - -使用 `@t.Object` 装饰器启用面向对象特性,类将拥有成员方法、运算符重载、属性装饰器等 OOP 支持。编译器也会自动识别:如果结构体内有函数定义,会自动使用 `@t.Object` 行为,但在实际工程中更推荐明确标记,避免未定义行为。 - -### 基本定义 - -```python -@t.Object -class ViperKernel: - BootInfo: bootinfo | t.CPtr - VGA: vga._VGAScreenDriver | t.CPtr - VGA_drv: vga._VGAScreenDriver - - def __init__(self): - self.BootInfo = BootInfo - serial.init() - serial.puts("ViperOS VKernel Test\n") -``` - -避免在 `__init__` 中使用 `return`,虽然不会报错,但是你永远无法获得 `return` 的结果,如果需要提前结束代码流,`return` 也不失为一种办法。 - -### 成员方法 - -```python -@t.Object -class Sheet: - id: t.CInt - x: t.CInt - y: t.CInt - w: t.CInt - h: t.CInt - - def __init__(self, x: t.CInt, y: t.CInt, w: t.CInt, h: t.CInt): - self.x = x - self.y = y - self.w = w - self.h = h - - def MoveTo(self, nx: t.CInt, ny: t.CInt): - self.x = nx - self.y = ny - - def Resize(self, nw: t.CInt, nh: t.CInt): - self.w = nw - self.h = nh -``` - -### 方法调用 - -```python -sheet: Sheet = Sheet(0, 0, 640, 480) -sheet.MoveTo(100, 100) -sheet.Resize(800, 600) -``` - -### 属性装饰器 - -支持 Python 的 `@property` 和 `@xxx.setter` 装饰器: - -> `@xxx.setter` 和自定义装饰器正在试验阶段,尽可能不要使用 - -```python -@t.Object -class MyObj: - _value: t.CInt - - @property - def value(self) -> t.CInt: - return self._value - - @value.setter - def value(self, v: t.CInt): - self._value = v -``` - -### 静态方法 - -```python -@staticmethod -def _yield(): - pass -``` - -### 对象指针与解引用 - -`@t.Object` 的实例通常通过指针操作: - -```python -obj_ptr: MyClass | t.CPtr = c.Addr(MyClass()) -obj: MyClass = c.Deref(obj_ptr) -``` - -### 成员访问 - -通过 `self` 访问成员变量和方法: - -```python -def method(self) -> t.CVoid: - self.x = 10 - y: t.CInt = self.y - self.DoSomething() -``` - -### 内嵌对象 - -`@t.Object` 可以包含其他对象实例(非指针): - -```python -@t.Object -class Sheet: - _surf_obj: gfx.Surface - _renderer_obj: gfx.Renderer - surf: gfx.Surface | t.CPtr - renderer: gfx.Renderer | t.CPtr - - def __init__(self, fb: UINT32PTR, zb: float | t.CPtr, w: t.CInt, h: t.CInt): - self._surf_obj = gfx.Surface(fb, zb, w, h) - self.surf = c.Addr(self._surf_obj) - self._renderer_obj = gfx.Renderer(self.surf) - self.renderer = c.Addr(self._renderer_obj) -``` - -### `__before_init__` 方法 - -`@t.Object` 或 `@t.CVTable` 类自动生成 `__before_init__` 方法声明,用于在 `__init__` 之前初始化 vtable: - -```llvm -declare void @".ClassName.__before_init__"(%".ClassName"*) -``` - -值得注意的是,`__before_init__` 并不帮忙初始化内存,而只是初始化虚表等准备工作,实际上,我们更希望用户能自己管理内存。实验性阶段内容中,我们通过内存池机制来帮助用户管理碎片化内容,包括部分小的结构体,但较大内容最好还是由用户手动处理。 - -## `@t.CVTable` 虚函数表与多态 - -> 尽可能避免使用 `self[0]` 来获取结构体成员,其不稳定,也不要手动操作虚表。 - -使用 `@t.CVTable` 装饰器可以启用虚函数表支持。启用后,结构体第一个成员自动插入 `i8*` 类型的 vtable 指针。`@t.CVTable` 的操作必须配合 `@t.Object`,但有时编译器会自动识别是否存在结构体内函数,自动使用 `@t.Object`。 - -### 基本定义 - -```python -@t.Object -@t.CVTable -class Base: - def __init__(self): - pass - def method(self) -> t.CInt: - return 0 -``` - -在 LLVM IR 中,`@t.CVTable` 类的结构体类型自动插入 vtable 指针: - -```llvm -%".Base" = type { i8*, i32 } -``` - -同时,编译器会生成全局 vtable 变量: - -```llvm -@".Base_Vtable" = internal global [1 x i8*] zeroinitializer -``` - -### 继承与多态 - -虚表可以帮你使用继承语法实现多态: - -```python -@t.Object -@t.CVTable -class Base: - def __init__(self): - pass - def method(self) -> t.CInt: - return 0 - -@t.Object -@t.CVTable -class M1(Base): - def method(self) -> t.CInt: - return 1 -``` - -当 M1 被初始化时,VTable 会自动修改,这点和 C++ 相同,尽可能避免直接操作 VTable。 - -继承时,子类会自动继承父类的成员变量和方法。子类重写父类方法时,vtable 中对应位置的函数指针被子类方法替换,实现多态。 - -### VTable 运行时修改 - -如果需要临时构造一个额外的 `Base` 结构体,还可以使用: - -```python -@t.Object -@t.CVTable -class Base: - def __init__(self): - pass - def method(self) -> t.CInt: - return 0 - -def __method1(self) -> t.CInt: - return 1 - -def main() -> t.CInt | t.CExport: - b: Base = Base() - b.method = __method1 -``` - -启用 `VTable` 的表中,允许直接修改内部函数为函数指针,在底层,此操作将修改 `VTable` 来达成目的。编译器会检测当前 vtable 是否与类 vtable 相同,如果相同则创建 vtable 的副本(memcpy),避免修改影响所有实例。 - -### 虚方法调度机制 - -虚方法调用的核心流程: - -1. 从对象指针 GEP 获取第 0 个 slot(vtable 指针) -2. 加载 vtable 指针 -3. bitcast 为 `[N x i8*]*` 类型 -4. GEP 获取方法索引处的函数指针 -5. 加载函数指针 -6. bitcast 为正确的函数指针类型 -7. 间接调用 - -## 继承 - -### 结构体成员继承 - -当子类继承父类(父类在 `Gen.class_members` 中存在)时: - -- 父类的成员变量被继承到子类(排在子类成员之前) -- 父类的默认值也被继承 -- 父类的方法被继承(重命名为 `子类名.方法名`) - -```python -@t.Object -class Animal: - name: list[t.CChar, 32] - age: t.CInt - - def __init__(self, age: t.CInt): - self.age = age - - def Speak(self) -> t.CVoid: - serial.puts("...\n") - -@t.Object -class Dog(Animal): - breed: t.CInt - - def Speak(self) -> t.CVoid: - serial.puts("Woof!\n") -``` - -### 异常类继承 - -Viper 支持异常类的继承,用于 `try/except` 的异常匹配: - -```python -class MyError(Exception): - pass - -class SpecificError(MyError): - pass -``` - -详见 [09-exceptions.md](09-exceptions.md)。 - -## 运算符重载 - -`@t.Object` 类支持运算符重载。编译器在遇到运算符时,首先检查左操作数是否为结构体类型,如果是则尝试调用对应的 dunder 方法。 - -### 算术运算符重载 - -| 运算符 | Dunder 方法 | 示例 | -|--------|------------|------| -| `+` | `__add__` | `a + b` → `a.__add__(b)` | -| `-` | `__sub__` | `a - b` → `a.__sub__(b)` | -| `*` | `__mul__` | `a * b` → `a.__mul__(b)` | -| `/` | `__truediv__` | `a / b` → `a.__truediv__(b)` | -| `//` | `__floordiv__` | `a // b` → `a.__floordiv__(b)` | -| `%` | `__mod__` | `a % b` → `a.__mod__(b)` | -| `**` | `__pow__` | `a ** b` → `a.__pow__(b)` | - -示例: - -```python -@t.Object -class Vec2: - x: t.CFloat - y: t.CFloat - - def __init__(self, x: t.CFloat, y: t.CFloat): - self.x = x - self.y = y - - def __add__(self, other: Vec2) -> Vec2: - result: Vec2 = Vec2(0.0, 0.0) - result.x = self.x + other.x - result.y = self.y + other.y - return result - - def __mul__(self, scalar: t.CFloat) -> Vec2: - result: Vec2 = Vec2(0.0, 0.0) - result.x = self.x * scalar - result.y = self.y * scalar - return result -``` - -### 增量赋值运算符重载 - -| 增量运算符 | 优先 Dunder | 回退 Dunder | -|-----------|------------|------------| -| `+=` | `__iadd__` | `__add__` | -| `-=` | `__isub__` | `__sub__` | -| `*=` | `__imul__` | `__mul__` | -| `/=` | `__itruediv__` | `__truediv__` | -| `//=` | `__ifloordiv__` | `__floordiv__` | -| `%=` | `__imod__` | `__mod__` | -| `**=` | `__ipow__` | `__pow__` | - -如果未定义增量版本(如 `__iadd__`),编译器自动回退到普通版本(如 `__add__`)。 - -### 比较运算符重载 - -> **实验性**:以下比较运算符 dunder 方法在编译器中被识别,但尚未实现自动调度。定义它们不会报错,但比较运算不会自动调用。 - -| 运算符 | Dunder 方法 | 状态 | -|--------|------------|------| -| `==` | `__eq__` | 仅类型推断识别 | -| `!=` | `__ne__` | 仅类型推断识别 | -| `<` | `__lt__` | 仅类型推断识别 | -| `<=` | `__le__` | 仅类型推断识别 | -| `>` | `__gt__` | 仅类型推断识别 | -| `>=` | `__ge__` | 仅类型推断识别 | - -### 反向运算符重载 - -> **实验性**:以下反向运算符 dunder 方法在编译器中被识别,但尚未实现自动调度。 - -| Dunder 方法 | 预期语义 | 状态 | -|------------|---------|------| -| `__radd__` | 右操作数加法 | 仅类型推断识别 | -| `__rsub__` | 右操作数减法 | 仅类型推断识别 | -| `__rmul__` | 右操作数乘法 | 仅类型推断识别 | -| `__rtruediv__` | 右操作数真除法 | 仅类型推断识别 | -| `__rfloordiv__` | 右操作数整除 | 仅类型推断识别 | -| `__rmod__` | 右操作数取模 | 仅类型推断识别 | -| `__rpow__` | 右操作数幂运算 | 仅类型推断识别 | - -### 一元运算符重载 - -> **实验性**:以下一元运算符 dunder 方法在编译器中被识别,但尚未实现自动调度。 - -| 运算符 | Dunder 方法 | 状态 | -|--------|------------|------| -| `-a` | `__neg__` | 仅类型推断识别 | -| `+a` | `__pos__` | 仅类型推断识别 | - -## 可调用对象 `__call__` - -```python -@t.Object -class Counter: - value: t.CInt - - def __init__(self): - self.value = 0 - - def __call__(self) -> t.CInt: - self.value += 1 - return self.value - -c: Counter = Counter() -x: t.CInt = c() # x = 1 -y: t.CInt = c() # y = 2 -``` - -## 下标访问重载 - -### `__getitem__` — 读取 - -```python -def __getitem__(self, key: t.CInt) -> t.CInt: - return self.data[key] -``` - -### `__setitem__` — 赋值 - -```python -def __setitem__(self, key: t.CInt, value: t.CInt): - self.data[key] = value -``` - -### `__delitem__` — 删除 - -```python -def __delitem__(self, key: t.CInt): - pass -``` - -## 布尔转换 `__bool__` - -```python -@t.Object -class Buffer: - size: t.CInt - data: list[t.CChar, 1024] - - def __bool__(self) -> t.CBool: - return self.size > 0 - -buf: Buffer = Buffer() -if buf: - serial.puts("buffer is not empty\n") -``` - -## 长度 `__len__` - -```python -@t.Object -class Buffer: - size: t.CInt - - def __len__(self) -> t.CInt: - return self.size - -buf: Buffer = Buffer() -n: t.CInt = len(buf) -``` - -## 字符串转换 `__str__` - -```python -@t.Object -class Point: - x: t.CInt - y: t.CInt - - def __str__(self) -> t.CConst | t.CChar | t.CPtr: - return "Point" - -p: Point = Point(1, 2) -print(p) # 调用 p.__str__() -``` - -## 绝对值 `__abs__` - -```python -@t.Object -class SignedValue: - val: t.CInt - - def __abs__(self) -> t.CInt: - if self.val < 0: - return -self.val - return self.val - -sv: SignedValue = SignedValue() -sv.val = -42 -a: t.CInt = abs(sv) # a = 42 -``` - -## 迭代器协议 - -Viper 的迭代器协议与 Python 相同,但 `__next__` 的实现方式通过 `StopIteration` 异常来结束。 - -### `__iter__` 和 `__next__` - -```python -@t.Object -class IntRange: - start: t.CInt - end: t.CInt - current: t.CInt - - def __init__(self, start: t.CInt, end: t.CInt): - self.start = start - self.end = end - self.current = start - - def __iter__(self): - return self - - def __next__(self, stop_flag) -> t.CInt: - if self.current >= self.end: - raise StopIteration - val: t.CInt = self.current - self.current += 1 - return val -``` - -### for 循环使用 - -```python -r: IntRange = IntRange(0, 10) -for i in r: - print(i) -``` - -编译器生成的等价逻辑: - -```c -IntRange r = IntRange_init(0, 10); -IntRange iter = IntRange___iter__(&r); -while (1) { - i1 stop_flag = 0; - int i = IntRange___next__(&iter, &stop_flag); - if (stop_flag == 1) break; - print_int(i); -} -``` - -## 上下文管理器 - -`with` 语句要求对象实现 `__enter__` 和 `__exit__` 方法: - -```python -@t.Object -class File: - fd: t.CInt - path: t.CConst | t.CChar | t.CPtr - - def __init__(self, path: t.CConst | t.CChar | t.CPtr, flags: t.CInt): - self.path = path - self.fd = -1 - - def __enter__(self): - self.fd = fat32.open(self.path, self.flags) - return self - - def __exit__(self): - fat32.close(self.fd) - - def read(self) -> t.CInt: - return fat32.read(self.fd) -``` - -使用方式: - -```python -with File("/test.txt", FA_READ) as f: - data: t.CInt = f.read() -``` - -编译器会自动保证 `__exit__` 在 `with` 块结束时被调用。 - -## 析构 `__del__` / `__delete__` - -```python -del obj # 调用 obj.__del__() 或 obj.__delete__() -del arr[idx] # 调用 arr.__delitem__(idx) -``` - -## Dunder 方法完整参考 - -### 已实现自动调度的 Dunder 方法 - -| Dunder 方法 | 触发语法 | 说明 | -|------------|---------|------| -| `__init__` | `ClassName(args)` | 构造函数 | -| `__before_init__` | 自动生成 | vtable 初始化,在 `__init__` 之前执行 | -| `__add__` | `a + b` | 加法 | -| `__sub__` | `a - b` | 减法 | -| `__mul__` | `a * b` | 乘法 | -| `__truediv__` | `a / b` | 真除法 | -| `__floordiv__` | `a // b` | 整除 | -| `__mod__` | `a % b` | 取模 | -| `__pow__` | `a ** b` | 幂运算 | -| `__iadd__` | `a += b` | 增量加法(回退到 `__add__`) | -| `__isub__` | `a -= b` | 增量减法(回退到 `__sub__`) | -| `__imul__` | `a *= b` | 增量乘法(回退到 `__mul__`) | -| `__itruediv__` | `a /= b` | 增量真除法(回退到 `__truediv__`) | -| `__ifloordiv__` | `a //= b` | 增量整除(回退到 `__floordiv__`) | -| `__imod__` | `a %= b` | 增量取模(回退到 `__mod__`) | -| `__ipow__` | `a **= b` | 增量幂运算(回退到 `__pow__`) | -| `__call__` | `obj(args)` | 可调用对象 | -| `__getitem__` | `obj[key]` | 下标读取 | -| `__setitem__` | `obj[key] = value` | 下标赋值 | -| `__delitem__` | `del obj[key]` | 下标删除 | -| `__bool__` | `if obj:` | 布尔转换 | -| `__len__` | `len(obj)` | 长度 | -| `__str__` | `str(obj)` / `print(obj)` | 字符串转换 | -| `__abs__` | `abs(obj)` | 绝对值 | -| `__iter__` | `for x in obj:` | 获取迭代器 | -| `__next__` | `for x in obj:` | 获取下一个值(标志位方式) | -| `__enter__` | `with obj as x:` | 上下文管理器进入 | -| `__exit__` | `with obj as x:` | 上下文管理器退出 | -| `__del__` | `del obj` | 析构 | -| `__delete__` | `del obj` | 删除描述符 | - -### 声明支持但未实现自动调度的 Dunder 方法 - -| Dunder 方法 | 预期触发语法 | 当前状态 | -|------------|------------|---------| -| `__eq__` | `a == b` | 仅类型推断识别,比较运算不自动调度 | -| `__ne__` | `a != b` | 同上 | -| `__lt__` | `a < b` | 同上 | -| `__le__` | `a <= b` | 同上 | -| `__gt__` | `a > b` | 同上 | -| `__ge__` | `a >= b` | 同上 | -| `__neg__` | `-a` | 仅类型推断识别,一元负号不自动调度 | -| `__pos__` | `+a` | 同上 | -| `__radd__` | 右操作数加法 | 仅类型推断识别 | -| `__rsub__` | 右操作数减法 | 同上 | -| `__rmul__` | 右操作数乘法 | 同上 | -| `__rtruediv__` | 右操作数真除法 | 同上 | -| `__rfloordiv__` | 右操作数整除 | 同上 | -| `__rmod__` | 右操作数取模 | 同上 | -| `__rpow__` | 右操作数幂运算 | 同上 | - - -# 07 - 控制流 - -Viper 支持 Python 风格的控制流语句,编译为 LLVM IR 的基本块和分支指令。 - -## 条件语句 - -### if / elif / else - -```python -if x > 0: - y = 1 -elif x == 0: - y = 0 -else: - y = -1 -``` - -等价 C 代码: -```c -if (x > 0) { - y = 1; -} else if (x == 0) { - y = 0; -} else { - y = -1; -} -``` - -### 条件表达式 - -```python -is_dir: t.CInt = 1 if (info.attr & AM_DIR) else 0 -``` - -等价 C 代码: -```c -int is_dir = (info.attr & AM_DIR) ? 1 : 0; -``` - -### None 检查 - -```python -if BootInfo != None: - paging.init(BootInfo.MemmapAddr, BootInfo.MemmapSize) -else: - paging.init(0, 0) -``` - -等价 C 代码: -```c -if (BootInfo != NULL) { - paging_init(BootInfo->MemmapAddr, BootInfo->MemmapSize); -} else { - paging_init(0, 0); -} -``` - -## 循环语句 - -### while 循环 - -```python -i: t.CInt = 0 -while i < 10: - buf[i] = 0 - i += 1 -``` - -等价 C 代码: -```c -int i = 0; -while (i < 10) { - buf[i] = 0; - i += 1; -} -``` - -### while-else - -```python -while i < count: - if found: - break -else: - serial.puts("not found\n") -``` - -`else` 块在循环正常结束(非 `break` 退出)时执行。 - -### 无限循环 - -```python -while True: - sched.Scheduler._yield() -``` - -等价 C 代码: -```c -while (1) { - scheduler_yield(); -} -``` - -### for 循环(range)(关于 for 循环的更多用法,参见 [06-oop.md 中 迭代器协议](06-oop.md#迭代器协议)) - -```python -for i in range(10): - buf[i] = 0 - -for i in range(5, 10): - buf[i] = 0 - -for i in range(0, 100, 2): - buf[i] = 0 -``` - -等价 C 代码: -```c -for (int i = 0; i < 10; i++) { - buf[i] = 0; -} - -for (int i = 5; i < 10; i++) { - buf[i] = 0; -} - -for (int i = 0; i < 100; i += 2) { - buf[i] = 0; -} -``` - -### for 循环(迭代器) - -如果类实现了 `__iter__` 和 `__next__` 方法,可以使用 `for ... in` 迭代: - -```python -container: Iter = Iter() -for item in container: - process(item) -``` - -### for-else - -```python -for i in range(count): - if items[i] == target: - break -else: - serial.puts("not found\n") -``` - -### break 和 continue - -```python -while True: - if done: - break - if skip: - continue - process() -``` - -## match 语句 - -Viper 支持 Python 3.10+ 的 `match` 语句,编译为 C 的 `switch` 语句: - -```python -match self.ctype: - case UI_LABEL: - self.RenderLabel(sh) - case UI_BUTTON: - self.RenderButton(sh) - case UI_PANEL: - self.RenderPanel(sh) - case _: - pass -``` - -等价 C 代码: -```c -switch (self->ctype) { - case UI_LABEL: - self_RenderLabel(self, sh); - break; - case UI_BUTTON: - self_RenderButton(self, sh); - break; - case UI_PANEL: - self_RenderPanel(self, sh); - break; - default: - break; -} -``` - -### match 值匹配 - -```python -match code: - case 0: - serial.puts("OK\n") - case 1: - serial.puts("Error\n") - case _: - serial.puts("Unknown\n") -``` - -### match 或模式 - -```python -match value: - case 1 | 2 | 3: - serial.puts("small\n") - case _: - serial.puts("other\n") -``` - -### fallthrough(无 break) - -默认每个 `case` 自动添加 `break`。如需 fallthrough,使用 `c.NoBreak`: - -```python -match value: - case 1: - do_one() - c.NoBreak - case 2: - do_two() -``` - -如果需要提前 break,需要使用 `c.Break()`,因为在 `Python` 中,`match` 分支不支持直接使用 `break`。 - -## assert 语句 -> 避免使用此语句,此语句未经充分测试,在多数情况下,编译器不知道如何展示结果。 - -```python -assert ptr != None, "null pointer" -``` - -编译为条件检查和错误报告。 - -## with 语句 - -`with` 语句用于资源管理,要求对象实现 `__enter__` 和 `__exit__` 方法: - -```python -with File("/test.txt", FA_READ) as f: - data: t.CInt = f.read() -``` - -等价 C 代码: -```c -File* f = File_enter(File_new("/test.txt", FA_READ)); -int data = File_read(f); -File_exit(f); -``` - - -# 08 - C 语言操作 - -Viper 通过 `c` 模块提供对 C 语言底层特性的访问,包括指针操作、内联汇编、预处理指令等。 - -## 指针操作 - -### 取地址 `c.Addr` - -```python -x: t.CInt = 42 -p: t.CInt | t.CPtr = c.Addr(x) # int* p = &x; -``` - -对结构体成员取地址: - -```python -res: t.CInt = fat32.opendir("/", c.Addr(dp)) # res = fat32_opendir("/", &dp); -``` - -对数组取地址: - -```python -viperlib.snprintf(c.Addr(buf), 64, "hello %d", 42) # snprintf(&buf, 64, "hello %d", 42); -``` - -### 解引用 `c.Deref` - -```python -ptr: Sheet | t.CPtr = c.Addr(sheet_obj) -obj: Sheet = c.Deref(ptr) # struct Sheet obj = *ptr; -``` - -### 内存拷贝 `c.Load` - -```python -c.Load(ptr, value) # *ptr = *value; -``` - -### 解引用赋值 `c.DerefAs` - -```python -c.DerefAs(ptr, value) # *ptr = value; -``` - - -### 赋值 `c.Set` - -```python -c.Set(target, value) # target = value; -``` - -## 内联汇编 `c.Asm` - -Viper 提供了声明式的内联汇编语法,编译为 GCC 风格的 `__asm__ __volatile__` 语句。 - -### 基本用法 - -```python -c.Asm("nop") # __asm__ __volatile__("nop"); -``` - -### 带操作数的汇编 - -使用 f-string 和 `c.AsmInp` / `c.AsmOut` 标记操作数: - -```python -saved_rdi: t.CUnsignedLong -c.Asm(f"mov {c.AsmOut(saved_rdi, t.ASM_DESCR.OUTPUT_REG)}, rdi", - op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RDI]) -``` - -等价 C 代码: -```c -__asm__ __volatile__( - "mov %0, rdi" - : "=r"(saved_rdi) - : - : "memory", "rdi" -); -``` - -### 输入操作数 `c.AsmInp` - -```python -msg: t.CConst | t.CChar | t.CPtr = "Hello" -c.Asm(f"mov rdi, {c.AsmInp(msg, t.ASM_DESCR.REG_ANY)}", - op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RAX]) -``` - -### 完整示例 - -```python -c.Asm(f"""mov rdi, {c.AsmInp(msg, t.ASM_DESCR.REG_ANY)} - call {c.AsmInp(log_info_fn, t.ASM_DESCR.REG_ANY)}""", - op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_RAX, - t.ASM_DESCR.CLOBBER_RCX, t.ASM_DESCR.CLOBBER_RDX, - t.ASM_DESCR.CLOBBER_RDI, t.ASM_DESCR.CLOBBER_RSI, - t.ASM_DESCR.CLOBBER_R8, t.ASM_DESCR.CLOBBER_R9, - t.ASM_DESCR.CLOBBER_R10, t.ASM_DESCR.CLOBBER_R11]) -``` - -### ASM_DESCR 约束字符 - -#### 操作数修饰符 - -| 常量 | 值 | 说明 | -|------|----|------| -| `MODIFIER_OUTPUT` | `=` | 输出操作数 | -| `MODIFIER_READWRITE` | `+` | 读写操作数 | -| `MODIFIER_INPUT` | `` | 输入操作数(默认) | -| `MODIFIER_GLOBAL` | `&` | 全局操作数 | - -#### 寄存器约束 - -| 常量 | 值 | 说明 | -|------|----|------| -| `REG_ANY` | `r` | 任何通用寄存器 | -| `REG_EAX` / `REG_RAX` | `a` | EAX/RAX | -| `REG_EBX` / `REG_RBX` | `b` | EBX/RBX | -| `REG_ECX` / `REG_RCX` | `c` | ECX/RCX | -| `REG_EDX` / `REG_RDX` | `d` | EDX/RDX | -| `REG_ESI` / `REG_RSI` | `S` | ESI/RSI | -| `REG_EDI` / `REG_RDI` | `D` | EDI/RDI | -| `REG_XMM` | `x` | XMM 寄存器 | - -#### 内存与立即数 - -| 常量 | 值 | 说明 | -|------|----|------| -| `MEMORY` | `m` | 内存操作数 | -| `IMMEDIATE` | `i` | 立即数 | -| `ANY` | `g` | 通用寄存器/内存/立即数 | - -#### 预定义组合约束 - -| 常量 | 值 | 说明 | -|------|----|------| -| `OUTPUT_REG` | `=r` | 输出,通用寄存器 | -| `OUTPUT_MEM` | `=m` | 输出,内存 | -| `OUTPUT_EAX` | `=a` | 输出,EAX/RAX | -| `INPUT_REG` | `r` | 输入,通用寄存器 | -| `INPUT_MEM` | `m` | 输入,内存 | -| `INPUT_IMM` | `i` | 输入,立即数 | - -#### 破坏描述符 - -| 常量 | 说明 | -|------|------| -| `CLOBBER_EAX` / `CLOBBER_RAX` | 破坏 EAX/RAX | -| `CLOBBER_EBX` / `CLOBBER_RBX` | 破坏 EBX/RBX | -| `CLOBBER_ECX` / `CLOBBER_RCX` | 破坏 ECX/RCX | -| `CLOBBER_EDX` / `CLOBBER_RDX` | 破坏 EDX/RDX | -| `CLOBBER_ESI` / `CLOBBER_RSI` | 破坏 ESI/RSI | -| `CLOBBER_EDI` / `CLOBBER_RDI` | 破坏 EDI/RDI | -| `CLOBBER_CC` | 破坏条件码(标志寄存器) | -| `CLOBBER_MEMORY` | 破坏内存 | -| `CLOBBER_R8` ~ `CLOBBER_R15` | 破坏 R8~R15 | - -## 预处理指令 - -Viper 通过 `c` 模块的函数调用实现 C 预处理指令。 - -### #define - -```python -c.CDefine("MAX_SIZE", 1024) # #define MAX_SIZE 1024 -``` - -上述方法容易引起未定义行为,至少是不便于理解,更常用的方式是使用类型注解: - -```python -MAX_SIZE: t.CDefine = 1024 # #define MAX_SIZE 1024 -``` - -### 条件编译 - -```python -c.CIfndef(HEADER_H) # #ifndef HEADER_H -c.CDefine(HEADER_H) # #define HEADER_H -c.CEndif() # #endif -``` - -```python -c.CIfdef(DEBUG) # #ifdef DEBUG -c.CEndif() # #endif -``` - -```python -c.CIf(VERSION > 2) # #if VERSION > 2 -c.CElif(VERSION > 1) # #elif VERSION > 1 -c.CElse() # #else -c.CEndif() # #endif -``` - -### #undef - -```python -c.Undef(MACRO_NAME) # #undef MACRO_NAME -``` - -### #error - -```python -c.CError("Platform not supported") # #error "Platform not supported" -``` - -### #pragma -> 此关键字已不再支持 -```python -c.CPragma("GCC diagnostic push") # #pragma GCC diagnostic push -``` - -### ## 连接符 -> 此方法可能已经不再支持 -```python -c.TokenPast("PREFIX_", "NAME") # PREFIX_ ## NAME -``` - -由于编译器设计,以及不需要像 `C` 一样做大量字符替换,对于上述所有的条件宏都远比 `C` 差,实际工程中不推荐使用条件宏,后期将完善宏的设计,引入模板等。 - -## 仅声明 `c.State` - -`c.State` 用于声明但不定义函数或变量: - -```python -def isr0() -> t.CExtern | t.CVoid | c.State: pass # extern void isr0(); -``` - -## LLVM IR 内联 - -### c.LLVMIR - -直接嵌入 LLVM IR 指令来实现高效且跨平台的汇编操作: - -```python -c.LLVMIR(f"add i32 {c.LInp(a)}, {c.LInp(b)}", t.CInt) -``` - -### c.LInp / c.LOut - -标记 LLVM IR 的输入/输出操作数: - -```python -c.LInp(expr) # 输入操作数 -c.LOut(expr) # 输出操作数 -``` - -## 运算符重载 - -`@t.Object` 类支持运算符重载,详见 [06-oop.md 中 运算符重载](06-oop.md#运算符重载)。 - - -# 09 - 异常处理 - -Viper 支持 Python 风格的 `try/except/finally` 异常处理,编译为基于 jmp_buf 和错误码的 C 级别异常处理机制。 - -## 异常处理机制 - -Viper 的异常处理不使用 C++ 风格的零开销异常,而是通过函数参数传递错误码和错误消息实现。编译器自动为可能抛出异常的函数添加 `__eh_msg_out__` 和 `__eh_code_out__` 参数。 - -## try / except - -```python -try: - result = risky_operation() -except ValueError: - serial.puts("ValueError occurred\n") -except OSError: - serial.puts("OSError occurred\n") -except Exception: - serial.puts("Unknown error\n") -``` - -### 内置异常类型 - -Viper 预定义了以下异常类型及其错误码: - -| 异常类型 | 错误码 | -|---------|--------| -| `ValueError` | 1 | -| `TypeError` | 2 | -| `RuntimeError` | 3 | -| `ZeroDivisionError` | 4 | -| `IndexError` | 5 | -| `KeyError` | 6 | -| `IOError` | 7 | -| `OSError` | 8 | -| `AssertionError` | 9 | -| `Exception` | 99 | - -### 自定义异常 - -```python -class DiskFullError(Exception): - pass - -class ReadOnlyError(DiskFullError): - pass -``` - -自定义异常会自动分配递增的错误码(从 100 开始),并支持继承匹配。 - -### 多异常捕获 - -```python -try: - result = operation() -except (ValueError, TypeError): - serial.puts("Value or Type error\n") -``` - -### 获取异常信息 - -```python -try: - result = operation() -except Exception as e: - serial.puts("Error occurred\n") -``` - -## try / finally - -```python -try: - result = operation() -finally: - cleanup() -``` - -`finally` 块无论是否发生异常都会执行。 - -## try / except / finally - -```python -try: - result = operation() -except ValueError: - handle_value_error() -finally: - cleanup() -``` - -## raise 语句 - -### 抛出异常 - -```python -raise ValueError("invalid value") -``` - -### 抛出自定义异常 - -```python -raise MyCustomError("something went wrong") -``` - -### 重新抛出异常 - -```python -raise -``` - -### StopIteration - -`StopIteration` 有特殊处理,用于迭代器协议: - -```python -raise StopIteration -``` - -## 异常处理的编译实现 - -### 函数签名变换 - -可能抛出异常的函数会自动添加错误输出参数: - -```python -def risky_operation() -> t.CInt: - if error: - raise ValueError("bad value") - return 0 -``` - -编译后等价于: - -```c -int risky_operation(char** __eh_msg_out__, int* __eh_code_out__) { - if (error) { - *__eh_code_out__ = 1; // ValueError code - *__eh_msg_out__ = "bad value"; - return 0; - } - return 0; -} -``` - -### 调用点变换 - -```python -try: - result = risky_operation() -except ValueError: - handle_error() -``` - -编译后等价于: - -```c -char* __eh_msg = NULL; -int __eh_code = 0; -int result = risky_operation(&__eh_msg, &__eh_code); -if (__eh_msg != NULL) { - if (__eh_code == 1) { // ValueError - handle_error(); - } -} -``` - -## 异常继承匹配 - -异常匹配支持继承体系。捕获父类异常时,子类异常也会被匹配: - -```python -class FileSystemError(Exception): - pass - -class FileNotFoundError(FileSystemError): - pass - -class PermissionError(FileSystemError): - pass - -try: - operation() -except FileSystemError: - # 也会捕获 FileNotFoundError 和 PermissionError - handle_fs_error() -``` - - -# 10 - 模块与导入系统 - -Viper 的模块系统基于 Python 的 `import` 语法,但编译时通过 TransPyC 的符号表和类型系统实现跨模块的类型解析。 - -## 导入语法 - -### 标准导入 - -```python -import t, c # Viper 内置类型和操作模块 -import asm # 汇编辅助模块 -import string # 字符串操作模块 -``` - -### 模块导入 - -```python -import bootinfo -import intr -import platform.pch as pch -import drivers.serial.uart.serial as serial -``` - -### from 导入 - -```python -from stdint import * # 导入所有 stdint 类型别名 -from drivers.video.vesafb.vga import _VGAScreenDriver -``` - -### 相对导入 - -```python -from . import submodule -from .. import parent_module -``` - -## 特殊模块 - -### `t` 模块 - -类型定义模块,提供所有 C 类型对应的 Viper 类型。每个 Viper 文件通常都需要导入: - -```python -import t -``` - -### `c` 模块 - -C 语言操作模块,提供指针操作、内联汇编、预处理指令等: - -```python -import c -``` - -### `asm` 模块 - -汇编辅助模块,提供常用汇编指令的封装: - -```python -import asm - -asm.sti() # __asm__ __volatile__("sti"); -asm.hlt() # __asm__ __volatile__("hlt"); -asm.cli() # __asm__ __volatile__("cli"); -asm.nop() # __asm__ __volatile__("nop"); -asm.BSSClean() # 清零 BSS 段 -``` - -### `string` 模块 - -字符串/内存操作模块,对应 C 标准库的 `string.h`: -> string 部分使用 x86_64 专有汇编进行加速,因此某些函数在其它架构可能需要手动重新编写。 - -```python -import string - -string.memset(c.Addr(buf), 0, 64) # memset(&buf, 0, 64); -string.memcpy(dst, src, size) # memcpy(dst, src, size); -string.memmove(dst, src, size) # memmove(dst, src, size); -string.memcmp(a, b, size) # memcmp(a, b, size); -string.strcmp(a, b) # strcmp(a, b); -string.strcpy(dst, src) # strcpy(dst, src); -``` - -### `stdint` 模块 - -提供 C `stdint.h` 中的类型别名: - -```python -from stdint import * - -# 提供以下类型别名: -# UINT8PTR, UINT16PTR, UINT32PTR, UINT64PTR -# INT8PTR, INT16PTR, INT32PTR, INT64PTR -# 等等 -``` - -### `viperlib` 模块 - -ViperOS 标准库,提供常用 C 库函数: - -```python -import viperlib - -viperlib.snprintf(c.Addr(buf), 64, "value=%d", 42) # snprintf(&buf, 64, "value=%d", 42); -``` - -### `vpsdk` 模块 - -> vpsdk 模块 专供于基于 Viper 开发的示例操作系统 ViperOS,不可用于其它平台,且需要特殊配置。 - -ViperOS 应用 SDK,提供系统调用和窗口管理: - -```python -import vpsdk.window as window -import vpsdk.process as process -import vpsdk.dynlib as dynlib -import vpsdk.syscall as syscall -``` - -## 模块解析流程 - -### 编译时模块加载 - -Viper 的 `import` 是编译时操作,不涉及运行时模块加载。完整的模块解析流程与两阶段编译紧密耦合: - -1. **阶段一**:从入口文件出发,通过 `import` 语句递归发现所有可达的源文件 -2. **阶段一**:对每个源文件生成 `.pyi` 签名存根和 `.stub.ll` LLVM IR 声明 -3. **阶段二**:加载所有 `.pyi` 和 `.stub.ll`,构建共享符号表 -4. **阶段二**:翻译源文件时,通过符号表解析跨模块的类型和函数引用 -5. **阶段二**:将被引用模块的 `.stub.ll` 声明嵌入到生成的 `.ll` 文件头部 - -### 类型存根文件(.pyi) - -`.pyi` 文件是模块的声明接口,由 `PythonToStubConverter` 在阶段一生成。存根文件的内容规则: - -| 元素 | 存根表示 | -|------|---------| -| `t.CDefine` 常量 | 保留完整定义(含赋值) | -| `t.CDefine` 函数 | 保留完整函数体 | -| 普通函数 | 仅签名 + `c.State` | -| 全局变量 | 添加 `t.CExtern` | -| 类定义 | 保留成员类型注解和方法签名 | - -存根文件还自动添加宏守卫(`c.CIfndef`/`c.CEndif()`),防止重复包含。 - -### SHA1 命名空间与导入 - -每个模块的函数和结构体在 LLVM IR 中自动加上 SHA1 前缀,消除跨模块符号冲突。只有标记为 `t.CExport` 的函数保持原始名称。详见 [01-overview.md 中 SHA1 命名空间机制](01-overview.md#sha1-命名空间机制)。 - -### 符号表 - -所有模块的类型信息统一存储在 `SymbolTable` 中,包含: -- 结构体/联合体/枚举定义 -- 函数签名 -- 全局变量 -- typedef 别名 -- `t.CDefine` 常量 - -### 跨模块类型引用 - -```python -# 在 fat32_types.py 中定义 -class fat32_fileinfo: - fname: list[t.CChar, 13] - attr: t.CUInt8T - file_size: t.CUInt32T - -# 在其他模块中引用 -import fat32_types -info: fat32_types.fat32_fileinfo -``` - -跨模块引用的结构体在 LLVM IR 中使用 SHA1 前缀的类型名: -```llvm -%".fat32_fileinfo" = type { [13 x i8], i8, i32 } -``` - -## 项目 includes 配置 - -在 `project.json` 中配置模块搜索路径: - -```json -{ - "includes": ["../.."], - "source_dir": "./Kernel" -} -``` - -编译器会在 `includes` 指定的目录中搜索导入的模块。 - - -# 11 - 内置函数与运算符 - -Viper 支持 Python 内置函数和运算符,编译为对应的 C/LLVM 操作。 - -## 内置函数 - -### print - -```python -print("Hello, World!") # 调用 puts 或 printf -print(x, y) # 多参数输出 -``` - -### len - -```python -n: t.CInt = len(array) # 获取数组长度(编译时常量) -``` - -### sizeof - -```python -s: t.CSizeT = sizeof(t.CInt) # sizeof(int) -s: t.CSizeT = obj.__sizeof__() # sizeof(obj) -``` - -### abs - -```python -a: t.CInt = abs(x) # abs(x) -``` - -### int / float / bool - -```python -i: t.CInt = int(3.14) # (int)3.14 -f: t.CFloat = float(42) # (float)42 -b: t.CBool = bool(x) # x != 0 -``` - -### min / max - -```python -m: t.CInt = min(a, b) # a < b ? a : b -m: t.CInt = max(a, b) # a > b ? a : b -``` - -### chr / ord - -```python -c: t.CChar = chr(65) # 'A' (整数转字符) -n: t.CInt = ord('A') # 65 (字符转整数) -``` - -### range - -用于 `for` 循环: - -```python -for i in range(10): pass # for (int i = 0; i < 10; i++) -for i in range(5, 10): pass # for (int i = 5; i < 10; i++) -for i in range(0, 10, 2): pass # for (int i = 0; i < 10; i += 2) -``` - -## 运算符 - -### 算术运算符 - -| Viper | C 等价 | 说明 | -|-------|--------|------| -| `a + b` | `a + b` | 加法 | -| `a - b` | `a - b` | 减法 | -| `a * b` | `a * b` | 乘法 | -| `a / b` | `a / b` | 浮点除法 | -| `a // b` | `a / b` | 整数除法 | -| `a % b` | `a % b` | 取模 | -| `a ** b` | `pow(a, b)` | 幂运算 | -| `-a` | `-a` | 取负 | -| `+a` | `+a` | 正号 | - -### 位运算符 - -| Viper | C 等价 | 说明 | -|-------|--------|------| -| `a & b` | `a & b` | 按位与 | -| `a \| b` | `a \| b` | 按位或 | -| `a ^ b` | `a ^ b` | 按位异或 | -| `~a` | `~a` | 按位取反 | -| `a << n` | `a << n` | 左移 | -| `a >> n` | `a >> n` | 右移 | - -> **注意**:`|` 运算符在类型注解中表示类型组合,在表达式中表示按位或。编译器根据上下文区分。 - -### 比较运算符 - -| Viper | C 等价 | 说明 | -|-------|--------|------| -| `a == b` | `a == b` | 等于 | -| `a != b` | `a != b` | 不等于 | -| `a < b` | `a < b` | 小于 | -| `a > b` | `a > b` | 大于 | -| `a <= b` | `a <= b` | 小于等于 | -| `a >= b` | `a >= b` | 大于等于 | - -### 逻辑运算符 - -| Viper | C 等价 | 说明 | -|-------|--------|------| -| `a and b` | `a && b` | 逻辑与 | -| `a or b` | `a \|\| b` | 逻辑或 | -| `not a` | `!a` | 逻辑非 | - -### 增强赋值运算符 - -| Viper | C 等价 | -|-------|--------| -| `a += b` | `a += b` | -| `a -= b` | `a -= b` | -| `a *= b` | `a *= b` | -| `a //= b` | `a /= b` | -| `a %= b` | `a %= b` | -| `a <<= b` | `a <<= b` | -| `a >>= b` | `a >>= b` | -| `a &= b` | `a &= b` | -| `a \|= b` | `a \|= b` | -| `a ^= b` | `a ^= b` | - -## 类型自动转换 - -Viper 在算术运算中自动进行类型提升: - -1. **整数宽度提升**:较窄的整数类型自动扩展为较宽的类型 - - 有符号类型使用符号扩展(`sext`) - - 无符号类型使用零扩展(`zext`) - -2. **整数到浮点**:整数与浮点数运算时,整数自动转换为浮点 - -3. **浮点精度提升**:`float` 与 `double` 运算时,`float` 提升为 `double` - -## 指针算术 - -指针与整数的加法支持自动计算偏移: - -```python -buf: t.CUInt32T | t.CPtr -buf[i] = value # buf[i] = value; (自动计算偏移) -``` - -## 数组下标 - -```python -buf: list[t.CChar, 64] -buf[0] = 'H' # buf[0] = 'H'; -buf[i] = value # buf[i] = value; - -info.fname[0] # info.fname[0] (结构体数组成员访问) -``` - -## 成员访问 - -```python -obj.x # obj.x (直接成员) -obj.method() # obj.method() (方法调用) -ptr.x # ptr->x (指针自动解引用) -``` - -## 字符串字面量 - -字符串字面量编译为 C 字符串常量(`const char*`),其为只读: - -```python -serial.puts("Hello") # 传递 const char* -``` - -### 字符串索引 - -```python -msg: t.CConst | str = "Hello" -serial.puts(c.Addr(msg[4])) # 访问 msg[4] 的地址,输出 'o' -``` - -## C 标准库函数 - -Viper 内置支持以下 C 标准库函数的直接调用: - -| 函数 | 签名 | -|------|------| -| `strlen(s)` | `size_t strlen(const char* s)` | -| `memset(s, c, n)` | `void* memset(void* s, int c, size_t n)` | -| `memcpy(d, s, n)` | `void* memcpy(void* d, const void* s, size_t n)` | -| `memmove(d, s, n)` | `void* memmove(void* d, const void* s, size_t n)` | -| `memcmp(a, b, n)` | `int memcmp(const void* a, const void* b, size_t n)` | -| `strcmp(a, b)` | `int strcmp(const char* a, const char* b)` | -| `strncmp(a, b, n)` | `int strncmp(const char* a, const char* b, size_t n)` | -| `strcpy(d, s)` | `char* strcpy(char* d, const char* s)` | -| `strncpy(d, s, n)` | `char* strncpy(char* d, const char* s, size_t n)` | -| `strcat(d, s)` | `char* strcat(char* d, const char* s)` | -| `puts(s)` | `int puts(const char* s)` | -| `atoi(s)` | `int atoi(const char* s)` | -| `atol(s)` | `long atol(const char* s)` | -| `abs(x)` | `int abs(int x)` | -| `labs(x)` | `long labs(long x)` | - -部分模式比如裸机没有 libc,则不能使用这些函数,即使环境满足,Viper 标准库也可能和 C 标准库冲突。 - - -# 12 - 项目配置与构建 - -Viper 项目使用 `project.json` 配置文件管理编译和链接参数。 - -## project.json 结构 - -```json -{ - "name": "Kernel", - "version": "1.0.0", - "source_dir": "./Kernel", - "temp_dir": "./temp", - "output_dir": "./output", - "compiler": { - "cmd": "llc", - "flags": ["-filetype=obj", "-mtriple=x86_64-none-elf", "-relocation-model=static", "-O2"] - }, - "linker": { - "cmd": "ld.lld.exe", - "flags": [ - "-m", "elf_x86_64", - "-T", "linker.ld", - "--oformat", "elf64-x86-64", - "--strip-all" - ], - "output": "kernel.bin" - }, - "includes": ["../../includes"], - "target": { - "triple": "x86_64-none-elf", - "datalayout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" - }, - "options": { - "slice_level": 3, - "target": "llvm", - "strict_mode": true - } -} -``` - -## 配置项说明 - -### 基本信息字段 - -| 字段 | 类型 | 说明 | -|------|------|------| -| `name` | string | 项目名称 | -| `version` | string | 项目版本 | -| `source_dir` | string | 源代码目录(相对于 project.json 所在目录) | -| `temp_dir` | string | 临时文件目录(存放 .pyi 存根等) | -| `output_dir` | string | 输出文件目录 | - -### 编译器配置 - -| 字段 | 类型 | 说明 | -|------|------|------| -| `compiler.cmd` | string | 编译器命令(通常为 `llc`) | -| `compiler.flags` | string[] | 编译器标志 | - -常用 `llc` 标志: -- `-filetype=obj`:输出目标文件 -- `-mtriple=x86_64-none-elf`:目标三元组 -- `-relocation-model=static`:静态重定位 -- `-O2`:优化级别 - -### 链接器配置 - -| 字段 | 类型 | 说明 | -|------|------|------| -| `linker.cmd` | string | 链接器命令(通常为 `ld.lld.exe`) | -| `linker.flags` | string[] | 链接器标志 | -| `linker.output` | string | 输出文件名 | - -常用 `ld.lld` 标志: -- `-m elf_x86_64`:ELF x86_64 格式 -- `-T linker.ld`:链接脚本 -- `--oformat elf64-x86-64`:输出 ELF 格式 -- `--oformat binary`:输出原始二进制(用于内核) -- `--strip-all`:去除所有符号信息 - -### 目标平台配置 - -| 字段 | 类型 | 说明 | -|------|------|------| -| `target.triple` | string | LLVM 目标三元组 | -| `target.datalayout` | string | LLVM 数据布局字符串 | - -默认值: -- triple: `x86_64-none-elf` -- datalayout: `e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128` - -### 包含路径 - -| 字段 | 类型 | 说明 | -|------|------|------| -| `includes` | string[] | 模块搜索路径列表 | - -### 编译选项 - -| 字段 | 类型 | 说明 | -|------|------|------| -| `options.slice_level` | int | 切片优化级别(0-3) | -| `options.target` | string | 编译目标(目前仅支持 `llvm`) | -| `options.strict_mode` | bool | 严格模式 | - -## 切片优化级别 - -| 级别 | 名称 | 说明 | -|------|------|------| -| `0` | `no_optimize` | 无优化 | -| `1` | `conservative` | 保守优化 | -| `2` | `moderate` | 适度优化 | -| `3` | `aggressive` | 激进优化(默认) | -| `s` | `size` | 体积优化 | - -## 项目结构示例 - -### 内核项目 - -``` -VKernel/ -├── project.json # 项目配置 -├── linker.ld # 链接脚本 -├── Kernel/ # 源代码目录 -│ ├── main.py # 内核入口 -│ ├── bootinfo.py -│ ├── intr/ -│ │ ├── gdt.py -│ │ ├── idt.py -│ │ └── syscall.py -│ ├── drivers/ -│ │ ├── serial/ -│ │ ├── video/ -│ │ ├── storage/ -│ │ └── ... -│ └── ... -├── temp/ # 临时文件(自动生成) -│ ├── .pyi # 签名存根(阶段一生成) -│ ├── .stub.ll # LLVM IR 声明(阶段一生成) -│ └── _sha1_map.txt # SHA1→源文件路径映射 -└── output/ # 输出文件(自动生成) - ├── kernel.bin # 内核二进制 - ├── *.deps.json # 依赖信息 - └── linker.ld # 生成的链接脚本 -``` - -### 应用项目 - -``` -HelloWorld/ -├── project.json # 项目配置 -├── linker.ld # 链接脚本 -├── main.py # 应用入口 -├── temp/ # 临时文件 -└── output/ # 输出文件 - └── helloworld.elf # ELF 可执行文件 -``` - -### 库项目 - -``` -SerialLogger/ -├── project.json # 项目配置 -├── linker.ld # 链接脚本 -├── serial_logger.py # 库源码 -├── temp/ # 临时文件 -└── output/ # 输出文件 -``` - -## 链接脚本 - -ViperOS 使用自定义链接脚本控制内存布局: - -```ld -ENTRY(_start) - -SECTIONS -{ - . = 0x100000; /* 加载地址 */ - - .text : { - *(.text.startup) - *(.text*) - } - - .rodata : { - *(.rodata*) - } - - .data : { - *(.data*) - } - - .bss : { - *(.bss*) - *(COMMON) - } -} -``` - -## 编译命令 - -TransPyC 编译器的基本用法(注:适用于单个文件,而不适用于工程): - -```bash -python TransPyC.py -f InputFile -o OutputFile [options] -``` - -### 命令行参数 - -| 参数 | 说明 | -|------|------| -| `-f` | 输入文件路径 | -| `-o` | 输出文件路径 | -| `-wh` | 头文件列表 | -| `-debug` | 调试输出文件 | -| `-cc` | 编译命令 | -| `-cflags` | 编译标志 | -| `-run` | 编译后运行 | -| `-args` | 运行参数 | -| `-h` | 辅助文件(C 或 Python) | - -工程编译使用: -```bash -python Projectrans.py xxx.json -``` -即可 - -## 增量编译 - -TransPyC 支持基于 SHA1 的增量编译,与两阶段编译模型紧密耦合: - -### 阶段一增量 - -- 每个源文件按内容计算 SHA1 哈希(16位) -- 如果 `.pyi` 和 `.stub.ll` 已存在,则跳过生成(缓存命中) -- 只有源文件内容变化导致 SHA1 变化时才重新生成声明接口 -- `temp/_sha1_map.txt` 记录 SHA1 → 源文件路径的映射,格式为 `:` - -### 阶段二增量 - -- 阶段二加载 `temp/_sha1_map.txt` 重建 SHA1 映射 -- 过滤掉不在当前 SHA1 映射中的旧 `.pyi` 和 `.stub.ll` 文件 -- 共享符号表一次性构建,避免每个文件重复加载 - -### SHA1 命名空间与增量编译的协同 - -SHA1 同时服务于命名空间隔离和增量编译: -- **命名空间**:非 `t.CExport` 函数和结构体使用 SHA1 前缀,消除符号冲突 -- **增量编译**:SHA1 不变则缓存命中,SHA1 变化则重新生成 - -详见 [01-overview.md 中 SHA1 命名空间机制](01-overview.md#sha1-命名空间机制)。 - -