voting_schemes-electionguard 0.24.2 → 0.24.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile.lock +100 -68
  4. data/app/assets/javascripts/voting_schemes/electionguard/electionguard.js +1 -1
  5. data/lib/voting_schemes/electionguard/version.rb +1 -1
  6. data/public/assets/electionguard/attrs.data +0 -0
  7. data/public/assets/electionguard/attrs.js +1 -1
  8. data/public/assets/electionguard/bulletin_board-electionguard.data +0 -0
  9. data/public/assets/electionguard/bulletin_board-electionguard.js +1 -1
  10. data/public/assets/electionguard/console.html +89 -61
  11. data/public/assets/electionguard/electionguard.js +1 -1
  12. data/public/assets/electionguard/gmpy2.data +0 -0
  13. data/public/assets/electionguard/gmpy2.js +1 -1
  14. data/public/assets/electionguard/hypothesis.js +1 -1
  15. data/public/assets/electionguard/jsons.js +1 -1
  16. data/public/assets/electionguard/micropip.data +0 -0
  17. data/public/assets/electionguard/micropip.js +1 -1
  18. data/public/assets/electionguard/packages.json +1 -1
  19. data/public/assets/electionguard/packaging.data +0 -0
  20. data/public/assets/electionguard/packaging.js +1 -0
  21. data/public/assets/electionguard/pyasn1.js +1 -1
  22. data/public/assets/electionguard/pyodide.asm.data +0 -0
  23. data/public/assets/electionguard/pyodide.asm.js +11 -11
  24. data/public/assets/electionguard/pyodide.asm.wasm +0 -0
  25. data/public/assets/electionguard/pyodide.js +781 -333
  26. data/public/assets/electionguard/pyparsing.data +0 -0
  27. data/public/assets/electionguard/pyparsing.js +1 -0
  28. data/public/assets/electionguard/rsa.js +1 -1
  29. data/public/assets/electionguard/six.data +0 -0
  30. data/public/assets/electionguard/six.js +1 -0
  31. data/public/assets/electionguard/sortedcontainers.js +1 -1
  32. data/public/assets/electionguard/test.data +0 -0
  33. data/public/assets/electionguard/test.html +21 -24
  34. data/public/assets/electionguard/test.js +1 -1
  35. data/public/assets/electionguard/typish.js +1 -1
  36. data/public/assets/electionguard/webworker.js +29 -21
  37. data/public/assets/electionguard/webworker_dev.js +14 -14
  38. metadata +8 -6
  39. data/public/assets/electionguard/distlib.data +0 -0
  40. data/public/assets/electionguard/distlib.js +0 -1
  41. data/public/assets/electionguard/pyodide.asm.data.js +0 -1
  42. data/public/assets/electionguard/renderedhtml.css +0 -209
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23558ed19d797ddc8ce0067e9d065135bd301e0e53c78fb65359635724c22e6e
4
- data.tar.gz: 675f6c290a85e5bf6ae753e536a4002eeac149a88b15ec7689bd49d31e68f5fc
3
+ metadata.gz: e9af969294043de69da3a024e6f53c1f2eb98220ddc1a6145456f1280d48d981
4
+ data.tar.gz: 1cedbf2eef75a1f039d689b67848f441af77a2bd4b6b207ae6d5aef5fedfa438
5
5
  SHA512:
6
- metadata.gz: 3fb06405e052525c2f814a262a1377238416353317c80e014271839ed8e08631352c07ca04bf670577ae19c4ace57aa6afcd9806bd7f5f1599e5e354cc253edd
7
- data.tar.gz: 73566146d2f0b5d35b081290c2a1a8f4eb904ed8a92c321a1ec2dd2ad2f99c1df8e74d9399943c63b7ffda3c305bf2dd50216361ad27febd0640ec6a00236b06
6
+ metadata.gz: d44c9aa052f1406a7bb4d3bc80d5d600b78eb540820c485cd055317bd1e4b68dea2daf802fc93500cdfe5a8e694da13edbdc856261a003b8569458b68b13a2e5
7
+ data.tar.gz: fc23f07cf48d192b3ce636b81e4af9a073ca191fa6d8e83ecafc8c2ff32e11e38d9beb29d6f59a22d9b8a1bc21a3b55c90e6f4b595cb77833c3ca8c3c48fe45c
data/.rubocop.yml CHANGED
@@ -1,4 +1,4 @@
1
- inherit_from: https://raw.githubusercontent.com/decidim/decidim/develop/.rubocop_ruby.yml
1
+ inherit_from: https://raw.githubusercontent.com/decidim/decidim/develop/decidim-dev/config/rubocop/ruby.yml
2
2
 
3
3
  AllCops:
4
4
  Include:
