-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEnumeratorZip.bas
More file actions
163 lines (149 loc) · 19 KB
/
EnumeratorZip.bas
File metadata and controls
163 lines (149 loc) · 19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Attribute VB_Name = "myProject"
Option Explicit
Private Type codeItem
extension As String
module_name As String
code_content() As String
End Type
Private Const TypeBinary As Long = 1
Private Const vbext_pp_none As Long = 0
Private Const ForReading As Long = 1, ForWriting As Long = 2, ForAppending As Long = 8
Private Function getCodeDefinition(ByVal itemNo As Long) As codeItem
With getCodeDefinition
Select Case itemNo
Case 1
.extension = ".bas"
.module_name = "TestCode"
ReDim .code_content(0 To 0)
.code_content(0) = "QXR0cmlidXRlIFZCX05hbWUgPSAiVGVzdENvZGUiDQpPcHRpb24gRXhwbGljaXQNCg0KU3ViIHRlc3ROdW1iZXJSYW5nZSgpDQogICAgRGltIGMgQXMgTmV3IE51bWJlclJhbmdlDQogICAgYy5nZW5lcmF0b3JUbyAxMA0KDQogICAgRGltIGlkeCBBcyBMb25nOiBpZHggPSAxDQogICAgRGltIHZhbA0KDQogICAgRm9yIEVhY2ggdmFsIEluIGMNCiAgICAgICAgRGVidWcuUHJpbnQgdmFsDQogICAgICAgIElmIGlkeCA+IDEwMCBUaGVuIEV4aXQgU3ViICAgICAgICAgICAgICAgJyBKdXN0IGluIGNhc2Ugb2YgaW5maW5pdGUgbG9vcHMNCiAgICAgICAgaWR4ID0gaWR4ICsgMQ0KICAgIE5leHQgdmFsDQoNCkVuZCBTdWINCg0KDQpTdWIgY29tcGFyZVNwZWVkKE9wdGlvbmFsIHRlc3RSYW5nZSBBcyBMb25nID0gMTApDQogICAgRGltIG15U3RvcHdhdGNoIEFzIFN0b3B3YXRjaA0KICAgIFNldCBteVN0b3B3YXRjaCA9IFRvb2xib3guU3RvcHdhdGNoUHJvdmlkZXIubmV3U3RvcHdhdGNoDQogICAgDQogICAgbXlTdG9wd2F0Y2guU3RhcnQNCiAgICANCiAgICAgICAgbXlTdG9wd2F0Y2guT3BlbkxhYmVsICJTdGFuZGFyZCINCiAgICAgICAgICAgIERpbSBub3JtYWxSYW5nZSBBcyBOZXcgQ29sbGVjdGlvbg0KDQogICAgICAgICAgICBteVN0b3B3YXRjaC5PcGVuTGFiZWwgIkNyZWF0ZSINCiAg" & _
"ICAgICAgICAgICAgICBnZW5lcmF0ZUNvbGxlY3Rpb25UbyBub3JtYWxSYW5nZSwgdGVzdFJhbmdlDQogICAgICAgICAgICBteVN0b3B3YXRjaC5DbG9zZUxhYmVsDQoNCiAgICAgICAgICAgIG15U3RvcHdhdGNoLk9wZW5MYWJlbCAiTG9vcCINCiAgICAgICAgICAgICAgICBEaW0gdmFsXzINCiAgICAgICAgICAgICAgICBGb3IgRWFjaCB2YWxfMiBJbiBub3JtYWxSYW5nZQ0KICAgICAgICAgICAgICAgICAgICAnZG8gbm90aGluZw0KICAgICAgICAgICAgICAgIE5leHQgdmFsXzINCiAgICAgICAgICAgIG15U3RvcHdhdGNoLkNsb3NlTGFiZWwNCiAgICAgICAgbXlTdG9wd2F0Y2guQ2xvc2VMYWJlbA0KICAgICAgICANCiAgICAgICAgbXlTdG9wd2F0Y2guT3BlbkxhYmVsICJHZW5lcmF0b3IiDQogICAgICAgICAgICBEaW0gZ2VuZXJhdG9yUmFuZ2UgQXMgTmV3IE51bWJlclJhbmdlDQoNCiAgICAgICAgICAgIG15U3RvcHdhdGNoLk9wZW5MYWJlbCAiQ3JlYXRlIg0KICAgICAgICAgICAgICAgIGdlbmVyYXRvclJhbmdlLmdlbmVyYXRvclRvIHRlc3RSYW5nZQ0KICAgICAgICAgICAgbXlTdG9wd2F0Y2guQ2xvc2VMYWJlbA0KDQogICAgICAgICAgICBteVN0b3B3YXRjaC5PcGVuTGFiZWwgIkxvb3AiDQogICAgICAgICAgICAgICAgRGltIHZhbF8xDQogICAgICAgICAgICAgICAgRm9yIEVh" & _
"Y2ggdmFsXzEgSW4gZ2VuZXJhdG9yUmFuZ2UNCiAgICAgICAgICAgICAgICAgICAgJ2RvIG5vdGhpbmcNCiAgICAgICAgICAgICAgICBOZXh0IHZhbF8xDQogICAgICAgICAgICBteVN0b3B3YXRjaC5DbG9zZUxhYmVsDQogICAgICAgIG15U3RvcHdhdGNoLkNsb3NlTGFiZWwNCg0KICAgIG15U3RvcHdhdGNoLkZpbmlzaA0KICAgIG15U3RvcHdhdGNoLlJlc3VsdHMuVG9JbW1lZGlhdGVXaW5kb3cNCkVuZCBTdWINCg0KUHJpdmF0ZSBTdWIgZ2VuZXJhdGVDb2xsZWN0aW9uVG8oQnlSZWYgY29sIEFzIENvbGxlY3Rpb24sIEJ5VmFsIHJhbmdlU2l6ZSBBcyBMb25nKQ0KICAgIERpbSBpIEFzIExvbmcNCiAgICBGb3IgaSA9IDAgVG8gcmFuZ2VTaXplIC0gMQ0KICAgICAgICBjb2wuQWRkIGkNCiAgICBOZXh0DQpFbmQgU3ViDQo="
Case 2
.extension = ".cls"
.module_name = "NumberRange"
ReDim .code_content(0 To 0)
.code_content(0) = "VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVlDQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIk51bWJlclJhbmdlIg0KQXR0cmlidXRlIFZCX0dsb2JhbE5hbWVTcGFjZSA9IEZhbHNlDQpBdHRyaWJ1dGUgVkJfQ3JlYXRhYmxlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9QcmVkZWNsYXJlZElkID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9FeHBvc2VkID0gRmFsc2UNCk9wdGlvbiBFeHBsaWNpdA0KT3B0aW9uIEJhc2UgMA0KDQonID09PSBUaGUgdmFsdWVzIHdlJ3JlIGFjdHVhbGx5IGdvaW5nIHRvIHJldHVybiA9PT09PT09PT09PT09PT09PT09DQpJbXBsZW1lbnRzIElWYWx1ZVByb3ZpZGVyDQoNClByaXZhdGUgVHlwZSBUUmFuZ2UNCiAgICBpc0dlbmVyYXRvciBBcyBCb29sZWFuDQogICAgY3VycmVudENvdW50IEFzIExvbmcNCiAgICBtYXhDb3VudCBBcyBMb25nDQpFbmQgVHlwZQ0KDQpQcml2YXRlIHRoaXMgQXMgVFJhbmdlDQoNClByaXZhdGUgRnVuY3Rpb24gSVZhbHVlUHJvdmlkZXJfR2V0TmV4dCgpIEFzIFZhcmlhbnQNCiAgICBJVmFsdWVQcm92aWRlcl9HZXROZXh0ID0gdGhpcy5jdXJyZW50Q291bnQgICAgICAnT3IgdHJ5IENocig2NSArIHRoaXMuY3VycmVudENvdW50KQ0KICAgIHRoaXMuY3VycmVudENvdW50ID0gdGhpcy5jdXJyZW50Q291" & _
"bnQgKyAxDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBJVmFsdWVQcm92aWRlcl9IYXNNb3JlKCkgQXMgQm9vbGVhbg0KICAgIElWYWx1ZVByb3ZpZGVyX0hhc01vcmUgPSB0aGlzLmlzR2VuZXJhdG9yIEFuZCAodGhpcy5jdXJyZW50Q291bnQgPD0gdGhpcy5tYXhDb3VudCkNCkVuZCBGdW5jdGlvbg0KDQonID09PSBQdWJsaWMgaW50ZXJmYWNlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpQdWJsaWMgU3ViIGdlbmVyYXRvclRvKEJ5VmFsIGNvdW50IEFzIExvbmcpDQogICAgdGhpcy5pc0dlbmVyYXRvciA9IFRydWUNCiAgICB0aGlzLmN1cnJlbnRDb3VudCA9IDANCiAgICB0aGlzLm1heENvdW50ID0gY291bnQgLSAxDQpFbmQgU3ViDQoNCicgPT09IEVudW1lcmF0aW9uIHN1cHBvcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClB1YmxpYyBQcm9wZXJ0eSBHZXQgTmV3RW51bSgpIEFzIElFbnVtVkFSSUFOVA0KQXR0cmlidXRlIE5ld0VudW0uVkJfVXNlck1lbUlkID0gLTQNCiAgICAnQXR0cmlidXRlIE5ld0VudW0uVkJfVXNlck1lbUlkID0gLTQNCiAgICBTZXQgTmV3RW51bSA9IE5ld0VudW1lcmF0b3IoTWUpDQpFbmQgUHJvcGVydHkNCg0KJyA9PT0gSW50ZXJuYWxzID09PT09PT09PT09PT09PT09" & _
"PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUHJpdmF0ZSBTdWIgQ2xhc3NfSW5pdGlhbGl6ZSgpDQogICAgJyBJZiB5b3UgbmVlZGVkIHRvIGluaXRpYWxpemUgYHRoaXNgLCB5b3UgY291bGQgZG8gc28gaGVyZQ0KRW5kIFN1Yg0K"
Case 3
.extension = ".cls"
.module_name = "IValueProvider"
ReDim .code_content(0 To 0)
.code_content(0) = "VkVSU0lPTiAxLjAgQ0xBU1MNCkJFR0lODQogIE11bHRpVXNlID0gLTEgICdUcnVlDQpFTkQNCkF0dHJpYnV0ZSBWQl9OYW1lID0gIklWYWx1ZVByb3ZpZGVyIg0KQXR0cmlidXRlIFZCX0dsb2JhbE5hbWVTcGFjZSA9IEZhbHNlDQpBdHRyaWJ1dGUgVkJfQ3JlYXRhYmxlID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9QcmVkZWNsYXJlZElkID0gRmFsc2UNCkF0dHJpYnV0ZSBWQl9FeHBvc2VkID0gRmFsc2UNCicgSVZhbHVlUHJvdmlkZXI6IFByb3ZpZGUgdmFsdWVzLg0KT3B0aW9uIEV4cGxpY2l0DQpPcHRpb24gQmFzZSAwDQoNCicgUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG1vcmUgdmFsdWVzDQpQdWJsaWMgRnVuY3Rpb24gSGFzTW9yZSgpIEFzIEJvb2xlYW4NCkVuZCBGdW5jdGlvbg0KDQonIFJldHVybiB0aGUgbmV4dCB2YWx1ZQ0KUHVibGljIEZ1bmN0aW9uIEdldE5leHQoKSBBcyBWYXJpYW50DQpFbmQgRnVuY3Rpb24NCg=="
Case 4
.extension = ".bas"
.module_name = "MEnumerator"
ReDim .code_content(0 To 1)
.code_content(0) = "QXR0cmlidXRlIFZCX05hbWUgPSAiTUVudW1lcmF0b3IiDQonIE1vZGlmaWVkIGJ5IGN4dyBmcm9tIGNvZGUgYnkgaHR0cDovL3d3dy52YmZvcnVtcy5jb20vbWVtYmVyLnBocD8yNTU2MjMtREVYV0VSWA0KJyBwb3N0ZWQgYXQgaHR0cDovL3d3dy52YmZvcnVtcy5jb20vc2hvd3RocmVhZC5waHA/ODU0OTYzLVZCNi1JRW51bVZBUklBTlQtRm9yLUVhY2gtc3VwcG9ydC13aXRob3V0LWEtdHlwZWxpYiZwPTUyMjkwOTUmdmlld2Z1bGw9MSNwb3N0NTIyOTA5NQ0KJyBMaWNlbnNlOiAiVXNlIGl0IGhvdyB5b3Ugc2VlIGZpdC4iIC0gaHR0cDovL3d3dy52YmZvcnVtcy5jb20vc2hvd3RocmVhZC5waHA/ODU0OTYzLVZCNi1JRW51bVZBUklBTlQtRm9yLUVhY2gtc3VwcG9ydC13aXRob3V0LWEtdHlwZWxpYiZwPTUyMzI2ODkmdmlld2Z1bGw9MSNwb3N0NTIzMjY4OQ0KJyBFeHBsYW5hdGlvbiBhdCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTIyNjE2ODcvMjg3NzM2NA0KDQonDQonIE1FbnVtZXJhdG9yLmJhcw0KJw0KJyBJbXBsZW1lbnRhdGlvbiBvZiBJRW51bVZBUklBTlQgdG8gc3VwcG9ydCBGb3IgRWFjaCBpbiBWQjYNCicNCicnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycn" & _
"JycnJycnJycnJycNCk9wdGlvbiBFeHBsaWNpdA0KDQpQcml2YXRlIFR5cGUgVEVOVU1FUkFUT1INCiAgICBWVGFibGVQdHIgICBBcyBMb25nDQogICAgUmVmZXJlbmNlcyAgQXMgTG9uZw0KICAgIEVudW1lcmFibGUgIEFzIElWYWx1ZVByb3ZpZGVyDQogICAgSW5kZXggICAgICAgQXMgTG9uZw0KRW5kIFR5cGUNCg0KUHJpdmF0ZSBFbnVtIEFQSQ0KICAgIE5VTExfID0gMA0KICAgIFNfT0sgPSAwDQogICAgU19GQUxTRSA9IDENCiAgICBFX05PVElNUEwgPSAmSDgwMDA0MDAxDQogICAgRV9OT0lOVEVSRkFDRSA9ICZIODAwMDQwMDINCiAgICBFX1BPSU5URVIgPSAmSDgwMDA0MDAzDQogICAgI0lmIEZhbHNlIFRoZW4NCiAgICBEaW0gTlVMTF8sIFNfT0ssIFNfRkFMU0UsIEVfTk9USU1QTCwgRV9OT0lOVEVSRkFDRSwgRV9QT0lOVEVSDQogICAgI0VuZCBJZg0KRW5kIEVudW0NCg0KUHJpdmF0ZSBEZWNsYXJlIEZ1bmN0aW9uIEZuY1B0ciBMaWIgIm1zdmJ2bTYwIiBBbGlhcyAiVmFyUHRyIiAoQnlWYWwgQWRkcmVzcyBBcyBMb25nKSBBcyBMb25nDQpQcml2YXRlIERlY2xhcmUgRnVuY3Rpb24gR2V0TWVtNCBMaWIgIm1zdmJ2bTYwIiAoU3JjIEFzIEFueSwgRHN0IEFzIEFueSkgQXMgTG9uZw0KUHJpdmF0ZSBEZWNsYXJlIEZ1bmN0aW9uIENvcHlCeXRlc1plcm8gTGliICJtc3Zidm02MCIg" & _
"QWxpYXMgIl9fdmJhQ29weUJ5dGVzWmVybyIgKEJ5VmFsIExlbmd0aCBBcyBMb25nLCBEc3QgQXMgQW55LCBTcmMgQXMgQW55KSBBcyBMb25nDQpQcml2YXRlIERlY2xhcmUgRnVuY3Rpb24gQ29UYXNrTWVtQWxsb2MgTGliICJvbGUzMiIgKEJ5VmFsIGNiIEFzIExvbmcpIEFzIExvbmcNClByaXZhdGUgRGVjbGFyZSBTdWIgQ29UYXNrTWVtRnJlZSBMaWIgIm9sZTMyIiAoQnlWYWwgcHYgQXMgTG9uZykNClByaXZhdGUgRGVjbGFyZSBGdW5jdGlvbiBJSURGcm9tU3RyaW5nIExpYiAib2xlMzIiIChCeVZhbCBscHN6IEFzIExvbmcsIEJ5VmFsIGxwaWlkIEFzIExvbmcpIEFzIExvbmcNClByaXZhdGUgRGVjbGFyZSBGdW5jdGlvbiBTeXNBbGxvY1N0cmluZ0J5dGVMZW4gTGliICJvbGVhdXQzMiIgKEJ5VmFsIHBzeiBBcyBMb25nLCBCeVZhbCBjYmxlbiBBcyBMb25nKSBBcyBMb25nDQpQcml2YXRlIERlY2xhcmUgRnVuY3Rpb24gVmFyaWFudENvcHlUb1B0ciBMaWIgIm9sZWF1dDMyIiBBbGlhcyAiVmFyaWFudENvcHkiIChCeVZhbCBwdmFyZ0Rlc3QgQXMgTG9uZywgQnlSZWYgcHZhcmdTcmMgQXMgVmFyaWFudCkgQXMgTG9uZw0KUHJpdmF0ZSBEZWNsYXJlIEZ1bmN0aW9uIEludGVybG9ja2VkSW5jcmVtZW50IExpYiAia2VybmVsMzIiIChCeVJlZiBBZGRlbmQgQXMgTG9uZykgQXMgTG9uZw0K" & _
"UHJpdmF0ZSBEZWNsYXJlIEZ1bmN0aW9uIEludGVybG9ja2VkRGVjcmVtZW50IExpYiAia2VybmVsMzIiIChCeVJlZiBBZGRlbmQgQXMgTG9uZykgQXMgTG9uZw0KDQonJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnDQpQdWJsaWMgRnVuY3Rpb24gTmV3RW51bWVyYXRvcihCeVJlZiBFbnVtZXJhYmxlIEFzIElWYWx1ZVByb3ZpZGVyKSBBcyBJRW51bVZBUklBTlQNCiAgICAnIENsYXNzIEZhY3RvcnkNCiAgICAnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnDQoNCiAgICBTdGF0aWMgVlRhYmxlKDYpIEFzIExvbmcNCiAgICBJZiBWVGFibGUoMCkgPSBOVUxMXyBUaGVuDQogICAgICAgICcgU2V0dXAgdGhlIENPTSBvYmplY3QncyB2aXJ0dWFsIHRhYmxlDQogICAgICAgIFZUYWJsZSgwKSA9IEZuY1B0cihBZGRyZXNzT2YgSVVua25vd25fUXVlcnlJbnRlcmZhY2UpDQogICAgICAgIFZUYWJsZSgxKSA9IEZuY1B0cihBZGRyZXNzT2YgSVVua25vd25fQWRkUmVmKQ0KICAgICAgICBWVGFibGUoMikgPSBGbmNQdHIoQWRkcmVzc09mIElV" & _
"bmtub3duX1JlbGVhc2UpDQogICAgICAgIFZUYWJsZSgzKSA9IEZuY1B0cihBZGRyZXNzT2YgSUVudW1WQVJJQU5UX05leHQpDQogICAgICAgIFZUYWJsZSg0KSA9IEZuY1B0cihBZGRyZXNzT2YgSUVudW1WQVJJQU5UX1NraXApDQogICAgICAgIFZUYWJsZSg1KSA9IEZuY1B0cihBZGRyZXNzT2YgSUVudW1WQVJJQU5UX1Jlc2V0KQ0KICAgICAgICBWVGFibGUoNikgPSBGbmNQdHIoQWRkcmVzc09mIElFbnVtVkFSSUFOVF9DbG9uZSkNCiAgICBFbmQgSWYNCg0KICAgIERpbSB0aGlzIEFzIFRFTlVNRVJBVE9SDQogICAgV2l0aCB0aGlzDQogICAgICAgICcgU2V0dXAgdGhlIENPTSBvYmplY3QNCiAgICAgICAgLlZUYWJsZVB0ciA9IFZhclB0cihWVGFibGUoMCkpDQogICAgICAgIC5SZWZlcmVuY2VzID0gMQ0KICAgICAgICBTZXQgLkVudW1lcmFibGUgPSBFbnVtZXJhYmxlDQogICAgRW5kIFdpdGgNCg0KICAgICcgQWxsb2NhdGUgYSBzcG90IGZvciBpdCBvbiB0aGUgaGVhcA0KICAgIERpbSBwVGhpcyBBcyBMb25nDQogICAgcFRoaXMgPSBDb1Rhc2tNZW1BbGxvYyhMZW5CKHRoaXMpKQ0KICAgIElmIHBUaGlzIFRoZW4NCiAgICAgICAgJyBDb3B5Qnl0ZXNaZXJvIGlzIHVzZWQgdG8gemVybyBvdXQgdGhlIG9yaWdpbmFsDQogICAgICAgICcgLkVudW1lcmFibGUgcmVmZXJlbmNlLCBzbyB0" & _
"aGF0IFZCIGRvZXNuJ3QgbWVzcyB1cCB0aGUNCiAgICAgICAgJyByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIG91ciBlbnVtZXJhdG9yIG91dCBmcm9tIHVuZGVyIHVzDQogICAgICAgIENvcHlCeXRlc1plcm8gTGVuQih0aGlzKSwgQnlWYWwgcFRoaXMsIHRoaXMNCiAgICAgICAgRGVSZWYoVmFyUHRyKE5ld0VudW1lcmF0b3IpKSA9IHBUaGlzDQogICAgRW5kIElmDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBSZWZUb0lJRCQoQnlWYWwgcmlpZCBBcyBMb25nKQ0KICAgICcgY29waWVzIGFuIElJRCByZWZlcmVuY2VkIGludG8gYSBiaW5hcnkgc3RyaW5nDQogICAgQ29uc3QgSUlEX0NCIEFzIExvbmcgPSAxNiYgICAgICAgICAgICAgICAgICAgJyBHVUlEL0lJRCBzaXplIGluIGJ5dGVzDQogICAgRGVSZWYoVmFyUHRyKFJlZlRvSUlEKSkgPSBTeXNBbGxvY1N0cmluZ0J5dGVMZW4ocmlpZCwgSUlEX0NCKQ0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rpb24gU3RyVG9JSUQkKEJ5UmVmIGlpZCBBcyBTdHJpbmcpDQogICAgJyBjb252ZXJ0cyBhIHN0cmluZyB0byBhbiBJSUQNCiAgICBTdHJUb0lJRCA9IFJlZlRvSUlEJChOVUxMXykNCiAgICBJSURGcm9tU3RyaW5nIFN0clB0cihpaWQpLCBTdHJQdHIoU3RyVG9JSUQpDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBG" & _
"dW5jdGlvbiBJSURfSVVua25vd24oKSBBcyBTdHJpbmcNCiAgICBTdGF0aWMgaWlkIEFzIFN0cmluZw0KICAgIElmIFN0clB0cihpaWQpID0gTlVMTF8gVGhlbiBfDQogICAgICAgICAgICAgICAgICAgICBpaWQgPSBTdHJUb0lJRCQoInswMDAwMDAwMC0wMDAwLTAwMDAtQzAwMC0wMDAwMDAwMDAwNDZ9IikNCiAgICBJSURfSVVua25vd24gPSBpaWQNCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIElJRF9JRW51bVZBUklBTlQoKSBBcyBTdHJpbmcNCiAgICBTdGF0aWMgaWlkIEFzIFN0cmluZw0KICAgIElmIFN0clB0cihpaWQpID0gTlVMTF8gVGhlbiBfDQogICAgICAgICAgICAgICAgICAgICBpaWQgPSBTdHJUb0lJRCQoInswMDAyMDQwNC0wMDAwLTAwMDAtQzAwMC0wMDAwMDAwMDAwNDZ9IikNCiAgICBJSURfSUVudW1WQVJJQU5UID0gaWlkDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBJVW5rbm93bl9RdWVyeUludGVyZmFjZShCeVJlZiB0aGlzIEFzIFRFTlVNRVJBVE9SLCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5VmFsIHJpaWQgQXMgTG9uZywgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVZhbCBwcHZPYmplY3QgQXMgTG9uZyBfDQogICAgICAgICAgICAgICAgICAgICAgICAg" & _
"ICAgICAgICAgICAgICAgICkgQXMgTG9uZw0KICAgIElmIHBwdk9iamVjdCA9IE5VTExfIFRoZW4NCiAgICAgICAgSVVua25vd25fUXVlcnlJbnRlcmZhY2UgPSBFX1BPSU5URVINCiAgICAgICAgRXhpdCBGdW5jdGlvbg0KICAgIEVuZCBJZg0KDQogICAgU2VsZWN0IENhc2UgUmVmVG9JSUQkKHJpaWQpDQogICAgQ2FzZSBJSURfSVVua25vd24sIElJRF9JRW51bVZBUklBTlQNCiAgICAgICAgRGVSZWYocHB2T2JqZWN0KSA9IFZhclB0cih0aGlzKQ0KICAgICAgICBJVW5rbm93bl9BZGRSZWYgdGhpcw0KICAgICAgICBJVW5rbm93bl9RdWVyeUludGVyZmFjZSA9IFNfT0sNCiAgICBDYXNlIEVsc2UNCiAgICAgICAgSVVua25vd25fUXVlcnlJbnRlcmZhY2UgPSBFX05PSU5URVJGQUNFDQogICAgRW5kIFNlbGVjdA0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rpb24gSVVua25vd25fQWRkUmVmKEJ5UmVmIHRoaXMgQXMgVEVOVU1FUkFUT1IpIEFzIExvbmcNCiAgICBJVW5rbm93bl9BZGRSZWYgPSBJbnRlcmxvY2tlZEluY3JlbWVudCh0aGlzLlJlZmVyZW5jZXMpDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBJVW5rbm93bl9SZWxlYXNlKEJ5UmVmIHRoaXMgQXMgVEVOVU1FUkFUT1IpIEFzIExvbmcNCiAgICBJVW5rbm93bl9SZWxlYXNlID0gSW50ZXJsb2NrZWREZWNy" & _
"ZW1lbnQodGhpcy5SZWZlcmVuY2VzKQ0KICAgIElmIElVbmtub3duX1JlbGVhc2UgPSAwJiBUaGVuDQogICAgICAgIFNldCB0aGlzLkVudW1lcmFibGUgPSBOb3RoaW5nDQogICAgICAgIENvVGFza01lbUZyZWUgVmFyUHRyKHRoaXMpDQogICAgRW5kIElmDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBJRW51bVZBUklBTlRfTmV4dChCeVJlZiB0aGlzIEFzIFRFTlVNRVJBVE9SLCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5VmFsIGNlbHQgQXMgTG9uZywgXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeVZhbCByZ1ZhciBBcyBMb25nLCBfDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5UmVmIHBjZWx0RmV0Y2hlZCBBcyBMb25nIF8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBBcyBMb25nDQoNCiAgICBDb25zdCBWQVJJQU5UX0NCIEFzIExvbmcgPSAxNiAgICAgICAgICAgICAgICAnIFZBUklBTlQgc2l6ZSBpbiBieXRlcw0KDQogICAgSWYgcmdWYXIgPSBOVUxMXyBUaGVuDQogICAgICAgIElFbnVtVkFSSUFOVF9OZXh0ID0gRV9QT0lOVEVSDQogICAgICAgIEV4aXQgRnVuY3Rpb24NCiAgICBFbmQgSWYNCg0KICAgIERpbSBGZXRjaGVkIEFzIExvbmcNCiAgICBGZXRjaGVkID0g" & _
"MA0KICAgIERpbSBlbGVtZW50IEFzIFZhcmlhbnQNCg0KICAgIFdpdGggdGhpcw0KICAgICAgICBEbyBXaGlsZSB0aGlzLkVudW1lcmFibGUuSGFzTW9yZQ0KICAgICAgICAgICAgZWxlbWVudCA9IC5FbnVtZXJhYmxlLkdldE5leHQNCiAgICAgICAgICAgIFZhcmlhbnRDb3B5VG9QdHIgcmdWYXIsIGVsZW1lbnQNCiAgICAgICAgICAgIEZldGNoZWQgPSBGZXRjaGVkICsgMSYNCiAgICAgICAgICAgIElmIEZldGNoZWQgPSBjZWx0IFRoZW4gRXhpdCBEbw0KICAgICAgICAgICAgcmdWYXIgPSBQdHJBZGQocmdWYXIsIFZBUklBTlRfQ0IpDQogICAgICAgIExvb3ANCiAgICBFbmQgV2l0aA0KDQogICAgSWYgVmFyUHRyKHBjZWx0RmV0Y2hlZCkgVGhlbiBwY2VsdEZldGNoZWQgPSBGZXRjaGVkDQogICAgSWYgRmV0Y2hlZCA8IGNlbHQgVGhlbiBJRW51bVZBUklBTlRfTmV4dCA9IFNfRkFMU0UNCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIEZ1bmN0aW9uIElFbnVtVkFSSUFOVF9Ta2lwKEJ5UmVmIHRoaXMgQXMgVEVOVU1FUkFUT1IsIEJ5VmFsIGNlbHQgQXMgTG9uZykgQXMgTG9uZw0KICAgIElFbnVtVkFSSUFOVF9Ta2lwID0gRV9OT1RJTVBMDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBJRW51bVZBUklBTlRfUmVzZXQoQnlSZWYgdGhpcyBBcyBURU5VTUVSQVRPUikgQXMgTG9u"
.code_content(1) = "Zw0KICAgIElFbnVtVkFSSUFOVF9SZXNldCA9IEVfTk9USU1QTA0KRW5kIEZ1bmN0aW9uDQoNClByaXZhdGUgRnVuY3Rpb24gSUVudW1WQVJJQU5UX0Nsb25lKEJ5UmVmIHRoaXMgQXMgVEVOVU1FUkFUT1IsIEJ5VmFsIHBwRW51bSBBcyBMb25nKSBBcyBMb25nDQogICAgSUVudW1WQVJJQU5UX0Nsb25lID0gRV9OT1RJTVBMDQpFbmQgRnVuY3Rpb24NCg0KUHJpdmF0ZSBGdW5jdGlvbiBQdHJBZGQoQnlWYWwgUG9pbnRlciBBcyBMb25nLCBCeVZhbCBPZmZzZXQgQXMgTG9uZykgQXMgTG9uZw0KICAgIENvbnN0IFNJR05fQklUIEFzIExvbmcgPSAmSDgwMDAwMDAwDQogICAgUHRyQWRkID0gKFBvaW50ZXIgWG9yIFNJR05fQklUKSArIE9mZnNldCBYb3IgU0lHTl9CSVQNCkVuZCBGdW5jdGlvbg0KDQpQcml2YXRlIFByb3BlcnR5IExldCBEZVJlZihCeVZhbCBBZGRyZXNzIEFzIExvbmcsIEJ5VmFsIFZhbHVlIEFzIExvbmcpDQogICAgR2V0TWVtNCBWYWx1ZSwgQnlWYWwgQWRkcmVzcw0KRW5kIFByb3BlcnR5DQoNCg0K"
Case Else
.extension = "missing"
End Select
End With
End Function
Public Sub Extract()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim code_module As codeItem
Dim savedPath As String, basePath As String
Dim i As Long
'check if vbproject accessible
If Not ProjectAccessible(wb) Then
MsgBox "The VBA project cannot be accessed programmatically"
Exit Sub
End If
'check if temp folder acessible
i = 0
basePath = Environ$("Temp") & "\"
Do While True
i = i + 1
code_module = getCodeDefinition(i)
If code_module.extension = "missing" Then
Exit Do
Else
savedPath = createFile(code_module, basePath)
importFile savedPath, wb
Kill savedPath
End If
Loop
RemoveModule "myProject", wb
End Sub
Private Function ProjectAccessible(ByVal wb As Workbook) As Boolean
On Error Resume Next
With wb.VBProject
ProjectAccessible = .Protection = vbext_pp_none
ProjectAccessible = ProjectAccessible And Err.Number = 0
End With
End Function
Private Function createFile(ByRef definition As codeItem, ByVal filePath As String) As String
Dim newFileObj As Object
Set newFileObj = CreateObject("ADODB.Stream")
newFileObj.Type = TypeBinary
'Open the stream and write binary data
newFileObj.Open
'create file from x64 string
With definition
Dim bytes() As Byte
Dim fullPath As String
fullPath = filePath & .module_name & .extension
bytes = FromBase64(Join(.code_content))
newFileObj.Write bytes
newFileObj.SaveToFile fullPath, ForWriting
createFile = fullPath
End With
End Function
Private Sub importFile(ByVal filePath As String, ByRef wb As Workbook)
wb.VBProject.VBComponents.Import filePath
End Sub
Private Function RemoveModule(ByVal moduleName As String, ByRef book As Workbook) As Boolean
On Error Resume Next
With book.VBProject.VBComponents
.Remove .Item(moduleName)
End With
RemoveModule = Not (Err.Number = 9)
End Function
Private Function FromBase64(ByVal Text As String) As Byte()
Dim Out() As Byte
Dim b64(0 To 255) As Byte, str() As Byte, i As Long, j As Long, v As Long, b0 As Long, b1 As Long, b2 As Long, b3 As Long
Out = vbNullString
If Len(Text) Then Else Exit Function
str = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
For i = 2 To UBound(str) Step 2
b64(str(i)) = i \ 2
Next
ReDim Out(0 To ((Len(Text) + 3) \ 4) * 3 - 1)
str = Text & String$(2, 0)
For i = 0 To UBound(str) - 7 Step 2
b0 = b64(str(i))
If b0 Then
b1 = b64(str(i + 2))
b2 = b64(str(i + 4))
b3 = b64(str(i + 6))
v = b0 * 262144 + b1 * 4096& + b2 * 64& + b3 - 266305
Out(j) = v \ 65536
Out(j + 1) = (v \ 256&) Mod 256
Out(j + 2) = v Mod 256
j = j + 3
i = i + 6
End If
Next
If b2 = 0 Then
Out(j - 3) = (v + 65) \ 65536
j = j - 2
ElseIf b3 = 0 Then
Out(j - 3) = (v + 1) \ 65536
Out(j - 2) = ((v + 1) \ 256&) Mod 256
j = j - 1
End If
ReDim Preserve Out(j - 1)
FromBase64 = Out
End Function