-
-
Notifications
You must be signed in to change notification settings - Fork 4
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
Fix destination_of
on subschemas that are also resources
#1531
Conversation
Signed-off-by: Juan Cruz Viotti <[email protected]>
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: 44e8749 | Previous: e924303 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
1.8680540316879026 ns/iter |
1.595777926724378 ns/iter |
1.17 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
1.7870177736487989 ns/iter |
1.5767862094510263 ns/iter |
1.13 |
Regex_Period_Asterisk |
1.7065675365519812 ns/iter |
1.6117374843588184 ns/iter |
1.06 |
Regex_Group_Period_Asterisk_Group |
1.8653655208018327 ns/iter |
1.6771650466067445 ns/iter |
1.11 |
Regex_Period_Plus |
2.1454550299511874 ns/iter |
2.012450370201417 ns/iter |
1.07 |
Regex_Period |
2.257490730307446 ns/iter |
1.9968870678497137 ns/iter |
1.13 |
Regex_Caret_Period_Plus_Dollar |
2.125361169225682 ns/iter |
1.9926779380915807 ns/iter |
1.07 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
2.2031542691967316 ns/iter |
2.0406953264153427 ns/iter |
1.08 |
Regex_Caret_Period_Asterisk_Dollar |
1.7529886175209708 ns/iter |
1.7539415484013225 ns/iter |
1.00 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
1.7022886293495543 ns/iter |
1.7252361716310727 ns/iter |
0.99 |
Regex_Caret_X_Hyphen |
7.056628463552952 ns/iter |
7.212102736365528 ns/iter |
0.98 |
Regex_Period_Md_Dollar |
74.3095000719682 ns/iter |
71.79214995778551 ns/iter |
1.04 |
Regex_Caret_Slash_Period_Asterisk |
5.2720947545234935 ns/iter |
5.627138684501986 ns/iter |
0.94 |
Regex_Caret_Period_Range_Dollar |
2.297534121127569 ns/iter |
2.7982055023573214 ns/iter |
0.82 |
Regex_Nested_Backtrack |
871.7505109765902 ns/iter |
754.5500152469967 ns/iter |
1.16 |
JSON_Array_Of_Objects_Unique |
359.30075144665807 ns/iter |
356.64184379423057 ns/iter |
1.01 |
JSON_Parse_1 |
24325.859044561414 ns/iter |
24961.387020179856 ns/iter |
0.97 |
JSON_Fast_Hash_Helm_Chart_Lock |
75.48624688653028 ns/iter |
49.092336672190356 ns/iter |
1.54 |
JSON_Equality_Helm_Chart_Lock |
165.12692562415998 ns/iter |
123.58505563743478 ns/iter |
1.34 |
JSON_String_Equal/10 |
7.958006206209522 ns/iter |
7.888942806921001 ns/iter |
1.01 |
JSON_String_Equal/100 |
6.31563172806694 ns/iter |
6.148019665807752 ns/iter |
1.03 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.31725743980112986 ns/iter |
0.32836721511786127 ns/iter |
0.97 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
2.988655791345163 ns/iter |
3.131218594823668 ns/iter |
0.95 |
JSON_String_Fast_Hash/10 |
1.6105454444266465 ns/iter |
1.718455305476479 ns/iter |
0.94 |
JSON_String_Fast_Hash/100 |
2.3468203740768163 ns/iter |
2.0600690335088383 ns/iter |
1.14 |
JSON_String_Key_Hash/10 |
1.300537889425532 ns/iter |
1.3380822087941513 ns/iter |
0.97 |
JSON_String_Key_Hash/100 |
1.2970670717836181 ns/iter |
1.299426383848555 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
2.3223085776882795 ns/iter |
2.3541846798298525 ns/iter |
0.99 |
JSON_Object_Defines_Miss_Too_Small |
2.247516745182341 ns/iter |
2.348429825111457 ns/iter |
0.96 |
JSON_Object_Defines_Miss_Too_Large |
2.2199688499389025 ns/iter |
2.3753936081318736 ns/iter |
0.93 |
Pointer_Object_Traverse |
17.29997423784409 ns/iter |
17.674690907279867 ns/iter |
0.98 |
Pointer_Object_Try_Traverse |
22.397439307341607 ns/iter |
24.177531600593582 ns/iter |
0.93 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
176.5387447989302 ns/iter |
180.70308951642025 ns/iter |
0.98 |
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: 44e8749 | Previous: e924303 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
2.2183525193566442 ns/iter |
2.226182038595393 ns/iter |
1.00 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
2.246085781089787 ns/iter |
2.218769790406526 ns/iter |
1.01 |
Regex_Period_Asterisk |
2.1853249386225717 ns/iter |
2.210251492452116 ns/iter |
0.99 |
Regex_Group_Period_Asterisk_Group |
2.2017938668282047 ns/iter |
2.213750933761964 ns/iter |
0.99 |
Regex_Period_Plus |
2.8006127056814396 ns/iter |
2.7993287248277556 ns/iter |
1.00 |
Regex_Period |
2.8009951349245124 ns/iter |
2.7984374172232322 ns/iter |
1.00 |
Regex_Caret_Period_Plus_Dollar |
2.7982178866306113 ns/iter |
2.800517076012382 ns/iter |
1.00 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
2.798897283102218 ns/iter |
2.8819924384149376 ns/iter |
0.97 |
Regex_Caret_Period_Asterisk_Dollar |
3.419633798725202 ns/iter |
3.418866812820843 ns/iter |
1.00 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
3.423009109668678 ns/iter |
3.4160755752220116 ns/iter |
1.00 |
Regex_Caret_X_Hyphen |
13.099333674472204 ns/iter |
13.107047755396009 ns/iter |
1.00 |
Regex_Period_Md_Dollar |
81.60999529016567 ns/iter |
81.95636837261132 ns/iter |
1.00 |
Regex_Caret_Slash_Period_Asterisk |
6.846323170773791 ns/iter |
6.848732621785712 ns/iter |
1.00 |
Regex_Caret_Period_Range_Dollar |
4.045398701626464 ns/iter |
4.042605324308498 ns/iter |
1.00 |
Regex_Nested_Backtrack |
497.5545786462431 ns/iter |
502.17636262224033 ns/iter |
0.99 |
JSON_Array_Of_Objects_Unique |
412.8559293202666 ns/iter |
399.27689881206436 ns/iter |
1.03 |
JSON_Parse_1 |
30365.928825004772 ns/iter |
31027.8231749926 ns/iter |
0.98 |
JSON_Fast_Hash_Helm_Chart_Lock |
59.629757272382484 ns/iter |
66.06517917899302 ns/iter |
0.90 |
JSON_Equality_Helm_Chart_Lock |
156.69256966422134 ns/iter |
159.08699052355362 ns/iter |
0.98 |
JSON_String_Equal/10 |
6.545589822900549 ns/iter |
7.468975675448653 ns/iter |
0.88 |
JSON_String_Equal/100 |
7.1596764239307085 ns/iter |
8.090074027452188 ns/iter |
0.88 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.9349997980359368 ns/iter |
0.9343239016421264 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
10.257242359913972 ns/iter |
10.255742397847856 ns/iter |
1.00 |
JSON_String_Fast_Hash/10 |
2.4870970768040697 ns/iter |
2.4867539514886374 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
2.4913239566986114 ns/iter |
2.4859145658420068 ns/iter |
1.00 |
JSON_String_Key_Hash/10 |
2.1799707455752957 ns/iter |
2.1794890408140453 ns/iter |
1.00 |
JSON_String_Key_Hash/100 |
1.8673523504972702 ns/iter |
1.8945606804747113 ns/iter |
0.99 |
JSON_Object_Defines_Miss_Same_Length |
3.7347537048355934 ns/iter |
3.7369033911917247 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
3.734833207902208 ns/iter |
3.7369457936890185 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.7331695745590014 ns/iter |
3.7530557990302196 ns/iter |
0.99 |
Pointer_Object_Traverse |
44.26321281317814 ns/iter |
44.56879498891157 ns/iter |
0.99 |
Pointer_Object_Try_Traverse |
52.882613462052326 ns/iter |
52.27037775025061 ns/iter |
1.01 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
308.935362102784 ns/iter |
321.52388138849835 ns/iter |
0.96 |
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: 44e8749 | Previous: e924303 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
6.92652184407888 ns/iter |
7.024202008929186 ns/iter |
0.99 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
6.928681919643306 ns/iter |
7.109476562498734 ns/iter |
0.97 |
Regex_Period_Asterisk |
7.376578125002047 ns/iter |
6.911108258929995 ns/iter |
1.07 |
Regex_Group_Period_Asterisk_Group |
6.9702734374997375 ns/iter |
6.8370937500006335 ns/iter |
1.02 |
Regex_Period_Plus |
7.471871651785834 ns/iter |
7.327891741071925 ns/iter |
1.02 |
Regex_Period |
7.332845982145183 ns/iter |
7.192583705357691 ns/iter |
1.02 |
Regex_Caret_Period_Plus_Dollar |
7.141818080356187 ns/iter |
7.2806004464303395 ns/iter |
0.98 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
7.294908482144028 ns/iter |
7.174500000000401 ns/iter |
1.02 |
Regex_Caret_Period_Asterisk_Dollar |
6.983561607142974 ns/iter |
7.110170758927329 ns/iter |
0.98 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
6.955277901786262 ns/iter |
7.169397321428659 ns/iter |
0.97 |
Regex_Caret_X_Hyphen |
14.27151339285615 ns/iter |
11.97030156249923 ns/iter |
1.19 |
Regex_Period_Md_Dollar |
150.26859373801454 ns/iter |
150.05655133674225 ns/iter |
1.00 |
Regex_Caret_Slash_Period_Asterisk |
11.063678571429948 ns/iter |
10.35784687499941 ns/iter |
1.07 |
Regex_Caret_Period_Range_Dollar |
7.611910714285639 ns/iter |
7.458284598213437 ns/iter |
1.02 |
Regex_Nested_Backtrack |
617.3013392857537 ns/iter |
606.8341964286057 ns/iter |
1.02 |
JSON_Array_Of_Objects_Unique |
490.88320000009844 ns/iter |
493.0554000000029 ns/iter |
1.00 |
JSON_Parse_1 |
78926.3169643054 ns/iter |
79938.86433642065 ns/iter |
0.99 |
JSON_Fast_Hash_Helm_Chart_Lock |
65.06800892856697 ns/iter |
64.66511160714917 ns/iter |
1.01 |
JSON_Equality_Helm_Chart_Lock |
188.58770433822198 ns/iter |
189.32757940428402 ns/iter |
1.00 |
JSON_String_Equal/10 |
8.97014192424034 ns/iter |
8.981002192049441 ns/iter |
1.00 |
JSON_String_Equal/100 |
9.898769152238533 ns/iter |
9.91205625000191 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
2.1668896874999177 ns/iter |
2.188584687500139 ns/iter |
0.99 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
16.238278462686033 ns/iter |
14.831152165930716 ns/iter |
1.09 |
JSON_String_Fast_Hash/10 |
4.0248058107583455 ns/iter |
4.022363281250512 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
4.031400408984978 ns/iter |
4.02341063218478 ns/iter |
1.00 |
JSON_String_Key_Hash/10 |
7.872823625567455 ns/iter |
7.894689732143182 ns/iter |
1.00 |
JSON_String_Key_Hash/100 |
4.026480721475483 ns/iter |
4.028065676835216 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
3.7163748147915134 ns/iter |
3.726439814774683 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
4.95943482142991 ns/iter |
4.979859000000033 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.401302974064922 ns/iter |
3.406289949275065 ns/iter |
1.00 |
Pointer_Object_Traverse |
48.74496708429333 ns/iter |
50.38862000001245 ns/iter |
0.97 |
Pointer_Object_Try_Traverse |
67.50388392857434 ns/iter |
67.63754464285756 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
158.74243303569204 ns/iter |
181.94763231676652 ns/iter |
0.87 |
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: 44e8749 | Previous: e924303 | Ratio |
---|---|---|---|
Pointer_Object_Traverse |
46.529157175484656 ns/iter |
46.800347235815536 ns/iter |
0.99 |
Pointer_Object_Try_Traverse |
26.155694321552524 ns/iter |
26.146778871068623 ns/iter |
1.00 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
144.78489605005237 ns/iter |
146.47476162762192 ns/iter |
0.99 |
JSON_Array_Of_Objects_Unique |
427.0103841364335 ns/iter |
409.9526345359921 ns/iter |
1.04 |
JSON_Parse_1 |
33453.93876673302 ns/iter |
33203.34818138733 ns/iter |
1.01 |
JSON_Fast_Hash_Helm_Chart_Lock |
73.2608283984734 ns/iter |
68.45978963068296 ns/iter |
1.07 |
JSON_Equality_Helm_Chart_Lock |
149.51323909013638 ns/iter |
151.1741659487067 ns/iter |
0.99 |
JSON_String_Equal/10 |
6.341111971889218 ns/iter |
6.3396417866144095 ns/iter |
1.00 |
JSON_String_Equal/100 |
6.981951855410589 ns/iter |
6.9778351278291675 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.9337851521540794 ns/iter |
0.9344979017272844 ns/iter |
1.00 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
14.288209431888259 ns/iter |
14.29321711798246 ns/iter |
1.00 |
JSON_String_Fast_Hash/10 |
0.933076665867319 ns/iter |
0.9324486483174672 ns/iter |
1.00 |
JSON_String_Fast_Hash/100 |
0.932922139185517 ns/iter |
0.932741022514723 ns/iter |
1.00 |
JSON_String_Key_Hash/10 |
1.673606909989435 ns/iter |
1.672138687047798 ns/iter |
1.00 |
JSON_String_Key_Hash/100 |
1.9835227311906898 ns/iter |
1.985361885467619 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Same_Length |
2.508324389767274 ns/iter |
2.497721206598921 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Small |
2.4871673727589196 ns/iter |
2.4900581560545327 ns/iter |
1.00 |
JSON_Object_Defines_Miss_Too_Large |
3.1078530915664087 ns/iter |
3.113192380401642 ns/iter |
1.00 |
Regex_Lower_S_Or_Upper_S_Asterisk |
3.4194668317121084 ns/iter |
3.426344587482445 ns/iter |
1.00 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
3.4187789240595583 ns/iter |
3.419320841329902 ns/iter |
1.00 |
Regex_Period_Asterisk |
3.41985123682408 ns/iter |
3.4267276587259485 ns/iter |
1.00 |
Regex_Group_Period_Asterisk_Group |
3.421024515867041 ns/iter |
3.434795247827232 ns/iter |
1.00 |
Regex_Period_Plus |
3.8280840687791784 ns/iter |
3.419661928566568 ns/iter |
1.12 |
Regex_Period |
3.7458239840443532 ns/iter |
3.4189585088315937 ns/iter |
1.10 |
Regex_Caret_Period_Plus_Dollar |
3.73009087467886 ns/iter |
3.419789759087618 ns/iter |
1.09 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
3.733603699218228 ns/iter |
3.4364055721336206 ns/iter |
1.09 |
Regex_Caret_Period_Asterisk_Dollar |
4.735414507896468 ns/iter |
3.4241275743319313 ns/iter |
1.38 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
4.662750851935787 ns/iter |
3.425389126025182 ns/iter |
1.36 |
Regex_Caret_X_Hyphen |
12.434192875411654 ns/iter |
13.141508781957933 ns/iter |
0.95 |
Regex_Period_Md_Dollar |
89.42214385500819 ns/iter |
88.96868744127957 ns/iter |
1.01 |
Regex_Caret_Slash_Period_Asterisk |
8.079613718819587 ns/iter |
6.838919651640407 ns/iter |
1.18 |
Regex_Caret_Period_Range_Dollar |
4.6618982215980465 ns/iter |
3.7281651806822955 ns/iter |
1.25 |
Regex_Nested_Backtrack |
818.3395035299665 ns/iter |
826.9247853343498 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: 44e8749 | Previous: e924303 | Ratio |
---|---|---|---|
Regex_Lower_S_Or_Upper_S_Asterisk |
1.8928897874913666 ns/iter |
2.0668864025070866 ns/iter |
0.92 |
Regex_Caret_Lower_S_Or_Upper_S_Asterisk_Dollar |
1.9124740362585972 ns/iter |
2.100010458423603 ns/iter |
0.91 |
Regex_Period_Asterisk |
1.8918704593170508 ns/iter |
1.9910153523246268 ns/iter |
0.95 |
Regex_Group_Period_Asterisk_Group |
1.9002128339792825 ns/iter |
2.1328837005037897 ns/iter |
0.89 |
Regex_Period_Plus |
1.630125595379995 ns/iter |
1.663555023206399 ns/iter |
0.98 |
Regex_Period |
1.5890371767865556 ns/iter |
1.5970398637120231 ns/iter |
0.99 |
Regex_Caret_Period_Plus_Dollar |
1.6301209467044178 ns/iter |
1.6674648161950394 ns/iter |
0.98 |
Regex_Caret_Group_Period_Plus_Group_Dollar |
1.6116538301426966 ns/iter |
1.5894196357496535 ns/iter |
1.01 |
Regex_Caret_Period_Asterisk_Dollar |
1.9075469431740621 ns/iter |
1.8998308742999022 ns/iter |
1.00 |
Regex_Caret_Group_Period_Asterisk_Group_Dollar |
1.9023600481013985 ns/iter |
1.9229066761006874 ns/iter |
0.99 |
Regex_Caret_X_Hyphen |
6.140313232096328 ns/iter |
6.2018164698246405 ns/iter |
0.99 |
Regex_Period_Md_Dollar |
71.56163550644638 ns/iter |
72.72708332955494 ns/iter |
0.98 |
Regex_Caret_Slash_Period_Asterisk |
4.568482032619769 ns/iter |
4.731906010303136 ns/iter |
0.97 |
Regex_Caret_Period_Range_Dollar |
1.925166012826756 ns/iter |
1.9986148806098367 ns/iter |
0.96 |
Regex_Nested_Backtrack |
846.5580789871497 ns/iter |
896.8915622744267 ns/iter |
0.94 |
JSON_Array_Of_Objects_Unique |
224.23453388369484 ns/iter |
225.7524788288214 ns/iter |
0.99 |
JSON_Parse_1 |
23377.25732249086 ns/iter |
26465.809419714562 ns/iter |
0.88 |
JSON_Fast_Hash_Helm_Chart_Lock |
23.986099150144405 ns/iter |
27.631795965210696 ns/iter |
0.87 |
JSON_Equality_Helm_Chart_Lock |
116.61819530048626 ns/iter |
132.3811461289575 ns/iter |
0.88 |
JSON_String_Equal/10 |
5.489309781456381 ns/iter |
5.717588314457684 ns/iter |
0.96 |
JSON_String_Equal/100 |
5.091263520079466 ns/iter |
5.425196230174905 ns/iter |
0.94 |
JSON_String_Equal_Small_By_Perfect_Hash/10 |
0.7548829635624776 ns/iter |
0.8498662512014389 ns/iter |
0.89 |
JSON_String_Equal_Small_By_Runtime_Perfect_Hash/10 |
3.4820129401855198 ns/iter |
3.7095117302667346 ns/iter |
0.94 |
JSON_String_Fast_Hash/10 |
1.9242397147131105 ns/iter |
1.9963887863114451 ns/iter |
0.96 |
JSON_String_Fast_Hash/100 |
1.9525366105110133 ns/iter |
2.1598973217953987 ns/iter |
0.90 |
JSON_String_Key_Hash/10 |
1.6263700790998399 ns/iter |
1.4467854623336653 ns/iter |
1.12 |
JSON_String_Key_Hash/100 |
1.9662974744529778 ns/iter |
2.229337004767761 ns/iter |
0.88 |
JSON_Object_Defines_Miss_Same_Length |
1.7556705765446772 ns/iter |
1.8653372732818732 ns/iter |
0.94 |
JSON_Object_Defines_Miss_Too_Small |
1.9131430301846784 ns/iter |
2.0453381535473802 ns/iter |
0.94 |
JSON_Object_Defines_Miss_Too_Large |
1.7464253776687686 ns/iter |
1.7555646168245445 ns/iter |
0.99 |
Pointer_Object_Traverse |
52.442023783269235 ns/iter |
54.05081341803863 ns/iter |
0.97 |
Pointer_Object_Try_Traverse |
36.7712848964618 ns/iter |
38.78272492426 ns/iter |
0.95 |
Pointer_Push_Back_Pointer_To_Weak_Pointer |
157.4371052487659 ns/iter |
181.99649848697683 ns/iter |
0.87 |
This comment was automatically generated by workflow using github-action-benchmark.
Signed-off-by: Juan Cruz Viotti [email protected]