data/Gemfile.lock CHANGED
@@ -1,83 +1,96 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- voting_schemes-electionguard (0.24.2)
4
+ voting_schemes-electionguard (0.24.4)
5
5
  rails (>= 5.0.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actioncable (7.0.8)
11
- actionpack (= 7.0.8)
12
- activesupport (= 7.0.8)
10
+ actioncable (7.1.0)
11
+ actionpack (= 7.1.0)
12
+ activesupport (= 7.1.0)
13
13
  nio4r (~> 2.0)
14
14
  websocket-driver (>= 0.6.1)
15
- actionmailbox (7.0.8)
16
- actionpack (= 7.0.8)
17
- activejob (= 7.0.8)
18
- activerecord (= 7.0.8)
19
- activestorage (= 7.0.8)
20
- activesupport (= 7.0.8)
15
+ zeitwerk (~> 2.6)
16
+ actionmailbox (7.1.0)
17
+ actionpack (= 7.1.0)
18
+ activejob (= 7.1.0)
19
+ activerecord (= 7.1.0)
20
+ activestorage (= 7.1.0)
21
+ activesupport (= 7.1.0)
21
22
  mail (>= 2.7.1)
22
23
  net-imap
23
24
  net-pop
24
25
  net-smtp
25
- actionmailer (7.0.8)
26
- actionpack (= 7.0.8)
27
- actionview (= 7.0.8)
28
- activejob (= 7.0.8)
29
- activesupport (= 7.0.8)
26
+ actionmailer (7.1.0)
27
+ actionpack (= 7.1.0)
28
+ actionview (= 7.1.0)
29
+ activejob (= 7.1.0)
30
+ activesupport (= 7.1.0)
30
31
  mail (~> 2.5, >= 2.5.4)
31
32
  net-imap
32
33
  net-pop
33
34
  net-smtp
34
- rails-dom-testing (~> 2.0)
35
- actionpack (7.0.8)
36
- actionview (= 7.0.8)
37
- activesupport (= 7.0.8)
38
- rack (~> 2.0, >= 2.2.4)
35
+ rails-dom-testing (~> 2.2)
36
+ actionpack (7.1.0)
37
+ actionview (= 7.1.0)
38
+ activesupport (= 7.1.0)
39
+ nokogiri (>= 1.8.5)
40
+ rack (>= 2.2.4)
41
+ rack-session (>= 1.0.1)
39
42
  rack-test (>= 0.6.3)
40
- rails-dom-testing (~> 2.0)
41
- rails-html-sanitizer (~> 1.0, >= 1.2.0)
42
- actiontext (7.0.8)
43
- actionpack (= 7.0.8)
44
- activerecord (= 7.0.8)
45
- activestorage (= 7.0.8)
46
- activesupport (= 7.0.8)
43
+ rails-dom-testing (~> 2.2)
44
+ rails-html-sanitizer (~> 1.6)
45
+ actiontext (7.1.0)
46
+ actionpack (= 7.1.0)
47
+ activerecord (= 7.1.0)
48
+ activestorage (= 7.1.0)
49
+ activesupport (= 7.1.0)
47
50
  globalid (>= 0.6.0)
48
51
  nokogiri (>= 1.8.5)
49
- actionview (7.0.8)
50
- activesupport (= 7.0.8)
52
+ actionview (7.1.0)
53
+ activesupport (= 7.1.0)
51
54
  builder (~> 3.1)
52
- erubi (~> 1.4)
53
- rails-dom-testing (~> 2.0)
54
- rails-html-sanitizer (~> 1.1, >= 1.2.0)
55
- activejob (7.0.8)
56
- activesupport (= 7.0.8)
55
+ erubi (~> 1.11)
56
+ rails-dom-testing (~> 2.2)
57
+ rails-html-sanitizer (~> 1.6)
58
+ activejob (7.1.0)
59
+ activesupport (= 7.1.0)
57
60
  globalid (>= 0.3.6)
58
- activemodel (7.0.8)
59
- activesupport (= 7.0.8)
60
- activerecord (7.0.8)
61
- activemodel (= 7.0.8)
62
- activesupport (= 7.0.8)
63
- activestorage (7.0.8)
64
- actionpack (= 7.0.8)
65
- activejob (= 7.0.8)
66
- activerecord (= 7.0.8)
67
- activesupport (= 7.0.8)
61
+ activemodel (7.1.0)
62
+ activesupport (= 7.1.0)
63
+ activerecord (7.1.0)
64
+ activemodel (= 7.1.0)
65
+ activesupport (= 7.1.0)
66
+ timeout (>= 0.4.0)
67
+ activestorage (7.1.0)
68
+ actionpack (= 7.1.0)
69
+ activejob (= 7.1.0)
70
+ activerecord (= 7.1.0)
71
+ activesupport (= 7.1.0)
68
72
  marcel (~> 1.0)
69
- mini_mime (>= 1.1.0)
70
- activesupport (7.0.8)
73
+ activesupport (7.1.0)
74
+ base64
75
+ bigdecimal
71
76
  concurrent-ruby (~> 1.0, >= 1.0.2)
77
+ connection_pool (>= 2.2.5)
78
+ drb
72
79
  i18n (>= 1.6, < 2)
73
80
  minitest (>= 5.1)
81
+ mutex_m
74
82
  tzinfo (~> 2.0)
75
83
  ast (2.4.2)
84
+ base64 (0.1.1)
85
+ bigdecimal (3.1.4)
76
86
  builder (3.2.4)
77
87
  concurrent-ruby (1.1.10)
88
+ connection_pool (2.4.1)
78
89
  crass (1.0.6)
79
90
  date (3.3.3)
80
91
  diff-lcs (1.5.0)
92
+ drb (2.1.1)
93
+ ruby2_keywords
81
94
  erubi (1.12.0)
82
95
  faker (2.22.0)
83
96
  i18n (>= 1.8.11, < 2)
@@ -85,6 +98,10 @@ GEM
85
98
  activesupport (>= 6.1)
86
99
  i18n (1.12.0)
87
100
  concurrent-ruby (~> 1.0)
101
+ io-console (0.6.0)
102
+ irb (1.8.1)
103
+ rdoc
104
+ reline (>= 0.3.8)
88
105
  loofah (2.21.3)
89
106
  crass (~> 1.0.2)
90
107
  nokogiri (>= 1.12.0)
@@ -94,11 +111,11 @@ GEM
94
111
  net-pop
95
112
  net-smtp
96
113
  marcel (1.0.2)
97
- method_source (1.0.0)
98
114
  mini_mime (1.1.5)
99
115
  mini_portile2 (2.8.4)
100
116
  minitest (5.20.0)
101
- net-imap (0.3.7)
117
+ mutex_m (0.1.2)
118
+ net-imap (0.4.0)
102
119
  date
103
120
  net-protocol
104
121
  net-pop (0.1.2)
@@ -116,24 +133,31 @@ GEM
116
133
  parallel (1.22.1)
117
134
  parser (3.1.2.1)
118
135
  ast (~> 2.4.1)
136
+ psych (5.1.0)
137
+ stringio
119
138
  racc (1.7.1)
120
- rack (2.2.8)
139
+ rack (3.0.8)
140
+ rack-session (2.0.0)
141
+ rack (>= 3.0.0)
121
142
  rack-test (2.1.0)
122
143
  rack (>= 1.3)
123
- rails (7.0.8)
124
- actioncable (= 7.0.8)
125
- actionmailbox (= 7.0.8)
126
- actionmailer (= 7.0.8)
127
- actionpack (= 7.0.8)
128
- actiontext (= 7.0.8)
129
- actionview (= 7.0.8)
130
- activejob (= 7.0.8)
131
- activemodel (= 7.0.8)
132
- activerecord (= 7.0.8)
133
- activestorage (= 7.0.8)
134
- activesupport (= 7.0.8)
144
+ rackup (2.1.0)
145
+ rack (>= 3)
146
+ webrick (~> 1.8)
147
+ rails (7.1.0)
148
+ actioncable (= 7.1.0)
149
+ actionmailbox (= 7.1.0)
150
+ actionmailer (= 7.1.0)
151
+ actionpack (= 7.1.0)
152
+ actiontext (= 7.1.0)
153
+ actionview (= 7.1.0)
154
+ activejob (= 7.1.0)
155
+ activemodel (= 7.1.0)
156
+ activerecord (= 7.1.0)
157
+ activestorage (= 7.1.0)
158
+ activesupport (= 7.1.0)
135
159
  bundler (>= 1.15.0)
136
- railties (= 7.0.8)
160
+ railties (= 7.1.0)
137
161
  rails-dom-testing (2.2.0)
138
162
  activesupport (>= 5.0.0)
139
163
  minitest
@@ -141,16 +165,21 @@ GEM
141
165
  rails-html-sanitizer (1.6.0)
142
166
  loofah (~> 2.21)
143
167
  nokogiri (~> 1.14)
144
- railties (7.0.8)
145
- actionpack (= 7.0.8)
146
- activesupport (= 7.0.8)
147
- method_source
168
+ railties (7.1.0)
169
+ actionpack (= 7.1.0)
170
+ activesupport (= 7.1.0)
171
+ irb
172
+ rackup (>= 1.0.0)
148
173
  rake (>= 12.2)
149
- thor (~> 1.0)
150
- zeitwerk (~> 2.5)
174
+ thor (~> 1.0, >= 1.2.2)
175
+ zeitwerk (~> 2.6)
151
176
  rainbow (3.1.1)
152
177
  rake (13.0.6)
178
+ rdoc (6.5.0)
179
+ psych (>= 4.0.0)
153
180
  regexp_parser (2.5.0)
181
+ reline (0.3.9)
182
+ io-console (~> 0.5)
154
183
  rexml (3.2.5)
155
184
  rspec (3.11.0)
156
185
  rspec-core (~> 3.11.0)
@@ -182,11 +211,14 @@ GEM
182
211
  rubocop-rspec (2.11.1)
183
212
  rubocop (~> 1.19)
184
213
  ruby-progressbar (1.11.0)
214
+ ruby2_keywords (0.0.5)
215
+ stringio (3.0.8)
185
216
  thor (1.2.2)
186
217
  timeout (0.4.0)
187
218
  tzinfo (2.0.6)
188
219
  concurrent-ruby (~> 1.0)
189
220
  unicode-display_width (2.2.0)
221
+ webrick (1.8.1)
190
222
  websocket-driver (0.7.6)
191
223
  websocket-extensions (>= 0.1.0)
192
224
  websocket-extensions (0.1.5)
@@ -1 +1 @@
1
- (()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{TrusteeWrapperAdapter:()=>o,VoterWrapperAdapter:()=>s});class r{processPythonCodeOnWorker(e,t){return new Promise(((r,o)=>{this.worker.onmessage=e=>{r(e.data.results)},this.worker.onerror=e=>{console.error(e),o(e)},this.worker.postMessage({python:e,...t})}))}}class o extends r{constructor({trusteeId:e,workerUrl:t}){super(),this.trusteeId=e,this.worker=new Worker(t)}setup(){return this.processPythonCodeOnWorker("\n from js import trustee_id\n from bulletin_board.electionguard.trustee import Trustee\n trustee = Trustee(trustee_id)\n ",{trustee_id:this.trusteeId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n import json\n from js import message_type, decoded_data\n trustee.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const[{message_type:e,content:t}]=r;return{messageType:e,content:t}}}isFresh(){return this.processPythonCodeOnWorker("\n trustee.is_fresh()\n ")}backup(){return this.processPythonCodeOnWorker("\n trustee.backup().hex()\n ")}restore(e){return this.processPythonCodeOnWorker("\n from js import state\n\n trustee = Trustee.restore(bytes.fromhex(state))\n True\n ",{state:e})}isKeyCeremonyDone(){return this.processPythonCodeOnWorker("\n trustee.is_key_ceremony_done()\n ")}isTallyDone(){return this.processPythonCodeOnWorker("\n trustee.is_tally_done()\n ")}}class s extends r{constructor({voterId:e,workerUrl:t}){super(),this.voterId=e,this.worker=new Worker(t)}setup(){return this.processPythonCodeOnWorker("\n from js import voter_id\n from bulletin_board.electionguard.voter import Voter\n voter = Voter(voter_id)\n ",{voter_id:this.voterId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n import json\n from js import message_type, decoded_data\n voter.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r[0]){const{message_type:e,content:t}=r[0];return{messageType:e,content:t}}}async encrypt(e,t){const[r,o]=await this.processPythonCodeOnWorker("\n from js import plain_vote, ballot_style\n voter.encrypt(plain_vote, ballot_style)\n ",{plain_vote:e,ballot_style:t});return{auditableData:r,encryptedData:o}}}window.electionGuardVotingScheme=t})();
1
+ (()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{TrusteeWrapperAdapter:()=>o,VoterWrapperAdapter:()=>s});class r{async processPythonCodeOnWorker(e,t){return new Promise(((r,o)=>{this.worker.onmessage=e=>{r(e.data.results)},this.worker.onerror=e=>{console.error("Error in worker",e),o(e)},this.worker.postMessage({python:e,...t})}))}}class o extends r{constructor({trusteeId:e,workerUrl:t}){super(),this.trusteeId=e,this.worker=new Worker(t)}async setup(){return await this.processPythonCodeOnWorker("\n from js import trustee_id\n from bulletin_board.electionguard.trustee import Trustee\n trustee = Trustee(trustee_id)\n ",{trustee_id:this.trusteeId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n from js import message_type, decoded_data\n import json\n trustee.process_message(\n message_type,\n json.loads(decoded_data)\n )\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const{message_type:e,content:t}=r[0]instanceof Map?Object.fromEntries(r[0]):r[0];return{messageType:e,content:t}}}isFresh(){return this.processPythonCodeOnWorker("\n trustee.is_fresh()\n ")}backup(){return this.processPythonCodeOnWorker("\n trustee.backup().hex()\n ")}restore(e){return this.processPythonCodeOnWorker("\n from js import state\n trustee = Trustee.restore(bytes.fromhex(state))\n True\n ",{state:e})}isKeyCeremonyDone(){return this.processPythonCodeOnWorker("\n trustee.is_key_ceremony_done()\n ")}isTallyDone(){return this.processPythonCodeOnWorker("\n trustee.is_tally_done()\n ")}}class s extends r{constructor({voterId:e,workerUrl:t}){super(),this.voterId=e,this.worker=new Worker(t)}async setup(){return await this.processPythonCodeOnWorker("\n from js import voter_id\n from bulletin_board.electionguard.voter import Voter\n voter = Voter(voter_id)\n ",{voter_id:this.voterId})}async processMessage(e,t){const r=await this.processPythonCodeOnWorker("\n from js import message_type, decoded_data\n import json\n voter.process_message(message_type, json.loads(decoded_data))\n ",{message_type:e,decoded_data:JSON.stringify(t)});if(r&&r.length>0){const{message_type:e,content:t}=r[0]instanceof Map?Object.fromEntries(r[0]):r[0];return{messageType:e,content:t}}}async encrypt(e,t){const[r,o]=await this.processPythonCodeOnWorker("\n from js import plain_vote, ballot_style\n voter.encrypt(plain_vote.to_py(), ballot_style)\n ",{plain_vote:e,ballot_style:t});return{auditableData:r,encryptedData:o}}}window.electionGuardVotingScheme=t})();
@@ -2,6 +2,6 @@
2
2
 
