- 26 Nov, 2018 2 commits
-
-
Leszek Swirski authored
This is a reland of ca086a49 Original change's description: > [parser] Perfect hash for keywords > > Use gperf to generate a perfect hash table for keyword lookup. Adds a > python script which munges the output of gperf and adds additional > cleanup and optimisations. > > Change-Id: I3656a7287dbd0688917893de3a671faef9e4578a > Reviewed-on: https://chromium-review.googlesource.com/c/1349240 > Commit-Queue: Leszek Swirski <leszeks@chromium.org> > Reviewed-by: Toon Verwaest <verwaest@chromium.org> > Reviewed-by: Marja Hölttä <marja@chromium.org> > Cr-Commit-Position: refs/heads/master@{#57790} Change-Id: Ifb53527ba3d0652ea4f5d03740f7c856ad5d91da Reviewed-on: https://chromium-review.googlesource.com/c/1350121Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57831}
-
Maya Lekova authored
This reverts commit ca086a49. Reason for revert: Seems to be the cause for https://bugs.chromium.org/p/chromium/issues/detail?id=908296 Original change's description: > [parser] Perfect hash for keywords > > Use gperf to generate a perfect hash table for keyword lookup. Adds a > python script which munges the output of gperf and adds additional > cleanup and optimisations. > > Change-Id: I3656a7287dbd0688917893de3a671faef9e4578a > Reviewed-on: https://chromium-review.googlesource.com/c/1349240 > Commit-Queue: Leszek Swirski <leszeks@chromium.org> > Reviewed-by: Toon Verwaest <verwaest@chromium.org> > Reviewed-by: Marja Hölttä <marja@chromium.org> > Cr-Commit-Position: refs/heads/master@{#57790} TBR=marja@chromium.org,leszeks@chromium.org,verwaest@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ia0cc283f21e9f6793522c46a1fd40ba2d88597fb Reviewed-on: https://chromium-review.googlesource.com/c/1350113Reviewed-by: Maya Lekova <mslekova@chromium.org> Commit-Queue: Maya Lekova <mslekova@chromium.org> Cr-Commit-Position: refs/heads/master@{#57811}
-
- 23 Nov, 2018 1 commit
-
-
Leszek Swirski authored
Use gperf to generate a perfect hash table for keyword lookup. Adds a python script which munges the output of gperf and adds additional cleanup and optimisations. Change-Id: I3656a7287dbd0688917893de3a671faef9e4578a Reviewed-on: https://chromium-review.googlesource.com/c/1349240 Commit-Queue: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#57790}
-
- 22 Nov, 2018 1 commit
-
-
Leszek Swirski authored
Use the list of keywords to tighten the CannotBeKeyword scan flag to also exclude lower case letters which are not present in any of the keywords. Change-Id: I6a00b5f5ee8f47088539806f15890a7489441fea Reviewed-on: https://chromium-review.googlesource.com/c/1347475 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#57754}
-
- 21 Nov, 2018 1 commit
-
-
Toon Verwaest authored
This reverts commit 5616f91a. Reason for revert: Tanks performance on codeload/ia32 by >1% Original change's description: > [parser] Use memcmp for keyword checks > > Small readability increase for the keyword check magic, using memcmp > instead of a chain of raw comparisons. Could allow better codegen for > memcmp-aware compilers, though in practice seems to have little effect > on generated code. > > Change-Id: I91020fe67cebc9270c61c4c678e15217e436afff > Reviewed-on: https://chromium-review.googlesource.com/c/1340291 > Reviewed-by: Toon Verwaest <verwaest@chromium.org> > Commit-Queue: Leszek Swirski <leszeks@chromium.org> > Cr-Commit-Position: refs/heads/master@{#57595} TBR=leszeks@chromium.org,verwaest@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ifd4070efb3e692eb70e5d8b3adb04d7d7e45ef0e Reviewed-on: https://chromium-review.googlesource.com/c/1345994Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#57665}
-
- 20 Nov, 2018 1 commit
-
-
Toon Verwaest authored
Change-Id: I08af90a6bd863402309c1c65c829db6a955c67e3 Reviewed-on: https://chromium-review.googlesource.com/c/1342927Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#57647}
-
- 19 Nov, 2018 1 commit
-
-
Leszek Swirski authored
Small readability increase for the keyword check magic, using memcmp instead of a chain of raw comparisons. Could allow better codegen for memcmp-aware compilers, though in practice seems to have little effect on generated code. Change-Id: I91020fe67cebc9270c61c4c678e15217e436afff Reviewed-on: https://chromium-review.googlesource.com/c/1340291Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57595}
-
- 14 Nov, 2018 5 commits
-
-
Toon Verwaest authored
Change-Id: I9925db0d74ef96bf91ea261f275e37c10908c9ef Reviewed-on: https://chromium-review.googlesource.com/c/1335695 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57507}
-
Leszek Swirski authored
Moves the unicode predicate cache tables out of the unicode cache, and turns them into generic predicates in char-predicates.h which use static constexpr tables. This drops the per-isolate cost of unicode caches, and removes the need for accessing the unicode cache from most files. It does remove the mutability of the cache, which means that there may be regressions when parsing non-ASCII identifiers. Most likely the benefits to ASCII identifiers/keywords will outweigh any non-ASCII costs. Change-Id: I9a7a8b7c9b22d3e9ede824ab4e27f133ce20a399 Reviewed-on: https://chromium-review.googlesource.com/c/1335564Reviewed-by: Yang Guo <yangguo@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57506}
-
Leszek Swirski authored
Always generate a token for the first character in ScanSingleToken, and switch on that. If the token could change with subsequent characters, e.g. Token::ADD into Token::ASSIGN_ADD, then handle that in that token's case rather than going character-by-character. This allows us to have a tighter packing of the cases, and early detect numbers, keywords and identifiers. Change-Id: I8c3ac7a5453547abeb09fc90826a26390b15a415 Reviewed-on: https://chromium-review.googlesource.com/c/1335547Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57497}
-
Toon Verwaest authored
Change-Id: I084b57a3a32c9ecb01bb17c9339dfeada436ea66 Reviewed-on: https://chromium-review.googlesource.com/c/1335449 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57493}
-
Toon Verwaest authored
Change-Id: Ib910d034aff130dfe4324d020eacb0e7bf185d30 Reviewed-on: https://chromium-review.googlesource.com/c/1335447Reviewed-by: Leszek Swirski <leszeks@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#57489}
-
- 13 Nov, 2018 8 commits
-
-
Toon Verwaest authored
Change-Id: I9c022d8d1aa363168546303516b5b3ee6196fdb5 Reviewed-on: https://chromium-review.googlesource.com/c/1333412 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#57475}
-
Toon Verwaest authored
Change-Id: Ib73eca9233252a4b5b89f91cae1762528552c1b5 Reviewed-on: https://chromium-review.googlesource.com/c/1333407 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#57473}
-
Toon Verwaest authored
Change-Id: I19e23a1e91631a21d55bb5a42f1f538a655478f8 Reviewed-on: https://chromium-review.googlesource.com/c/1332233 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Cr-Commit-Position: refs/heads/master@{#57467}
-
Leszek Swirski authored
For some reason the C++ compiler fails to realise that next_ cannot change on entry into Scan from Next, and re-loads it, creating what looks like a data dependency that stalls the next instruction. Passing through a cached next_ value cleans up the generated code. Change-Id: Iab62ed1890a3a720e5fa90a90e802305e3d55a82 Reviewed-on: https://chromium-review.googlesource.com/c/1331551 Commit-Queue: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#57464}
-
Leszek Swirski authored
Use a flag int instead of bit fields in LiteralBuffer, so that cache the output of next() in Scanner::Scan() so that it doesn't get reloaded between LiteralBuffer::Drop() calls. LiteralBuffer: :Drop can set a single value rather than masking. Also, Change-Id: I977703488ac41e3b091f46ce0840e7c464639073 Reviewed-on: https://chromium-review.googlesource.com/c/1331548Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57463}
-
Toon Verwaest authored
Change-Id: I6e8c72ea46e02361b7dd8ae698f3c13aef8a8beb Reviewed-on: https://chromium-review.googlesource.com/c/1332297 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Cr-Commit-Position: refs/heads/master@{#57462}
-
Toon Verwaest authored
Change-Id: I8948ff43f45a486dc9ff591777db5051b1afaa22 Reviewed-on: https://chromium-review.googlesource.com/c/1332231 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Cr-Commit-Position: refs/heads/master@{#57461}
-
Toon Verwaest authored
We're fetching the symbols anyway, so we might as well use those instead in the preparser. Change-Id: Ie937c755690cdd7b15e8486aa9680d530eff602e Reviewed-on: https://chromium-review.googlesource.com/c/1332296Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#57460}
-
- 12 Nov, 2018 1 commit
-
-
Toon Verwaest authored
Now that identifiers in the preparser also carry their string, we can simply check that rather than relying on a weird "keyword". Dropping __proto__ as a keyword allows us to delist '_' as keyword character. Change-Id: I775df25f77a84de92a60790ca665f16d52abf4bf Reviewed-on: https://chromium-review.googlesource.com/c/1329692 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Cr-Commit-Position: refs/heads/master@{#57427}
-
- 09 Nov, 2018 2 commits
-
-
Toon Verwaest authored
For small strings there's not much of a difference, but allows faster scanning over long strings. By directly accessing the underlying buffer and by typically only needing 2 branches per non-special character. Change-Id: I9c2c513177d9bf5e3f10c14a07bf6ecc2872b2f0 Reviewed-on: https://chromium-review.googlesource.com/c/1329206 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#57402}
-
Leszek Swirski authored
Change the keyword/identifier scan to a single loop that branchlessly collects information on whether this is a possible keyword, identifier terminator or slow path (i.e. escapes) by looking up the value in a flags table (as long as the character is ascii). Also rewrites that loop as an AdvanceUntil, and sprinkles in some V8_LIKELY magic which is 'likely' to improve things. Change-Id: If06b0fff23630e7593b515308e5ffeca2d65daa8 Reviewed-on: https://chromium-review.googlesource.com/c/1328943Reviewed-by: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#57391}
-
- 29 Oct, 2018 1 commit
-
-
Toon Verwaest authored
Bug: v8:8363, v8:7926 Change-Id: Icfc8c02573a92d655ee14f563ad9c67fe5655029 Reviewed-on: https://chromium-review.googlesource.com/c/1304440 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#57087}
-
- 22 Oct, 2018 1 commit
-
-
Florian Sattler authored
BUG=v8:7926 Change-Id: Ib4dd3017c7d6f28025ab308063d7dedd0138dfa6 Reviewed-on: https://chromium-review.googlesource.com/c/1291470 Commit-Queue: Florian Sattler <sattlerf@google.com> Reviewed-by: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#56848}
-
- 04 Sep, 2018 1 commit
-
-
Florian Sattler authored
This is a reland of 5bbd1921 Original change's description: > [scanner] Inlining ScanIdentifier and Token check > > This improves parse time for code-load and other benchmarks. > > Bug: v8:7926 > Change-Id: I9c8017f2e7f73dd952c025db5abe8e4062e6ef9b > Reviewed-on: https://chromium-review.googlesource.com/1196506 > Commit-Queue: Florian Sattler <sattlerf@google.com> > Reviewed-by: Toon Verwaest <verwaest@chromium.org> > Cr-Commit-Position: refs/heads/master@{#55521} TBR=verwaest@chromium.org,marja@chromium.org Bug: v8:7926 Change-Id: I35f265a2a2189325daaf4a361bda35bf82758b16 Reviewed-on: https://chromium-review.googlesource.com/1203731Reviewed-by: Camillo Bruni <cbruni@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#55612}
-
- 03 Sep, 2018 1 commit
-
-
Yang Guo authored
This reverts commit 5bbd1921. Reason for revert: Tentative revert for crbug.com/879988 TBR=sattlerf@chromium.org,verwaest@chromium.org Original change's description: > [scanner] Inlining ScanIdentifier and Token check > > This improves parse time for code-load and other benchmarks. > > Bug: v8:7926 > Change-Id: I9c8017f2e7f73dd952c025db5abe8e4062e6ef9b > Reviewed-on: https://chromium-review.googlesource.com/1196506 > Commit-Queue: Florian Sattler <sattlerf@google.com> > Reviewed-by: Toon Verwaest <verwaest@chromium.org> > Cr-Commit-Position: refs/heads/master@{#55521} TBR=marja@chromium.org,verwaest@chromium.org,sattlerf@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Bug: v8:7926, chromium:879988 Change-Id: Ic71d9cf63b69c0f9560851259f434b02cc082417 Reviewed-on: https://chromium-review.googlesource.com/1202086 Commit-Queue: Yang Guo <yangguo@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#55592}
-
- 30 Aug, 2018 2 commits
-
-
Florian Sattler authored
This improves parse time for code-load and other benchmarks. Bug: v8:7926 Change-Id: I9c8017f2e7f73dd952c025db5abe8e4062e6ef9b Reviewed-on: https://chromium-review.googlesource.com/1196506 Commit-Queue: Florian Sattler <sattlerf@google.com> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55521}
-
Toon Verwaest authored
This reverts commit 19a8f1ba. Reason for revert: it's actually slower this way Original change's description: > [scanner] Use AdvanceUntil in SkipWhiteSpace > > Change-Id: I4a578589290e91da2eae4cef8f936e6c888e177c > Reviewed-on: https://chromium-review.googlesource.com/1194015 > Reviewed-by: Igor Sheludko <ishell@chromium.org> > Commit-Queue: Toon Verwaest <verwaest@chromium.org> > Cr-Commit-Position: refs/heads/master@{#55497} TBR=ishell@chromium.org,verwaest@chromium.org Change-Id: I93b51104bef984332536360c6321eaa1dab8fd74 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/1196402Reviewed-by: Toon Verwaest <verwaest@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55513}
-
- 29 Aug, 2018 3 commits
-
-
Toon Verwaest authored
Change-Id: I4a578589290e91da2eae4cef8f936e6c888e177c Reviewed-on: https://chromium-review.googlesource.com/1194015Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55497}
-
Toon Verwaest authored
Change-Id: I14fd9d439db70cc37b8a57a8bc13e09877c513ee Reviewed-on: https://chromium-review.googlesource.com/1195369 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#55493}
-
Toon Verwaest authored
Using a circular buffer regresses performance unfortunately. Change-Id: Id5b68cae798d21f46376141f86d5707794bf08d6 Reviewed-on: https://chromium-review.googlesource.com/1194064Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55478}
-
- 28 Aug, 2018 2 commits
-
-
Toon Verwaest authored
Change-Id: I6fe237d4aec3745e993a65ddf31f5fafc3ce175d Reviewed-on: https://chromium-review.googlesource.com/1193368Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55462}
-
Toon Verwaest authored
Instead of using explicit current_, next_, and next_next_ pointers we now use a range from token_start_ to token_end_. Upon scan we "precrement" token_end_ to update the scan_target(). This will allow us to increase the buffer size later. Change-Id: I816d208eafc33c29a9888e7040696b56b1409fb8 Reviewed-on: https://chromium-review.googlesource.com/1189984Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55450}
-
- 24 Aug, 2018 1 commit
-
-
Toon Verwaest authored
This embeds LiteralBuffers in the TokenDesc directly so that we do not need to figure out which one is free; as well as newline tracking. Instead of copying around TokenDesc we now just update the pointer to keep track of the state. Based on this architecture we'll be able to precompute more tokens at once. Change-Id: Ie2e1a95f91713f7ab619fc8632f1eb644884a51f Reviewed-on: https://chromium-review.googlesource.com/1184911 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#55385}
-
- 21 Aug, 2018 1 commit
-
-
Toon Verwaest authored
This reverts the following 3 CLs: Revert "[scanner] Templatize scan functions by encoding" Revert "[asm] Remove invalid static cast of character stream" Revert "[scanner] Prepare CharacterStreams for specializing scanner and parser by character type" The original idea behind this work was to avoid copying, converting and buffering characters to be scanned by specializing the scanner functions. The additional benefit was for scanner functions to have a bigger window over the input. Even though we can get a pretty nice speedup from having a larger window, in practice this rarely helps. The cost is a larger binary. Since we can't eagerly convert utf8 to utf16 due to memory overhead, we'd also need to have a specialized version of the scanner just for utf8. That's pretty complex, and likely won't be better than simply bulk converting and buffering utf8 as utf16. Change-Id: Ic3564683932a0097e3f9f51cd88f62c6ac879dcb Reviewed-on: https://chromium-review.googlesource.com/1183190Reviewed-by: Andreas Haas <ahaas@chromium.org> Reviewed-by: Marja Hölttä <marja@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55258}
-
- 20 Aug, 2018 1 commit
-
-
Toon Verwaest authored
This way we can avoid reencoding everything to utf16 (buffered) and avoid the overhead of needing to check the encoding for each character individually. This may result in a minor asm.js scanning regression due to one-byte tokens possibly being more common. Change-Id: I90b51c256d56d4f4fa2d235d7e1e58fc01e43f31 Reviewed-on: https://chromium-review.googlesource.com/1172437 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#55217}
-
- 16 Aug, 2018 1 commit
-
-
Toon Verwaest authored
Change-Id: I3c04e3cedfa220d58eb1307977b99869485c7f4d Reviewed-on: https://chromium-review.googlesource.com/1177744Reviewed-by: Leszek Swirski <leszeks@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#55170}
-
- 27 Jul, 2018 1 commit
-
-
Florian Sattler authored
This places the hot part of SkipWhiteSpace in the header, allowing it to be inlined, and leaves a slow path to handle the rest. This improves comment scanning overall by ~10%. Bug: v8:7926 Change-Id: I2e2ebbbae0d1af619b161397712fdf667d078884 Reviewed-on: https://chromium-review.googlesource.com/1150230 Commit-Queue: Florian Sattler <sattlerf@google.com> Reviewed-by: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#54744}
-