Profiling results ----------------- Total cpu time observed: 10446ms (out of 10560ms) Number of samples taken: 46 (once every 227ms) ========================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ========================================================================== [1] 10446(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [10] 100.0% -------------------------------------------------------------------------- location-do [2] 21.0% ??? [81] 79.0% [2] 1412(13.5%) 0(0.0%) location-do ...ion-both-ends/src/programs.rkt:63:0 ??? [81] 65.7% location-do [2] 21.0% loop [15] 13.3% -------------------------------------------------------------------------- ??? [81] 100.0% [3] 1412(13.5%) 0(0.0%) approximate9 ...both-ends/src/core/taylor.rkt:11:0 loop [11] 86.4% taylor [17] 13.6% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [4] 1220(11.7%) 0(0.0%) parse-loop74 (unknown source) eval-const-expr [12] 100.0% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [5] 782(7.5%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:290:26 for-loop [13] 100.0% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [6] 570(5.5%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:300:23 for-loop [14] 100.0% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [7] 424(4.1%) 0(0.0%) ??? ...-detection-both-ends/src/programs.rkt:178:5 loop [40] 100.0% -------------------------------------------------------------------------- matcher [93] 100.0% [8] 236(2.3%) 0(0.0%) ??? ...ction-both-ends/src/core/matcher.rkt:127:11 for-loop [16] 100.0% -------------------------------------------------------------------------- for-loop [69] 100.0% [9] 184(1.8%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [18] 100.0% -------------------------------------------------------------------------- ??? [1] 100.0% [10] 10446(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [19] 100.0% -------------------------------------------------------------------------- approximate9 [3] 100.0% [11] 1220(11.7%) 0(0.0%) loop ...tection-both-ends/src/core/taylor.rkt:86:4 ??? [81] 100.0% -------------------------------------------------------------------------- parse-loop74 [4] 100.0% [12] 1220(11.7%) 0(0.0%) eval-const-expr ...oth-ends/src/programs.rkt:120:0 temp85_0 [20] 67.2% eval-prog [36] 17.7% eval [23] 15.1% -------------------------------------------------------------------------- ??? [5] 100.0% [13] 782(7.5%) 0(0.0%) for-loop ...n-both-ends/src/core/taylor.rkt:290:52 hash-ref! [88] 100.0% -------------------------------------------------------------------------- ??? [6] 100.0% [14] 570(5.5%) 0(0.0%) for-loop ...n-both-ends/src/core/taylor.rkt:303:27 hash-ref! [88] 100.0% -------------------------------------------------------------------------- location-do [2] 100.0% [15] 376(3.6%) 0(0.0%) loop ...-detection-both-ends/src/programs.rkt:72:4 ??? [81] 100.0% -------------------------------------------------------------------------- ??? [8] 100.0% [16] 236(2.3%) 0(0.0%) for-loop ...-both-ends/src/core/matcher.rkt:129:15 matcher [93] 100.0% -------------------------------------------------------------------------- taylor [17] 25.0% approximate9 [3] 25.0% map [22] 50.0% [17] 192(1.8%) 0(0.0%) taylor ...tion-both-ends/src/core/taylor.rkt:169:0 map [22] 50.0% taylor [17] 25.0% debug-print [21] 25.0% -------------------------------------------------------------------------- syntax-e [9] 100.0% [18] 184(1.8%) 0(0.0%) syntax-e/no-taint (unknown source) loop [40] 100.0% -------------------------------------------------------------------------- profile-thunk16 [10] 100.0% [19] 10446(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [24] 100.0% -------------------------------------------------------------------------- eval-const-expr [12] 100.0% [20] 820(7.8%) 0(0.0%) temp85_0 (unknown source) compile15 [25] 100.0% -------------------------------------------------------------------------- taylor [17] 100.0% [21] 192(1.8%) 0(0.0%) debug-print ...ction-both-ends/src/debug.rkt:110:0 for-loop [26] 100.0% -------------------------------------------------------------------------- taylor [17] 100.0% [22] 192(1.8%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 taylor [17] 100.0% -------------------------------------------------------------------------- eval-const-expr [12] 100.0% [23] 184(1.8%) 184(1.8%) eval (unknown source) -------------------------------------------------------------------------- for-loop [90] 4.2% run [19] 95.8% [24] 10446(100.0%) 426(4.1%) .../more-scheme.rkt:261:28 (unknown source) run-improve47 [27] 49.7% prepare-points-intervals [28] 36.5% oracle-error [30] 5.7% ??? [59] 2.1% errors [83] 2.0% eval-errors [31] 1.9% -------------------------------------------------------------------------- temp85_0 [20] 100.0% [25] 820(7.8%) 0(0.0%) compile15 (unknown source) temp91_0 [29] 100.0% -------------------------------------------------------------------------- debug-print [21] 100.0% [26] 192(1.8%) 192(1.8%) for-loop ...etection-both-ends/src/debug.rkt:116:2 -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [24] 100.0% [27] 5418(51.9%) 0(0.0%) run-improve47 ...-both-ends/src/mainloop.rkt:346:0 for-loop [32] 96.2% simplify! [43] 3.8% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [24] 100.0% [28] 3818(36.5%) 0(0.0%) prepare-points-intervals ...s/src/points.rkt:133:0 loop [33] 94.6% eval-prog [36] 5.4% -------------------------------------------------------------------------- compile15 [25] 100.0% [29] 820(7.8%) 0(0.0%) temp91_0 (unknown source) temp118_0 [34] 100.0% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [24] 100.0% [30] 600(5.7%) 0(0.0%) oracle-error ...ion-both-ends/src/points.rkt:190:0 for-loop [35] 100.0% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [24] 100.0% [31] 200(1.9%) 0(0.0%) eval-errors ...tion-both-ends/src/points.rkt:181:0 for-loop [37] 100.0% -------------------------------------------------------------------------- run-improve47 [27] 100.0% [32] 5214(49.9%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:365:4 run-iter! [38] 100.0% -------------------------------------------------------------------------- prepare-points-intervals [28] 100.0% [33] 3610(34.6%) 0(0.0%) loop ...w-detection-both-ends/src/points.rkt:145:4 loop [39] 89.8% ??? [42] 10.2% -------------------------------------------------------------------------- temp91_0 [29] 100.0% [34] 820(7.8%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [41] 100.0% -------------------------------------------------------------------------- oracle-error [30] 100.0% [35] 600(5.7%) 0(0.0%) for-loop ...tection-both-ends/src/points.rkt:191:2 loop [40] 100.0% -------------------------------------------------------------------------- prepare-points-intervals [28] 49.1% eval-const-expr [12] 50.9% [36] 424(4.1%) 0(0.0%) eval-prog ...ction-both-ends/src/programs.rkt:82:0 hash-ref! [88] 100.0% -------------------------------------------------------------------------- eval-errors [31] 100.0% [37] 200(1.9%) 200(1.9%) for-loop ...tection-both-ends/src/points.rkt:183:2 -------------------------------------------------------------------------- for-loop [32] 100.0% [38] 5214(49.9%) 0(0.0%) run-iter! ...tion-both-ends/src/mainloop.rkt:327:0 simplify! [43] 54.6% gen-series! [44] 27.1% finalize-iter! [47] 8.9% localize! [51] 4.9% gen-rewrites! [52] 4.5% -------------------------------------------------------------------------- loop [33] 100.0% [39] 3240(31.0%) 0(0.0%) loop ...ow-detection-both-ends/src/points.rkt:81:2 ??? [81] 47.5% ??? [45] 29.1% real->precision [49] 12.0% ...higher-order.rkt:375:33 [50] 11.4% -------------------------------------------------------------------------- syntax-e/no-taint [18] 15.2% loop [40] 16.6% for-loop [35] 33.1% ??? [7] 35.1% [40] 1208(11.6%) 200(1.9%) loop (unknown source) hash-ref! [88] 35.1% ??? [48] 24.8% loop [40] 16.6% gf [54] 15.2% -------------------------------------------------------------------------- temp118_0 [34] 100.0% [41] 820(7.8%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [46] 100.0% -------------------------------------------------------------------------- loop [33] 100.0% [42] 370(3.5%) 0(0.0%) ??? ...ow-detection-both-ends/src/points.rkt:126:6 sample-multi-bounded [53] 50.3% ??? [81] 49.7% -------------------------------------------------------------------------- run-improve47 [27] 6.7% run-iter! [38] 93.3% [43] 3052(29.2%) 0(0.0%) simplify! ...tion-both-ends/src/mainloop.rkt:224:0 ??? [55] 100.0% -------------------------------------------------------------------------- run-iter! [38] 100.0% [44] 1412(13.5%) 0(0.0%) gen-series! ...on-both-ends/src/mainloop.rkt:160:0 for-loop [56] 100.0% -------------------------------------------------------------------------- loop [39] 100.0% [45] 944(9.0%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-add [58] 80.5% ival-sub [65] 19.5% -------------------------------------------------------------------------- expand-capturing-lifts [41] 100.0% [46] 820(7.8%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [57] 100.0% -------------------------------------------------------------------------- run-iter! [38] 100.0% [47] 462(4.4%) 0(0.0%) finalize-iter! ...both-ends/src/mainloop.rkt:278:0 ??? [60] 100.0% -------------------------------------------------------------------------- loop [40] 100.0% [48] 400(3.8%) 200(1.9%) ??? ...w-detection-both-ends/src/points.rkt:192:26 ??? [59] 50.0% -------------------------------------------------------------------------- loop [39] 100.0% [49] 390(3.7%) 0(0.0%) real->precision ...oth-ends/src/programs.rkt:94:11 ??? [81] 100.0% -------------------------------------------------------------------------- loop [39] 100.0% [50] 368(3.5%) 184(1.8%) ...higher-order.rkt:375:33 (unknown source) loop [66] 50.0% -------------------------------------------------------------------------- run-iter! [38] 100.0% [51] 256(2.5%) 0(0.0%) localize! ...tion-both-ends/src/mainloop.rkt:127:0 localize-error [61] 100.0% -------------------------------------------------------------------------- run-iter! [38] 100.0% [52] 236(2.3%) 0(0.0%) gen-rewrites! ...-both-ends/src/mainloop.rkt:183:0 for-loop [62] 100.0% -------------------------------------------------------------------------- ??? [42] 100.0% [53] 186(1.8%) 0(0.0%) sample-multi-bounded ...h-ends/src/points.rkt:14:0 random-ranges [63] 100.0% -------------------------------------------------------------------------- loop [40] 100.0% [54] 184(1.8%) 0(0.0%) gf (unknown source) propagation-apply [64] 100.0% -------------------------------------------------------------------------- simplify! [43] 100.0% [55] 3052(29.2%) 0(0.0%) ??? ...ection-both-ends/src/core/simplify.rkt:42:0 egraph-run [67] 100.0% -------------------------------------------------------------------------- gen-series! [44] 100.0% [56] 1412(13.5%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:167:7 taylor-alt [68] 100.0% -------------------------------------------------------------------------- lambda-clause-expander [46] 29.8% for-loop [69] 70.2% [57] 820(7.8%) 0(0.0%) finish-bodys (unknown source) for-loop [69] 100.0% -------------------------------------------------------------------------- ??? [45] 100.0% [58] 760(7.3%) 186(1.8%) ival-add ...on-both-ends/src/biginterval.rkt:202:0 e-compute7 [97] 75.5% -------------------------------------------------------------------------- ??? [48] 31.0% .../more-scheme.rkt:261:28 [24] 69.0% [59] 646(6.2%) 646(6.2%) ??? ...tion-both-ends/src/syntax/syntax.rkt:214:17 -------------------------------------------------------------------------- finalize-iter! [47] 100.0% [60] 462(4.4%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [70] 100.0% -------------------------------------------------------------------------- localize! [51] 100.0% [61] 256(2.5%) 0(0.0%) localize-error ...-ends/src/core/localize.rkt:58:0 loop [71] 100.0% -------------------------------------------------------------------------- gen-rewrites! [52] 100.0% [62] 236(2.3%) 0(0.0%) for-loop ...tion-both-ends/src/mainloop.rkt:191:11 rewrite-expression-head24 [72] 100.0% -------------------------------------------------------------------------- sample-multi-bounded [53] 100.0% [63] 186(1.8%) 186(1.8%) random-ranges ...on-both-ends/src/common.rkt:164:0 -------------------------------------------------------------------------- gf [54] 100.0% [64] 184(1.8%) 184(1.8%) propagation-apply (unknown source) -------------------------------------------------------------------------- ??? [45] 100.0% [65] 184(1.8%) 0(0.0%) ival-sub ...on-both-ends/src/biginterval.rkt:209:0 e-compute7 [97] 100.0% -------------------------------------------------------------------------- ...higher-order.rkt:375:33 [50] 100.0% [66] 184(1.8%) 0(0.0%) loop ...ection-both-ends/src/biginterval.rkt:602:9 ival-<=2 [73] 100.0% -------------------------------------------------------------------------- ??? [55] 100.0% [67] 3052(29.2%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [74] 100.0% -------------------------------------------------------------------------- for-loop [56] 100.0% [68] 1412(13.5%) 0(0.0%) taylor-alt ...ion-both-ends/src/mainloop.rkt:146:0 for-loop [75] 100.0% -------------------------------------------------------------------------- for-loop [69] 35.2% finish-bodys [57] 64.8% [69] 820(7.8%) 0(0.0%) for-loop (unknown source) finish-bodys [57] 47.2% for-loop [69] 35.2% expand-implicit [76] 15.9% syntax-e [9] 1.7% -------------------------------------------------------------------------- ??? [60] 100.0% [70] 462(4.4%) 0(0.0%) for-loop ...-both-ends/src/core/alt-table.rkt:46:2 atab-add-altn [77] 100.0% -------------------------------------------------------------------------- localize-error [61] 100.0% [71] 256(2.5%) 0(0.0%) loop ...7.5/collects/racket/private/map.rkt:149:23 ??? [78] 100.0% -------------------------------------------------------------------------- for-loop [62] 100.0% [72] 236(2.3%) 0(0.0%) rewrite-expression-head24 ...core/matcher.rkt:85:0 rewriter [79] 100.0% -------------------------------------------------------------------------- loop [66] 100.0% [73] 184(1.8%) 0(0.0%) ival-<=2 ...on-both-ends/src/biginterval.rkt:578:0 ival-cmp [80] 100.0% -------------------------------------------------------------------------- egraph-run [67] 100.0% [74] 3052(29.2%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [82] 100.0% -------------------------------------------------------------------------- taylor-alt [68] 100.0% [75] 1412(13.5%) 0(0.0%) for-loop ...ction-both-ends/src/mainloop.rkt:152:6 ??? [81] 100.0% -------------------------------------------------------------------------- for-loop [69] 100.0% [76] 636(6.1%) 202(1.9%) expand-implicit (unknown source) binding-lookup52 [85] 34.9% resolve+shift28 [86] 33.3% -------------------------------------------------------------------------- for-loop [70] 100.0% [77] 462(4.4%) 0(0.0%) atab-add-altn ...ends/src/core/alt-table.rkt:194:0 errors [83] 100.0% -------------------------------------------------------------------------- loop [71] 100.0% [78] 256(2.5%) 256(2.5%) ??? ...cket-7.5/collects/racket/function.rkt:93:12 -------------------------------------------------------------------------- rewrite-expression-head24 [72] 33.3% matcher [93] 66.7% [79] 236(2.3%) 0(0.0%) rewriter ...on-both-ends/src/core/matcher.rkt:87:2 for-loop [84] 100.0% -------------------------------------------------------------------------- ival-<=2 [73] 100.0% [80] 184(1.8%) 0(0.0%) ival-cmp ...on-both-ends/src/biginterval.rkt:567:0 e-compute7 [97] 100.0% -------------------------------------------------------------------------- loop [15] 4.5% ??? [42] 5.2% location-do [2] 9.8% real->precision [49] 11.1% loop [11] 11.5% for-loop [75] 14.3% loop [39] 43.6% [81] 3524(33.7%) 586(5.6%) ??? ...tract/private/arrow-higher-order.rkt:375:33 ival-mult [89] 37.9% location-do [2] 14.3% approximate9 [3] 14.3% hash-ref! [88] 11.5% bf [96] 5.4% -------------------------------------------------------------------------- egraph-add-exprs [74] 100.0% [82] 3052(29.2%) 0(0.0%) ??? ...ction-both-ends/src/core/simplify.rkt:102:6 for-loop [87] 91.3% egg-run-rules [91] 8.7% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [24] 47.0% atab-add-altn [77] 53.0% [83] 872(8.3%) 0(0.0%) errors ...detection-both-ends/src/points.rkt:203:0 for-loop [90] 100.0% -------------------------------------------------------------------------- rewriter [79] 100.0% [84] 236(2.3%) 0(0.0%) for-loop ...on-both-ends/src/core/matcher.rkt:89:4 matcher [93] 66.7% for-loop [92] 33.3% -------------------------------------------------------------------------- expand-implicit [76] 100.0% [85] 222(2.1%) 0(0.0%) binding-lookup52 (unknown source) binding->module-instance [94] 100.0% -------------------------------------------------------------------------- expand-implicit [76] 100.0% [86] 212(2.0%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [95] 100.0% -------------------------------------------------------------------------- ??? [82] 100.0% [87] 2788(26.7%) 2788(26.7%) for-loop ...-both-ends/src/core/simplify.rkt:121:2 -------------------------------------------------------------------------- for-loop [14] 7.6% eval-prog [36] 7.9% ??? [99] 8.2% loop [40] 12.7% ??? [98] 20.7% ??? [81] 20.7% for-loop [13] 22.2% [88] 1428(13.7%) 216(2.1%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [5] 22.2% ??? [98] 20.7% parse-loop74 [4] 20.7% ??? [7] 12.7% ??? [99] 8.2% ??? [6] 7.6% bigfloat-hash [102] 4.9% -------------------------------------------------------------------------- ??? [81] 100.0% [89] 1336(12.8%) 0(0.0%) ival-mult ...n-both-ends/src/biginterval.rkt:225:0 e-compute7 [97] 100.0% -------------------------------------------------------------------------- errors [83] 100.0% [90] 872(8.3%) 0(0.0%) for-loop ...tection-both-ends/src/points.rkt:205:2 .../more-scheme.rkt:261:28 [24] 100.0% -------------------------------------------------------------------------- ??? [82] 100.0% [91] 264(2.5%) 0(0.0%) egg-run-rules ...-ends/src/core/simplify.rkt:108:0 debug5 [100] 100.0% -------------------------------------------------------------------------- for-loop [84] 100.0% [92] 236(2.3%) 0(0.0%) for-loop ...on-both-ends/src/core/matcher.rkt:96:8 fix-up-variables [101] 100.0% -------------------------------------------------------------------------- for-loop [16] 50.0% for-loop [84] 50.0% [93] 236(2.3%) 0(0.0%) matcher ...on-both-ends/src/core/matcher.rkt:115:2 ??? [8] 50.0% rewriter [79] 50.0% -------------------------------------------------------------------------- binding-lookup52 [85] 100.0% [94] 222(2.1%) 222(2.1%) binding->module-instance (unknown source) -------------------------------------------------------------------------- resolve+shift28 [86] 100.0% [95] 212(2.0%) 212(2.0%) fallback-loop (unknown source) -------------------------------------------------------------------------- ??? [81] 100.0% [96] 190(1.8%) 190(1.8%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 -------------------------------------------------------------------------- ival-cmp [80] 8.1% ival-sub [65] 8.1% ival-add [58] 25.2% ival-mult [89] 58.6% [97] 2278(21.8%) 376(3.6%) e-compute7 ...-both-ends/src/biginterval.rkt:149:0 ormap [103] 33.5% bfadd [104] 33.0% strong-immovable-endpoint-0? [107] 16.9% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [98] 1220(11.7%) 0(0.0%) ??? ...tection-both-ends/src/core/taylor.rkt:44:15 hash-ref! [88] 100.0% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [99] 438(4.2%) 0(0.0%) ??? ...ection-both-ends/src/core/taylor.rkt:343:33 hash-ref! [88] 100.0% -------------------------------------------------------------------------- egg-run-rules [91] 100.0% [100] 264(2.5%) 264(2.5%) debug5 ...-detection-both-ends/src/debug.rkt:102:0 -------------------------------------------------------------------------- for-loop [92] 100.0% [101] 236(2.3%) 0(0.0%) fix-up-variables ...nds/src/core/matcher.rkt:108:2 pattern-substitute [105] 100.0% -------------------------------------------------------------------------- hash-ref! [88] 100.0% [102] 208(2.0%) 0(0.0%) bigfloat-hash ...h/private/bigfloat/mpfr.rkt:168:0 sig+exp->bigfloat [106] 100.0% -------------------------------------------------------------------------- e-compute7 [97] 100.0% [103] 764(7.3%) 0(0.0%) ormap ....5/collects/racket/private/map.rkt:141:13 strong-immovable-endpoint-0? [107]100.0% -------------------------------------------------------------------------- e-compute7 [97] 100.0% [104] 752(7.2%) 0(0.0%) bfadd ...-lib/math/private/bigfloat/mpfr.rkt:835:4 ??? [109] 50.8% new-mpfr [108] 49.2% -------------------------------------------------------------------------- fix-up-variables [101] 100.0% [105] 236(2.3%) 0(0.0%) pattern-substitute ...ds/src/core/matcher.rkt:45:0 do-curry [110] 100.0% -------------------------------------------------------------------------- bigfloat-hash [102] 100.0% [106] 208(2.0%) 0(0.0%) sig+exp->bigfloat ...ivate/bigfloat/mpfr.rkt:401:0 new-mpfr [108] 100.0% -------------------------------------------------------------------------- e-compute7 [97] 33.6% ormap [103] 66.4% [107] 1150(11.0%) 1150(11.0%) strong-immovable-endpoint-0? ...interval.rkt:116:0 -------------------------------------------------------------------------- sig+exp->bigfloat [106] 36.0% bfadd [104] 64.0% [108] 578(5.5%) 578(5.5%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 -------------------------------------------------------------------------- bfadd [104] 100.0% [109] 382(3.7%) 382(3.7%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 -------------------------------------------------------------------------- pattern-substitute [105] 100.0% [110] 236(2.3%) 236(2.3%) do-curry ...-7.5/collects/racket/function.rkt:71:2 --------------------------------------------------------------------------