3
3
  module VotingSchemes
4
4
  module Electionguard
5
- VERSION = "0.24.2"
5
+ VERSION = "0.24.4"
6
6
  end
7
7
  end
Binary file
@@ -1 +1 @@
1
- var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};Module.checkABI(1);if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="attrs.data";var REMOTE_PACKAGE_BASE="attrs.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attr",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attrs-20.1.0-py3.8.egg-info",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createPreloadedFile"](this.name,null,byteArray,true,true,function(){Module["removeRunDependency"]("fp "+that.name)},function(){if(that.audio){Module["removeRunDependency"]("fp "+that.name)}else{err("Preloading file "+that.name+" failed")}},false,true);this.requests[this.name]=null}};function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:91927,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1231,2010,3362,4460,5698,6738,7921,8718,9850,11257,12730,14174,15470,16879,18055,19368,20506,21736,22892,23922,25049,26291,27413,28253,29420,30805,32248,33659,35083,36546,37893,39051,39971,41215,42356,43574,44523,45753,46842,48048,49054,50087,50590,51162,52317,53593,54715,55891,56793,58156,59540,60872,62024,63277,64412,65525,66596,67881,69096,70257,71439,72543,73691,75076,75834,76421,77020,77911,79012,80169,81184,82356,83768,85129,86558,87761,89137,90470,91634],sizes:[1231,779,1352,1098,1238,1040,1183,797,1132,1407,1473,1444,1296,1409,1176,1313,1138,1230,1156,1030,1127,1242,1122,840,1167,1385,1443,1411,1424,1463,1347,1158,920,1244,1141,1218,949,1230,1089,1206,1006,1033,503,572,1155,1276,1122,1176,902,1363,1384,1332,1152,1253,1135,1113,1071,1285,1215,1161,1182,1104,1148,1385,758,587,599,891,1101,1157,1015,1172,1412,1361,1429,1203,1376,1333,1164,293],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData.data=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData});Module["removeRunDependency"]("datafile_attrs.data")}Module["addRunDependency"]("datafile_attrs.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/attr/__init__.py",start:0,end:1568,audio:0},{filename:"/lib/python3.8/site-packages/attr/_compat.py",start:1568,end:8894,audio:0},{filename:"/lib/python3.8/site-packages/attr/_config.py",start:8894,end:9408,audio:0},{filename:"/lib/python3.8/site-packages/attr/_funcs.py",start:9408,end:21048,audio:0},{filename:"/lib/python3.8/site-packages/attr/_make.py",start:21048,end:105181,audio:0},{filename:"/lib/python3.8/site-packages/attr/_next_gen.py",start:105181,end:107959,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.py",start:107959,end:110121,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.py",start:110121,end:112335,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.py",start:112335,end:114285,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.py",start:114285,end:115383,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.py",start:115383,end:116817,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.py",start:116817,end:128314,audio:0},{filename:"/lib/python3.8/site-packages/attr/__init__.pyi",start:128314,end:140766,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.pyi",start:140766,end:140975,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.pyi",start:140975,end:141355,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.pyi",start:141355,end:141894,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.pyi",start:141894,end:142108,audio:0},{filename:"/lib/python3.8/site-packages/attr/py.typed",start:142108,end:142108,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.pyi",start:142108,end:142675,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.pyi",start:142675,end:144543,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/PKG-INFO",start:144543,end:160237,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/SOURCES.txt",start:160237,end:162053,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/dependency_links.txt",start:162053,end:162054,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/not-zip-safe",start:162054,end:162055,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/requires.txt",start:162055,end:162316,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.1.0-py3.8.egg-info/top_level.txt",start:162316,end:162321,audio:0}],remote_package_size:96023,package_uuid:"7be34235-3bd9-45d3-be84-e0631b5ac6df"})})();
1
+ var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="attrs.data";var REMOTE_PACKAGE_BASE="attrs.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attr",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","attrs-20.3.0-py3.8.egg-info",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:92978,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1227,2006,3370,4474,5719,6922,7675,8936,9546,10717,12163,13627,14972,16280,17692,18936,20230,21408,22516,23639,24615,25769,26939,28145,29078,30174,31513,32982,34363,35793,37242,38685,39939,41019,42071,43329,44497,45703,46714,48039,49397,50538,51657,52710,53556,54223,55090,56433,57526,58752,59851,60878,62233,63549,64809,66043,67255,68514,69558,70665,71889,73220,74419,75617,76697,77673,78932,80211,80726,81351,81808,82902,84052,85128,86160,87398,88782,90168,91468,92514],sizes:[1227,779,1364,1104,1245,1203,753,1261,610,1171,1446,1464,1345,1308,1412,1244,1294,1178,1108,1123,976,1154,1170,1206,933,1096,1339,1469,1381,1430,1449,1443,1254,1080,1052,1258,1168,1206,1011,1325,1358,1141,1119,1053,846,667,867,1343,1093,1226,1099,1027,1355,1316,1260,1234,1212,1259,1044,1107,1224,1331,1199,1198,1080,976,1259,1279,515,625,457,1094,1150,1076,1032,1238,1384,1386,1300,1046,464],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData},true);Module["removeRunDependency"]("datafile_attrs.data")}Module["addRunDependency"]("datafile_attrs.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/attr/__init__.py",start:0,end:1568,audio:0},{filename:"/lib/python3.8/site-packages/attr/_compat.py",start:1568,end:8876,audio:0},{filename:"/lib/python3.8/site-packages/attr/_config.py",start:8876,end:9390,audio:0},{filename:"/lib/python3.8/site-packages/attr/_funcs.py",start:9390,end:22471,audio:0},{filename:"/lib/python3.8/site-packages/attr/_make.py",start:22471,end:110784,audio:0},{filename:"/lib/python3.8/site-packages/attr/_next_gen.py",start:110784,end:114922,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.py",start:114922,end:117084,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.py",start:117084,end:119298,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.py",start:119298,end:121248,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.py",start:121248,end:122346,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.py",start:122346,end:123780,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.py",start:123780,end:135277,audio:0},{filename:"/lib/python3.8/site-packages/attr/__init__.pyi",start:135277,end:148263,audio:0},{filename:"/lib/python3.8/site-packages/attr/_version_info.pyi",start:148263,end:148472,audio:0},{filename:"/lib/python3.8/site-packages/attr/converters.pyi",start:148472,end:148852,audio:0},{filename:"/lib/python3.8/site-packages/attr/exceptions.pyi",start:148852,end:149391,audio:0},{filename:"/lib/python3.8/site-packages/attr/filters.pyi",start:149391,end:149605,audio:0},{filename:"/lib/python3.8/site-packages/attr/py.typed",start:149605,end:149605,audio:0},{filename:"/lib/python3.8/site-packages/attr/setters.pyi",start:149605,end:150172,audio:0},{filename:"/lib/python3.8/site-packages/attr/validators.pyi",start:150172,end:152040,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/PKG-INFO",start:152040,end:162595,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/SOURCES.txt",start:162595,end:164440,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/dependency_links.txt",start:164440,end:164441,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/not-zip-safe",start:164441,end:164442,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/requires.txt",start:164442,end:164755,audio:0},{filename:"/lib/python3.8/site-packages/attrs-20.3.0-py3.8.egg-info/top_level.txt",start:164755,end:164760,audio:0}],remote_package_size:97074,package_uuid:"f0be090d-5cb6-4ce9-a045-0253e15d3955"})})();
@@ -1 +1 @@
1
- var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};Module.checkABI(1);if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="bulletin_board-electionguard.data";var REMOTE_PACKAGE_BASE="bulletin_board-electionguard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata.remote_package_size;var PACKAGE_UUID=metadata.package_uuid;function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board_electionguard-0.1.1-py3.8.egg-info",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages/bulletin_board","electionguard",true,true);function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createPreloadedFile"](this.name,null,byteArray,true,true,function(){Module["removeRunDependency"]("fp "+that.name)},function(){if(that.audio){Module["removeRunDependency"]("fp "+that.name)}else{err("Preloading file "+that.name+" failed")}},false,true);this.requests[this.name]=null}};function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:26156,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1095,2240,3331,4392,5333,6164,6869,8005,8933,9999,10859,11755,12688,13704,14695,15660,16850,17959,18866,19952,20932,22016,22917,23708,24633,25648],sizes:[1095,1145,1091,1061,941,831,705,1136,928,1066,860,896,933,1016,991,965,1190,1109,907,1086,980,1084,901,791,925,1015,508],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData.data=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData});Module["removeRunDependency"]("datafile_bulletin_board-electionguard.data")}Module["addRunDependency"]("datafile_bulletin_board-electionguard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/PKG-INFO",start:0,end:348,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/SOURCES.txt",start:348,end:1253,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/requires.txt",start:1253,end:1285,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/dependency_links.txt",start:1285,end:1443,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/top_level.txt",start:1443,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/__init__.py",start:1458,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/common.py",start:1458,end:5656,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/tally_decryptor.py",start:5656,end:14739,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/utils.py",start:14739,end:15972,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/messages.py",start:15972,end:17684,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/trustee.py",start:17684,end:33664,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/serializable.py",start:33664,end:36422,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/dummy_scheduler.py",start:36422,end:36793,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/voter.py",start:36793,end:40645,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/election.py",start:40645,end:44742,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/bulletin_board.py",start:44742,end:54246,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/__init__.py",start:54246,end:54246,audio:0}],remote_package_size:30252,package_uuid:"79ea91ed-d688-4d20-bd74-ae7583971709"})})();
1
+ var Module=typeof pyodide._module!=="undefined"?pyodide._module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="bulletin_board-electionguard.data";var REMOTE_PACKAGE_BASE="bulletin_board-electionguard.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.8",true,true);Module["FS_createPath"]("/lib/python3.8","site-packages",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board_electionguard-0.1.1-py3.8.egg-info",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages","bulletin_board",true,true);Module["FS_createPath"]("/lib/python3.8/site-packages/bulletin_board","electionguard",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={data:null,cachedOffset:26805,cachedIndexes:[-1,-1],cachedChunks:[null,null],offsets:[0,1088,2277,3305,4361,5364,6209,6987,8084,9014,10138,11001,11858,12803,13829,14793,15728,16809,17905,18957,20050,21188,22192,23353,24125,25098,26019],sizes:[1088,1189,1028,1056,1003,845,778,1097,930,1124,863,857,945,1026,964,935,1081,1096,1052,1093,1138,1004,1161,772,973,921,786],successes:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module.LZ4==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module.LZ4.loadPackage({metadata:metadata,compressedData:compressedData},true);Module["removeRunDependency"]("datafile_bulletin_board-electionguard.data")}Module["addRunDependency"]("datafile_bulletin_board-electionguard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({files:[{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/PKG-INFO",start:0,end:348,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/SOURCES.txt",start:348,end:1253,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/requires.txt",start:1253,end:1285,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/dependency_links.txt",start:1285,end:1443,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board_electionguard-0.1.1-py3.8.egg-info/top_level.txt",start:1443,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/__init__.py",start:1458,end:1458,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/common.py",start:1458,end:6073,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/tally_decryptor.py",start:6073,end:15156,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/utils.py",start:15156,end:16389,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/messages.py",start:16389,end:18101,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/trustee.py",start:18101,end:34144,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/serializable.py",start:34144,end:36902,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/dummy_scheduler.py",start:36902,end:37273,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/voter.py",start:37273,end:41172,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/election.py",start:41172,end:45269,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/bulletin_board.py",start:45269,end:54785,audio:0},{filename:"/lib/python3.8/site-packages/bulletin_board/electionguard/__init__.py",start:54785,end:54785,audio:0}],remote_package_size:30901,package_uuid:"48d1e123-f9e6-4be4-a86c-03e5557d4b9e"})})();
@@ -2,83 +2,111 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
- <script src="https://code.jquery.com/jquery-latest.js"></script>
6
- <script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
7
- <link href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css" rel="stylesheet"/>
8
- <link href="renderedhtml.css" rel="stylesheet"/>
9
- <script type="text/javascript">
10
- // set the pyodide files URL (packages.json, pyodide.asm.data etc)
11
- window.languagePluginUrl = './';
12
- </script>
5
+ <script src="https://cdn.jsdelivr.net/npm/jquery"></script>
6
+ <script src="https://cdn.jsdelivr.net/npm/jquery.terminal@2.23.0/js/jquery.terminal.min.js"></script>
7
+ <link href="https://cdn.jsdelivr.net/npm/jquery.terminal@2.23.0/css/jquery.terminal.min.css" rel="stylesheet"/>
13
8
  <script src="./pyodide.js"></script>
9
+ <style>
10
+ .terminal { --size: 1.5; }
11
+ </style>
14
12
  </head>
15
13
  <body>
16
14
  <script>
17
- languagePluginLoader.then(() => {
18
- function pushCode(line) {
19
- handleResult(c.push(line))
20
- }
15
+ function sleep(s){
16
+ return new Promise(resolve => setTimeout(resolve, s));
17
+ }
18
+ async function main() {
19
+ await loadPyodide({ indexURL : './' });
20
+ let namespace = pyodide.globals.get("dict")();
21
+ pyodide.runPython(`
22
+ import sys
23
+ import js
24
+ from pyodide import console
25
+ import __main__
21
26
 
22
- var term = $('body').terminal(
23
- pushCode,
24
- {
25
- greetings: "Welcome to the Pyodide terminal emulator 🐍",
26
- prompt: "[[;red;]>>> ]"
27
- }
28
- );
27
+ class PyConsole(console._InteractiveConsole):
28
+ def __init__(self):
29
+ super().__init__(
30
+ __main__.__dict__,
31
+ persistent_stream_redirection=False,
32
+ )
29
33
 
30
- window.term = term;
31
- pyodide.runPython(`
32
- import io, code, sys
33
- from js import term, pyodide
34
+ def banner(self):
35
+ return f"Welcome to the Pyodide terminal emulator 🐍\\n{super().banner()}"
34
36
 
35
- class Console(code.InteractiveConsole):
36
- def runcode(self, code):
37
- sys.stdout = io.StringIO()
38
- sys.stderr = io.StringIO()
39
- term.runPython("\\n".join(self.buffer))
40
- _c = Console(locals=globals())
41
- `)
42
37
 
43
- var c = pyodide.pyimport('_c')
38
+ js.pyconsole = PyConsole()
39
+ `, namespace);
40
+ namespace.destroy();
44
41
 
45
- function handleResult(result) {
46
- if (result) {
47
- term.set_prompt('[[;gray;]... ]')
48
- } else {
49
- term.set_prompt('[[;red;]>>> ]')
50
- var stderr = pyodide.runPython("sys.stderr.getvalue()").trim()
51
- if (stderr) {
52
- term.echo(`[[;red;]${stderr}]`)
53
- } else {
54
- var stdout = pyodide.runPython("sys.stdout.getvalue()")
55
- if (stdout) {
56
- term.echo(stdout.trim())
57
- }
58
- }
59
- }
60
- }
42
+ let ps1 = '>>> ', ps2 = '... ';
61
43
 
62
- term.runPython = function(code) {
63
- pyodide.runPythonAsync(code).then(
64
- term.handlePythonResult, term.handlePythonError
65
- )
44
+ async function lock(){
45
+ let resolve;
46
+ let ready = term.ready;
47
+ term.ready = new Promise(res => resolve = res);
48
+ await ready;
49
+ return resolve;
66
50
  }
67
51
 
68
- term.handlePythonResult = function(result) {
69
- if (result === undefined) {
70
- return
71
- } else if (result['_repr_html_'] !== undefined) {
72
- term.echo(result['_repr_html_'], {raw: true})
73
- } else {
74
- term.echo(result.toString())
52
+ async function interpreter(command) {
53
+ let unlock = await lock();
54
+ try {
55
+ term.pause();
56
+ // multiline should be splitted (useful when pasting)
57
+ for( const c of command.split('\n') ) {
58
+ let run_complete = pyconsole.run_complete;
59
+ try {
60
+ const incomplete = pyconsole.push(c);
61
+ term.set_prompt(incomplete ? ps2 : ps1);
62
+ let r = await run_complete;
63
+ if(pyodide.isPyProxy(r)){
64
+ r.destroy();
65
+ }
66
+ } catch(e){
67
+ if(e.name !== "PythonError"){
68
+ term.error(e);
69
+ throw e;
70
+ }
71
+ }
72
+ run_complete.destroy();
73
+ }
74
+ } finally {
75
+ term.resume();
76
+ await sleep(10);
77
+ unlock();
75
78
  }
76
79
  }
77
80
 
78
- term.handlePythonError = function(result) {
79
- term.error(result.toString())
81
+ let term = $('body').terminal(
82
+ interpreter,
83
+ {
84
+ greetings: pyconsole.banner(),
85
+ prompt: ps1,
86
+ completionEscape: false,
87
+ completion: function(command, callback) {
88
+ callback(pyconsole.complete(command).toJs()[0]);
89
+ }
90
+ }
91
+ );
92
+ window.term = term;
93
+ pyconsole.stdout_callback = s => term.echo(s, {newline : false});
94
+ pyconsole.stderr_callback = s => {
95
+ term.error(s.trimEnd());
80
96
  }
81
- });
97
+ term.ready = Promise.resolve();
98
+ pyodide._module.on_fatal = async (e) => {
99
+ term.error("Pyodide has suffered a fatal error. Please report this to the Pyodide maintainers.");
100
+ term.error("The cause of the fatal error was:");
101
+ term.error(e);
102
+ term.error("Look in the browser console for more details.");
103
+ await term.ready;
104
+ term.pause();
105
+ await sleep(15);
106
+ term.pause();
107
+ };
108
+ }
109
+ window.console_ready = main();
82
110
  </script>
83
111
  </body>
84
112
  </html>