Profiling results ----------------- Total cpu time observed: 15366ms (out of 15232ms) Number of samples taken: 71 (once every 216ms) ========================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ========================================================================== [1] 15366(100.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [7] 100.0% -------------------------------------------------------------------------- location-do [2] 36.1% ??? [67] 63.9% [2] 1248(8.1%) 0(0.0%) location-do ...tor-and-minor/src/programs.rkt:87:0 ??? [67] 38.9% location-do [2] 36.1% loop [10] 25.0% -------------------------------------------------------------------------- ??? [67] 100.0% [3] 1248(8.1%) 0(0.0%) approximate9 ...and-minor/src/core/taylor.rkt:11:0 loop [9] 65.9% for-loop [11] 34.1% -------------------------------------------------------------------------- taylor-invert [19] 20.2% hash-ref! [77] 79.8% [4] 1030(6.7%) 0(0.0%) parse-loop74 (unknown source) eval-const-expr [8] 100.0% -------------------------------------------------------------------------- hash-ref! [77] 100.0% [5] 400(2.6%) 0(0.0%) ??? ...factor-and-minor/src/core/taylor.rkt:290:26 for-loop [12] 100.0% -------------------------------------------------------------------------- hash-ref! [77] 100.0% [6] 200(1.3%) 0(0.0%) ??? ...factor-and-minor/src/core/taylor.rkt:300:23 for-loop [13] 100.0% -------------------------------------------------------------------------- ??? [1] 100.0% [7] 15366(100.0%) 0(0.0%) profile-thunk16 ...e/pkgs/profile-lib/main.rkt:9:0 run [14] 100.0% -------------------------------------------------------------------------- parse-loop74 [4] 100.0% [8] 1030(6.7%) 0(0.0%) eval-const-expr ...nd-minor/src/programs.rkt:144:0 temp85_0 [76] 79.0% eval-one-top12 [16] 21.0% -------------------------------------------------------------------------- approximate9 [3] 100.0% [9] 822(5.3%) 0(0.0%) loop ...efactor-and-minor/src/core/taylor.rkt:86:4 ??? [67] 100.0% -------------------------------------------------------------------------- loop [10] 22.0% location-do [2] 78.0% [10] 624(4.1%) 0(0.0%) loop ...e/refactor-and-minor/src/programs.rkt:96:4 ??? [67] 78.0% loop [10] 22.0% -------------------------------------------------------------------------- approximate9 [3] 100.0% [11] 426(2.8%) 0(0.0%) for-loop ...or-and-minor/src/core/taylor.rkt:29:18 taylor [15] 100.0% -------------------------------------------------------------------------- ??? [5] 100.0% [12] 400(2.6%) 0(0.0%) for-loop ...r-and-minor/src/core/taylor.rkt:290:52 hash-ref! [77] 100.0% -------------------------------------------------------------------------- ??? [6] 100.0% [13] 200(1.3%) 0(0.0%) for-loop ...r-and-minor/src/core/taylor.rkt:303:27 hash-ref! [77] 100.0% -------------------------------------------------------------------------- profile-thunk16 [7] 100.0% [14] 15366(100.0%) 0(0.0%) run ...et-7.5/share/pkgs/profile-lib/main.rkt:39:2 .../more-scheme.rkt:261:28 [17] 100.0% -------------------------------------------------------------------------- map [71] 10.2% for-loop [11] 34.6% taylor [15] 55.1% [15] 426(2.8%) 0(0.0%) taylor ...ctor-and-minor/src/core/taylor.rkt:169:0 taylor [15] 55.1% taylor-invert [19] 24.4% map [71] 10.2% debug5 [18] 10.2% -------------------------------------------------------------------------- eval-const-expr [8] 100.0% [16] 216(1.4%) 0(0.0%) eval-one-top12 (unknown source) for-loop [93] 100.0% -------------------------------------------------------------------------- for-loop [75] 4.1% run [14] 95.9% [17] 15366(100.0%) 400(2.6%) .../more-scheme.rkt:261:28 (unknown source) prepare-points-intervals [24] 57.7% run-improve47 [20] 31.9% ??? [106] 2.8% oracle-error [21] 2.6% get-final-combination [22] 1.3% errors [68] 1.3% baseline-error [23] 1.2% -------------------------------------------------------------------------- taylor [15] 100.0% [18] 218(1.4%) 0(0.0%) debug5 ...e/refactor-and-minor/src/debug.rkt:102:0 return/no-unsupplied [108] 100.0% -------------------------------------------------------------------------- taylor [15] 100.0% [19] 208(1.4%) 0(0.0%) taylor-invert ...d-minor/src/core/taylor.rkt:317:0 parse-loop74 [4] 100.0% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [17] 100.0% [20] 5330(34.7%) 0(0.0%) run-improve47 ...-and-minor/src/mainloop.rkt:345:0 for-loop [25] 71.4% prepare-points-intervals [24] 17.8% simplify! [36] 10.8% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [17] 100.0% [21] 394(2.6%) 0(0.0%) oracle-error ...tor-and-minor/src/points.rkt:179:0 for-loop [26] 100.0% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [17] 100.0% [22] 200(1.3%) 0(0.0%) get-final-combination ...or/src/mainloop.rkt:370:0 infer-splitpoints [27] 100.0% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [17] 100.0% [23] 190(1.2%) 0(0.0%) baseline-error ...r-and-minor/src/points.rkt:183:0 argmin [28] 100.0% -------------------------------------------------------------------------- run-improve47 [20] 9.7% .../more-scheme.rkt:261:28 [17] 90.3% [24] 9808(63.8%) 0(0.0%) prepare-points-intervals ...r/src/points.rkt:122:0 loop [29] 100.0% -------------------------------------------------------------------------- run-improve47 [20] 100.0% [25] 3806(24.8%) 0(0.0%) for-loop ...actor-and-minor/src/mainloop.rkt:364:4 run-iter! [30] 100.0% -------------------------------------------------------------------------- oracle-error [21] 100.0% [26] 394(2.6%) 0(0.0%) for-loop ...efactor-and-minor/src/points.rkt:180:2 loop [102] 100.0% -------------------------------------------------------------------------- get-final-combination [22] 100.0% [27] 200(1.3%) 0(0.0%) infer-splitpoints ...nor/src/core/regimes.rkt:33:0 for-loop [31] 100.0% -------------------------------------------------------------------------- baseline-error [23] 100.0% [28] 190(1.2%) 0(0.0%) argmin ...acket-7.5/collects/racket/list.rkt:765:0 ??? [32] 100.0% -------------------------------------------------------------------------- prepare-points-intervals [24] 100.0% [29] 9808(63.8%) 0(0.0%) loop ...ie/refactor-and-minor/src/points.rkt:134:4 loop [33] 89.8% ??? [37] 10.2% -------------------------------------------------------------------------- for-loop [25] 100.0% [30] 3806(24.8%) 0(0.0%) run-iter! ...ctor-and-minor/src/mainloop.rkt:326:0 finalize-iter! [34] 43.7% gen-series! [35] 38.2% simplify! [36] 18.1% -------------------------------------------------------------------------- infer-splitpoints [27] 100.0% [31] 200(1.3%) 0(0.0%) for-loop ...or-and-minor/src/core/regimes.rkt:45:6 option-on-expr [38] 100.0% -------------------------------------------------------------------------- argmin [28] 100.0% [32] 190(1.2%) 0(0.0%) ??? ...ie/refactor-and-minor/src/points.rkt:184:27 eval-errors [39] 100.0% -------------------------------------------------------------------------- loop [29] 100.0% [33] 8812(57.3%) 788(5.1%) loop ...bie/refactor-and-minor/src/points.rkt:79:2 ??? [40] 81.4% real->precision [44] 7.3% hash-update! [46] 2.3% -------------------------------------------------------------------------- run-iter! [30] 100.0% [34] 1662(10.8%) 0(0.0%) finalize-iter! ...and-minor/src/mainloop.rkt:277:0 ??? [41] 100.0% -------------------------------------------------------------------------- run-iter! [30] 100.0% [35] 1454(9.5%) 0(0.0%) gen-series! ...or-and-minor/src/mainloop.rkt:159:0 for-loop [42] 100.0% -------------------------------------------------------------------------- run-improve47 [20] 45.5% run-iter! [30] 54.5% [36] 1266(8.2%) 0(0.0%) simplify! ...ctor-and-minor/src/mainloop.rkt:223:0 ??? [43] 100.0% -------------------------------------------------------------------------- loop [29] 100.0% [37] 996(6.5%) 400(2.6%) ??? ...bie/refactor-and-minor/src/points.rkt:115:6 sample-multi-bounded [45] 59.8% -------------------------------------------------------------------------- for-loop [31] 100.0% [38] 200(1.3%) 0(0.0%) option-on-expr ...minor/src/core/regimes.rkt:124:0 err-lsts->split-indices [47] 100.0% -------------------------------------------------------------------------- ??? [32] 100.0% [39] 190(1.2%) 0(0.0%) eval-errors ...ctor-and-minor/src/points.rkt:170:0 for-loop [48] 100.0% -------------------------------------------------------------------------- loop [33] 100.0% [40] 7172(46.7%) 2762(18.0%) ??? ...tract/private/arrow-higher-order.rkt:379:33 ival-exp [49] 32.4% ival-neg [53] 16.0% ival-sub [54] 7.9% ival-add [56] 5.2% -------------------------------------------------------------------------- finalize-iter! [34] 100.0% [41] 1662(10.8%) 0(0.0%) ??? ...contract/private/arrow-val-first.rkt:486:18 for-loop [50] 100.0% -------------------------------------------------------------------------- gen-series! [35] 100.0% [42] 1454(9.5%) 0(0.0%) for-loop ...actor-and-minor/src/mainloop.rkt:166:7 taylor-alt [51] 100.0% -------------------------------------------------------------------------- simplify! [36] 100.0% [43] 1266(8.2%) 0(0.0%) ??? ...factor-and-minor/src/core/simplify.rkt:42:0 egraph-run [52] 100.0% -------------------------------------------------------------------------- loop [33] 100.0% [44] 646(4.2%) 0(0.0%) real->precision ...d-minor/src/programs.rkt:118:11 ??? [67] 100.0% -------------------------------------------------------------------------- ??? [37] 100.0% [45] 596(3.9%) 0(0.0%) sample-multi-bounded ...-minor/src/points.rkt:14:0 random-ranges [55] 66.4% for-loop [57] 33.6% -------------------------------------------------------------------------- loop [33] 100.0% [46] 206(1.3%) 206(1.3%) hash-update! ...cket/private/more-scheme.rkt:365:4 -------------------------------------------------------------------------- option-on-expr [38] 100.0% [47] 200(1.3%) 0(0.0%) err-lsts->split-indices .../core/regimes.rkt:263:0 loop [58] 100.0% -------------------------------------------------------------------------- eval-errors [39] 100.0% [48] 190(1.2%) 190(1.2%) for-loop ...efactor-and-minor/src/points.rkt:172:2 -------------------------------------------------------------------------- ??? [40] 100.0% [49] 2324(15.1%) 1560(10.2%) ival-exp ...or-and-minor/src/biginterval.rkt:192:0 bfneg [59] 32.9% -------------------------------------------------------------------------- ??? [41] 100.0% [50] 1662(10.8%) 0(0.0%) for-loop ...and-minor/src/core/alt-table.rkt:192:2 atab-add-altn [62] 48.9% errors [68] 27.1% loop [63] 24.1% -------------------------------------------------------------------------- for-loop [42] 100.0% [51] 1454(9.5%) 0(0.0%) taylor-alt ...tor-and-minor/src/mainloop.rkt:145:0 for-loop [60] 100.0% -------------------------------------------------------------------------- ??? [43] 100.0% [52] 1266(8.2%) 0(0.0%) egraph-run .../pkgs/egg-herbie-linux/main.rkt:49:0 egraph-add-exprs [61] 100.0% -------------------------------------------------------------------------- ??? [40] 100.0% [53] 1148(7.5%) 0(0.0%) ival-neg ...tor-and-minor/src/biginterval.rkt:98:0 bfneg [59] 100.0% -------------------------------------------------------------------------- ??? [40] 100.0% [54] 564(3.7%) 378(2.5%) ival-sub ...or-and-minor/src/biginterval.rkt:108:0 bfsub [64] 33.0% -------------------------------------------------------------------------- sample-multi-bounded [45] 100.0% [55] 396(2.6%) 202(1.3%) random-ranges ...or-and-minor/src/common.rkt:164:0 cons/c [66] 49.0% -------------------------------------------------------------------------- ??? [40] 100.0% [56] 374(2.4%) 190(1.2%) ival-add ...or-and-minor/src/biginterval.rkt:102:0 bfsub [64] 49.2% -------------------------------------------------------------------------- sample-multi-bounded [45] 100.0% [57] 200(1.3%) 200(1.3%) for-loop ...refactor-and-minor/src/points.rkt:20:4 -------------------------------------------------------------------------- err-lsts->split-indices [47] 100.0% [58] 200(1.3%) 0(0.0%) loop ...actor-and-minor/src/core/regimes.rkt:314:4 for-loop [65] 100.0% -------------------------------------------------------------------------- ival-exp [49] 40.0% ival-neg [53] 60.0% [59] 1912(12.4%) 184(1.2%) bfneg ...-lib/math/private/bigfloat/mpfr.rkt:632:4 new-mpfr [80] 69.6% ??? [70] 20.8% -------------------------------------------------------------------------- taylor-alt [51] 100.0% [60] 1454(9.5%) 206(1.3%) for-loop ...actor-and-minor/src/mainloop.rkt:151:6 ??? [67] 85.8% -------------------------------------------------------------------------- egraph-run [52] 100.0% [61] 1266(8.2%) 0(0.0%) egraph-add-exprs ...gg-herbie-linux/main.rkt:111:0 ??? [69] 100.0% -------------------------------------------------------------------------- for-loop [50] 100.0% [62] 812(5.3%) 0(0.0%) atab-add-altn ...inor/src/core/alt-table.rkt:195:0 errors [68] 100.0% -------------------------------------------------------------------------- for-loop [50] 100.0% [63] 400(2.6%) 0(0.0%) loop ...tor-and-minor/src/core/alt-table.rkt:159:2 map [71] 50.0% loop [73] 50.0% -------------------------------------------------------------------------- ival-add [56] 49.7% ival-sub [54] 50.3% [64] 370(2.4%) 0(0.0%) bfsub ...-lib/math/private/bigfloat/mpfr.rkt:835:4 new-mpfr [80] 50.3% ??? [70] 49.7% -------------------------------------------------------------------------- loop [58] 100.0% [65] 200(1.3%) 0(0.0%) for-loop ...r-and-minor/src/core/regimes.rkt:279:4 for-loop [72] 100.0% -------------------------------------------------------------------------- random-ranges [55] 100.0% [66] 194(1.3%) 194(1.3%) cons/c .../racket/contract/private/guts.rkt:500:15 -------------------------------------------------------------------------- location-do [2] 12.8% loop [10] 12.9% loop [9] 14.5% for-loop [60] 25.7% real->precision [44] 34.1% [67] 1894(12.3%) 0(0.0%) ??? ...tract/private/arrow-higher-order.rkt:375:33 bf [78] 34.1% location-do [2] 25.7% approximate9 [3] 25.7% hash-ref! [77] 14.5% -------------------------------------------------------------------------- .../more-scheme.rkt:261:28 [17] 23.7% for-loop [50] 27.2% atab-add-altn [62] 49.1% [68] 1654(10.8%) 0(0.0%) errors .../refactor-and-minor/src/points.rkt:192:0 for-loop [75] 75.5% temp85_0 [76] 24.5% -------------------------------------------------------------------------- egraph-add-exprs [61] 100.0% [69] 1266(8.2%) 0(0.0%) ??? ...actor-and-minor/src/core/simplify.rkt:102:6 for-loop [74] 100.0% -------------------------------------------------------------------------- bfsub [64] 31.6% bfneg [59] 68.4% [70] 582(3.8%) 582(3.8%) ??? /opt/racket-7.5/collects/ffi/unsafe.rkt:938:4 -------------------------------------------------------------------------- loop [63] 47.8% taylor [15] 52.2% [71] 418(2.7%) 0(0.0%) map ...t-7.5/collects/racket/private/map.rkt:35:13 taylor [15] 52.2% loop [79] 47.8% -------------------------------------------------------------------------- for-loop [65] 100.0% [72] 200(1.3%) 200(1.3%) for-loop ...r-and-minor/src/core/regimes.rkt:283:8 -------------------------------------------------------------------------- loop [63] 1.6% loop [73] 98.4% [73] 200(1.3%) 200(1.3%) loop ...racket-7.5/collects/racket/list.rkt:434:28 loop [73] 98.4% -------------------------------------------------------------------------- ??? [69] 100.0% [74] 1266(8.2%) 1266(8.2%) for-loop ...-and-minor/src/core/simplify.rkt:121:2 -------------------------------------------------------------------------- errors [68] 100.0% [75] 1248(8.1%) 0(0.0%) for-loop ...efactor-and-minor/src/points.rkt:194:2 .../more-scheme.rkt:261:28 [17] 100.0% -------------------------------------------------------------------------- errors [68] 33.3% eval-const-expr [8] 66.7% [76] 1220(7.9%) 0(0.0%) temp85_0 (unknown source) compile15 [81] 100.0% -------------------------------------------------------------------------- for-loop [13] 9.7% for-loop [12] 17.0% ??? [82] 36.6% ??? [67] 36.6% [77] 822(5.3%) 0(0.0%) hash-ref! .../racket/private/more-scheme.rkt:376:2 ??? [82] 36.6% parse-loop74 [4] 36.6% ??? [5] 17.0% ??? [6] 9.7% -------------------------------------------------------------------------- ??? [67] 100.0% [78] 646(4.2%) 222(1.4%) bf ...ath-lib/math/private/bigfloat/mpfr.rkt:615:2 new-mpfr [80] 65.6% -------------------------------------------------------------------------- map [71] 20.0% loop [79] 80.0% [79] 200(1.3%) 0(0.0%) loop ...-7.5/collects/racket/private/map.rkt:40:19 loop [79] 80.0% ??? [83] 20.0% -------------------------------------------------------------------------- bfsub [64] 9.6% bf [78] 21.9% bfneg [59] 68.6% [80] 1940(12.6%) 1940(12.6%) new-mpfr ...b/math/private/bigfloat/mpfr.rkt:348:0 -------------------------------------------------------------------------- temp85_0 [76] 100.0% [81] 1220(7.9%) 0(0.0%) compile15 (unknown source) temp91_0 [84] 100.0% -------------------------------------------------------------------------- hash-ref! [77] 100.0% [82] 822(5.3%) 0(0.0%) ??? ...efactor-and-minor/src/core/taylor.rkt:44:15 hash-ref! [77] 100.0% -------------------------------------------------------------------------- loop [79] 100.0% [83] 200(1.3%) 0(0.0%) ??? ...tor-and-minor/src/core/alt-table.rkt:176:12 loop [85] 100.0% -------------------------------------------------------------------------- compile15 [81] 100.0% [84] 1220(7.9%) 0(0.0%) temp91_0 (unknown source) temp118_0 [86] 83.6% compile-top9 [87] 16.4% -------------------------------------------------------------------------- ??? [83] 25.0% loop [85] 75.0% [85] 200(1.3%) 200(1.3%) loop ...7.5/collects/racket/private/list.rkt:82:16 loop [85] 75.0% -------------------------------------------------------------------------- temp91_0 [84] 100.0% [86] 1020(6.6%) 0(0.0%) temp118_0 (unknown source) expand-capturing-lifts [88] 100.0% -------------------------------------------------------------------------- temp91_0 [84] 100.0% [87] 200(1.3%) 0(0.0%) compile-top9 (unknown source) compile-forms33 [89] 100.0% -------------------------------------------------------------------------- temp118_0 [86] 100.0% [88] 1020(6.6%) 0(0.0%) expand-capturing-lifts (unknown source) lambda-clause-expander [90] 100.0% -------------------------------------------------------------------------- compile-top9 [87] 100.0% [89] 200(1.3%) 0(0.0%) compile-forms33 (unknown source) loop! [91] 100.0% -------------------------------------------------------------------------- expand-capturing-lifts [88] 100.0% [90] 1020(6.6%) 0(0.0%) lambda-clause-expander (unknown source) finish-bodys [92] 100.0% -------------------------------------------------------------------------- compile-forms33 [89] 100.0% [91] 200(1.3%) 0(0.0%) loop! (unknown source) for-loop [93] 100.0% -------------------------------------------------------------------------- lambda-clause-expander [90] 37.4% for-loop [93] 62.6% [92] 1020(6.6%) 0(0.0%) finish-bodys (unknown source) for-loop [93] 100.0% -------------------------------------------------------------------------- for-loop [93] 4.4% loop! [91] 13.9% eval-one-top12 [16] 15.0% finish-bodys [92] 66.7% [93] 1436(9.3%) 422(2.7%) for-loop (unknown source) finish-bodys [92] 40.7% compile5 [97] 13.9% expand-implicit [94] 7.2% for-loop [93] 4.4% loop [102] 2.3% syntax-e [96] 1.2% dispatch-variable [95] 0.9% -------------------------------------------------------------------------- for-loop [93] 100.0% [94] 208(1.4%) 0(0.0%) expand-implicit (unknown source) datum->syntax6 [98] 100.0% -------------------------------------------------------------------------- for-loop [93] 100.0% [95] 206(1.3%) 0(0.0%) dispatch-variable (unknown source) substitute-variable6 [99] 100.0% -------------------------------------------------------------------------- for-loop [93] 100.0% [96] 200(1.3%) 0(0.0%) syntax-e (unknown source) syntax-e/no-taint [100] 100.0% -------------------------------------------------------------------------- compile-let13 [101] 50.0% for-loop [93] 50.0% [97] 200(1.3%) 0(0.0%) compile5 (unknown source) compile-let13 [101] 100.0% -------------------------------------------------------------------------- expand-implicit [94] 100.0% [98] 208(1.4%) 208(1.4%) datum->syntax6 (unknown source) -------------------------------------------------------------------------- dispatch-variable [95] 100.0% [99] 206(1.3%) 206(1.3%) substitute-variable6 (unknown source) -------------------------------------------------------------------------- syntax-e [96] 100.0% [100] 200(1.3%) 0(0.0%) syntax-e/no-taint (unknown source) loop [102] 100.0% -------------------------------------------------------------------------- compile5 [97] 20.0% compile-let13 [101] 80.0% [101] 200(1.3%) 200(1.3%) compile-let13 (unknown source) compile-let13 [101] 80.0% compile5 [97] 10.0% -------------------------------------------------------------------------- for-loop [93] 25.2% syntax-e/no-taint [100] 25.2% for-loop [26] 49.6% [102] 794(5.2%) 0(0.0%) loop (unknown source) ??? [103] 49.6% gf [104] 25.2% expand-id-application-form17 [105] 25.2% -------------------------------------------------------------------------- loop [102] 100.0% [103] 394(2.6%) 200(1.3%) ??? ...ie/refactor-and-minor/src/points.rkt:181:26 ??? [106] 49.2% -------------------------------------------------------------------------- loop [102] 100.0% [104] 200(1.3%) 200(1.3%) gf (unknown source) -------------------------------------------------------------------------- loop [102] 100.0% [105] 200(1.3%) 0(0.0%) expand-id-application-form17 (unknown source) resolve+shift28 [107] 100.0% -------------------------------------------------------------------------- ??? [103] 18.6% .../more-scheme.rkt:261:28 [17] 81.4% [106] 1042(6.8%) 592(3.9%) ??? ...ctor-and-minor/src/syntax/syntax.rkt:214:17 return/no-unsupplied [108] 43.2% -------------------------------------------------------------------------- expand-id-application-form17 [105]100.0% [107] 200(1.3%) 0(0.0%) resolve+shift28 (unknown source) fallback-loop [109] 100.0% -------------------------------------------------------------------------- debug5 [18] 32.6% ??? [106] 67.4% [108] 668(4.3%) 224(1.5%) return/no-unsupplied ...ct/private/arr-i.rkt:566:0 filter [110] 66.5% -------------------------------------------------------------------------- resolve+shift28 [107] 100.0% [109] 200(1.3%) 200(1.3%) fallback-loop (unknown source) -------------------------------------------------------------------------- return/no-unsupplied [108] 100.0% [110] 444(2.9%) 444(2.9%) filter ...5/collects/racket/private/list.rkt:256:2 --------------------------------------------------------------------------