-
-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revise JSON Schema public interface namespaces #1501
Conversation
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
63d593b
to
ea36f7c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark (macos/llvm)
Benchmark suite | Current: ea36f7c | Previous: 3a44f00 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
1.860058560858149 ns/iter |
1.6869035225838502 ns/iter |
1.10 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
1.74188303357377 ns/iter |
1.6717425280621576 ns/iter |
1.04 |
Regex_Period_Asterisk |
1.733539731172133 ns/iter |
1.7315909542226087 ns/iter |
1.00 |
Regex_Group_Period_Asterisk_Group |
1.822910857631909 ns/iter |
1.5971479580792445 ns/iter |
1.14 |
Regex_Period_Plus |
2.0606280599904707 ns/iter |
1.9851353312519882 ns/iter |
1.04 |
Regex_Period |
2.14167894080886 ns/iter |
1.987003552880149 ns/iter |
1.08 |
Regex_Caret_Period_Plus_Dollar |
2.252197323609953 ns/iter |
2.0360228609038016 ns/iter |
1.11 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
2.0884073663835148 ns/iter |
2.0155546536548052 ns/iter |
1.04 |
Regex_Caret_Period_Asterisk_Dollar |
1.7246637276507504 ns/iter |
1.7810159309933116 ns/iter |
0.97 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
2.469904131934428 ns/iter |
1.8130581009595539 ns/iter |
1.36 |
Regex_Caret_X_Hyphen |
7.977955435009051 ns/iter |
7.626872528480537 ns/iter |
1.05 |
Regex_Period_Md_Dollar |
80.48997019238213 ns/iter |
78.60826172541992 ns/iter |
1.02 |
Regex_Caret_Slash_Period_Asterisk |
5.82010528518049 ns/iter |
5.692941079132538 ns/iter |
1.02 |
Regex_Caret_Period_Range_Dollar |
2.618532392505974 ns/iter |
2.4680798922526663 ns/iter |
1.06 |
Regex_Nested_Backtrack |
841.6728994579555 ns/iter |
814.5975485414334 ns/iter |
1.03 |
JSON_Array_Of_Objects_Unique |
412.4788238915561 ns/iter |
386.12357970750475 ns/iter |
1.07 |
JSON_Parse_1 |
30080.583014577314 ns/iter |
28793.78459546728 ns/iter |
1.04 |
JSON_Fast_Hash_Helm_Chart_Lock |
63.48396085310254 ns/iter |
70.8878583613185 ns/iter |
0.90 |
JSON_Equality_Helm_Chart_Lock |
175.88117949684505 ns/iter |
148.21819122903514 ns/iter |
1.19 |
JSON_String_Equal/10 |
9.901995888164985 ns/iter |
8.797447069798388 ns/iter |
1.13 |
JSON_String_Equal/100 |
8.403870817119957 ns/iter |
7.182115985197278 ns/iter |
1.17 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.45225502178841037 ns/iter |
0.34854794902482716 ns/iter |
1.30 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
3.785894775954874 ns/iter |
3.2639696243637744 ns/iter |
1.16 |
JSON_String_Fast_Hash/10 |
2.326023287579463 ns/iter |
1.7446227372568068 ns/iter |
1.33 |
JSON_String_Fast_Hash/100 |
2.59005534142288 ns/iter |
2.1209546876042005 ns/iter |
1.22 |
JSON_String_Key_Hash/10 |
1.757716840907865 ns/iter |
1.423988126096835 ns/iter |
1.23 |
JSON_String_Key_Hash/100 |
1.8399792266552621 ns/iter |
1.430695725077948 ns/iter |
1.29 |
JSON_Object_Defines_Miss_Same_Length |
3.201895833936911 ns/iter |
2.7856325555331063 ns/iter |
1.15 |
JSON_Object_Defines_Miss_Too_Small |
2.8016601915227453 ns/iter |
2.8433110637269245 ns/iter |
0.99 |
JSON_Object_Defines_Miss_Too_Large |
3.5242150712370863 ns/iter |
2.406699967161364 ns/iter |
1.46 |
Pointer_Object_Traverse |
24.33305423980979 ns/iter |
17.58466030243771 ns/iter |
1.38 |
Pointer_Object_Try_Traverse |
26.024197008438392 ns/iter |
22.5665462574543 ns/iter |
1.15 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
211.35274456993466 ns/iter |
185.86409612404606 ns/iter |
1.14 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark (linux/llvm)
Benchmark suite | Current: ea36f7c | Previous: 3a44f00 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
2.2249079945294827 ns/iter |
2.224490033782528 ns/iter |
1.00 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
2.209018161950314 ns/iter |
2.2163196355636816 ns/iter |
1.00 |
Regex_Period_Asterisk |
2.1982809750616306 ns/iter |
2.2185079225782487 ns/iter |
0.99 |
Regex_Group_Period_Asterisk_Group |
2.3859806382517674 ns/iter |
2.205359675285626 ns/iter |
1.08 |
Regex_Period_Plus |
2.505015173490664 ns/iter |
2.486167460822201 ns/iter |
1.01 |
Regex_Period |
2.517269882612567 ns/iter |
2.486937337430677 ns/iter |
1.01 |
Regex_Caret_Period_Plus_Dollar |
2.4864189315487124 ns/iter |
2.486476594902778 ns/iter |
1.00 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
2.4877609705221087 ns/iter |
2.4867791056999358 ns/iter |
1.00 |
Regex_Caret_Period_Asterisk_Dollar |
2.4872490555280313 ns/iter |
2.485293186770836 ns/iter |
1.00 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
2.4857979579531055 ns/iter |
2.4871802798846225 ns/iter |
1.00 |
Regex_Caret_X_Hyphen |
12.577034325833115 ns/iter |
13.071042525060351 ns/iter |
0.96 |
Regex_Period_Md_Dollar |
82.01162927796017 ns/iter |
82.24044383200162 ns/iter |
1.00 |
Regex_Caret_Slash_Period_Asterisk |
6.839663893692796 ns/iter |
6.84216840074042 ns/iter |
1.00 |
Regex_Caret_Period_Range_Dollar |
4.04246530116844 ns/iter |
4.041864668114246 ns/iter |
1.00 |
Regex_Nested_Backtrack |
507.26968100002523 ns/iter |
505.2127239226588 ns/iter |
1.00 |
JSON_Array_Of_Objects_Unique |
405.9388593767537 ns/iter |
405.4768926300942 ns/iter |
1.00 |
JSON_Parse_1 |
30853.892053383115 ns/iter |
31167.911377777575 ns/iter |
0.99 |
JSON_Fast_Hash_Helm_Chart_Lock |
59.16166544790703 ns/iter |
59.383531041618156 ns/iter |
1.00 |
JSON_Equality_Helm_Chart_Lock |
164.2543056960676 ns/iter |
171.2397544961988 ns/iter |
0.96 |
JSON_String_Equal/10 |
7.4642487752438385 ns/iter |
7.7752848718545025 ns/iter |
0.96 |
JSON_String_Equal/100 |
8.137062880179997 ns/iter |
8.50185234479276 ns/iter |
0.96 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.9350654635828944 ns/iter |
0.941722693074114 ns/iter |
0.99 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
14.6018751514661 ns/iter |
10.25828691430604 ns/iter |
1.42 |
JSON_String_Fast_Hash/10 |
2.4885166214590866 ns/iter |
2.4902681971508445 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
2.4859958980351706 ns/iter |
2.487822424019786 ns/iter |
1.00 |
JSON_String_Key_Hash/10 |
2.695655299145615 ns/iter |
2.180959647896586 ns/iter |
1.24 |
JSON_String_Key_Hash/100 |
1.8675314334117934 ns/iter |
1.869355881651737 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
3.7331774788166987 ns/iter |
3.7409878595480266 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
3.7343073254946075 ns/iter |
3.737730820780923 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.7397545475631846 ns/iter |
3.7451223919619214 ns/iter |
1.00 |
Pointer_Object_Traverse |
44.555551674804484 ns/iter |
44.474238504589096 ns/iter |
1.00 |
Pointer_Object_Try_Traverse |
52.32752116380251 ns/iter |
52.335880487069396 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
308.0418196848096 ns/iter |
289.555656413328 ns/iter |
1.06 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark (windows/msvc)
Benchmark suite | Current: ea36f7c | Previous: 3a44f00 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
6.855270505110413 ns/iter |
7.190870057183948 ns/iter |
0.95 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
6.912449776785528 ns/iter |
6.897811383930832 ns/iter |
1.00 |
Regex_Period_Asterisk |
6.919286830356443 ns/iter |
6.950489955358361 ns/iter |
1.00 |
Regex_Group_Period_Asterisk_Group |
7.01257700892783 ns/iter |
7.074734374999789 ns/iter |
0.99 |
Regex_Period_Plus |
7.462884821428872 ns/iter |
7.663383928570815 ns/iter |
0.97 |
Regex_Period |
7.417822544642913 ns/iter |
7.804609786586284 ns/iter |
0.95 |
Regex_Caret_Period_Plus_Dollar |
7.393124999999857 ns/iter |
7.256041294641286 ns/iter |
1.02 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
7.577545758929359 ns/iter |
7.429072734691383 ns/iter |
1.02 |
Regex_Caret_Period_Asterisk_Dollar |
7.046939732143288 ns/iter |
7.28472544642906 ns/iter |
0.97 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
6.845180803572199 ns/iter |
7.050293526784657 ns/iter |
0.97 |
Regex_Caret_X_Hyphen |
11.793103571428835 ns/iter |
11.776105357142798 ns/iter |
1.00 |
Regex_Period_Md_Dollar |
155.60678571429065 ns/iter |
156.65799107143891 ns/iter |
0.99 |
Regex_Caret_Slash_Period_Asterisk |
10.560781249999707 ns/iter |
10.271101785714825 ns/iter |
1.03 |
Regex_Caret_Period_Range_Dollar |
7.456341517857774 ns/iter |
7.8812651433870675 ns/iter |
0.95 |
Regex_Nested_Backtrack |
633.0275892857173 ns/iter |
620.1635714284797 ns/iter |
1.02 |
JSON_Array_Of_Objects_Unique |
490.0366810341544 ns/iter |
489.0600424450617 ns/iter |
1.00 |
JSON_Parse_1 |
81337.06977367701 ns/iter |
79714.20758930188 ns/iter |
1.02 |
JSON_Fast_Hash_Helm_Chart_Lock |
63.18010714285346 ns/iter |
63.738330000001035 ns/iter |
0.99 |
JSON_Equality_Helm_Chart_Lock |
186.58220415912524 ns/iter |
187.25122012841223 ns/iter |
1.00 |
JSON_String_Equal/10 |
9.036032102518133 ns/iter |
9.056513798855478 ns/iter |
1.00 |
JSON_String_Equal/100 |
10.008175401749476 ns/iter |
9.943690134181171 ns/iter |
1.01 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
2.168145625000051 ns/iter |
2.170392812499955 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
14.997147924120057 ns/iter |
15.368949244366608 ns/iter |
0.98 |
JSON_String_Fast_Hash/10 |
4.034653310775876 ns/iter |
4.02566764111716 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
4.031461926841547 ns/iter |
4.027774917906397 ns/iter |
1.00 |
JSON_String_Key_Hash/10 |
8.060562499999488 ns/iter |
7.875758928572095 ns/iter |
1.02 |
JSON_String_Key_Hash/100 |
4.0590385044644455 ns/iter |
4.038916614356162 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
3.728362114710034 ns/iter |
3.7167048147920396 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
4.961610999999948 ns/iter |
4.951602999999523 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.401064458212371 ns/iter |
3.408688342127898 ns/iter |
1.00 |
Pointer_Object_Traverse |
49.37843000000157 ns/iter |
49.0120799999886 ns/iter |
1.01 |
Pointer_Object_Try_Traverse |
68.01694642857926 ns/iter |
67.64337499999687 ns/iter |
1.01 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
179.02891600639086 ns/iter |
184.40942717939004 ns/iter |
0.97 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark (linux/gcc)
Benchmark suite | Current: ea36f7c | Previous: 3a44f00 | Ratio |
---|---|---|---|
Pointer_Object_Traverse |
47.73951531118769 ns/iter |
47.65269441927692 ns/iter |
1.00 |
Pointer_Object_Try_Traverse |
26.17205339125301 ns/iter |
26.1349753645266 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
145.30104724511534 ns/iter |
145.5356679245723 ns/iter |
1.00 |
JSON_Array_Of_Objects_Unique |
411.79117254056183 ns/iter |
410.9426964067779 ns/iter |
1.00 |
JSON_Parse_1 |
33960.687913040114 ns/iter |
33462.92860899699 ns/iter |
1.01 |
JSON_Fast_Hash_Helm_Chart_Lock |
62.549135116749355 ns/iter |
62.873291688469 ns/iter |
0.99 |
JSON_Equality_Helm_Chart_Lock |
157.20848591833823 ns/iter |
151.06016473000122 ns/iter |
1.04 |
JSON_String_Equal/10 |
7.27771242407002 ns/iter |
6.342003897248392 ns/iter |
1.15 |
JSON_String_Equal/100 |
7.89443323742559 ns/iter |
6.981182361428334 ns/iter |
1.13 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.9351350503554756 ns/iter |
0.9345955026978608 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
14.296177152365889 ns/iter |
14.293382316785056 ns/iter |
1.00 |
JSON_String_Fast_Hash/10 |
0.9325806117751535 ns/iter |
0.9331333904774174 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
0.9330003853812194 ns/iter |
0.9384293037119047 ns/iter |
0.99 |
JSON_String_Key_Hash/10 |
1.674105764331238 ns/iter |
1.6707210419138558 ns/iter |
1.00 |
JSON_String_Key_Hash/100 |
1.9852261115334118 ns/iter |
1.9824588160324201 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
2.4879197857354374 ns/iter |
2.4864044920162702 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
2.488273883578805 ns/iter |
2.487712784056823 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.1128858324027524 ns/iter |
3.1072782873109723 ns/iter |
1.00 |
Regex_Lower_S_Or_Upper_S_Asterisk |
3.4280462351593117 ns/iter |
3.4187148016600792 ns/iter |
1.00 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
3.420332165594126 ns/iter |
3.433751878410639 ns/iter |
1.00 |
Regex_Period_Asterisk |
3.4240949941438554 ns/iter |
3.421097900087504 ns/iter |
1.00 |
Regex_Group_Period_Asterisk_Group |
3.4208990821924257 ns/iter |
3.443963975751735 ns/iter |
0.99 |
Regex_Period_Plus |
3.729286281900037 ns/iter |
3.7298673202767745 ns/iter |
1.00 |
Regex_Period |
3.7302601080145337 ns/iter |
3.728402058584454 ns/iter |
1.00 |
Regex_Caret_Period_Plus_Dollar |
3.733479821779559 ns/iter |
3.731126926739495 ns/iter |
1.00 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
3.4214199251728457 ns/iter |
3.729506697457363 ns/iter |
0.92 |
Regex_Caret_Period_Asterisk_Dollar |
3.7351865450738773 ns/iter |
4.658974492385322 ns/iter |
0.80 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
3.7342311103420416 ns/iter |
4.660909669722313 ns/iter |
0.80 |
Regex_Caret_X_Hyphen |
12.435282309647427 ns/iter |
13.069584972112253 ns/iter |
0.95 |
Regex_Period_Md_Dollar |
89.6891241252504 ns/iter |
89.95689194978954 ns/iter |
1.00 |
Regex_Caret_Slash_Period_Asterisk |
8.098711733271504 ns/iter |
8.083109476813025 ns/iter |
1.00 |
Regex_Caret_Period_Range_Dollar |
4.664596329447416 ns/iter |
4.660677650612457 ns/iter |
1.00 |
Regex_Nested_Backtrack |
818.3964270949525 ns/iter |
828.7841155166956 ns/iter |
0.99 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Benchmark (macos/gcc)
Benchmark suite | Current: ea36f7c | Previous: 3a44f00 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
1.8972806335620283 ns/iter |
2.0379328918072175 ns/iter |
0.93 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
2.011766482995388 ns/iter |
2.0361142627987583 ns/iter |
0.99 |
Regex_Period_Asterisk |
2.0332391475176115 ns/iter |
2.0987442978945574 ns/iter |
0.97 |
Regex_Group_Period_Asterisk_Group |
1.9462129609245093 ns/iter |
2.0353534665302773 ns/iter |
0.96 |
Regex_Period_Plus |
2.0292030063629896 ns/iter |
2.031408390799496 ns/iter |
1.00 |
Regex_Period |
2.0309837585690325 ns/iter |
2.017677895346648 ns/iter |
1.01 |
Regex_Caret_Period_Plus_Dollar |
2.111204081520752 ns/iter |
2.033382121101866 ns/iter |
1.04 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
2.099530389983105 ns/iter |
2.037947366511367 ns/iter |
1.03 |
Regex_Caret_Period_Asterisk_Dollar |
2.083918385101992 ns/iter |
2.022677054892075 ns/iter |
1.03 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
2.381271378033164 ns/iter |
2.3578196785253507 ns/iter |
1.01 |
Regex_Caret_X_Hyphen |
6.506406456427914 ns/iter |
6.472651582566345 ns/iter |
1.01 |
Regex_Period_Md_Dollar |
73.42749012355821 ns/iter |
73.55183719799044 ns/iter |
1.00 |
Regex_Caret_Slash_Period_Asterisk |
4.520373968192868 ns/iter |
4.73106125101573 ns/iter |
0.96 |
Regex_Caret_Period_Range_Dollar |
2.052856316949086 ns/iter |
2.0651391833391317 ns/iter |
0.99 |
Regex_Nested_Backtrack |
1006.6519850509559 ns/iter |
880.7580448587958 ns/iter |
1.14 |
JSON_Array_Of_Objects_Unique |
213.085814263208 ns/iter |
225.0275811596015 ns/iter |
0.95 |
JSON_Parse_1 |
24174.380670211045 ns/iter |
28440.359345994275 ns/iter |
0.85 |
JSON_Fast_Hash_Helm_Chart_Lock |
24.149385603692217 ns/iter |
26.693127658581098 ns/iter |
0.90 |
JSON_Equality_Helm_Chart_Lock |
117.36512865726202 ns/iter |
122.0241275033822 ns/iter |
0.96 |
JSON_String_Equal/10 |
5.500124994768532 ns/iter |
5.805640549202992 ns/iter |
0.95 |
JSON_String_Equal/100 |
5.228682455039724 ns/iter |
5.698044275313943 ns/iter |
0.92 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.7719780251527433 ns/iter |
0.8077840838958594 ns/iter |
0.96 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
3.4796469581672564 ns/iter |
3.7330192388891823 ns/iter |
0.93 |
JSON_String_Fast_Hash/10 |
1.9487174648447156 ns/iter |
2.054200506416629 ns/iter |
0.95 |
JSON_String_Fast_Hash/100 |
1.9184897303591648 ns/iter |
2.056108633137606 ns/iter |
0.93 |
JSON_String_Key_Hash/10 |
1.444392621018871 ns/iter |
1.5502688306856098 ns/iter |
0.93 |
JSON_String_Key_Hash/100 |
2.0076625195831883 ns/iter |
2.0699706951794954 ns/iter |
0.97 |
JSON_Object_Defines_Miss_Same_Length |
1.7843774663374963 ns/iter |
1.8570757302744108 ns/iter |
0.96 |
JSON_Object_Defines_Miss_Too_Small |
1.948790164888874 ns/iter |
2.0214743949480414 ns/iter |
0.96 |
JSON_Object_Defines_Miss_Too_Large |
1.7754212726309724 ns/iter |
1.8710601381824672 ns/iter |
0.95 |
Pointer_Object_Traverse |
57.064354732358275 ns/iter |
57.915578368698284 ns/iter |
0.99 |
Pointer_Object_Try_Traverse |
38.79286471964673 ns/iter |
38.77973408532813 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
168.69436494056228 ns/iter |
169.95327395678524 ns/iter |
0.99 |
This comment was automatically generated by workflow using github-action-benchmark.
Signed-off-by: Juan Cruz Viotti jv@jviotti.com